Simple To-do List 애플리케이션 개발 #3

하루히즘·2022년 2월 6일
0

SimpleToDoList

목록 보기
3/3

서론

이번 포스트도 '배포'가 아닌 '개발'이다. 오랜만의 개발 기록인데 가장 큰 변화는 JWT를 걷어내고 Spring Session 프로젝트를 적용한 것이다. 그 외에는 데브코스에서 팀원끼리 진행하던 클린 아키텍처 스터디를 참고하여 애플리케이션 구조를 변경한 것, 잠금 상태, 권한 관계를 명확히 한 것 등이 있다.

본론

위의 변경사항은 하나의 PR에서 여러 커밋으로 진행했기 때문에 딱히 참고로 들 커밋이나 PR이 없다. 다음에는 아예 변경사항 별로 PR을 좀 더 세부적으로 나누는 것도 입증하기도 편하고 괜찮을 것 같다.

JWT 대신 Session

다른 포스트에서도 몇 번 언급했지만 JWT를 세션으로 활용하는 것 자체에 의문을 품고 고민해서 기존의 세션을 적용했다. 이 과정에서 Spring Session 프로젝트를 적용했으며 세부적으로는 Redis 데이터베이스에 세션 데이터를 보관하는 방식을 선택했다. 자세한 내용은 다음 포스트를 참고하면 좋다.

육각형 아키텍처

최근에 진행했던 도서 스터디에서 만들면서 배우는 클린 아키텍처라는 책을 읽었다. 데브코스에서 최종 프로젝트로 진행했던 NeedIt이 아쉬운 부분이 많아서 이 책을 읽어보면서 메서드명이나 코딩 스타일에 대한 Best Practice를 적용하려고 했었다.

그런데 막상 책을 읽어보니 메서드 이름이나 코딩 스타일이 아니라 애플리케이션의 프로젝트 구조에 대한 내용이 대부분이었다. 설계나 이론적인 내용이 많아서 술술 읽히진 않았지만 계속 복기하며 읽어보니 지금 애플리케이션 설계에는 문제가 있다는 걸 느낄 수 있었다. 대표적으로 인터페이스 분리였는데 역할과 책임에 따라 인터페이스를 분리해서 변경의 영향을 최소화하고 구현체에 대한 의존을 줄이는, 객체지향의 기본적인 원칙이지만 놓치고 있었던 부분이었다.

그것 외에도 생소하지만 흥미로운 내용(각 계층별로 데이터 모델 분리 등)이 많았기 때문에 지금 당장은 아니더라도 나중에 프로젝트를 진행할 때 활용할 만한 부분을 찾아보고자 한다.

비즈니스 로직 수정

SimpleTodoList에는 팀, 팀원, 회원, 할 일 리스트, 할 일 등 다양한 도메인이 존재하는데 여기에 추가적으로 잠금 상태(locked)를 가진 엔티티도 있다. 잠금 상태는 개발하면서 명확하게 정해두지 않은 부분이라 계속 혼동이 왔기 때문에 이번에 확실하게 다음처럼 정해두었다.

  • 팀이 잠길 경우: 팀원 외에 할 일 리스트, 할 일 등 조회 불가.
  • 할 일 리스트가 잠길 경우: 할 일 리스트의 생성자만 리스트를 삭제하거나 변경 가능.
  • 할 일이 잠길 경우: 할 일의 작성자만 할 일을 삭제하거나 변경 가능.
  • 팀원: 팀에 포함된 회원. 팀과 회원의 다대다 연관관계를 나타내는 객체.
  • 회원: 각 사용자.

잠금 상태를 반영해서 제대로 동작하는지(불필요한 정보 누출 등) 테스트 코드를 꼼꼼하게 작성하는 것이 좋을 것이다.

이것 말고도 soft-delete, 즉 실제로 삭제하지 않고 삭제되었다고 표기만 하는 방식도 적용하려고 하는데 현재는 관리자 기능이 따로 없기 때문에 아직은 구현하지 않았다. 전역적인 관리까지는 아니어도 팀장은 팀의 삭제된 할 일 리스트나 할 일을 조회할 수 있는 기능이 필요하지 않을까 싶다.

기타 코드 개선

이전에는 어떤 서비스나 컴포넌트에서 발생할 수 있는 예외를 한 폴더에 몽땅 집어넣고 @ControllerAdvice 같은 예외 처리기를 하나 붙여두는 식으로 구현했다. 하지만 어떤 클래스에서 발생할 수 있는 예외는 해당 클래스와 같은 디렉토리에 두는 것이 좋다는 스택오버플로우의 질의응답을 봤다. 그래서 Java의 RuntimeException, Exception 같은 예외 클래스도 확인해 봤는데 별도의 예외 클래스 패키지가 아니라 java.lang 패키지에 속하는 것을 볼 수 있었다. 그래서 좋은 습관이라 생각해서 컴포넌트별로 발생할 수 있는 예외를 각 패키지로 옮겨두었다.

결론

위와 같이 프로젝트를 개선하면서 변경사항이 많아졌고 비즈니스 로직도 변경된 부분이 있어 테스트 코드를 통째로 삭제하고 다시 작성하려고 한다. 그래서 위처럼 5800줄을 삭제했다고 인식한 것 같다.

얼마 안 되는 변경사항이지만 이정도면 애플리케이션의 모든 소스 코드를 건드린 것 같다. 물론 인증 방식 자체가 변경됐으니 당연한 것일지도 모른다.

profile
YUKI.N > READY?

0개의 댓글