일주일 동안 진행되었던, 미니 프로젝트가 끝이 났다.
미니 프로젝트를 하며 직면했던 문제와 느낀점들에 대해서 간략하게나마 회고를 남기고자 한다.
기술적으로 직면했던 문제는 한두가지가 아니었다.
이리저리 치이며 머리가 깨지는 듯 하기도 했고... (과장이긴 하지만)
해결하고 난 후에는 기쁘기도 했다.
그 중에서 내가 해결한 문제는 순환 참조로 인한 StackOverFlow
문제 였다.
뭐라도 하고 싶었다!!!
코드를 작성해주신 팀원분도 해당 문제를 해결 할 줄 몰랐던게 아니다.
짧은 시간 내에 많은 양의 코드를 소화해주시다 보니, 실수하신거였다.
내가 해결할 수 있었던 것도 내가 잘해서가 아니다.
그저 경험해보았기 때문이었다.
내가 프로젝트 자체에 많이 도움이 되지 못한다고 느꼈기 때문에
형준님이 하시죠!!!
라는 제안을 뭐라도 도움이 되고 싶다는 생각에 덥썩 물었다.
일단 문제는 게시물 상세 페이지를 조회하는 과정에서 발생했다.
코드 캡쳐를 안해서...
public class Post {
-생략-
@OneToMany(mappedBy = "post", fetch = FetchType.LAZY)
private List<Comment> commentList = new Arraylist();
-생략-
pulbic Post(---, List<Comment> commentList) {
-생략-
this.commentList = commentList;
}
}
위와 같은 Post 엔티티가 있었는데,
양방향 연관관계를 Comment와 맺어주었다.
이 상황에서 Post를 상세조회하려 할 때,
들어가야하는 모든 댓글들을 Comment 타입으로 Post에 담아주었었다.
그렇게 진행을 하니,
JSON 직렬화 과정에서 순환 참조로 인핸 StackOverFlow
가 터져버린 것이다.
이 부분을 해결할 수 있는 방법은
이 있었다.
어노테션을 통한 방식은 그다지 추천하지 않는 다는 말을 들었기 때문에,
DTO를 만들어 반환하는 방식을 사용하였다.
public class Post {
-생략-
@OneToMany(mappedBy = "post", fetch = FetchType.LAZY)
private List<CommentResponseDto> commentList = new Arraylist();
-생략-
pulbic Post(---, List<CommentResponseDto> commentList) {
-생략-
this.commentList = commentList;
}
변경된 코드는 그리 많지 않았다.
그저 CommentResponseDto 클래스를 만들어 Comment 엔티티의 내용을 원하는대로 핸들링을 해주 었고,
위의 코드처럼 List의 타입을 CommentresponseDto로 받은 것이 수정된 코드의 전부이다.
DTO를 만들어 원하는 값만 담아 줌으로써,
순환 참조를 야기하는 엔티티 안의 객체값을 제외하고 전달하는 방법으로 해결
프로젝트를 진행하며,
나 스스로에게 여러모로 많이 실망을 했던 것 같다.
실력, 협업 능력, 소통 등...
일단 기술적인 부분은 새로운 걸 거의 시도해보지 못했다.
그냥 java 안에서 처음 써보는 코드 패턴을 써본 정도?
새로운 부분에 대한 접근에 대해 극도로 많은 걱정을 하는 내 모습을 보았다.
좋지 않은 자세라고 생각하기에 스트레스를 더 받았던 것 같다.
그래서 부족한부분을 채워사
다음주에는 꼭 시큐리티, 서버 배포(ec2, rds, 로드밸런서 등) 관련 된 작업을 맡아서 진행하고 싶다!
노력하고 채워가야 할 부분들이 많이 보였던 일주일이었다.
고민으로 멘토링도 받아보았는데,
생각이 어느정도 정리가 되었고,
앞으로는 부족한 부분을 꾸준히 채워가며 다양한 시도와 도전을 해야겠다는 생각이 들었다.
프로젝트 자체에 크게 기여한 부분이 없음에도 불구하고,
이끌어주시며 함께 나아가주셔서 감사합니다.
더 노력하여 좋은 모습만 앞으로 보여드리겠습니다!!!
🌟미니프로젝트 6조 정말 많이 감사하고, 너무 많이 수고하셨습니다🌟