개요 해당 포스팅은 오디고 프로젝트를 하던 도중 발생한 이슈를 정리한 글입니다. 프로젝트에서 스크래핑한 데이터를 조회하는 부분이 있는데, 데이터를 추가한 후 갑자기 timeout 에러가 발생했습니다. 원인을 찾아보니 스크래핑한 데이터를 저장한 테이블을 조회하는 과정에서 시간이 오래 걸려 발생한 문제로 파악되었습니다. 이를 해결하기 위해 인덱스를 적용하고자 합니다. 저는 해당 프로젝트를 JPA를 이용했는데요. 먼저 문제가 됐던 JPQL문을 살펴보겠습니다. select new podo.odeego.domain.path.dto.PathInfo(p.startStation, p.endStation, p.requiredTime, p.stations) from Path p where p.startStation in ..
개요 이전 설계를 한 이후 요구 사항에 맞게 클래스를 생성하고 구현 계획을 설정해보려고 한다. 패키지 구조 먼저 패키지 구조를 다음과 같이 만들었다. 먼저 보면 도메인에는 스프링 코어 관련 코드랑 jpa 관련 코드가 들어가게 되고 web 은 spring web 관련 코드 마지막으로 infra 에는 외부 api 관련 코드가 들어가게 된다. 이와 같이 나눈 이유는 각 라이브러리를 분리해서 모듈화하기 위함이다. 또한 패키지 별로 순환해서 참조하는 것을 막고 최대한 domain -> (infra) -> web 이런 흐름으로 참조를 하도록 설계하였다. 구현 계획 일단 흐름을 크게 보면 사용자 정보를 받는 부분, 질문을 저장하는 부분, 질문을 이메일로 보내는 부분으로 나눌 수 있다. 구현 순서는 크게 2->1->3..
개요 Open AI 를 이용해 면접 질문을 가져와 이를 사용자의 메일로 보내는 서비스를 만들어 보려고 한다. 프로젝트 요구사항 카테고리는 DB, OS, 네트워크, 자료구조 등으로 구성되며 사용자가 선택할 수 있다. 이메일을 입력받아 사용자의 메일로 하루에 3개씩 발송할 수 있다. 이메일 발송 시간을 사용자가 정할 수 있다. 질문 시 답은 발송하지 않는다. 중복되는 내용은 제거한다(고도화) 흐름 사용자에게 메일과 메일 발송 시간과 원하는 면접 카테고리를 받는다. 주기적으로 면접 질문을 가져온다 면접 질문을 open ai 를 통해 가져온다. 카카오 키워드 분석 api 를 통해 키워드를 추출한다. (이후 그냥 질문 변경으로 해결) 질문과 키워드를 저장한다. 주기적으로 유저에게 메일을 보낸다. 설계 시 중시한 ..