본문 바로가기

Programming/TDD Project31

Pull Request 025. 회원 도메인을 향한 의존은 어디에 존재해야 할까? - 게시글 수정 기능 리팩토링 헥사고날 아키텍처로의 시스템 아키텍처 전환을 프로젝트에 적용하면서, 가장 어려우면서 동시에 가장 중요하게 처리해야한다고 느낀 부분은 다른 도메인과 회원 도메인 간의 연관관계다. 현재 프로젝트에서는 크게 게시글, 바버샵, 예약, 채팅, 회원의 도메인이 나온다. 회원 도메인은 발생할 수 있는 모든 유즈케이스의 주체다. 따라서 나머지 세 개의 모든 도메인과 연관되어있다. 결국, 가장 중요한 도메인은 회원이 된다. 그래서 회원은 독립적으로 존재시키는 것이 좋다. 다른 도메인과 연관관계를 맺는 순간 다른 도메인의 복잡도가 회원에 전파된다. 그럼 다른 도메인은 회원에 어떻게 의존해야할까. 이 고민을 시작한 것은 게시글 수정 기능을 리팩토링하면서다. 게시글을 수정하기 위해서는 게시글의 작성자와 수정 요청을 보낸 사용.. 2023. 12. 18.
Pull Request 024. 아키텍처 리팩토링 및 패키징 수정 - 자유 게시글 등록 기능에 헥사고날 아키텍처 적용하기 진행하고 있는 프로젝트는 지금까지 전형적인 3티어 아키텍처를 적용하였다. 그러나 사실상 애플리케이션 레이어에 모든 기능이 몰아져 지나치게 해당 레이어가 비대해졌다. 더 큰 문제는 이게 3티어 아키텍처인지를 표현하지 못하는 패키징 방식을 사용하고 있었다는 것인데, 이를 해결하고 시스템 복잡도를 제어하기 위한 더 나은 방향성을 지향하기 위해 헥사고날 아키텍처를 적용해보고자 한다. 먼저 기존의 패키징 방식을 살펴보자. 하나의 도메인 영역 내에 계층 구분이 명확하게 되어있지 않다, controller와 repository가 같은 단위에 자리하고 있다. 특정 계층에서 역할을 수행하는 객체를 찾기가 쉽지 않다, dto의 사용 위치나 entity의 사용 위치를 파악하기 어렵다. 아래는 아키텍처를 적용하고 패키지를 수.. 2023. 12. 15.
Pull Request 023. 인증된 사용자 객체 사용 TDD로 구현하기 - 자유 게시판 등록 시 작성자 등록하기 지난 게시글까지 Spring Security와 JWT를 적용하여 로그인과 권한 확인의 과정까지 마쳤다. 그런데 로그인은 왜 할까? 로그인을 한 사용자의 정보를 좀 가져다 쓰고 싶어서 하는 것 아닐까? 그냥 로그인만 하고 아무것도 안하면 로그인을 애써서 구현할 이유가 없다. 이번에는 자유 게시판 작성자의 정보를 로그인 한 사용자의 정보에서 가져와서 등록하게 기능을 수정할 것이다. Spring Security의 사용자 정보를 가져오는 방법은 크게 세 가지가 있다. 관련해서는 해당 링크를 통해 확인할 수 있다. 이번에는 링크에 제시된 세 번째 방법인 @AuthenticaitonPrincipal을 사용할 것이다. 딱히 어려운 방법을 학습해야 하는 것이 아니고, 사용해야 하는 이유도 그냥 편하니까라서 딱히 별도로.. 2023. 12. 8.
Pull Request 022. 사용자 인증 및 권한 확인 기능 TDD로 구현하기 - Spring Security 설정 마무리 지난 글에서 사용자 로그인 기능까지 마무리했다. 이번에는 사용자 인증 기능을 구현하면서 Spring Security 적용을 마치고자 한다. 물론, 이후 로그아웃 구현에서 또 등장하긴 하겠지만... 아무튼 귀찮은 설정은 끝난다. 일단은 테스트 먼저 작성해보자. 테스트하고자 하는 점은 다음과 같다. 인증되지 않은 사용자도 조회는 가능하다. 그러나 게시글이나 댓글의 작성, 수정, 삭제는 불가능하다. 인증된 사용자는 위의 모든 기능의 이용이 가능하다. 해당 조건을 테스트하기 위해서는 세 가지 부분을 테스트해야 한다. 인증되지 않은 사용자가 조회 요청을 보냈을 때 조회가 가능해야 한다. 인증되지 않은 사용자가 등록 요청을 보냈을 때 거절되어야 한다. 인증된 사용자가 등록 요청을 보내면 수락되어야 한다. 이제 테스.. 2023. 12. 7.
Pull Request 021. 로그인 기능 TDD로 구현하기 - Spring Security / JWT 적용하기 인증 / 인가 처리를 위해 선택할 수 있는 방법은 다양하다. 모든 필터 레벨에서 일어나는 일을 직접 처리할 수도 있고, OACC같은 프레임워크를 사용할 수도 있다. 인증을 위해 쿠키를 이용하거나 세션을 이용할 수도 있다. 나는 Spring Security 프레임워크를 활용해 로그인 과정을 처리하고, 인증에 사용되는 정보를 JWT를 이용해 클라이언트와 소통하기로 결정했다. Spring Security는 기본적으로 Spring의 하위 프레임워크다. 따라서 Spring 기반의 프로젝트에서 호환성이 좋아 쉽게 사용 가능하다. JWT를 사용하는 이유는 쿠키 - 세션이 지닌 문제점 때문이다. 쿠키는 보안에 지나치게 취약하고, 세션은 서버에 부하가 많이 걸린다. 관련해서 쉽게 설명해준 영상이 있으니 보고 오면 좋다... 2023. 12. 6.
반응형