# 문제 상황
스프링부트 MSA 환경에서 각 서비스마다 시큐리티 컨텍스트를 설정할 때, 각 서비스에는 user 테이블이 존재하지 않아 컨텍스트 설정에 어려움이 있었습니다. 이를 해결하기 위해 authclient를 사용하여 인증 및 사용자 정보를 처리하려 했으나, 이 과정에서 여러 가지 문제가 발생했습니다.
- client 호출 시 매번 헤더 값 등을 처리하는 반복적인 코드가 많았고, 이를 requestInterceptor를 통해 개선하였습니다.
- 그러나 authclient 호출로 인해 HTTP 요청이 한 번 더 발생하면서 필터를 다시 타게 되었습니다. 이때, 필터에서 헤더 값이 비어 있는 문제가 발생해, 초기에는 빈 컨텍스트를 설정하는 방식으로 처리하였으나, 이는 안전하지 못한 방식이었습니다.
# 해결 과정
문제를 해결하기 위해 필터에서 헤더에 값이 없을 때 빈 컨텍스트를 설정하는 대신, 에러를 던져 더 명확하게 처리하는 방향으로 전환하였습니다. 하지만 authclient 호출이 HTTP 요청을 추가로 발생시키고, 이때 헤더 값이 비어 있어 에러가 발생했습니다. 결국, authclient 호출이 실패하고, 컨텍스트 설정이 불가능해졌습니다.
# 해결 전략
이 문제를 해결하기 위해 user 테이블을 조회하거나 추가 로직을 적용하는 대신, 첫 번째 요청이 왔을 때 헤더의 값을 바로 시큐리티 컨텍스트에 설정하는 방식을 사용했습니다. 이렇게 함으로써 헤더 값이 없는 경우에도 빈 컨텍스트를 설정할 필요 없이, 명확하게 에러를 던지더라도 문제가 발생하지 않도록 처리할 수 있었습니다.
# 결과 및 교훈
최종적으로 필터 단계에서 헤더의 값을 확인한 후, 이를 바로 컨텍스트에 설정하는 방법을 적용하여 문제를 해결했습니다. 이로 인해 불필요한 HTTP 요청이나 헤더 처리로 인한 오류를 줄였고, 에러 핸들링도 더욱 명확하게 처리되었습니다.
교훈
- MSA 환경에서는 각 서비스마다 공통적으로 사용하는 시큐리티 컨텍스트 설정을 최대한 효율적으로 적용하는 것이 중요합니다.
- 불필요한 HTTP 요청을 최소화하고, 필터 단계에서 컨텍스트 설정을 바로 처리하는 방식이 안정적입니다.
- 빈 컨텍스트를 설정하는 것보다 명확한 에러 처리를 통해 문제 상황을 분명히 하는 것이 장기적으로 유지보수에 유리합니다.
이와 같은 경험을 바탕으로 MSA 환경에서 시큐리티 설정 문제를 해결할 때 더 나은 접근 방식을 고려할 수 있었습니다.
'Trouble Shooting' 카테고리의 다른 글
[Trouble Shooting] 트랜잭션 롤백 문제 : 서비스 분리와 트랜잭션 전파의 중요성 (0) | 2024.10.10 |
---|---|
[Trouble Shooting] 트랜잭션 롤백 문제 : 서비스 분리와 트랜잭션 전파의 중요성 (1) | 2024.10.09 |
[Trouble Shooting] Redis 페이지 검색 조건 키 설정 문제 (0) | 2024.09.20 |
[Trouble Shooting] 기상청 API 호출 시 URL 이중 인코딩 문제 (0) | 2024.09.20 |
[Trouble Shooting] 소프트 딜리트로 인해 유니크 제약 설정 문제 (0) | 2024.09.20 |