MSA 인증인가 전략2 유저 Passport토스 내부 서비스들도 기존에는 모든 서비스에서 유저 정보가 필요할 때 유저 API를 호출하는 방식으로 유저 정보를 가져오고 있었는데요 이는 트랜잭션 내에 불필요한 중복 요청을 유발하고 서버 리소스의 낭비로 이어졌습니다. 이를 개선하기 위해 저희는 Netflix의 Passport 구조를 참고하였습니다.Netflix는 유저 인증 시에 Passport 라는 id 토큰을 트랜잭션 내로 전파하는 방법을 사용하고 있는데요. 저희는 Netflix의 Passport 구조를 저희 팀에 맞게 변경하여 토스 Passport를 구현했습니다.Passport는 사용자 기기 정보와 유저 정보를 담은 하나의 토큰인데요. 앱에서 유저 식별키와 함께 API를 요청하게 되면 Gateway에서 이 키를 토대로 인증 서버.. 2025. 3. 20. MSA 인증인가 전략1 MSA를 구성하면서 인증인가에 대한 고민을 하게됨. 이미 Gateway를 통과했다면 내부는 Private Network 환경이라 또다시 인가/인증를 거치는것이 꼭 필요하다 생각하지는 않는다. 그러면 어떻게 인증인가를 거친 사용자의 정보를 보내줄 것인가? 헤더를 이용한 검증 1.직접 정보를 추출해 헤더에 보내줄 수 있고 header("X-User-ID", getUserIdFromToken(jwtToken)) 2. JWT 토큰을 보내 줄 수 있다. 첫번째 방법은 말 그대로 직접 HTTP 요청 헤더에 담아 전달하는 방법다만 SecurityContextHolder(ThreadLocal) 혹은 RequestScope Bean을 활용해 정보를 유지해야 같은 요청 스레드 내에서 정보가 유지됨.두번째는 .. 2025. 3. 18. Swagger 통합 MSA기반으로 프로젝트를 진행하다 보면 정말 많은 서비스 모듈이 생기게 됩니다. 포스트맨과 같은 API 테스트 툴을 사용하면 상관없지만 Swagger를 사용하는 경우 각 서비스에 맞게 Swagger UI를 실행해야 하며 각각의 주소를 기억해야 하는 번거로움이 있습니다.보통 마이크로서비스는 API Gateway를 통해 연결되며, gateway의 주소만 public IP로 공개하는 것이 일반적이므로 GateWay에서 라우트하여 한 곳에서 모든 서비스의 api docs를 통합하여 볼 수 있도록 설정. 설정GateWay application.ymlspringdoc: enable-native-support: true api-docs: enabled: true path: /v3/api-docs s.. 2025. 3. 17. 멀티모듈 https://dgjinsu.tistory.com/81https://hello-judy-world.tistory.com/204https://new-pow.tistory.com/98https://velog.io/@bienlee/멀티모듈-우아한-멀티모듈-정리by.-권용근-1.-멀티모듈이란https://hyeon9mak.github.io/woowahan-multi-module/✅ 모듈Oracle Java 문서에서 모듈이란 패키지의 한 단계 위의 집합체이며, 관련된 패키지와 리소스들의 재사용할 수 있는 그룹이라고 정의하고 있다.이때 각 모듈은 독립적으로 개발, 빌드, 테스트, 배포가 가능하다.✅ 멀티 모듈멀티 모듈은 위에서 언급한 모듈들을 하나의 프로젝트 안에서 관리하는 것을 의미한다.멀티 모듈 안에서 각각의 .. 2025. 3. 13. Error와 예외처리 try{... } catch (BaseException e) { return sendErrorResponse(exchange, e.getErrorCode(), e); } catch (Exception e) { e.printStackTrace(); return sendErrorResponse(exchange, 999, e); } 미처 처리하지 못한 예외처리의 경우 e.printStackTrace(); 등으로 로그를 남길 수 있도록 한다. 이때 남겨지는 에러메시지의 경우 (파란색으로 위치가 드는 곳이 내가 작성한 코드에서 제일 처음 에러가 발현한 곳 - 인텔리제이의 기능) 2025. 3. 12. spring cloud - Gateway 1. Gateway CustomPreFilter에 가지 않는 문제 기존 Gateway SecurityConfig@Configuration@EnableWebFluxSecuritypublic class SecurityConfig { @Bean public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) { return http .csrf(ServerHttpSecurity.CsrfSpec::disable) .formLogin(ServerHttpSecurity.FormLoginSpec::disable) .authorizeExchange(auth -> auth .pa.. 2025. 3. 11. @NoArgsConstructor,@AllArgsConstructor와(access=AccessLevel.PROTECTED) + @Builder https://oh-sh-2134.tistory.com/107 @NoArgsConstructor(access = AccessLevel.PROTECTED)를 이용하여 의미있는 생성자를 만들어 보자( + @Bulider)목표 @NoArgsConstructor와 함께 생성자를 만드는 어노테이션들을 알아보고 의미 있는 생성자를 만드는 방법을 알아보자. 내용 Entity위에서 자주 볼 수 있는 어노테이션은@NoArgsConstructor, @AllArgsConstructooh-sh-2134.tistory.com @NoArgsConstructor(access = AccessLevel.PROTECTED) 와 @AllArgsConstructor(access = AccessLevel.PROTECTED) 의미1️⃣ @.. 2025. 3. 10. StackOverflowError:null (feat.AuthenticationManager) ERROR 30400 --- [auth-service] [io-19095-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Filter execution threw an exception] with root causejava.lang.StackOverflowError: null 모놀리틱에서 msa로 전환을 시도해보았다. 모놀리틱에서는 잘되던 Authentication 필터에서 저 에러가 발생했다. 해결https://kwakscoding.tistory.com/51 [스프링부트] 멀티인증 Authentic.. 2025. 3. 7. Delivery프로젝트_5. (Trouble Shooting) JPA 연관관계 (단방향, 양방향) 단방향과 양방향의 개념적인 건 이해는 간다.https://hoestory.tistory.com/28 둘의 차이는 무엇이고 어떤 주의점이 있는지 정리해보자. ex) 음식점(일)과 리뷰(다)의 관계에서 시나리오에 따라 단방향과 양방향으로 나눌 수 있다.양방향 >> 음식점 상세페이지에서 리뷰를 조회할경우 , 리뷰가 많을 경우단방향>> 리뷰목록을 자주 보여줄 것인가 단방향일경우 리뷰(다)에서만 설정해주면 된다.양방향일경우 음식점, 리뷰 테이블 둘다 설정이 필요해서 조금 복잡하다. 리뷰 @ManyToOne @JoinColumn(name = "store_id", nullable = false) private Store store; public void setStore(Store store) { .. 2025. 2. 20. Delivery프로젝트_6. 단위테스트와 통합테스트 단위 테스트(Unit Test)란?단위 테스트는 소프트웨어 개발 과정에서 가장 작은 단위의 코드, 예를 들어 함수나 메서드 등을 대상으로 하는 테스트입니다. 단위 테스트의 목적은 각 단위가 개별적으로 정상적으로 동작하는지 확인하는 것입니다.단위 테스트는 일반적으로 개발자에 의해 작성되며, 테스트 프레임워크를 사용하여 자동화됩니다. 예를 들어, Java에서는 JUnit, Python에서는 PyTest와 같은 테스트 프레임워크를 사용할 수 있습니다.단위 테스트는 빠르게 실행되며, 개발 초기 단계에서 버그를 발견하고 수정하는 데 매우 효과적입니다. 왜냐하면 단위 테스트는 소프트웨어의 작은 부분만을 대상으로 하기 때문에, 버그의 원인을 빠르게 파악할 수 있습니다.또한, 단위 테스트는 코드의 변경이 다른 부분에 .. 2025. 2. 19. 이전 1 2 다음