이 글에서는 [일단 박죠] O2O Store Management 서버 소개 및 향후 계획 글에서 언급한 구현 과정에서 마주한 문제들과 프로젝트를 진행하면서 도입한 여러 기술에 대해 다루겠다. 다만, 전체 내용을 한 번에 다루기에는 스프링 공부 및 생각 정리 시리즈와 중복되는 부분이 많기 때문에, 여기서는 구현에 대한 전반적인 흐름만 간략하게 소개하고 프로젝트를 진행하며 얻은 인사이트를 공유할 예정이다.
[공부정리] 국제화 : fallback-to-system-locale
국제화 기능을 탐색하고 적용해본 결과, 이 기능이 상당히 유연하고 확장성 있게 구현될 수 있다는 것을 발견했다. 이 경험은 지금까지도 매우 유용하게 쓰이고 있다.
[공부정리] @Secured(), @PreAuthorize, @PostAuthorize
인가 처리를 메서드 단위로 구현하면 비즈니스 로직과의 경계가 모호해져 코드가 복잡해질 수 있다. 이 문제를 해결하기 위해 특정 방법을 도입했고, 그 과정을 기록했다.
클라이언트가 만료된 토큰에 대해 알 수 있도록 하는 방법을 고민하고 구현했다. 클라이언트 입장에서 생각한 결과이다.
[공부정리] OncePerRequestFilter vs GenericFilterBean
GenericFilter와 OncePerRequestFilter의 차이점을 이해하고 적절히 적용하는 과정을 통해 필터의 종류와 사용 시점을 구분하는 능력을 키웠다. 또한 Spring Mvc LifeCycle에 대한 지식을 쌓을 수있었다.
[생각정리] Swagger (Feat. SpringDoc)
Swagger를 프로젝트에 도입한 경험과 이에 대한 다양한 의견을 나의 관점에서 정리하면서 개발 문서화 도구에 대한 깊은 이해를 얻었다.
[생각정리] @OnDelete(action = OnDeleteAction.CASCADE)
@OnDelete를 사용하면서 발생할 수 있는 문제와, 양방향 매핑의 오류 가능성을 줄이는 방법에 대해 공부하고 그 경험을 나누었다.
[생각정리] 테스트에서의 @Transactional 사용
테스트에 대한 여러가지 궁금증들을 해소하였다. 이 과정에서 테스트의 중요성을 더욱 깊게 이해하게 되었고 최대한 많은 테스트 코드를 작성하려고 노력하였다.
N+1 문제, QueryDSL, AOP, 무한 스크롤, @Async 등 다양한 기술적 도전을 통해 스프링의 깊은 이해와 더불어, 다양한 문제를 해결하는 능력을 키웠다.
O2O Store Management 프로젝트를 시작한 때와 지금을 비교해보니, 개인적으로도 프로젝트 수준도 많은 발전을 이루었다. 프로젝트를 시작하기 전의 코드들과 비교해 현재 작성 중인 코드들의 질적인 차이를 느낄 수 있다. 스프링에 대한 이해와 함께 개발자로서의 성숙도가 크게 향상되었음을 느낀다.
다음 글에서는 배포 과정에 대한 구체적인 내용을 다룰 예정이다.