개요 해당 포스팅은 오디고 프로젝트를 하던 도중 발생한 이슈를 정리한 글입니다. 프로젝트에서 스크래핑한 데이터를 조회하는 부분이 있는데, 데이터를 추가한 후 갑자기 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..