본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
안녕하세요 :)
오늘은 챌린지 45일차로, 두번째 환급챌린지도 이제 2주 정도 남은 것 같네요 끝이 보인다!!
오늘 배울 내용은,
Part B. 스프링 시큐리티 심화
Ch 6. 실전: 인증 서버와 애플리케이션 서버 분리
"05. 인증서버 구현 - 3" 입니다.

오늘은 지난 시간에 이어서 레파지토리를 만들고 서비스, 그리고 컨트롤러까지 만들어보았다.
사용자 등록하는 것을 끝내고 하나의 개선 포인트로 잡은 것은, AuthRepository 라는 것은 레파지토리쪽 영역인데 AuthRepository를 쓰는 것은 어떤 서비스가 될 것이다. 근데 서비스에서도 이 UserEntity 라는 걸 전달 받게 되면 영역이 섞이는 것이다보니 별도의 데이터 객체를 만들어서 서비스에서 관리하는 유저 관련 도메인 객체 그리고 레파지토리에서는 엔티티만 다루면 좋을 것 같다. 그래서 그 경계를 조금 더 명확하게 분리하면 더 좋을 것 같은데 그렇게 하기 위해서는 하나의 패키지를 더 만들고 도메인이라고 하는 이름으로 만들어보았다.
User 라고 하는 도메인 객체를 만들어서, @Getter 를 등록해주고, 여기에서는 Spring Security 관련 데이터를 같이 넣어주어서 UserDetails를 구현하게끔 했다. 필드로는 userId, password 를 추가했다. 생성자도 만들어준 후, 권한의 경우 빈 리스트 반환되게끔 하고 패스워드는 this.password 하고 username은 this.userId로 반환하게끔 코드를 구현했다.
그 다음에 AuthRepository에서 UserEntity를 받고 있는데 여기에서는 user를 받게끔 User를 반환하게 바꿨다. 이제 저장을 하면 UserEntity 라는게 나오는데 이거를 User로 바꿔서 보내면 된다. UserEntity 에다가는 추가 메소드로 User로 바꿀 수 있는 메소드를 하나 만들어주고, User 라고 하는 도메인 객체에서는 toEntity 라는 것도 만들어 두어서 User와 UserEntity를 왔다갔다 잘 할 수 있게끔 만들어주고, user 라는 걸 받아와서 toEntity를 하면 entity가 되면서 저장이 되고 그 값이 saved로 오게 된다. 그리고 saved에서 다시 toDomain 해서 데이터 형태를 바꿔주었다.
그 다음에 해야하는 것은 User를 User 아이디로 찾아오는 것인데, 여기서는 조회만 하는 것이기 때문에 readTransactionOperations를 사용했다. 그래서 수행하는 것은 userJpaRepository 에서 findUserEntityByUser에다가 했는데 만약 결과 값이 없으면 Optional 해서 없으면 InvalidAuthException을 던지게끔 작업하고, 만약 존재하면 toDomain으로 바꿔서 결과 값을 반환한다. 그러면 InvalidAuthException을 또 만들어 줬다는 건데 이것은 별도의 패키지를 만들어서 만들어주었다.