본문 바로가기

우아한테크코스 2기 엘리의 마무리 회고 올 해 2월부터 오늘 11월 27일까지. 약 10개월에 걸친 우아한테크코스 생활이 끝났다. 이 시간은 오지 않을 것 같았는데... (오지 않길 바랐는데) 끝이 나버렸다. 10개월의 시간을 한 마디로 요약해보자면, 온전히 개발자로서의 나에게 집중할 수 있는 시간이었다. 나의 개발 역량이 어느 정도인지, 나에게 맞는 학습 방법은 무엇인지, 내가 관심 있는 분야는 무엇인지, 나는 협업할 때 어떤 사람인지 등등 나에 대해 생각해 볼 수 있었고, 정말 매일매일이 값진 날들이었다! 레벨 별로 정리를 해보자. 레벨 1, 습관 만들기 전공생이라고는 믿기지 않을만큼 나는 기초가 부족했다. 좌절도 잠시 나는 매일 나를 채찍질하기 바빴다. 페어 프로그래밍을 하다가 모르는 것이 있으면 바로바로 개인 노션에 적어두고, 매일 페..
여러 개의 컬렉션 FetchJoin 시 성능 최적화 현재 도메인은 Post, Comment, Postlike가 있고, Post - Comment는 OneToMany Post - PostLike 역시 OneToMany 관계이다. 이제 post.comments와 post.likes를 모두 포함해 List를 가져올 것이다. 이렇게 두 컬렉션에 fetchJoin을 걸고, 해당 메소드를 사용하는 Service 로직이 있다. 이 Service 메소드에 대한 테스트 코드를 실행해보면, 이렇게 comments가 likes에 영향을 받는 문제가 생긴다. 문제의 원인은 fetchJoin이었다. 2개 이상의 컬렉션을 페치조인하면 MultipleBagFetchException이 발생한다. 라는 사실을 놓치고 있었다. MultipleBagFetchException이 발생하지 않..
우아한테크코스 레벨 2 회고 지난 레벨 1 회고 때 썼던 레벨 2 목표들이다. 1. 6시가 되면 미션은 접고 개인 공부를 시작하자. 우선 HTTP와 스프링부트 책을 읽고, 시간이 되면 Vue.js를 공부하자. 잘 지켜졌다! HTTP와 스프링부트 책을 완전히 이해하진 못했지만, 두고두고 읽어보아야 겠다. 사이드 프로젝트를 진행하면서 Vue.js도 자연스레 공부할 수 있었다. 2. 의식적으로 TDD를 지키기 위해 노력해보자. 마찬가지로 잘 지켜졌다. 페어들의 도움이 컸다. 🙏 특히 사이드 프로젝트를 함께 진행했던 코일은 TDD 매니아여서 내가 성급하게 프로덕션 코드를 짤 때마다 태클을 걸어주었다. (감사합니다) 게다가, 테스트 커버리지를 70%로 걸어두고 진행하니, 강제로 의식하는 연습을 할 수 있었다. 그리고 레벨 2 마지막 미션도 ..
싱글 스레드와 멀티 스레드 싱글 스레드와 멀티 스레드를 각각 언제 써야 할까? 싱글 스레드? 하나의 스레드가 하나의 일을 끝내고, 그 다음 일을 시작한다. (하나의 스레드가 일을 할 동안, 다른 일은 아무것도 못한다. 기다려야 한다!) 하나의 레지스터와 스택으로 표현 멀티 스레드? 같은 일을 두 개의 스레드가 짧은 시간동안 번갈아가며 수행한다. (예를 들어, 한 스레드가 사용자의 입력을 받는 일을 하는동안 다른 스레드는 다른 일을 처리할 수 있다.) 각 스레드가 고유한 레지스터와 스택을 갖고 있다. 🤔 그럼 멀티 스레드로 작업하는게 더 효율적이지 않을까? 아니다! 멀티 스레드는 context switching 시간(스레드 전환 시간)이 추가된다. Node.js의 싱글 스레드 (이벤트 루프) vs Spring의 멀티 스레드 Node..
우아한테크코스 레벨 1 회고 우아한테크코스에서 "엘리"라는 이름으로 살게 된 지 벌써 두 달이 지났다. 시간이 참 빠르고, 많은 것이 바뀌었다. 내가 개발을 대하는 방식, 나의 하루 일과, 나의 습관들이 전부 바뀌었다. 1. 두 달 전까지만 해도, 나에게 개발은 닥치면 하는 숙제같은 느낌이었다. 학교 전공, 공모전, 약간의 알고리즘 문제들이 내가 하던 개발의 전부였다. 전공 과목들은 수업시간에 배운 것만 공부하면 점수를 잘 받을 수 있었고, 공모전은 할 줄 아는 안드로이드를 조금만 건드려도 웬만한 상은 탔다. (지금 생각해보면 운이 좋았을 뿐이지만!) 성과가 좋아버리니 나는 안도했다. 아! 나는 개발 좀 하는구나! 정말 그렇게 생각했었다. 다 오만이었다! 여기 들어와서 깨달았다. 첫 날부터 페어 프로그래밍을 하며 내가 일급 컬렉션을..
이펙티브 자바 정리 https://www.notion.so/4e7c2449cf5d4715ae96269156b9b8fa 이펙티브 자바 A new tool for teams & individuals that blends everyday work apps into one. www.notion.so 코로나19 덕분에 주어진 우테코 2주 간의 방학동안 코일과 함께 이펙티브 자바를 뽀개볼까 한다. 블로그보다는 Notion 앱이 정리하기 편하고 깔끔해서 링크로 걸어둔다! 아이템이 총 90개인데, 우선순위가 높은 친구들을 선별해 먼저 살펴볼 예정이다. 아직은 어려운 내용이 많지만 반복해서 읽다보면 언젠가 내 것이 되리라 믿고...!
백준 #1010. 다리 놓기 (C++ Dynamic Programming) https://www.acmicpc.net/problem/1010 1010번: 다리 놓기 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다. www.acmicpc.net N개의 서쪽 사이트에서 M개의 동쪽 사이트로 이어지는 다리의 개수를 구하는 문제. 조건 1) N은 M보다 작거나 같다. 조건 2) 다리는 서로 겹처질 수 없다. N*M size의 이차원 배열을 만들고, 각각의 값을 적어보면 패턴이 한눈에 잘 보인다. 우선 쉽게 생각해보면, N과 M이 같을 때에는 경우의 수가 1이다. 더보기 만약 N보다 M이 1 클 때에는, 즉, N + 1 == M일 때는 경우의 ..
백준 #2193. 이친수 / C++ / Dynamic Programming https://www.acmicpc.net/problem/2193 2193번: 이친수 0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않는다. 이친수에서는 1이 두 번 연속으로 나타나지 않는다. 즉, 11을 부분 문자열로 갖지 않는다. 예를 들면 1, 10, 100, 101, 1000, 1001 등이 이친수가 된다. 하지만 0010101이나 101101은 각각 1, 2번 규칙에 위배되 www.acmicpc.net 문제에서 제시한 이친수의 조건 1. 0으로 시작하지 않는다. 2. 1이 두 번 연속해서 나타나지 않는다. N이 1일 경우부터 차례차례 생각..