[250330] TIL
오늘 한 일
개인 프로젝트 과제
프론트엔드
GitHub - S2UZY/2-suzy-kang-community-fe: 카카오부트캠프 풀스택 - 바닐라로 만드는 커뮤니티 👾
백엔드
GitHub - 100-hours-a-week/2-suzy-kang-community-be: 카카오부트캠프 풀스택 - 스프링부트로 만드는 커뮤니티 서버
회고
도메인 구조 선택
도메인 디렉토리 구조를 어떻게 설계해야 할지 많이 고민했다. 기능별로 나눌지, 계층별로 나눌지 여러 레퍼런스를 찾아보며 결정했다. 결국 users, posts, comments 등 기능 중심으로 패키지를 구성하고 그 안에 controller, service, repository 등의 계층을 두는 방식을 선택했다.
DB 연동
DB는 어떻게 연결되고 데이터가 쌓이는건지 처음에는 감이 안 잡혔다. JPA를 사용하면서 Entity 클래스와 실제 테이블이 어떻게 매핑되는지, 그리고 Repository 인터페이스를 통해 어떻게 쿼리가 실행되는지 이해하는 데 시간이 걸렸다. 특히 연관관계 매핑에서 많은 시행착오를 겪었다.
MVC, 각 레이어 계층마다 역할 공부
Spring의 MVC 패턴과 각 레이어의 역할을 이해하는 것이 중요했다. Controller는 요청을 받고 응답을 반환하고, Service는 비즈니스 로직을 처리하며, Repository는 데이터 접근을 담당한다는 개념을 실제 코드로 구현하면서 이해할 수 있었다.
오류 추적과 디버깅
오류가 상세하게 안 떠서 고생했었는데 무무의 도움으로 로그를 상세하게 볼 수 있었고, 이후 발생하는 오류는 조금 더 수월하게 추적할 수 있었다. GlobalExceptionHandler 코드에서 AOP를 통해 에러가 발생하면 해당 클래스로 넘어오는 것을 배웠다.
백엔드에서 쿠키는 어떻게 처리하는가
쿠키 처리가 정말 까다로웠다. 쿠키가 계속 안 읽어지는 오류가 발생했고, 특히 프론트엔드와 연동할 때 CORS 설정과 함께 쿠키 설정을 제대로 해야 했다. HttpOnly, Secure, SameSite 등의 옵션을 이해하고 적용하는 과정이 필요했다. 특히 SameSite 옵션을 none 으로 해두고 쿠키가 안 읽어져서 오랫동안 고민했다. 같이 알아봐주고 도움을 줬던 팀원들에게 감사하다.
filter
Spring Security의 Filter 개념을 이해하고 JWT 인증 필터를 구현하는 것이 어려웠다. 요청이 들어올 때 어떤 순서로 필터가 적용되는지, 그리고 인증 정보를 어떻게 SecurityContext에 저장하는지 배우는 과정이 필요했다. 필터는 컨트롤러로 요청이 가기전에 jwt 유효성을 확인한다 메모.
시큐어 클래스
SecurityConfig 설정이 복잡했다. CSRF 보호를 비활성화하고, 세션 관리 정책을 STATELESS로 설정하고,,, 설정하는 부분은 리키 코드를 참고해서 내 프로젝트에 맞게 리펙토링 했었다.
jwt 토큰은 어떻게 구성하는가
JWT 토큰 구성 방법을 배웠다. Header, Payload, Signature로 구성되며, 토큰 생성, 검증, 만료 처리 등의 로직을 직접 구현했다. 특히 토큰에서 사용자 ID를 추출하고 이를 인증에 활용하는 방법을 익혔다.
프론트엔드 연동
API 설계를 꼼꼼하게 해야겠다고 느꼈다. 프론트엔드와 연동하면서 계속 추가해야 할 API나 수정사항이 생겼었다. 처음부터 API 명세를 잘 정의했다면 더 효율적으로 개발할 수 있었을 것이다.
개선해야하는 부분들
그 외에 개선하고 싶은데 .. 시간이 부족해서 못했던 부분도 많다. 아쉽다.
본 프로젝트 진행하면서 시간이 남으면 개인시간에 해야겠다.. 할 수 있겠지 …?
- 비밀번호 암호화 구현 필요
- 입력값 검증 로직 추가
- 예외 처리 강화
- 테스트 코드 작성
- 프론트엔드 유저 정보 저장 로컬스토리지 말고 다른 방법 생각해보기
- 프론트엔드 고도화
백엔드 개발에 대한 막연함 해소
백엔드를 구현하는 것이 처음이라서 많이 낯설었던 것 같다. db는 어떻게 연결되고 데이터가 쌓이는건지 .. api 는 어떻게 생성되는지 .. 쿠키 처리는 백엔드에서 어떻게 하는지 등등 ..부끄럽지만 하나도 몰랐다.. spring 수업을 들을 때, 이해를 너무 못해서 과제를 완수할 수 있을까 걱정을 했다. 어떻게 구조를 짜야하고 어떤 방식으로 코드를 짜야 하는지 고민을 많이했던 것 같다.
2주간의 고군분투가 있었지만 과제를 여차저차 과제를 제출할 수 있어서 다행이다. Spring Boot를 접하면서 각 단계마다 새로운 오류와 마주쳤고, 이를 해결하는 과정에서 많은 것을 배웠던 것 같다. 도움을 줬던 팀원들에게도 고맙다. 혼자서 공부 했었으면 지쳐서 다 못했을 것 같다. 처음에는 어려웠지만 해결해나가는 과정이 마냥 힘들지만은 않고 뿌듯함도 있었다. 백엔드하면 막연하고 전혀 알아듣지 못하는 세계였는데 .. 과제 덕분에 전체적으로 맥락을 이해하는데 많은 도움이 되었던 것 같다.
Leave a comment