본문 바로가기

전체글378

오늘의 질문 2020.11.23 Q.1 Q. 안녕하세요. 현재 구직중인 취준생 개발자입니다. 여러 회사를 지원하면서 느낀 것이 이만큼의 요구사항이 진짜 신입으로서 당연히 해야하는 것인지 의문이 듭니다. 자바와 같은 프로그래밍언어, 데이터베이스, 자료구조, 알고리즘 등까지는 이해합니다. 헌데, 알고리즘 코딩 테스트만 준비해야할게 아니라 스프링/JPA와 같은 현업에서 사용하는 프레임워크라던가, 테스트코드, DDD등에 대한 지식까지 요구하고 Github 관리, 블로그 관리등까지 요구하는데 이걸 다 할 수 있는지 의문입니다. 더군다나 이게 다 충족되어도 100% 합격이 아니라는게 너무 절망스럽습니다. 지금 신입 개발자로 취업하기 위해서는 과거에 비해 너무 많은 준비가 필요한것 같습니다. PHP, MySQL로 게시판만 만들줄 알면 취업하던 때에.. 2020. 11. 23.
오늘의 질문 2020.11.17 (애기아빠의 신입 구직) Q.1 Q. 28살 아기아빠입니다. 현재 상황은 html/css/php/mysql로 간단한 게시판을 만드는 정도의 실력과 4년전 비트교육을 들었다는 이력정도만 갖고 있는 구직중인 신입 개발자입니다. 기존에도 스타트업에 입사할 기회가 있었지만, 막상 입사해보니 IOS/안드로이드/리액트 등을 모두 개발할 수 있는 수준을 원하여서 퇴사하였습니다. 제가 이제 가정이 생겨서 돈을 벌어야하는 입장인데도 국비지원을 다시 가야할까? 아니면 돈을 내고 유료 학원을 가야할까?에서 고민이기도 하고, 현재 상황에서 어떤 선택을 해야할지 고민이되 질문 드립니다. 거주지: 대전 최종목표: 실시간 서비스하는 회사 (네이버/라인/카카오/배민/쿠팡/토스 등) 바로 당장은 아니더라도 몇년 간의 경력을 쌓고, 이직을 통해서 여기서 문제는.. 2020. 11. 18.
Querydsl (JPA) 에서 Cross Join 발생할 경우 JPA 기반의 환경에서 Querydsl를 사용하다보면 @OneToOne 관계에서 Join 쿼리 작성시 주의하지 않으면 Cross Join이 발생할 수 있습니다. CrossJoin 이란 집합에서 나올 수 있는 모든 경우를 이야기 합니다. 예로 A 집합 {a, b}, B 집합 {1,2,3}이며 이들의 CrossJoin은 AxB로 다음과 같습니다. {(a, 1), (a, 2), (a, 3), (b, 1), (b, 2), (b, 3)} 당연히 일반적인 Join보다 성능상 이슈가 발생하게 됩니다. 이번 시간에는 어떤 경우에 이런 Cross Join이 발생하는지, 어떻게 해결할 수 있는지 확인해보겠습니다. 모든 코드는 Github에 있습니다. 1. 테스트 환경 테스트 환경은 다음과 같습니다. Spring Boot .. 2020. 11. 16.
생각은 쉽다 아래 글은 제 브런치에 있던 글을 블로그로 옮긴 글입니다. 내가 대학교 졸업을 앞두고 있을때 한창 유행했던 것이 안철수님의 청춘 콘서트였다. 당시에 전국 대학교를 순회하면서 진행해주셨는데, 마침 내가 다니는 대학교에서도 이 콘서트가 진행되었다. 뭐 하나 팁을 얻을게 있을까 하고 참관 신청을 하고 강당으로 갔었다. 거기서 나는 몇년이 지나도 잊을 수 없는 문장을 들었다. "어떤 사람을 판단할때, 그 사람의 말과 생각은 전혀 중요하지 않습니다. 그건 누구나 할 수 있습니다. 그 사람이 어떤지를 보려면 결국 그 사람이 그 동안 어떤 행동과 선택을 해왔는지를 봐야 합니다." 나는 이말을 듣고 깜짝 놀랬다. '아 그렇구나. 생각도 누구나 할 수는 있는 거구나 그 사람이 결국 어떤 선택을 해왔는지를 봐야하는구나' .. 2020. 11. 7.
3-2. 첫 페이지 조회 결과 cache 하기 3-2. 첫 페이지 조회 결과 cache 하기 모든 코드는 Github에 있습니다. 지난 시간에 이어 count와 관련된 2번째 개선 방법은 첫 번째 쿼리의 결과를 Cache하기 인데요. 방법은 간단합니다. 처음 검색시 조회된 count 결과를 응답결과로 내려주어 JS에서 이를 캐싱하고, 매 페이징 버튼마다 count 결과를 함께 내려주는 것입니다. 그리고 Repository에서는 요청에 넘어온 항목 중, 캐싱된 count값이 있으면 이를 재사용하고, 없으면 count 쿼리를 수행합니다. 이미지 원작자님께 허락을 받고 사용하였습니다. :) (다시 한번 감사드립니다!) 이 방식은 다음과 같은 상황에서 도움이 되는데요. 조회 요청이 검색 버튼과 페이지 버튼 모두에서 골고루 발생하고 실시간으로 데이터 적재 되.. 2020. 11. 6.
3-1. 페이징 성능 개선하기 - 검색 버튼 사용시 페이지 건수 고정하기 모든 코드는 Github에 있습니다. 앞서 포스팅에서 실질 페이징 쿼리 성능을 올리는 방법들을 소개 드렸는데요. 1. 페이징 성능 개선하기 - No Offset 사용하기 2. 페이징 성능 개선하기 - 커버링 인덱스 사용하기 페이징 기능을 구현하는데 있어, 페이징 쿼리 자체를 개선하는 것도 방법이지만 그 외 다른 기능을 개선하는 방법도 함께할 수 있습니다. 여기서 말하는 그 외 기능은 바로 count 쿼리입니다. 일반적인 페이징 기능에 있어 데이터 조회와 함께 매번 함께 수행되는 것이 바로 count 쿼리인데요. 해당 조건으로 조회되는 총 건수를 알아야만 아래와 같이 pageNo들을 노출시킬 수 있기 때문입니다. (총 건수 / pageSize) 당연히 No Offset을 사용한다면 사용되지 않는 쿼리입니다.. 2020. 11. 1.