반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 데이터구조
- 딥러닝
- Yes
- I'm Sorry
- 디자인패턴
- 파이썬
- 컴퓨터비전
- 컴퓨터과학
- 자료구조
- 인공지능
- 소프트웨어공학
- 보안
- 빅데이터
- 머신러닝
- 프로그래밍언어
- 클라우드컴퓨팅
- 버전관리
- 데이터과학
- 웹개발
- 데이터베이스
- 컴퓨터공학
- 데이터분석
- 소프트웨어
- 프로그래밍
- springboot
- 사이버보안
- 자바스크립트
- 네트워크
- 네트워크보안
- 알고리즘
Archives
- Today
- Total
스택큐힙리스트
책임을 넘겨라! Chain of Responsibility 한방 정복 본문
반응형
1. 패턴 한 줄 요약
“여러 처리자(handler) 를 체인처럼 묶어, 요청을 순차적으로 건네며 해당 단계가 책임을 지면 거기서 끝·못 하면 다음으로 패스한다.”
2. 왜 써야 할까?
- 결합도↓ : 클라이언트가 ‘누가 처리할지’를 몰라도 된다.
- 확장성↑ : 새 규칙이 생겨도 체인에 핸들러만 끼워 넣으면 끝.
- 실행 흐름 제어 : 요청 로깅→인증→권한→비즈니스 로직 같은 가변 파이프라인을 우아하게 다룬다.
3. 구조 감 잡기
- Handler 인터페이스 – handle(request) + next 보관
- ConcreteHandler – 조건 확인 후 처리·패스 결정
- Client – 첫 번째 핸들러에게만 요청하고, 나머지는 체인이 알아서
4. 코틀린 예제 – API 필터 체인
interface ApiFilter {
fun doFilter(req: Request): Boolean // true면 처리 완료
var next: ApiFilter?
}
abstract class BaseFilter : ApiFilter {
override var next: ApiFilter? = null
final override fun doFilter(req: Request): Boolean {
if (process(req)) return true // 자신이 처리
return next?.doFilter(req) ?: false // 패스
}
protected abstract fun process(req: Request): Boolean
}
class AuthFilter : BaseFilter() {
override fun process(req: Request) =
if (req.token == "VALID") false else { println("401"); true }
}
class LogFilter : BaseFilter() {
override fun process(req: Request): Boolean {
println("요청 로그: ${req.path}"); return false
}
}
// 체인 조립
val chain = AuthFilter().apply { next = LogFilter() }
chain.doFilter(Request("/pay", "INVALID")) // 401
AuthFilter가 실패를 잡아내면 이후 필터는 건너뛴다. 체인 순서·구성은 런타임에 자유롭게 바꿀 수 있다.
5. 실무에서 보이는 체인들
- Servlet Filter Chain – HTTP 요청을 여러 필터가 순서대로 가공하고 통과시키는 전형적인 예.
- Spring Security Filter Chain – 인증·인가·CSRF 등 수십 개의 보안 필터가 ‘책임 연쇄’로 연결된다.
- 로깅 & 미들웨어 스택 – SLF4J MDC 설정, 트레이싱, 모니터링까지 계층형으로 삽입.
- 결제 프로세스 – 한 주문이 재고 확인→결제 승인→마일리지 적립→알림 발송 단계를 타고 흐른다.
6. 장단점 체크
- 👍 유연성 : 핸들러 순서·유무를 설정 파일만으로도 조정 가능.
- ⚠️ 주의 : 디버깅이 어렵다. 어느 단계에서 멈췄는지 로깅을 꼭 집어넣자.
반응형
'개발' 카테고리의 다른 글
Iterator 패턴 – 컬렉션 속을 우아하게 누비는 비결 (3) | 2025.07.29 |
---|---|
책임 연쇄 vs 데코레이터 — 헷갈리는 두 패턴, 결정적 차이를 콕 짚다 (1) | 2025.07.28 |
명령을 객체로! 커맨드 패턴으로 유연한 실행 로직 만들기 🚀 (2) | 2025.07.28 |
Factory Method vs Template Method ― “누가 만들고, 누가 조립하나?” (3) | 2025.07.24 |
명령을 객체로! 커맨드 패턴으로 유연한 실행 로직 만들기 🚀 (1) | 2025.07.23 |
Comments