[Spring] flyway를 사용한 db 형상관리
·
Spring/Java
성능 개선을 위해 고민하던 중 우테코에서느는 어떤 기술들을 사용하나 궁금해서 프로젝트 깃허브들을 훑어보며 여러가지 새롭게 알게된 것들과 이번 프로젝트에 적용하면 좋을 기술들을 찾았습니다.그 중 하나가 이번 포스팅의 주제인 flyway 데이터베이스 형상 관리 라이브러리입니다.spring에서는 jpa, hibernate를 많이 사용하고 entity들이 바뀌면 ddl-auto를 사용하여 db를 업데이트합니다.하지만 이 방법은 테이블들에 대한 기록들이 안남아 커밋내역을 찾아봐야한다는 단점이 있습니다.  설치 implementation 'org.flywaydb:flyway-core' implementation "org.flywaydb:flyway-mysql"저는 mysql을 사용하므로 mysql에 관한..
[Spring] QueryDsl Dto반환 및 sub query
·
Spring/Java
안녕하세요. 오늘은 최근 진행한 게시글 조회 API의 성능 최적화 경험을 자세히 공유하고자 합니다. 특히 서브쿼리 활용과 기존 batch size 설정의 한계를 넘어선 새로운 접근 방식에 대해 이야기하겠습니다.1. 문제 상황우리 서비스의 게시글 목록 조회 API는 다음과 같은 문제점을 가지고 있었습니다:엔티티를 조회한 후 DTO로 변환하는 과정에서 불필요한 데이터 로딩N+1 문제로 인한 추가적인 쿼리 발생복잡한 정렬 로직으로 인한 애플리케이션 레벨에서의 추가 연산찬성/반대 투표 수 집계를 위한 별도의 쿼리 실행2. 이전의 개선 시도: 전역 Batch Size 설정초기에는 N+1 문제를 해결하기 위해 application.yml 파일에서 전역으로 batch size를 설정했습니다.spring: jpa: ..
[Spring] @BatchSize, default_batch_fetch_size
·
Spring/Java
먼저 @BatchSize, default_batch_fetch_size 모두 N+1 문제를 해결하기 위한 방법들입니다. 그래서 N+1이 무엇인지부터 알아봅시다.N+1 문제란?N+1 문제는 ORM(Object-Relational Mapping)을 사용할 때 흔히 발생하는 성능 이슈입니다. 이는 하나의 쿼리로 N개의 결과를 가져온 후, 각 결과에 대해 추가적인 쿼리를 수행하여 총 N+1번의 쿼리가 실행되는 현상을 말합니다.Fetch Join으로 N+1 문제 해결하기Fetch Join은 일반적으로 N+1 문제를 해결하는 효과적인 방법입니다. 하지만 OneToMany 관계에서는 주의가 필요합니다.@Query("SELECT p FROM Post p JOIN FETCH p.comments") List findAll..
[Spring] test report
·
Spring/Java
spring rest docs적용하다 새로 알게된 작은 꿀팁...?입니다.gradle test를 돌리면 build/reports안에 저렇게 index.html파일이 생깁니다.이 html파일을 브라우저로 실행시키면!!사진과 같이 작성한 테스트 코드에 대한 요약이 있습니다!!!저에겐 굉장히 도움이 될 예정인데 여러분에게도 조그마한 도움이 될까 싶기도 하고 너무 신기해서 포스팅으로 올렸습니다 :)
[JUnit] 통합테스트 설정 분리
·
Spring/Java
각 컨트롤러마다 통합 테스트를 작성하는데 설정파일의 변동은 거의 없어서 테스트의 설정을 모아두는 클래스를 만들기로 했습니다.@SpringBootTest@AutoConfigureMockMvc@ActiveProfiles("test")@Import({DataInitializer.class,TestRepository.class})@Transactionalpublic class BaseIntegrationTest { protected final ObjectMapper mapper = new ObjectMapper(); @Autowired protected MockMvc mockMvc; @Autowired protected TestRepository testRepository;}기본 통합 테스트의 설정..
[Server] curl을 사용한 cors 테스트
·
Infra
spring으로 cors를 열어놓고 테스트를 위해 postman, cors 테스트 툴 등 여러가지를 알아보던 중 curl 커맨드가 가장 간편해 보여서 해당 방법으로 진행했습니다!먼저 프로젝트 실행 후 git bash를 켜줍니다.curl -X OPTIONS 'http://localhost:8080' -H 'Origin: http://localhost' -H 'Access-Control-Request-Method: GET' -v첫 번째 주소는 목적지, 두 번째 주소는 출발지 주소입니다.다음과 같이 나온다면 cors설정이 잘 되었다는 뜻이고 다음과 같이 마지막 줄에 Invalid CORS라고 뜬다면 cors에 문제가 있는 상태입니다.저는 설정 충돌로 이슈가 있었네요 ;;@Override public void..
java곰
'spring' 태그의 글 목록 (3 Page)