--- id: P-REINFORCE-WIKI-64459442 category: "10_Wiki/๐Ÿ’ก Topics/02_Architecture_Principles" confidence_score: 0.95 tags: ['observer-pattern', 'event-driven-architecture', 'event-stream-processing', 'design-patterns', 'publish-subscribe-model', 'architecture-principles'] last_reinforced: 2026-05-02 --- # [[Observer Pattern]] ## ๐Ÿ“Œ Brief Summary Observer Pattern์€ ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์กฐ ๋‚ด์—์„œ ์ปดํฌ๋„ŒํŠธ ์ˆ˜์ค€์˜ ํŠน์ • ์„ค๊ณ„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋””์ž์ธ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค [1, 2]. ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜(Event-Driven Architecture)์˜ ์ŠคํŠธ๋ฆผ ๊ตฌํ˜„ ์‹œ, ์ด๋ฒคํŠธ ์ฑ„๋„์„ ์ฃผ์ฒด(Subject)๋กœ ์‚ผ๊ณ  ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๊ด€์ฐฐ์ž(Observer)๋กœ ์„ค์ •ํ•˜์—ฌ ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์ƒํ™ฉ์„ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์•Œ๋ฆฌ๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ํ•ต์‹ฌ์ ์œผ๋กœ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค [3]. ## ๐Ÿ“– Core Content * **๋””์ž์ธ ํŒจํ„ด์œผ๋กœ์„œ์˜ ๋ถ„๋ฅ˜**: Observer Pattern์€ ์‹œ์Šคํ…œ ์ „์ฒด์˜ ๊ฑฐ์‹œ์ ์ธ ๋ ˆ์ด์•„์›ƒ์„ ์ •์˜ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด๊ณผ๋Š” ๊ตฌ๋ณ„๋˜๋ฉฐ, ๊ฐœ๋ณ„ ์ปดํฌ๋„ŒํŠธ๋‚˜ ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ๊ตฌ์กฐ ๋ฐ ๋™์ž‘๊ณผ ๊ด€๋ จ๋œ ๋ฐ˜๋ณต์ ์ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋””์ž์ธ ํŒจํ„ด(Design Pattern)์œผ๋กœ ๋ถ„๋ฅ˜๋ฉ๋‹ˆ๋‹ค [1, 2]. * **์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ์—์„œ์˜ ์ฃผ์ฒด-๊ด€์ฐฐ์ž ๊ตฌ์กฐ**: ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜์—์„œ ํ(Queue) ๋Œ€์‹  ์ŠคํŠธ๋ฆผ(Stream)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฒคํŠธ๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ ์ด ํŒจํ„ด์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค [3]. ์ด ๊ฒฝ์šฐ ์ด๋ฒคํŠธ ์ฑ„๋„(Event Channel)์€ '์ฃผ์ฒด(Subject)' ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๊ณ , ๊ฐœ๋ณ„ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ(Event Handler)๋“ค์€ '๊ด€์ฐฐ์ž(Observer)'์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค [3]. * **์ด๋ฒคํŠธ ์•Œ๋ฆผ ๋ฐ ์ฒ˜๋ฆฌ ์ž์œจ์„ฑ**: ์ƒˆ๋กœ์šด ์ด๋ฒคํŠธ๊ฐ€ ์ŠคํŠธ๋ฆผ์— ์˜๊ตฌ์ ์œผ๋กœ ์ถ”๊ฐ€๋˜๋ฉด, ์ฃผ์ฒด์ธ ์ฑ„๋„์€ ์ž์‹ ์„ ๊ด€์ฐฐํ•˜๋Š” ๋ชจ๋“  ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์—๊ฒŒ ์ด๋ฒคํŠธ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ํ†ต๋ณดํ•ฉ๋‹ˆ๋‹ค(Notify) [3]. ์•Œ๋ฆผ์„ ์ˆ˜์‹ ํ•œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋“ค์€ ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ ๋…์ž์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์ฒ˜๋ฆฌํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์Šค์Šค๋กœ ๊ฒฐ์ •ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค [3]. ## โš–๏ธ Trade-offs & Caveats ์†Œ์Šค์— ๊ด€๋ จ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. (์ œ๊ณต๋œ ์†Œ์Šค ๋ฐ์ดํ„ฐ์—๋Š” Observer Pattern ์ž์ฒด์˜ ๋ถ€์ž‘์šฉ, ์ œ์•ฝ ์‚ฌํ•ญ ๋˜๋Š” ๋ฐ˜๋Œ€ ๊ธ‰๋ถ€์— ๋Œ€ํ•œ ์ƒ์„ธํ•œ ๊ธฐ์ˆ ์ด ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉฐ, ํŒจํ„ด ๋ถ„๋ฅ˜ ๋ฐ ์ŠคํŠธ๋ฆผ ์ ์šฉ ์›๋ฆฌ๋งŒ ๊ฐ„๋žตํžˆ ์–ธ๊ธ‰๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.) ## ๐Ÿ”— Knowledge Connections ### Related Concepts #### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] - [[Event-Driven Architecture]] - ์—ฐ๊ฒฐ ์ด์œ : ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜์˜ ์ŠคํŠธ๋ฆผ(Stream) ๊ตฌํ˜„ ์‹œ ๋‚ด๋ถ€ ํ†ต์‹  ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ Observer Pattern์ด ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [3]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์•„ํ‚คํ…์ฒ˜ ์ˆ˜์ค€์˜ ์ด๋ฒคํŠธ ํ๋ฆ„์—์„œ ์ด๋ฒคํŠธ ์ฑ„๋„๊ณผ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋А์Šจํ•œ ๊ฒฐํ•ฉ์„ ์œ ์ง€ํ•˜๋ฉฐ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3]. - [[Event Stream Processing]] - ์—ฐ๊ฒฐ ์ด์œ : ์ด๋ฒคํŠธ๋ฅผ ์ผํšŒ์„ฑ ํ๊ฐ€ ์•„๋‹Œ ์˜๊ตฌ์ ์ธ ์ŠคํŠธ๋ฆผ์— ์ถ”๊ฐ€ํ•  ๋•Œ, ์ฑ„๋„์ด ๊ด€์ฐฐ์ž๋“ค์—๊ฒŒ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [3]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋‹ค์ˆ˜์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค์— ๋ณ„๋„๋กœ ํ†ต์ง€ํ•˜์ง€ ์•Š๊ณ ๋„ ๊ฐ์ž์˜ ์ฒ˜๋ฆฌ ์†๋„์— ๋งž์ถฐ ์ด๋ฒคํŠธ๋ฅผ ๋ฌด์‹œํ•˜๊ฑฐ๋‚˜ ์†Œ๋น„ํ•  ์ˆ˜ ์žˆ๋Š” ์ŠคํŠธ๋ฆผ ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์˜ ์ž‘๋™ ์›๋ฆฌ๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3]. #### [์„ค๊ณ„/๋ถ„๋ฅ˜ ์ฒด๊ณ„] - [[Design Patterns]] - ์—ฐ๊ฒฐ ์ด์œ : Observer Pattern์€ ์‹œ์Šคํ…œ ์ „์ฒด์˜ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์ด ์•„๋‹Œ, ์ปดํฌ๋„ŒํŠธ ๋ ˆ๋ฒจ์˜ ๋””์ž์ธ ํŒจํ„ด(Singleton, Factory, Strategy ํŒจํ„ด ๋“ฑ๊ณผ ํ•จ๊ป˜) ์ค‘ ํ•˜๋‚˜๋กœ ๋ช…ํ™•ํžˆ ๋ถ„๋ฅ˜๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [1, 2]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ฑฐ์‹œ์  ์•„ํ‚คํ…์ฒ˜(๋งคํฌ๋กœ ์ˆ˜์ค€)์™€ ๋ฏธ์‹œ์  ๋””์ž์ธ ํŒจํ„ด(๋งˆ์ดํฌ๋กœ ์ˆ˜์ค€) ๊ฐ„์˜ ์ ์šฉ ๋ฒ”์œ„์™€ ์ถ”์ƒํ™” ๊ณ„์ธต์˜ ์ฐจ์ด๋ฅผ ๋ช…ํ™•ํžˆ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1, 2]. ### Deeper Research Questions - Observer Pattern์„ ํ™œ์šฉํ•œ ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ ๋ฐฉ์‹๊ณผ ํ(Queue) ๊ธฐ๋ฐ˜ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋ฐฉ์‹ ๊ฐ„์˜ ๊ตฌ์ฒด์ ์ธ ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค ์†Œ๋น„ ๋ฐ ์ง€์—ฐ ์‹œ๊ฐ„(Latency) ์ฐจ์ด๋Š” ๋ฌด์—‡์ธ๊ฐ€? - ๊ด€์ฐฐ์ž(Observer)์ธ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์˜ ์ˆ˜๊ฐ€ ๊ธ‰๊ฒฉํžˆ ์ฆ๊ฐ€ํ•  ๋•Œ ์ฃผ์ฒด(Subject)์ธ ์ฑ„๋„์˜ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ์•Œ๋ฆผ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? - ์ฃผ์ฒด(Subject)๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ์ „ํŒŒํ•œ ํ›„, ๊ด€์ฐฐ์ž(Observer) ์ธก์˜ ์ด๋ฒคํŠธ ์ˆ˜์‹  ๋ฐ ์ฒ˜๋ฆฌ ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ๋‚ด์˜ ์—๋Ÿฌ ํ•ธ๋“ค๋ง ๋ฐ ์žฌ์‹œ๋„(Retry) ์ „๋žต์€ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•ด์•ผ ํ•˜๋Š”๊ฐ€? - ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜(MSA) ๊ฐ„์˜ ๋น„๋™๊ธฐ ํ†ต์‹ ์—์„œ Observer Pattern์ด ํŽ/์„ญ(Publish-Subscribe) ๋ฉ”์‹œ์ง• ํ๋กœ ํ™•์žฅ ๊ตฌํ˜„๋  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜์  ๋ณ€ํ˜•์€ ๋ฌด์—‡์ธ๊ฐ€? - ์‹œ์Šคํ…œ ๋‚ด์˜ ์ด๋ฒคํŠธ๊ฐ€ ๋งค์šฐ ๋น ๋ฅธ ์†๋„์™€ ๋Œ€์šฉ๋Ÿ‰์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ, Observer Pattern ๊ตฌ์กฐ ๋‚ด์˜ ๋ฐฑํ”„๋ ˆ์…”(Backpressure, ์—ญ์••) ์ œ์–ด๋Š” ์–ด๋– ํ•œ ์›๋ฆฌ๋กœ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•˜๋Š”๊ฐ€? ### Practical Application Contexts - **Implementation:** ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค์˜ ์ŠคํŠธ๋ฆผ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•  ๋•Œ, ์ฑ„๋„์— ์ด๋ฒคํŠธ๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ์ฆ‰์‹œ ๋‹ค์ˆ˜์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์—๊ฒŒ ์ด๋ฅผ ํ†ต๋ณดํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‹ค์ œ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค [3]. - **System Design:** ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„ ๋‹จ๊ณ„์—์„œ ์ „์ฒด ์‹œ์Šคํ…œ์˜ ํฐ ๊ตฌ์กฐ๊ฐ€ ์•„๋‹Œ, ๋‹จ์ผ ์ปดํฌ๋„ŒํŠธ๋‚˜ ๋ชจ๋“ˆ ๋‚ด์˜ ๊ตฌ์กฐ์ , ํ–‰์œ„์  ์ƒํ˜ธ์ž‘์šฉ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์†”๋ฃจ์…˜์œผ๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค [1, 2]. - **Operation / Maintenance:** ์†Œ์Šค์— ๊ด€๋ จ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. - **Learning Path:** ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์— ๋Œ€ํ•œ ์ „๋ฐ˜์ ์ด๊ณ  ๊ฑฐ์‹œ์ ์ธ ์ดํ•ด๋ฅผ ๋‹ค์ง„ ํ›„, ๊ฐœ๋ณ„ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€(๋ฏธ์‹œ์  ๊ตฌ์กฐ)๋ฅผ ์ƒ์„ธํžˆ ์„ค๊ณ„ํ•˜๋Š” ๋‹จ๊ณ„์ธ ๋””์ž์ธ ํŒจํ„ด ์˜์—ญ์„ ํ•™์Šตํ•  ๋•Œ ์ ‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค [1, 2]. - **My Project Relevance:** ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ์‹œ์Šคํ…œ ์ƒํƒœ ๋ณ€ํ™”(์ด๋ฒคํŠธ)๋ฅผ ์—ฌ๋Ÿฌ ๋…๋ฆฝ์ ์ธ ์„œ๋น„์Šค๋‚˜ ๋ชจ๋“ˆ์ด ์ฆ‰๊ฐ์ ์œผ๋กœ ๊ฐ์ง€ํ•˜๊ณ  ๊ฐ์ž์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ๋งž์ถฐ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ฐ˜์‘ํ•ด์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•  ๋•Œ ํ•ต์‹ฌ ์„ค๊ณ„ ๋ฐฉ์•ˆ์œผ๋กœ ์ฑ„ํƒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3]. ### Adjacent Topics - [[Publish-Subscribe Model]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋‹จ์ผ ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ Observer Pattern์˜ ์›๋ฆฌ๊ฐ€ ๋ถ„์‚ฐ ๋„คํŠธ์›Œํฌ ์ธํ”„๋ผ์—์„œ ์–ด๋–ป๊ฒŒ ๋ฉ”์„ธ์ง• ์ธํ”„๋ผ(๋ฐœํ–‰-๊ตฌ๋… ๋ชจ๋ธ)๋กœ ํ™•์žฅ๋˜๊ณ  ์‘์šฉ๋˜๋Š”์ง€ ์กฐ์‚ฌ - [[Reactive Programming]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ๊ณผ ์ด๋ฒคํŠธ์˜ ๋น„๋™๊ธฐ์  ์ „ํŒŒ์— ์ค‘์ ์„ ๋‘๋Š” ๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์ด Observer Pattern์˜ ์„ค๊ณ„ ์ฒ ํ•™์„ ์–ด๋–ป๊ฒŒ ์ฐจ์šฉํ•˜๊ณ  ๋ฐœ์ „์‹œ์ผฐ๋Š”์ง€ ๋ถ„์„ --- *Last updated: 2026-05-02*