2023년 회고: 첫 취업을 준비하며 세운 전략과 기준
백엔드 개발자로 첫 취업을 준비한 2023년 회고입니다. 알고리즘만 하면 될 줄 알았던 졸업 전, 피드백이 없어 답답했던 졸업 후, 그리고 목표 기업을 고른 세 가지 기준과 이력서를 바꾼 방법을 거쳐 트립비토즈에 합류하기까지를 돌아봅니다.
백엔드 개발자로 첫 취업을 준비한 2023년 회고입니다. 알고리즘만 하면 될 줄 알았던 졸업 전, 피드백이 없어 답답했던 졸업 후, 그리고 목표 기업을 고른 세 가지 기준과 이력서를 바꾼 방법을 거쳐 트립비토즈에 합류하기까지를 돌아봅니다.
N+1을 IN 절로 전부 걷어냈다고 생각했는데, 성능 테스트에서 회원 수만큼 연락처 쿼리가 다시 나갔습니다. @OneToOne을 LAZY로 바꿔도 막히지 않은 이유와, default_batch_fetch_size로 124ms를 54ms로 줄인 과정, 그리고 @ManyToOne으로 바꾸는 선택지를 고르지 않은 이유를 정리합니다.
포지션 필터가 있을 때와 없을 때를 각각 메서드로 만들다 보면 조건 조합마다 쿼리가 늘어납니다. Querydsl이 where 절의 null 조건을 무시한다는 점을 이용해 커서 기반 페이지네이션 쿼리를 하나로 묶는 방법과, count 쿼리 분리, 커서 키와 정렬 키를 맞춰야 하는 이유를 정리합니다.
팀원을 찾는 회원 목록을 팀 리더가 조회하면, 회원마다 제안 여부를 반복문으로 조회해 쿼리가 22번 나갔습니다. 제안 조회를 Querydsl IN 절 한 번으로 묶고 Map으로 다시 붙여 쿼리를 3번으로, 응답 시간을 0.337초에서 0.039초로 줄인 과정을 정리합니다.
이메일 중복 검사를 습관처럼 findBy로 짜고 있었습니다. 5만 건 데이터에서 Spring Data JPA의 findBy, countBy, existsBy가 실제로 어떤 SQL을 만드는지 로그로 확인하고, 214ms·196ms·166ms라는 결과와 함께 중복 검사에는 existsBy가 맞는 이유를 정리합니다.