[toyproject] 웹 애플리케이션 만들기6 - 셀프 피드백

한지연·2023년 7월 17일
0

👍 종종 controller에서 비즈니스로직을 수행하던 버릇을 고쳤다.

프로젝트의 구조가 controller, service, repository 이런 식으로 나뉜 이유가 있는데 나의 코딩 방식은 종종 이 구조를 무시했다. 혼자 하거나 다른 사람들과 가볍게 하는 토이프로젝트 정도야 큰 문제가 되지 않겠지만 회사에 입사 했을 때 정해진 기본을 무시하는 사람이 되고 싶지 않았다. 그래서 이번 개인 토이프로젝트를 만들면서 절대 controller에 비즈니스 로직을 짜지 않겠다는 다짐을 했고 잘 지켜냈다. 특히나 jpa에서 service단은 @ Transaction(readOnly=true)로 작성했기 때문에 이전의 버릇 그대로 코드를 작성했다면 분명 작동에 문제가 있었을 것이다. 앞으로도 이런 부분들을 철저하게 지키고 성장하는 개발자가 되고 싶다.

👍 querydsl의 사용으로 쿼리 작성의 편리함을 체험했다.

순수 jpa를 사용했을 때도 아주 편하다는 생각을 했지만 querydsl은 개발 속도 향상에 더 도움을 줬다. 순수 jpa를 사용했을 땐 간단한 쿼리문도 종종 실행을 해야만 문제를 발견할 수 있을 때가 있었는데 querydsl은 컴파일 전에도 문제가 있는 부분을 알려줘서 훨씬 편하게 코드를 작성할 수 있었다.
그리고 querydsl의 직관성이 주는 이점이 아주 컸다. 코드로 예를 들자면

  • mysql
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;
  • querydsl
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 예약어들을 함수형으로 사용하는 것이 문자의 통일성을 줬다. 그리고 예약어들이 포인트가 되기 때문에 코드를 읽어 내려갈 때 가장 큰 직관성을 얻을 수 있었다. 객체를 맵핑하여 사용하는 것도 변수명을 다르게 쓴다거나 하는 실수를 할 일이 없었다.

👎 spring security 적용을 해내지 못했다.

얼마 전 security를 공부하여 이번 토이프로젝트에 적용할 계획을 세웠다. SecurityConfig를 작성할 때까지만 해도 공식 문서를 보며 springboot 3.x.x 버전에서 사용해야 하는 문법 방식들을 찾아보고 모두 작성했다. 하지만 AuthenticationManager의 무한참조로 결국 이전에 강의에서 배웠던 대로 코드를 원복했다. 하지만 이것도 로그인 요청이 들어올 때 loadUserByUsername이 실행되어도 security context에 객체를 넣어주지 못해 문제를 찾다 찾다 결국 포기했다. security context에 객체가 들어가지 않으니 자연스럽게 토큰도 포기하게 되었다. 아무래도 공부가 부족한 것이 그땐 티나지 않다가 활용할 때 드러난 것 같다. 그래도 지금은 문제점을 찾아내지 못했지만 다시 스프링시큐리티 공부를 하면서 다시 흐름을 잡고, 놓쳤던 부분도 자연스레 찾아내 이번에 해결하지 못한 문제의 실마리를 얻을 수 있을 것이라 생각한다.

🔍 다음 토이프로젝트를 한다면 꼭 챙겨갈 것

  1. 이번에 스스로 정한 규칙 중 하나는 기능 단위로 만들어졌을 때 커밋하기였다. 역시나 지키지 못했다. 혹시라도 코드 날라가면 어떡하나 싶어서 하루에 만드는대로 전부 커밋을 했다. 다음엔 꼭 조바심 내지 않고 이 부분을 지키려 한다.
  2. 그리고 다음엔 토큰 사용과 스프링 시큐리티 사용을 제대로 할 것 ⭐️⭐️⭐️⭐️⭐️
  3. update 관련 쿼리를 실행해야 할 땐 쿼리문 자체보다 변경감지를 활용할 것

➕ 추가사항

2023.08.02

https://velog.io/@hanj1yeon/org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder.getObject-is-null

문제가 됐던 부분을 찾아내 해결하고 프로젝트에 토큰 인증을 구현하였다.


💻 느낀점

역시 토이프로젝트는 여러 사람들과 함께 해야 의미가 있다. 혼자서 디자인, 기획, 퍼블리싱, 프론트, 백엔드를 다 하려니 퀄리티를 챙겨가지 못했다. 이번엔 querydsl 공부용(+ 포폴용)으로 혼자 토이프로젝트를 만들었지만 이젠 한 번 해봤으니 다음엔 꼭 더 퀄리티 있게 만들 수 있도록, 협업하면서 만들어가는 것의 보람을 느낄 수 있도록 사람들이랑 같이 해야겠다.
그리고 이번에 객체들끼리 무한참조되고 하는 현상 등 여러 exception들을 보면서 그래도 아 이게 코딩이었지 맞다 하는 즐거움을 다시 찾는 기회가 되었다.


🔗 front github: https://github.com/franjisca/toy
🔗 backend github: https://github.com/franjisca/plogging_toy

profile
배우고 활용하는 것을 즐기는 개발자, 한지연입니다!

0개의 댓글