21년 3월 19일
한 일
-
스프링 부트로 게시판 만들기: 로그인 구현을 진행하였다.
- session을 통해 로그인 되었는지 확인하고, 유저 정보 수정, 게시글 수정, 게시글 삭제 등의 권한을 확인한다.
- session을 통해 authorization하는 과정을 Controller에서 해야하는 지 Service에서 해야할 지 고민하였다.
- session을 Service로 직접 넘겨주는 건 보안상 좋지 않다는 의견이 있었다.
- Authorization도 비즈니스 로직이므로 Service에 구현하는게 나을 것 같다는 의견이 있었다.
- session에서 user 정보를 뽑고, Service에 user 정보를 넘겨서 authorization을 하는게 어떨까 하고 생각해보았다.
-
@Transactional 어노테이션을 알게 되었고, 코드스쿼드 미션에 적용해보았다.
-
어떤 서비스 내부에서, 자신이 다루는 테이블이 아닌 다른 테이블에 접근해야 하는 경우에 대하여 토론하였다.
-
예를 들어 질문과 답변(Question, Answer)이 있다고 가정해보자
-
QuestionService에서 QuestionRepository를 통해 Question을 가져오고 있다.
-
QuestionService에서 Answer에 접근해야 하는 상황이 발생하였다.
-
QuestionService 내부 멤버로 AnswerService를 가지는게 낫다 vs AnswerRepository를 가지는게 낫다 ??
-
AnswerService를 멤버로 가질 경우에?
-
Service가 Service를 가질경우 무한 참조 우려가 있다
(QuestionService가 AnswerService를 멤버로 가지고, AnswerService가 QuestionService를 멤버로 가질 경우)
-
- AnswerRepository를 멤버로 가질 경우에?
- Answer에 대한 여러가지 로직을 AnswerService에 구현해놨는데 (유효성 체크 등), 똑같은 코드를 QuestionService 내부에도 작성해야 할 수 있다. (코드의 중복, 유지보수 어려워짐)
- 사실 Answer는 Question에 의존적이기 때문에 굳이 AnswerService를 만들 필요는 없을 것 같다.
- 위와 같은 고민에 빠진다면 처음부터 설계가 잘못된게 아닐까 고민해보고, 어쩔수 없다면 장단을 고려하여 본인이 선택
- 정답은 없는 것 같다.
-
-
잘못한 것
- 그동안 스프링 미션이 너무 밀렸다.
- 완벽하게 배운채로 진행하려는 습관이 있는데, 해보면서 배우는 것도 크다. 부딪혀보자
잘한 것
- 코드스쿼드 오프라인에 출석해서, 개발에 대하여 토론하고 배우기도 하고 집중도 잘했다.
느낌
- 같이 공부할 동기들이 있다는건 정말 좋은 것 같다.
할 일
- 인프런 스프링 핵심 원리 강의 듣기
- 코드스쿼드 미션 하기
- 프로그래머스 문제 풀기