오늘 한 일:
- 스프링 심화주차 강의 드디어! 다 들었다!!!
- 과제 lv4 기술매니저님께 코드리뷰 받은대로 리펙토링 완료
- 과제 lv5 좋아요 기능 구현
- 기술 매니저님 현업에서의 조언, 협업 방법, 개발방법론 등 세션 듣기
오늘 배운 것:
1. AOP
AOP는 보통 검증을 하는 경우에 쓴다!
원래는 게시글 수정, 삭제하기 랑 댓글 수정, 삭제하기 부분에서 중복된 코드가 있어서 그걸 aop로 따로 빼내려고 했는데 그러려면 aop에서 post랑 comment를 리턴해줬어야 했다. 근데 aop에서 @Before이든 @Around이든 리턴해서 타겟 메서드에서 가져다 쓰는 건 많이 보지 못해서 기술매니저님께 여쭤봤었다. 그러다 기술매니저님이 보통 aop는 검증에 쓰기 때문에 값을 리턴하는 경우는 많지 않다고 하셨다.
예시: 기존에 내가 작성한 aop & 타켓 메서드 (정확하지 않은 코디입니다!!!)
@Before("updateComment() && args(id, user, ..)")
public synchronized Comment execute(Long id, User user) {
Comment comment = commentRepository.findById(id).orElseThrow(
() -> new CustomException(ErrorCode.COMMENT_NOT_FOUND)
);
userService.checkCommentRole(comment, user);
return comment
}
@Transactional
public Comment updateComment(Long id, User user, CommentRequestDto requestDto) {
// Comment comment = commentRepository.findById(id).orElseThrow(
// () -> new CustomException(ErrorCode.COMMENT_NOT_FOUND)
// );
// userService.checkCommentRole(comment, user);
comment.update(requestDto);
return comment;
}
이렇게 작성해서 타켓 메서드인 updateComment에서 어떻게 comment를 가져와야 하지? 라고 생각했었다.
해결방법은 의외로 간단했다. aop에서는 검증만 하는 것이다. 즉, comment가 있는지 없는지 체크하고 없으면 예외처리한다. 그리고 사용자권한도 checkCommentRole 함수로 체크한다. 그리고 그냥 void 타입으로 반환한다. 변경코드는 다음과 같다.
@Before("updateComment() && args(id, user, ..)")
public synchronized void execute(Long id, User user) {
Comment comment = commentRepository.findById(id).orElseThrow(
() -> new CustomException(ErrorCode.COMMENT_NOT_FOUND)
);
userService.checkCommentRole(comment, user);
}
@Transactional
public Comment updateComment(Long id, CommentRequestDto requestDto, User user) {
Comment comment = commentRepository.findById(id);
comment.update(requestDto);
return comment;
}
2. 항해에서 개발 프로젝트를 할 때에는 프론트엔드가 할 일이 엄청 많다!
항해에는 웹디자이너, 퍼블리셔가 없기 때문에 이 두 직업의 역할도 프론트엔드가 해줘야 한다. 그래서 프론트엔드는 엄청 바쁘다! 그래서 백엔드는 프론트엔드를 많이 이해해줘야 한다. 백엔드가 API를 개발했는데 프론트쪽에서 시간이 촉박해서 그 부분 화면을 못 만들어서 결국 발표할 때 못 보여줄 수도 있는데 이때 너무 많이 서운해하지는 말자. 서로 이해를 많이 해줘야 한다!
백엔드는 또 프론트엔드가 서버로 연결하여 test 해볼 수 있게 API를 빨리 만들어서 배포하는게 좋다. 아니면 프론트에서 테스트하기 힘들어진다고 한다.
그래서 최대한 빨리 개발을 해서 배포해서 프론트에 넘겨주고 이참에 개인공부를 해볼려고 한다!
이제 곧 프로젝트 시작인데 기대되기도 하고 걱정되기도 하고 설레기도 하고 부담스럽기도 하다.
그래도 잘 해낼 거라고 믿는다!! 아자아자! 으쌰으쌰!!
-끄읕-