분류 전체보기 610

[Wiki] OpenID

1. 설명OpenID 재단이 관리하는 인증 수단항목설명예분산형 디지털 신원 시스템사용자가 다양한 웹사이트에 하나의 계정으로 로그인할 수 있음 ID 형식- URL- XRIhttps://me.example.com/=alice@company*bob Service Discovery사용자가 입력한 OpenID 식별자를 통해 ID 제공자를 자동으로 찾는 프로토콜 Yadis 프로토콜 Service Discovery) Yadis 프로토콜 동작 방식더보기단계설명1사용자가 OpenID URL 입력2RP가 HTTP 요청 → X-XRDS-Location 헤더나 태그 탐색3XRDS 문서 위치 확인 후 해당 URL에 접근4XRDS 문서(XML)를 파싱하여 ID Provider 주소 확인5인증 요청은 이 주소로 전송 2. 구성 ..

카테고리 없음 2025.07.14

[Spring Security] 6-1. OAuth2

1. OAuth2 Resource Server보호된 자원에 대한 요청에 대하여, 인증 과정을 거쳐 자원을 응답하는 서버 Protect Access with an OAuth2 Access Token구분설명사용 구성JWT자체 서명 토큰 (일반적인 OAuth2/JWT 기반 API 보호)자체 디코딩 가능 (검증용 public key만 있으면 됨)Opaque Token토큰 내용을 알 수 없는 토큰introspection 엔드포인트로 검증(외부 인증 서버에서 introspection 제공 시 사용 가능) 설정) JWT더보기spring: security: oauth2: resourceserver: jwt: issuer-uri: https://my-auth-server.co..

[Spring Security] 4-2. Authorization: HttpServletRequests

request levet에서의 인가를 구현할 모델을 제공합니다.특정 prefix의 url에 대한 인가 권한을 요구할 수 있음HttpSecurity 객체를 통해 인가 룰을 정의할 수 있음 1. Understanding How Request Authorization Components Work 인가 동작 순서 (AuthorizationFilter)SecurityContextHolder에서 인증 정보를 가져오는 Supplier 생성Supplier와 HttpServletRequest를 AuthorizationManager에 전달authorizeHttpRequests()에 정의된 규칙들과 매칭하여 인가 판정 인가 실패AuthorizationDeniedEvent 이벤트 발생AccessDeniedException이 ..

[Spring Security] 4-1. Authorization: Architecture

1. AuthoritiesGrantedAuthority인증된 사용자가 가지고 있는 권한을 나타내는 객체단순 문자열로 권한을 표현함Authentication 객체 안에 리스트 형태로 저장됨 복잡한 권한 구조복잡한 권한 구조일 경우, 단순 문자열로 표현하기 어려움이런 경우, AuthorizationManager가 그 객체의 권한 부여 책임을 담당함Authorities의 getAuthority()는 null을 반환함 예시) 특정 계좌에만 접근 가능한 권한더보기권한 객체public class AccountAccessAuthority implements GrantedAuthority { private final Long accountId; public AccountAccessAuthority(Long ..

[도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지] 10. 이벤트

최범균 님의 "도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지" 책을 정리한 포스팅 입니다. 1. 시스템 간 강결합 문제바운디드 컨텍스트들 간의 강결합✅ 외부 시스템을 호출하는 서비스가 도메인 로직에 결합하는 경우를 말함 문제점문제점설명트랜잭션 처리 애매함외부 서비스 실패 시 롤백 or 상태 변경 여부가 불명확함성능 병목외부 API 지연이 전체 시스템 응답 시간에 영향도메인-외부 로직 혼합도메인 객체가 외부 호출을 직접 다루면 유지보수 어려움 해결 방법비동기 이벤트 기반 처리로 결합도 낮추기 2. 이벤트과거에 일어난 일✅ 상태 변화의 후속 처리를 트리거하는 역할➡️ 도메인의 상태 변경과 관련된 요구사항을 이벤트를 이용해서 구현할 수 있음 구성종류: 클래스 이름으로 표현발생 시간추가 데이터..

Code 2025.06.20

[도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지] 9. 도메인 모델과 바운디드 컨텍스트

최범균 님의 "도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지" 책을 정리한 포스팅 입니다. 1. 도메인 모델과 경계같은 엔티티라도 각각 다른 상위 도메인에 속하게 되면, 의미가 달라짐✅ 각 도메인에서 역할과 책임, 속성, 용어가 달라짐. 예) 상품더보기카탈로그: 보여주기용 정보 (상품명, 이미지, 옵션 등)창고: 실물 재고 추적용 정보 (SKU, 수량 등) 예) 회원더보기주문: 주문자배송: 보내는 사람 2. 바운디드 컨텍스트하나의 도메인 모델에 일관되게 적용되는 경계✅ 모델은 특정한 컨텍스트 하에서 완전한 의미를 가짐➡️ 올바른 도메인 모델을 개발하려면 하위 도메인마다 모델을 만들어야 함내용설명필요성하위 도메인마다 요구사항/규칙/용어가 다름구분 기준사용하는 용어가 다른지, 조직의 팀 구..

Code 2025.06.20

[도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지] 8. 애그리거트 트랜잭션 관리

최범균 님의 "도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지" 책을 정리한 포스팅 입니다. 1. 애그리거트와 트랜잭션서로 다른 스레드/트랜잭션이 같은 애그리거트의 DB를 동시에 수정하면 충돌이 일어날 수 있음‼️ 두 스레드가 동시에 커밋하면 일관성 깨짐➡️ 해당 테이블의 행에 잠금을 걸어 동시 커밋을 막음 예시) 배송 정보 변경더보기시스템: 배송 상태를 배송으로 변경할 때사용자: 배송지 주소를 변경할 경우➡️ 시스템의 애그리거트 객체와 사용자의 애그리거트 객체는 서로 독립적 (개념적으로는 같지만 물리적으로는 서로 다름) 2. 선점 잠금먼저 들어온 트랜잭션이 커밋될 때까지 같은 행을 접근하는 다른 트랜잭션은 잠시 blocking됨 (대기)먼저 들어온 트랜잭션이 커밋되면 잠금이 해제됨➡️ ..

Code 2025.06.19

[도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지] 7. 도메인 서비스

최범균 님의 "도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지" 책을 정리한 포스팅 입니다. 1. 여러 애그리거트가 필요한 기능도메인 영역의 코드를 작성하다 보면, 한 애그리거트로 기능을 구현할 수 없을 때가 있음✅ 도메인 / 애플리케이션 서비스에서 처리하기❌ 여러 애그리거트의 데이터/규칙을 한 번에 써야하는 유스케이스는, 한 애그리거트에 집어넣지 말기 예) Order - 결제 금액 계산더보기주문을 확정하려면 주문 애그리거트는 외부 애그리거트 정보를 읽어와서 계산하고, 결과 스냅샷만 자기 내부에 기록함애그리거트주문 시 필요한 정보(읽기)소유/책임비고Product상품 가격, 판매 가능 여부, 카테고리상품 카탈로그/정책가격은 주문 시점 스냅샷으로 Order에 저장Coupon/Promotion..

Code 2025.06.19

[도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지] 4. 애그리거트

최범균 님의 "도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지" 책을 정리한 포스팅 입니다.1. JPA를 이용한 리포지터리 구현모듈 위치리포지토리 인터페이스는 도메인 영역에 속함리포지토리를 구현한 클래스는 인프라스트럭쳐 영역에 속함 2. 스프링 데이터 JPA를 이용한 리포지터리 구현3. 매핑 구현4. 애그리거트 로딩 전략1:N 관계가 여러 개 있을 경우Fetch Join 쿼리의 결과는 될 수 있는 모든 경우의 행을 반환함 (카테시안 곱)❌ 실제 필요한 행의 갯수보다 더 많은 행을 얻어옴Hibernate에서는 Fetch Join 시, distinct 처리함같은 엔티티가 중복 생성되지 않게 함⚠️ 성능 부하가 일어날 수 있음 (DB, JVM의 연산이 늘어남) 예시) Order - OrderL..

Code 2025.06.19

[도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지] 3. 애그리거트

최범균 님의 "도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지" 책을 정리한 포스팅 입니다. 0. 설계 관점구분개별 객체 수준상위 수준(모델 관점)관심 범위단일 클래스, 엔티티, 메서드 등여러 객체들의 관계와 구조 전체적용 시점세부 로직 구현 단계시스템 설계 초기 또는 리팩터링 단계장점✅ 구현 세부사항에 집중✅ 객체 내부 로직 이해에 유리✅ 도메인 전반의 흐름 파악✅ 책임, 경계, 협력 구조 설계에 유리단점❌ 객체 간 관계를 놓치기 쉬움❌ 구조 왜곡 위험❌ 직관적이지 않을 수 있음 (추상적 흐름부터 정의하므로)변경에 대한 민감도⚠️ 구조 고려 없이 변경하면 다른 객체에 영향 확산 됨✅ 경계 기반 변경 가능모델링 초점객체 내부 (필드, 메서드, 생성자 등)객체 간 관계, 애그리거트 경계, ..

Code 2025.06.18