본문 바로가기

이슈와해결28

@RequestBody 컨텐츠 유실 문제 - 컨트롤러에도 디버깅이 찍히지 않으면 어디를 봐야할까? 개요 스프링 컨트롤러에서 @RequestBody가 붙은 Dto 매핑 에러를 다룹니다. 스프링에서 ArgumentResolving 하는 로직을 확실하게 이해하고 있지 못했을 때라서 해당 에러를 만났을 때 긴 시간 삽질을 했습니다. 본 글에서는 제가 해당 에러를 다루면서 겪었던 과정과 그와 관련해서 스프링 컨텍스트 공부한 내용을 소개합니다. 실제 용어나 코드 중 일부분은 컨셉용으로 대체하였습니다. 에러 메시지와 코드 배경 09:37:13.054 [DEBUG] [XNIO-2 task-1] [.w.s.m.m.a.HttpEntityMethodProcessor] - Nothing to write: null body 09:37:13.055 [ WARN] [XNIO-2 task-1] [.a.ExceptionHandle.. 2023. 12. 21.
일부러 정규화를 하지 않는 스키마는 어떨까? - 인가 프로세스에서 권한 관련 스키마 최적 설계 탐구 (feat. EAV, JsonB) 개요 사내 시스템 인가 프로세스를 개발할 기회가 있었다. 당시 해당 프로젝트의 개발 초기 단계에서 권한 관련 데이터베이스 스키마 구성에 대해 고민했었다. 해당 프로젝트에서 다루는 역할이 두 가지 밖에 없었고, 추가적인 역할 생성이 제한될 것으로 예상되는 상황이었기 때문이다. 무엇보다 향후 사내에서 다른 분산 서비스들을 모두 아우르는 통합 인증 인가 시스템을 개발하려는 계획이 있었다. 따라서 해당 프로젝트에서 구현하는 인증 인가를 적은 리소스를 사용하도록 효율적으로 구성해도 괜찮을 것 같았다. 그의 일환으로 권한 스키마에 대해 URL 자원 관리를 별도의 테이블로 분리하는 전통적인 접근법의 적합성을 관리와 성능 측면에서 고민해보았다. 이 글은 당시 관련 주제에 대해 탐구하며 정리했던 글이다. 주요 용어와 코.. 2023. 12. 18.
JWT 토큰 길이가 과도하게 길어질 때 - 토큰 생성 로직 및 인증 프로세스 최적화 탐구 개요 사내에서 차세대 프로젝트에 참여하여 JWT 토큰 기반 인증 인가 개발을 할 기회가 있었다. 설계 단계에서 살펴 보니 필요한 정보를 JWT에 모두 담을 경우 토큰의 길이가 과도하게 길어질 수 있는 문제가 있었다. 사용자별로 다수의 데이터를 소유하고 있는 경우, 이러한 데이터를 토큰에 포함할 때 토큰 길이가 과도하게 길어져 토큰 크기가 일반적인 범위를 초과할 가능성이었다. 토큰의 장점인 무상태성을 유지하면서도 이 문제를 해결하기 위해 새로운 최적화 방안을 모색했다. 이 글은 당시 고민하며 정리했던 글이다. 주요 용어나 코드는 컨셉용으로 대체하였다. 목차 목차 초기 설계와 문제점 대안책 이와 같은 대안에 대한 평가 타 유스케이스 초기 설계와 문제점 사용자 인증 프로세스는 일반적인 토큰 기반 인증 시스템을.. 2023. 12. 18.
JWT 토큰 기반의 상태 관리시 로그아웃 처리 문제와 간단한 해결 방법 본 글의 탄생 배경 사내에서 JWT 기반의 인증 인가 시스템을 구현할 기회가 있었다. 당시 프로젝트 개발을 구상하는 단계에서 로그아웃에 대한 이슈가 있었다. 당시 해당 이슈를 정리하고 검토하면서 작성한 글이다. 결론적으로 JWT의 장점을 유지하면서도 가장 효율적인 대안으로 프론트엔드에서의 처리 방법으로 결정했었다. 개요 인증/인가 설계에 있어 JWT 토큰 기반의 방식을 결정하였습니다. 기술 구현에 있어서 토큰을 관리하는 구체적인 방식을 진행하기에 앞서 몇가지 논의 사항이 필요합니다. 쟁점 사항 이슈를 다루기 전에 먼저 JWT 방식에 대한 이해가 필요하여 다음과 같이 정리하였습니다. ❓ JWT 기반 인증의 기존 방식과의 차이 JWT(JSON Web Token) 기반 인증은 전통적인 서버 기반 인증 방식과 .. 2023. 12. 18.
리팩토링 회고 - 입사 3개월 차에 만난 거대한 코드를 넘어가기 위해 생각했던 방법들 본 글에 대해서 회사 수습 기간 중에 한 도메인의 비즈니스 오케스트레이션 서비스를 들여다 볼 기회가 있었다. 해당 오케스트레이션의 취약점을 분석하고 해결 전략을 제시하는 업무를 맡았었다. 그 일을 하면서 본 업무와는 별개로 해당 프로젝트에 대해 코드 레벨 수준의 리팩토링을 제안했었다. 왜냐하면 막상 코드를 읽으니 읽는 것 자체가 너무 어렵고 흐름 파악하는 데 시간이 너무 오래 걸렸기 때문이다. 내 실력이 부족해서 이해 비용이 많이 들었을 수도 있다. 하지만 조금 더 구조화가 잘 되어 있고 코드가 클린했다면 유지보수에 있어서 범용성과 효율성이 많이 높아졌을 것이라 생각했다. 본 글은 그때 리팩토링을 제안하면서 쓴 글을 각색해서 재작성한 글이다. 주요 용어나 실제 코드는 컨셉용으로 대체하였고 민감한 부분은 .. 2023. 12. 17.