프로젝트의 구조가 controller, service, repository 이런 식으로 나뉜 이유가 있는데 나의 코딩 방식은 종종 이 구조를 무시했다. 혼자 하거나 다른 사람들과 가볍게 하는 토이프로젝트 정도야 큰 문제가 되지 않겠지만 회사에 입사 했을 때 정해진 기본을 무시하는 사람이 되고 싶지 않았다. 그래서 이번 개인 토이프로젝트를 만들면서 절대 controller에 비즈니스 로직을 짜지 않겠다는 다짐을 했고 잘 지켜냈다. 특히나 jpa에서 service단은 @ Transaction(readOnly=true)로 작성했기 때문에 이전의 버릇 그대로 코드를 작성했다면 분명 작동에 문제가 있었을 것이다. 앞으로도 이런 부분들을 철저하게 지키고 성장하는 개발자가 되고 싶다.
순수 jpa를 사용했을 때도 아주 편하다는 생각을 했지만 querydsl은 개발 속도 향상에 더 도움을 줬다. 순수 jpa를 사용했을 땐 간단한 쿼리문도 종종 실행을 해야만 문제를 발견할 수 있을 때가 있었는데 querydsl은 컴파일 전에도 문제가 있는 부분을 알려줘서 훨씬 편하게 코드를 작성할 수 있었다.
그리고 querydsl의 직관성이 주는 이점이 아주 컸다. 코드로 예를 들자면
select
chattext.chatting_id,
chattext.createDate,
chattext.text_id,
chattext.chatting_text,
u.user_id
from chattext
join chattings c on chattext.chatting_id = c.chatting_id
join users u on chattext.user_no = u.user_no
where chattext.chatting_id = 4;
return jpaQueryFactory
.select(chatText1.chatting.id, chatText1.createDate,
chatText1.id, chatText1.chatText, user.userId)
.from(chatText1)
.join(chatting).on(chatText1.chatting.id.eq(chatting.id))
.join(user).on(chatText1.user.id.eq(user.id))
.where(chatText1.chatting.id.eq(chattingId))
.fetch();
mysql에서 기호로 사용해야 할 것들과, db 예약어들을 함수형으로 사용하는 것이 문자의 통일성을 줬다. 그리고 예약어들이 포인트가 되기 때문에 코드를 읽어 내려갈 때 가장 큰 직관성을 얻을 수 있었다. 객체를 맵핑하여 사용하는 것도 변수명을 다르게 쓴다거나 하는 실수를 할 일이 없었다.
얼마 전 security를 공부하여 이번 토이프로젝트에 적용할 계획을 세웠다. SecurityConfig를 작성할 때까지만 해도 공식 문서를 보며 springboot 3.x.x 버전에서 사용해야 하는 문법 방식들을 찾아보고 모두 작성했다. 하지만 AuthenticationManager의 무한참조로 결국 이전에 강의에서 배웠던 대로 코드를 원복했다. 하지만 이것도 로그인 요청이 들어올 때 loadUserByUsername이 실행되어도 security context에 객체를 넣어주지 못해 문제를 찾다 찾다 결국 포기했다. security context에 객체가 들어가지 않으니 자연스럽게 토큰도 포기하게 되었다. 아무래도 공부가 부족한 것이 그땐 티나지 않다가 활용할 때 드러난 것 같다. 그래도 지금은 문제점을 찾아내지 못했지만 다시 스프링시큐리티 공부를 하면서 다시 흐름을 잡고, 놓쳤던 부분도 자연스레 찾아내 이번에 해결하지 못한 문제의 실마리를 얻을 수 있을 것이라 생각한다.
문제가 됐던 부분을 찾아내 해결하고 프로젝트에 토큰 인증을 구현하였다.
💻 느낀점
역시 토이프로젝트는 여러 사람들과 함께 해야 의미가 있다. 혼자서 디자인, 기획, 퍼블리싱, 프론트, 백엔드를 다 하려니 퀄리티를 챙겨가지 못했다. 이번엔 querydsl 공부용(+ 포폴용)으로 혼자 토이프로젝트를 만들었지만 이젠 한 번 해봤으니 다음엔 꼭 더 퀄리티 있게 만들 수 있도록, 협업하면서 만들어가는 것의 보람을 느낄 수 있도록 사람들이랑 같이 해야겠다.
그리고 이번에 객체들끼리 무한참조되고 하는 현상 등 여러 exception들을 보면서 그래도 아 이게 코딩이었지 맞다 하는 즐거움을 다시 찾는 기회가 되었다.
🔗 front github: https://github.com/franjisca/toy
🔗 backend github: https://github.com/franjisca/plogging_toy