썸네일 테스트에 임베디드 DB 쓰지 말라니까 케이랑 함께 집넘기기 프로젝트를 진행하면서, 그동안 제대로 해보지 못했던 것들을 차근차근 시도하면서 또 여러 시행착오를 거치는 중이다. 그 중에서도 역시 꽃은 테스트라고 할 수 있겠다. 이번에도 역시나 밑도끝도 없(는 것처럼 보이는) 문제가 터져서 좀 당황했었는데, 생각보다 꽤 흥미롭고 재미있는 주제라서 정리해 본다. 문제의 시작 더미 데이터를 담은 data.sql를 정의해 주고, 일단 테스트용 DB는 임베디드 인메모리 DB(H2)를 쓰기로 했다. 사실상 이게 문제의 시작이라고 보면 된다. INSERT INTO rent_article (rent_article_id, address ...) VALUES ('1', '서울특별시 성동구', ...), ('2', '서울특별시 성동구', ...), ('3', '서..
썸네일 JPA 엔티티의 복합 키는 Serializable이어야 하는 이유 김영한 님의 을 읽다 보니, 복합 키를 매핑하는 @IdClass와 @EmbeddedId 식별자 클래스가 모두 Serializable 인터페이스를 구현해야 한다는 조건이 적혀 있었다. 책에서 그 이유는 자세히 설명되어 있지 않았는데, serialize라는 말 그대로 이 인터페이스를 구현해야 객체에서 DB 상의 복합 키로 직렬화가 가능하다는 정도의 의미일 것 같다는 생각은 들었지만, 구체적으로 어떤 역할을 하는 건지 궁금해졌다. 그래서 공부한 내용들을 정리해 본다. Serialization이 뭐야? Serialization은 쉽게 말하면, 자바의 클래스 정보를 이진 스트림으로 바꾸는 것을 말한다. 여기서 말하는 ‘클래스 정보'에는 클래스의 이름, 멤버 변수의 개수, 멤버 변수(자료형과 변수명, 값) 등이 포..
썸네일 눈 씻고 로그인 로직 버그 찾기 지난 이슈 트래커 프로젝트를 진행하다가 아주 기묘한 버그를 마주했다. 아래는 문제가 되었던 Oauth 로그인 코드. public JwtResponseDto loginWithOauth(OauthLoginRequestDto requestDto) { // (1) Oauth 클라이언트 구현체 선택 OauthClient oauthClient = oauthClientMapper.getOauthClient(requestDto.getOauthClientName()) .orElseThrow(() -> new InvalidOauthClientNameException()); // (2) 유저 정보 가져오기 OauthUserInfo userInfo = oauthClient.getUserInfo(requestDto.getAut..
썸네일 뭔지는 알고 쓰자 WebClient! 지난 코드스쿼드 프로젝트에서 JWT + Oauth로 로그인 구현하기를 시도했다. 클라이언트 단에서 보낸 Github auth 코드를 받아서, 그 코드를 다시 1) Github authorization 서버에 보내서 access token을 받고, 2) 그렇게 받은 access token을 다시 Github resource 서버에 보내면 유저의 정보를 얻어올 수 있다. 근데 이렇게 하려면 서버 어플리케이션에서 깃헙 서버에 HTTP 요청을 보내고 그 응답을 받아서 처리할 수 있어야 한다. 그럴 때 뭘 써야 하지? 하고 검색해 보니까 나온 게 WebClient였다. WebClient 이전에는 RestTemplate라는 게 있었다고 한다. 그런데 WebClient가 뭔가 개선된 버전이래! 그럼 당연히 새로 나온..