전체 글(17)
-
[Spring Data JDBC] 라이프사이클 이벤트와 콜백(LifeCycle Events & Callback)
CRUD 라이프 사이클 Spring Data JDBC는 CRUD에 해당하는 메서드를 실행할 때, 각각 알맞은 이벤트들을 순서대로 진행한다. CrudRepository.save()(Create, Update) CrudRepository.find() (Read) CrudRepository.delete() (DELETE) Insert/Update/Select/Delete는 실제로 DB에 쿼리를 날리는 시점이다. 콜백 이벤트 하나가 실행되는 것을 이벤트가 발행된다고 표현한다. 모든 이벤트는 발행된 이후에 콜백 함수를 리턴한다. 따라서 CrudRepository.save() 메서드의 실제 라이프사이클은 아래 그림과 같을 것이다. (예외로 BeforeConvert는 이벤트 없이 콜백만을 갖는다) 이벤트와 콜백이 연..
2020.07.11 -
[WebClient] @RestClientTest를 WebFlux에서 사용하기
RestTemplate을 사용하는 스프링 프로젝트에서는 외부 api를 mocking해서 테스트 할 때, 주로 @RestClientTest를 사용했다. 이에 관해서는 굉장히 좋은 글이 있으니 참고하면 좋을 것 같다. 문제 RestTemplate을 사용하지 않고 @RestClientTest를 쓰는 경우 아래와 같은 에러를 마주하게 된다. 스프링 진영에서는 @RestClientTest가 Webclient를 지원할 계획이 없다고 선언했다. 따라서 WebClient를 쓰는 경우 @RestClientTest를 사용하지 못한다. 하지만 대안으로 MockWebServer를 사용하라고 추천하고 있다. 해결 MockWebServer를 사용하면 @RestClientTest와 동일하게 서버를 mocking할 수 있다. cla..
2020.07.11 -
[Recoil] 리코일로 Axios Hook 구현하기
최종 코드는 제일 아래에 있습니다! Axios Hook Axios Hook은 다음과 같이 사용한다. const [{ data, loading, error }, refetch] = useAxios( 'https://some-url.com' )응답의 결과가 담기는 data, 통신 진행 여부를 알려주는 loading, 요청의 에러를 담는 error와 요청을 다시 보낼 수 있는 refetch() 메서드가 리턴된다. 리코일에서도 이와 비슷하게 훅처럼 사용할 수 있으면 좋을 것 같아서 몇 가지를 시도해봤다. Recoli에서는? 먼저 data를 받는 코드는 다음과 같이 간단하게 구현할 수 있다. (참고: 리코일 공식 문서) const getUserInfo = selector({ key: 'get..
2020.07.11 -
[Spring Data JDBC] Id 삽입 전략
글을 작성하다 보니, 이명현님의 우아한 테크세미나의 한 부분을 정리한 글이 되었다. Spring Data JDBC에 관심이 있다면 한번쯤 꼭 영상을 시청하는 것을 추천한다. Spring Data jdbc를 사용하다보면 id를 insert(populate, generate)하는 방식을 커스텀하게 가져가고 싶을 때가 있다. DB의 auto-increment 기능을 사용할 수도 있고, 직접 만든 UUID를 넣어주고 싶을 수도 있다. 또, 외부에서 받아온 id를 사용하고 싶을 수도 있다. 각각 방식에 대해서 어떻게 하는지 알아보자. Auto Increment DB의 필드에 auto increment를 걸어두고 사용하는 전략이다. 이 경우, 특별히 다른 기술이 필요하지 않다. Spring Data JDBC는 sa..
2020.07.03 -
[Spring Data JDBC] 객체(Object)와 개체(Entity) 대응시키기
객체와 개체 일반적으로 JAVA를 사용하여 코딩을 한다고 하면 객체지향을 활용하게 된다. 이때 객체(Object)는 다른 객체들과 관계를 맺게 된다. 하지만 DB에 저장되는 것은 개체(Entity)이기 때문에 이를 대응시켜주는 기술이 필요하다. Spring Data JDBC는 이러한 방법을 제공한다(링크). 그런데 공식문서의 예시는 너무 빈약하다. 그래서 혼자 이것저것 공부하면서 알아낸 내용들을 풀어보려고 한다. 사용한 버전은 2.0.1RELEASE 버전이다. 기본적인 사용법 // Person.java public class Person { @Id private Long personId; private final String personName; private int age; Person(Long per..
2020.05.11 -
JPA vs JDBC, JPA vs Mybatis, JPA vs Spring Data JPA의 차이점과 Hibernate
Spring은 DB에 접근하기 위해 자바의 API를 사용한다. 웹 서비스에 필요한 기능들이 추상화돼서 Spring이 만들어졌듯이, DB에 접근하는 기술들도 일종의 추상화 과정을 거치며 진화해 나갔다. 이 부분을 처음 공부하는 사람 입장에서는, 비슷해 보이면서 다른 단어들 때문에 개념이 굉장히 헷갈린다. JPA를 검색했는데 뜬금없이 Hibernate에 관한 포스팅만 쏟아지기도 한다. 그런 사람들에게 도움이 되고자 간단하게 주요 단어들과 개념들을 포스팅해보려고 한다. (각 개념에 그림과 코드를 첨부했다. 그림에서 초록색 부분은 개발자가 코드 상에서 직접 다뤄야하는 부분이다) JDBC JDBC는 DB에 접근하고, SQL을 날릴 수 있게 해주는 자바의 표준 API다. 자바 진영에서 DB에 접근하는 기술들의 근간..
2020.04.25