
배송 생성 과정에서 배송이 허브가 (허브간 경로는 물론) 왜 주문, 유저 정보까지 가져와야하는지 의문이었다.
배송 서버가 생성 시점에 유저 서버로 직접 데이터를 조회(API Call)하도록 설계하면, 배송 서비스는 유저 서비스의 가용성에 종속된다.
문제 상황: 유저 서버가 점검 중이거나 장애가 발생하면, 배송 서비스는 배송 기사 정보를 가져오지 못해 배송 생성이 지연되거나 실패한다.
해결책: 허브가 이벤트를 발행할 때 이미 결정된 정보(경로, 기사 등)를 페이로드에 담아 전달하면, 배송 서버는 다른 서버를 조회할 필요 없이 자체 DB만으로 즉시 비즈니스 로직을 완결할 수 있다.
이벤트는 일반적으로 "이미 발생한 사실(Fact)"을 의미한다.
허브의 역할: 물류망 중심에서 특정 배송 건의 경로와 담당 기사 배정(Matching)을 수행한다.
전달 방식: 배정 완료 시 DeliveryAssigned 이벤트를 발행하여, "이 경로는 이 기사가 담당하기로 결정됐다"는 확정 상태를 배송 서버에 전달한다.
조회 방식의 단점: 배송 서버가 나중에 유저 서버에 묻는 방식은 단순 조회가 아닌 절차적 요청에 가깝고, 데이터 정합성을 위해 더 복잡한 트랜잭션 처리가 필요하다.
배송 도메인에서는 '배송 기사' 정보가 유저 서비스에 속하지만, 배송이 진행되는 동안 해당 정보는 배송 로직의 일부가 된다.
데이터 스냅샷: 이벤트를 통해 배송 서버가 정보를 받아 자체 DB에 저장(Denormalization)하면, 추후 배송 상태 조회 시 매번 유저 서버와 통신하거나 Join할 필요가 없어 응답 속도가 크게 향상된다.
배송관련 데이터 흐름으로 배송 과정을 팀원들과 어떻게 저장되는지 다 같이 개념을 확인했다.

동일한 코드로 다른 레포에 배포된 공통모듈 의존하니 해결됐다.
진짜 안되는 이유를 모르겠다.
저주받은 레포
낮에 튜터님과 client 권한을 부여했지만 빠진 설정이 있는것 같다.


Keycloak 관리자 페이지에 최고 관리자(admin)로 로그인
왼쪽 메뉴에서 Clients를 클릭하고,
Spring Boot application.yaml에 등록한 client-id (예: user-service-client)를 선택

KEYCLOAK_REALM=iimsa
KEYCLOAK_CLIENT_ID=iihub-app
...
keycloak:
server-url: "https://keycloak.code-factory.co.kr"
realm: ${KEYCLOAK_REALM}
client-id: ${KEYCLOAK_CLIENT_ID}
client-secret: ${KEYCLOAK_CLIENT_SECRET}
admin-username: ${KEYCLOAK_ADMIN_USERNAME}
admin-password: ${KEYCLOAK_ADMIN_PASSWORD}
해당 클라이언트 설정 화면 상단 탭에서 Service account roles (또는 Roles) 탭으로 이동합니다.

참고: 만약 이 탭이 안 보인다면, Settings 탭 밑으로 내려가서 Service accounts enabled 스위치가 켜져 있는지 확인하세요.
Assign role (권한 할당) 버튼을 클릭합니다.

목록 상단의 필터를 Filter by clients (클라이언트 롤)로 변경합니다.
검색창에 realm-management를 검색합니다.
realm-management 하위에 있는 manage-users 권한을 체크하고 할당(Assign)합니다.

(유저 생성, 삭제, 비밀번호 변경 등을 위해 필수적인 권한입니다.)

유저 조회를 위한 권한



프로젝트에서 키클록 연동 및 회원가입 구현