콜백 패턴(Callback Pattern): 제어권을 넘기고 결과를 기다리는 미학

1. 일상으로 이해하는 콜백: "진동벨의 원리"

우리가 카페에서 커피를 주문할 때의 경험은 콜백 패턴의 본질을 완벽하게 관통합니다.

  • 동기적 방식 (전통적 프로그래밍): 커피가 나올 때까지 카운터 앞에 서서 주방장만 쳐다보고 기다립니다. 주방장이 바쁘면 내 시간도 함께 멈추며, 다른 일을 전혀 할 수 없습니다.
  • 콜백 방식 (Inversion of Control): 주문을 마친 뒤 **'진동벨(콜백)'**을 받아 자리로 돌아옵니다. 나는 독서를 하거나 노트북을 하며 내 할 일을 하다가, 커피가 완성되는 '찰나'에 벨이 울리면 그때 움직입니다.

콜백 패턴의 핵심은 **"준비는 내가 할 테니, 너는 다 됐을 때 내가 준 코드(진동벨)만 실행해"**라고 주도권을 위임하는 것에 있습니다.


2. 왜 YAML 처리에 콜백이 필요한가?

YAML이나 XML 같은 복잡한 설정 파일을 읽는 과정은 마치 **"거대한 창고에서 물건을 분류하는 과정"**과 같습니다.

직접 파일을 열고, 문법을 파싱하고, 인코딩 오류를 체크하는 반복적인 코드를 매번 작성하는 것은 매우 비효율적입니다. 그래서 Spring은 YamlProcessor라는 '베테랑 창고지기'를 고용하여 역할을 나눕니다.

  • Spring의 역할 (How): 먼지 쌓인 파일을 열고, 구조를 분석하며, 데이터를 정제하는 저수준의 복잡한 작업을 전담합니다.
  • 개발자의 역할 (What): "데이터가 준비되면 이 로직만 적용해줘"라며 한 장의 쪽지(람다/콜백)를 건넵니다. 개발자는 데이터가 어떻게 만들어졌는지 몰라도 됩니다.

3. 심도 있는 데이터의 두 얼굴: Flattened vs Nested

Spring은 창고에서 정제한 데이터를 우리에게 건네줄 때, 용도에 따라 두 가지 형태의 쟁반에 나누어 담아줍니다.

  1. Properties (Flattened - 지도 위의 좌표):
    • server.port = 8080 처럼 모든 경로가 일렬로 나열된 형태입니다.
    • 비유: "서울시 강남구..."처럼 특정 지점을 핀포인트(Key)로 빠르게 찾거나 매칭할 때 강력합니다.
  2. Map (Nested - 도시의 실제 구조):
    • server 객체 안에 port 필드가 존재하는 계층 구조입니다.
    • 비유: 도시 전체의 설계도를 보거나, 특정 구역(객체) 전체를 통째로 들어내어 다른 객체로 변환할 때 유리합니다.

4. 내부 동작의 메커니즘 (Deep Dive)

단순히 "함수를 호출해준다"를 넘어, 내부적으로는 정교한 4단계 공정이 수행됩니다.

  1. 추출 (Parsing): YAML 소스를 Java의 기초 객체(Map, List, String)로 해체합니다.
  2. 가공 (Transformation): 해체된 데이터를 바탕으로 PropertiesMap이라는 두 가지 뷰(View)를 동시에 생성하여 정합성을 맞춥니다.
  3. 검증 (Filtering): DocumentMatcher가 개입하여, 현재 활성화된 프로파일(Profile) 등에 비추어 유효한 데이터인지 최종 확인합니다.
  4. 방아쇠 (Execution): 모든 검증이 끝나면 드디어 개발자가 맡겨둔 콜백 함수의 방아쇠를 당겨 비즈니스 로직을 실행합니다.

5. 설계의 미학: 우리가 얻는 가치

이 패턴을 도입함으로써 코드는 **'우아함'**과 **'안정성'**을 동시에 획득합니다.

  • 관심사의 분리 (SoC): 파일 I/O나 예외 처리 같은 지저분한 '인프라 코드'는 프레임워크 뒤로 숨고, 순수한 '비즈니스 로직'만 수면 위로 드러납니다.
  • 전략적 유연성: 동일한 데이터를 읽더라도, 상황에 따라 "검증용 콜백", "DB 저장용 콜백"으로 로직만 갈아 끼우면 되므로 확장성이 극대화됩니다.
  • 선언적 제어: ResolutionMethod 설정을 통해 "첫 번째 문서만 읽을지" 등을 결정할 수 있어, 콜백 내부의 로직을 수정하지 않고도 전체 흐름을 제어할 수 있습니다.

6. 요약하자면

"어떻게(How) 읽을 것인가는 전문가(Framework)에게 맡기고, 개발자는 오직 그 결과물로 무엇을(What) 할 것인가에만 우아하게 집중하는 것." 이것이 콜백 패턴이 설정 파일 처리 설계에 부여하는 가장 큰 기술적 선물입니다.

🔒 Admin 로그인