대규모 Insert 방식 선택 및 구현먼저 Spring Data JPA + PostgreSQL을 사용하여 데이터 5천만건 페이징을 구현하기 위해서는 더미 데이터를 Insert 해야했습니다. 각종 자료를 리서치해보니 JPA로 데이터를 밀어 넣는 것보다 JDBC를 사용하는 것이 훨씬 성능이 좋다는 것을 알게 됐습니다. 순수 JDBC Insert 시 장단점장점:최적화 시 삽입속도가 가장 빠름단점:SQL을 직접 관리해야한다.직렬화/재시도 로직 직접구현Spring Batch(JPA)장점:추상화된 API를 제공Chuck 처리, Skip 로직 내장스케줄링 가능단점:ORM 오버헤드 때문에 삽입 속도가 느림 저는 성능최적화가 가장 큰 목적이라 JDBC를 선택했습니다. reWriteBatchedInserts=true을 적..
Gradle 의존성 implementation과 runtimeOnly 의 차이점Implementation은 코드에서 실제로 해당 라이브러리를 참조하고 싶을 때 사용한다. 예를들면 Redis 라이브러리인 Redisson 라이브러리를 사용한다고 했을 때 아래처럼 사용한다.redissonClient.getLock() 직접 의존성을 부여해서 getLock()이라는 메서드를 사용하기 때문에 이것은 Implementation로 종속해주어야 한다.jar파일로 묶일 때 당연히 같이 따라오고, 다른 모듈에서는 사용이 불가능하다. 다른 모듈에서 사용 불가능하다는 이야기는 내가 LikeService 내부에서 RedissonClinet를 사용하고 있는데 PostService에서 LikeService를 참조하여 redisson..
서문Spring MVC를 넘어서 리액트와 스프링 풀스택 개발을 시도해보고 싶어졌습니다. 이를 위해서 Restful API를 설계해야하는데 혼자서 MVC 개발하던 패턴과는 아예 다른 방법으로 응답을 제공하더라구요.. 바로 ResponseEntity를 사용해서 stateCode, body 등을 반환했는데 이를 공부하면서 블로그에 정리하려고 합니다. 잘 몰라서 공부하며 정리한 것이라 만약에 틀린 부분이 있다면 댓글 부탁드립니다.. ㅜㅜResponseEntity는 무엇이고, 왜 사용하는걸까?Spring에서는 @ResponseBody로 DTO를 반환하면 알아서 Json으로 변환해 주기도 하고, 혼자 스프링 MVC로 개발할 때는 협업이 아닌 개인 개발이기 때문에 상태코드를 세밀하게 반환하지 않았어요. 적당한 예..