본문 바로가기
반응형

개발 일기/spring16

Spring Batch Insert 어떻게 해결했을까 대용량의 데이터를 DB에 넣어야 하는 일이 발생했다. 한 파일당 약 3만줄의 데이터를 파싱해서 20개의 테이블에 나눠 저장을 하였다. 파일은 모두 90개였던 것으로 기억한다. (전체 저장 데이터가 5G정도 나왔었다.) 다 저장해보니 용량이 어마무시했던 기억이 있는데, 지금은 사용하지 않아 없어졌다. 하지만 Spring Batch Insert를 도전했던 좋은 추억이라 (^^) 기록을 해보려 한다. JdbcTemplate Bulk Insert 활용기 기본 사용 방법 bulk insert를 위해 batchUpdate() 함수를 사용하였다. 기본 사용 방법은 아래와 같다. @RequiredArgsConstructor public class SampleJdbcTemplateRepository { private f.. 2022. 8. 11.
Spring에서 외부 API 호출하기 3 (WebClient 활용) 활용 그.래.서 대-충 webClient를 사용하는 방법은 알았고, 그 후엔 어떻게 하면 효율적으로 사용할 수 있는지 계속 고민을 하였었다. *(효율적이라 쓰고 귀찮아서 어떻게 하면 한번에 처리할 수 있을까 머리 굴린거라고 읽는.. )* 대략적인 상황은 이랬었다. 약 20개의 각기 다른 api를 호출. 각 Response는 당연히 다르다. (같은 것도 있긴 했다.) 외부 api에서 서버에러가 발생하는 경우(http status가 40x, 50x로 오는 경우) response가 정해진 형식으로 도착한다. 그 외 예상하지 못한 오류가 발생하면 그냥 에러로 넘어온다. 어떤 api는 상태를 기다렸다가 다시 재 조회를 하여 로직을 처리해야한다. 처음에는 무작정 20개의 api들을 다 따로 처리하였었다. (원래 프.. 2022. 8. 11.
Spring에서 외부 API 호출하기 2 (Webclient) spring 5 이상에서는 webclient를 지향한다 하여 프로젝트에서는 webclient를 주로 사용하였다. 원래는 전체적으로 다 쓰고 싶었지만 안되는걸 어떡하나요 webclient를 사용하면서 약간 힘든점이 있었다면 webclient는 webFlux를 사용한다는 것이었다. reactive programming은 너무 미지의 세계였고.. 공부할 것도 많고.. 여러모로 장벽이 느껴졌지만 천천히 공부해 가면서 프로젝트를 진행해보았다. (천천히 해도 됐을지는 모르겠다..^^.. ) WebClient WebClient에 관한 설명이다. Simply put, WebClient is an interface representing the main entry point for performing web reques.. 2022. 8. 11.
Spring에서 외부 API 호출하기 1 (RestTemplate) 프로젝트에서 외부 api를 이용하여 로직을 짜는 부분을 맡게 되었다. Spring에서 외부 api를 호출하기 위해서는 RestTemplate이나 Webclient를 사용한다고 하여 관련 자료를 찾아보고 적용해 보았다. 사실 처음에는 webClient만을 사용하다가, 안되는 기능이 있어 restTemplate도 같이 사용하게 되었다... 프로젝트를 진행하면서 새롭게 알게 된 사실이나 정리할 부분이 많아 이를 한번 정리해 보았다. RestTemplate restTemplate은 Spring 3부터 지원된 api로, api를 호출한 후 응답을 받을 때 까지 기다리는 동기 방식이다. spring5 버전부터는 restTemplate보다 webClient를 사용하라고 권고 하고 있다. NOTE: As of 5.0 .. 2022. 8. 11.
JPA OneToOne 관계인데 2개가 저장됨 구독플랫폼 프로젝트 회원가입/수정 부분을 진행하는 중이었다. 회원가입을 먼저 진행하여 User를 생성하였고, 그 후에 Customer에 필요한 정보를 넣어 생성하거나 수정하는 로직을 만들었다. 간단한 insert니까 빨리 끝낼 수 있을 줄 알았다. 나의 경기도 오산이었다... OneToOne관계니까 당연히 1개만 저장될 줄 알았는데 혹시 몰라 한번 더 눌러보니 2개가 저장되는 일이 발생하였다. 뭐가 잘못이지? CaseCade, Fetch, Transactional 모두 수정해 보았지만 2개보다 더 많이 저장되는 경우도 발생해버렸다 ^^.. 혹시나 하는 마음에 생성된 테이블을 보니.. Customer 테이블에 user_id FK에 유니크 설정이 되어있지 않았다!!! 그러니 2개고 3개고 막 들어가는 일이 .. 2022. 8. 10.
JPA - Auditing 엔티티 변경 시점에 언제, 누가 변경했는지에 대한 정보를 기록하는 기능 Auditing 정보를 담은 추상 클래스 생성어노테이션설명 @MappedSuperclass @EntityListeners(AuditingEntityListener.class) public abstract class BaseTimeEntity { @CreatedDate private LocalDateTime createdDate; @LastModifiedDate private LocalDateTime lastModitiedDate; } @MappedSuperclass 엔티티 클래스들이 해당 어노테이션이 달린 클래스를 상속할 경우 CreatedDate 등의 어노테이션을 컬럼으로 인식 @EntityListeners(AuditingEntit.. 2022. 8. 10.
반응형