개요500만개의 레코드에서 키워드 기반 문자열 검색을 수행했을 때, 속도가 저하되는 문제를 MySQL의 Full-Text Search를 통해 해결해보려 한다. 개선 결과 기존 API 처리 시간 1185ms → 564ms로 약 52% 성능 개선이 이뤄졌다. 기존 쿼리의 문제점아래는 기존에 사용하던 쿼리이다. 키워드를 기반으로 post 테이블을 검색한다.explain select *from post pjoin category c on c.category_id = p.category_category_idwhere p.title like '%**:keyword**%' and p.region_region_id in (**:region_ids**) and p.status not in ('HIDE', ..
중고 거래 플랫폼 API 서버 개발
이슈 내용개발자가 제어할 수 없는 요소에 대한 테스트 용이성과 직접적으로 의존하면 안 되는 모듈의 클래스를 의존하고 있진 않은지 테스트하기 위해 인터페이스를 두고 테스트 더블을 직접 구현할 수 있도록 설계했다. 코드의 크기가 작을 때는 아무런 문제가 되지 않았지만, 기능과 의존성이 추가될 때마다 직접 구현할 테스트 더블이 증가했고 이는 생산성 저하와 더불어 테스트 전체의 크기가 커지는 영향을 미쳤다. 해당 문제가 발생한 이유와 해결방법에 대해 정리해보려 한다. 테스트 더블을 직접 구현한 이유Mockito 라이브러리를 사용하면 쉽게 테스트 더블을 생성할 수 있다. 하지만 이전 프로젝트에서 적용해본 결과 비즈니스 로직에서 bootstrap, framework 모듈의 클래스를 직접 의존하진 않는지 파악할 수..
https://github.com/f-lab-edu/used-trading-market GitHub - f-lab-edu/used-trading-market: [당근마켓 모티브] 개인 간 거래 플랫폼 API 서버[당근마켓 모티브] 개인 간 거래 플랫폼 API 서버. Contribute to f-lab-edu/used-trading-market development by creating an account on GitHub.github.com중고 거래 API 서버에 Kafka를 적용하고 이벤트를 통해 비동기적으로 로직을 처리하려고 한다. 아래의 사진은 프로젝트 RDB의 일부이다. Member 테이블은 Post, Region 테이블을 참조하고 있다. Post는 Member를 통해 작성자의 Region을 간접..
이번 프로젝트는 멀티 모듈환경에서 헥사고날 아키텍처를 적용하여 구성해 보았다. 모듈과 클래스의 의존성 방향 다이어그램은 아래와 같다. 이처럼 헥사고날 아키텍처로 프로젝트를 구성해보니 MVC 아키텍처와 비교했을 때, 장단점이 확실하게 보였다. 장점은 비즈니스 로직, 도메인이 UI, Infra(세부사항)를 모른다는 것과 세부사항이 비즈니스 로직의 플러그인이 된다는 것이다. 이는 세부사항이 결정되지 않은 시점에도 비즈니스 핵심 로직을 구현할 수 있다. 세부사항이 자주 변경되거나 아직 결정되지 않은 시점에 헥사고날 아키텍처를 도입하면 생산성이 증가할 것이라고 생각한다. 하지만 단점또한 명확하다. 아직 헥사고날 아키텍처의 디렉터리 구조에 익숙하지 않다는 점을 감안하더라도 패키지 구조가 복잡하다. MVC 아키텍처와..
스프링 부트 멀티모듈을 환경에서 발생했던 Boot Jar 설정 오류를 다뤄보고자 한다. root 디렉터리의 주석 부분을 추가하여 문제를 해결할 수 있었다. 오류 발생 시점의 build.gradle 파일은 아래와 같다. subprojects { apply plugin: 'java' apply plugin: 'org.springframework.boot' apply plugin: 'io.spring.dependency-management' dependencies { compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' } tasks.named('test') { useJUnitPlatform() } // boo..
문제 JAVA 17, Spring Boot 3.2 멀티 모듈 구조에서 각 모듈간의 의존성을 제대로 선언해놓고 실행했음에도 모듈에서 다른 모듈의 소스 정보를 못 읽어오는 이슈가 발생했다. 해당 문제를 해결하기 위해 애플리케이션 실행 지점에 다른 모듈의 객체를 생성하는 간단한 코드를 넣어 확인해보았다. 소스코드와 IDE 상에는 분명히 domain 모듈의 Product 클래스가 import 되어 있는데, 컴파일러가 Product 클래스를 import 하는 시점에 오류가 발생한다. 해당 프로젝트는 내가 예전에 작성하고 테스트까지 끝마쳤던 소스코드를 그대로 가져와서 동일한 환경으로 재구성 한 것이라 완벽하게 동일한 소스코드와 의존성을 가지고 있다. 이전의 프로젝트는 오류없이 정상적으로 실행되니 참 답답한 상황이 ..
🥕 이번 당근 클론 프로젝트에서는 기존에 자주 사용하던 MVC 구조가 아닌 헥사고날 아키텍처를 적용해보려 한다. 따라서 먼저 배경 지식을 습득후 간단한 예제 코드를 통해 헥사고날 아키텍처에 대해 익숙해지려 한다. 이전 포스팅과 이어집니다. MVC 구조에서 헥사고날 아키텍처로 🥕 이번 당근 클론 프로젝트에서는 기존에 자주 사용하던 MVC 구조가 아닌 헥사고날 아키텍처를 적용해보려 한다. 따라서 먼저 배경 지식을 습득후 간단한 예제 코드를 통해 헥사고날 아키텍처 hyunsb.tistory.com 이번에는 이전 포스팅에서 설명한 MVC 구조에서 싱글 모듈 헥사고날 아키텍처를 적용한 API 서버를 멀티 모듈로 마이그레이션 해보려 한다. 싱글 모듈의 한계점은 명확하게 존재한다. 모든 로직이 하나의 dependen..
🥕 이번 당근 클론 프로젝트에서는 기존에 자주 사용하던 MVC 구조가 아닌 헥사고날 아키텍처를 적용해보려 한다. 따라서 먼저 배경 지식을 습득후 간단한 예제 코드를 통해 헥사고날 아키텍처에 대해 익숙해지려 한다. 헥사고날 아키텍처를 적용하려는 이유이전의 협업 프로젝트에서 이런 일이 있었다.여러 회의를 거쳐 프로젝트의 방향성을 정하고, 데이터를 추출한 뒤, 백엔드 팀은 데이터베이스 구조를 모두 설계하고 엔티티에 맞게 비즈니스 로직을 작성하여 4~5 개의 MVP 기능을 구현한 상태였다. 이후 PM과의 회의를 통해 새로운 기능을 추가하기 위해, 데이터베이스 테이블 구조의 변경이 필요하다는 것을 인지했다. 따라서 데이터베이스 테이블 구조를 다소 변경하게 되었다. 여기서 문제가 발생했다. 데이터는 거의 변함..