간단한 프로젝트를 수행할 때에는 JpaRepository가 제공하는 메서드만으로 충분히 쿼리 구현할 수 있었지만 기능이 복잡해지면서 JpaRepository의 @Query를 사용해 쿼리를 직접 작성해야 하는 경우가 많아졌습니다.@Query는 문자열을 사용해 쿼리를 작성하기에 타입세이프하지 않고 쿼리 작성에도 불편함이 있습니다.그래서 이번 프로젝트에서는 타입세이프 하고 복잡한 쿼리도 편리하게 작성하기 위해 jOOQ를 도입하고 사용해 보았습니다. jOOQ 사용 세팅의존성jOOQ는 spring boot starter에 포함되어 있어 아래와 같이 간단히 의존성을 추가할 수 있습니다.implementation org.springframework.boot:spring-boot-starter-jooq jOOQ Cod..
다중 칼럼 인덱스 사용 시 주의점: 다중 컬럼칼럼 인덱스에서 각 인덱스를 구성하는 칼럼은 첫 번째 칼럼부터 차례대로 정렬되고, N번째 인덱스 칼럼은 N-1번째 인덱스의 정렬에 의존해서 정렬된다. 따라서 앞선 인덱스를 통해 추출되는 데이터가 적어지는 방향으로 다중 칼럼 순서를 정의해야 한다. (카디널리티가 높은 순에서 낮은 순) 참고 링크https://studyandwrite.tistory.com/553https://jojoldu.tistory.com/243 where 절, on 절 그리고 실행순서create table ARTICLE_MST( id bigint auto_increment primary key, member_id bigint ..
이미지를 지원하지 않는 Swagger를 만들기 위한 의존성spring-restdocs-mockmvc의 MockMvc 클래스를 활용하여 컨트롤러 테스트 코드를 작성하고 그 결과를 restdocs-api-spec와 swagger.generator를 활용하여 Swagger를 만들어 왔습니다.하지만 해당 방법을 활용하면서 multipart/form-data 요청의 경우 요청 스펙을 정의할 수 없다는 문제가 있었습니다.org.springframework.restdocs.payload.PayloadHandlingException: Cannot handle multipart/form-data content as it could not be parsed as JSON or XML공식 문서를 확인해 본 결과 이는 Swa..
스프링 부트 프로젝트에 대한 경험이 누적되며 단순히 기능을 구현하는 것뿐만이 아닌 더 좋은 코드를 작성하기 위해 고민할 수 있었습니다.인터페이스를 코드에 적용하는 것은 구체 클래스에 의존하지 않는 느슨한 결합을 통해 유연한 확장과 수정을 가능하게 해 줍니다.이러한 장점을 가지고 있지만 코드에 인터페이스를 적용하는 것은 복잡도를 높일 수 있고 이에 프로젝트에 따라 인터페이스가 필요한 클래스를 판단하고 적용하는 것이 중요하다 생각합니다.해당 글에서는 프로젝트를 수행 간 코드에 인터페이스를 적용하면서 느낄 수 있었던 "스프링 부트를 사용하며 인터페이스가 필요한 순간"에 대한 저의 생각을 공유하려 합니다. 제어가 필요한 순간제가 생각하는 스프링 부트를 사용하며 인터페이스가 필요한 순간은 "제어가 필요한 순간"입..