216.73.216.170 TODAY : 2,238
์ž๋ฃŒ์‹ค ์„œ๋ธŒ ํƒ€์ดํ‹€ ์•„์ด์ฝ˜

์˜จ๋ผ์ธ ๊ฐ•์˜

 > 

PHP - ์ตœ์ƒ๊ธ‰

๐Ÿ“š PHP ์ตœ์ƒ๊ธ‰ - 8์ฃผ์ฐจ: ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด ๋ฐ ์„ค๊ณ„ ์‹ฌํ™” - 02 ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ (Clean Architecture)

๐Ÿ“š PHP ์ตœ์ƒ๊ธ‰ - 8์ฃผ์ฐจ: ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด ๋ฐ ์„ค๊ณ„ ์‹ฌํ™” - 02 ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ (Clean Architecture)

์ฃผ์š” ํ”„๋กœ๊ทธ๋žจ ์ŠคํŽ™

  • ํ‰์ : 10.0
  • ๋ผ์ด์„ ์Šค: free
  • ์šด์˜์ฒด์ œ:
  • ํŒŒ์ผ ํฌ๊ธฐ: 0

ํ”ผ๋“œ๋ฐฑ ๋ฐ ๋‹ค์šด๋กœ๋“œ

  • ์‚ฌ์šฉ์ž ํ‰์ : 10.0
  • ๋‹ค์šด๋กœ๋“œ ์ˆ˜: 0
  • ์กฐํšŒ์ˆ˜: 31

์ œ์กฐ์‚ฌ ๋ฐ ๋“ฑ๋ก ์ •๋ณด

  • ์ œ์ž‘์‚ฌ: LUZENSOFT
  • ๋“ฑ๋ก์ผ: 2025-10-27 10:45:23
  •  

- ์„ค๋ช…

ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜(Clean Architecture)๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

uploadImage

#ํด๋ฆฐ #์•„ํ‚คํ…์ฒ˜(#Clean #Architecture)๋Š” #์†Œํ”„ํŠธ์›จ์–ด #์‹œ์Šคํ…œ์˜ #์œ ์ง€๋ณด์ˆ˜์„ฑ(#Maintainability), #ํ™•์žฅ์„ฑ(#Extensibility), #ํ…Œ์ŠคํŠธ #์šฉ์ด์„ฑ(#Testability)์„ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•œ #์„ค๊ณ„ #์›์น™๋“ค์˜ #์ง‘ํ•ฉ์ด์—์š”. ๋กœ๋ฒ„ํŠธ C. ๋งˆํ‹ด(#Uncle #Bob)์ด ์ œ์‹œํ•œ ์ด ์•„ํ‚คํ…์ฒ˜๋Š” ์‹œ์Šคํ…œ์„ ์—ฌ๋Ÿฌ ๊ณ„์ธต์œผ๋กœ ๋‚˜๋ˆ„๊ณ , ์—„๊ฒฉํ•œ #์˜์กด์„ฑ(#Dependency) ๊ทœ์น™์„ ์ ์šฉํ•˜์—ฌ ์™ธ๋ถ€ #๊ธฐ์ˆ ์ด๋‚˜ #ํ”„๋ ˆ์ž„์›Œํฌ๋กœ๋ถ€ํ„ฐ #ํ•ต์‹ฌ #๋น„์ฆˆ๋‹ˆ์Šค #๋กœ์ง์„ ๋ณดํ˜ธํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ด์š”.

#PHP #์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— #ํด๋ฆฐ #์•„ํ‚คํ…์ฒ˜๋ฅผ ์ ์šฉํ•˜๋ฉด, #ํ”„๋ ˆ์ž„์›Œํฌ #๊ต์ฒด๋‚˜ #๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค #๋ณ€๊ฒฝ๊ณผ ๊ฐ™์€ ํฐ ๋ณ€ํ™”์—๋„ #ํ•ต์‹ฌ #๋กœ์ง์ด ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋„๋ก ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ์–ด์š”.



ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์˜ ํ•ต์‹ฌ ์›์น™: ์˜์กด์„ฑ ๊ทœ์น™

uploadImage

#ํด๋ฆฐ #์•„ํ‚คํ…์ฒ˜์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์›์น™์€ **#์˜์กด์„ฑ #๊ทœ์น™(#Dependency #Rule)**์ด์—์š”. ์ด ๊ทœ์น™์€ #์†Œ์Šค #์ฝ”๋“œ์˜ #์˜์กด์„ฑ์ด ํ•ญ์ƒ **๋ฐ”๊นฅ์ชฝ์—์„œ ์•ˆ์ชฝ์œผ๋กœ**๋งŒ ํ–ฅํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋ช…์‹œํ•ด์š”. ์ฆ‰, ์•ˆ์ชฝ ๊ณ„์ธต์€ ๋ฐ”๊นฅ์ชฝ ๊ณ„์ธต์— ๋Œ€ํ•ด ์ „ํ˜€ ์•Œ์ง€ ๋ชปํ•ด์•ผ ํ•ด์š”.


1. ๊ณ„์ธต ๊ตฌ์กฐ


#ํด๋ฆฐ #์•„ํ‚คํ…์ฒ˜๋Š” ๋ณดํ†ต ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋™์‹ฌ์› ํ˜•ํƒœ์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ ธ์š”.

  • #์—”ํ‹ฐํ‹ฐ(#Entities): ๊ฐ€์žฅ ์•ˆ์ชฝ ๊ณ„์ธต์œผ๋กœ, #์ˆœ์ˆ˜ํ•œ #๋น„์ฆˆ๋‹ˆ์Šค #๊ทœ์น™(#Business #Rules)์„ ํฌํ•จํ•˜๋Š” ๊ฐ์ฒด๋“ค์ด์—์š”. #ํ”„๋ ˆ์ž„์›Œํฌ, #๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, #UI ๋“ฑ ์–ด๋–ค ์™ธ๋ถ€ ์š”์†Œ์—๋„ ์˜์กดํ•˜์ง€ ์•Š์•„์š”.

  • #์œ ์Šค์ผ€์ด์Šค(#Use #Cases): #์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ #ํŠน์ • #๊ธฐ๋Šฅ(#Use #Case)์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ณ„์ธต์ด์—์š”. #์—”ํ‹ฐํ‹ฐ๋ฅผ ์กฐ์ž‘ํ•˜์—ฌ #๋น„์ฆˆ๋‹ˆ์Šค #๊ทœ์น™์„ ์ ์šฉํ•˜๊ณ , #์ž…๋ ฅ(#Input)์„ ๋ฐ›์•„ #์ถœ๋ ฅ(#Output)์„ ์ƒ์„ฑํ•ด์š”. ์ด ๋˜ํ•œ ์™ธ๋ถ€ ๊ณ„์ธต์— ์˜์กดํ•˜์ง€ ์•Š์•„์š”.

  • #์ธํ„ฐํŽ˜์ด์Šค #์–ด๋Œ‘ํ„ฐ(#Interface #Adapters): #์œ ์Šค์ผ€์ด์Šค์™€ #์—”ํ‹ฐํ‹ฐ๊ฐ€ ์™ธ๋ถ€ ์„ธ๊ณ„(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, #์›น, #UI ๋“ฑ)์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก #๋ฐ์ดํ„ฐ #ํ˜•์‹(#Data #Format)์„ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณ„์ธต์ด์—์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, #์›น #์š”์ฒญ #๋ฐ์ดํ„ฐ๋ฅผ #์œ ์Šค์ผ€์ด์Šค๊ฐ€ ์ดํ•ดํ•˜๋Š” ํ˜•ํƒœ๋กœ ๋ฐ”๊พธ๊ฑฐ๋‚˜, #์œ ์Šค์ผ€์ด์Šค์˜ ๊ฒฐ๊ณผ๋ฅผ #HTTP #์‘๋‹ต์œผ๋กœ ๋ณ€ํ™˜ํ•ด์š”.

  • #ํ”„๋ ˆ์ž„์›Œํฌ ๋ฐ ๋“œ๋ผ์ด๋ฒ„(#Frameworks & #Drivers): ๊ฐ€์žฅ ๋ฐ”๊นฅ์ชฝ ๊ณ„์ธต์œผ๋กœ, #์›น #ํ”„๋ ˆ์ž„์›Œํฌ(#Laravel, #Symfony), #๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค #๋“œ๋ผ์ด๋ฒ„, #UI ํ”„๋ ˆ์ž„์›Œํฌ ๋“ฑ์ด ์—ฌ๊ธฐ์— ํ•ด๋‹น๋ผ์š”. ์ด๋“ค์€ ์•ˆ์ชฝ ๊ณ„์ธต์— ์˜์กดํ•˜์ง€๋งŒ, ์•ˆ์ชฝ ๊ณ„์ธต์€ ์ด๋“ค์„ ๋ชฐ๋ผ์•ผ ํ•ด์š”.


2. ์˜์กด์„ฑ ์—ญ์ „ ์›์น™ (DIP)


#ํด๋ฆฐ #์•„ํ‚คํ…์ฒ˜์˜ #์˜์กด์„ฑ #๊ทœ์น™์„ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด **#์˜์กด์„ฑ #์—ญ์ „ #์›์น™(#DIP: #Dependency #Inversion #Principle)**์ด ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ด์š”. ์ƒ์œ„ #๋ชจ๋“ˆ์ด ํ•˜์œ„ #๋ชจ๋“ˆ์— ์ง์ ‘ ์˜์กดํ•˜๋Š” ๋Œ€์‹ , ๋‘˜ ๋‹ค #์ถ”์ƒํ™”(#Abstraction)์— ์˜์กดํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฑฐ์˜ˆ์š”.

  • ์˜ˆ๋ฅผ ๋“ค์–ด, #์œ ์Šค์ผ€์ด์Šค๊ฐ€ ํŠน์ • #๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌํ˜„์ฒด(#MySQL, #PostgreSQL)์— ์ง์ ‘ ์˜์กดํ•˜๋Š” ๋Œ€์‹ , #๋ฆฌํฌ์ง€ํ† ๋ฆฌ(#Repository) #์ธํ„ฐํŽ˜์ด์Šค(#Interface)์— ์˜์กดํ•˜๊ณ , ์ด ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์ฒด๋Š” #์ธํ„ฐํŽ˜์ด์Šค #์–ด๋Œ‘ํ„ฐ ๊ณ„์ธต์—์„œ ์ œ๊ณต๋ผ์š”. ์ด ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด #PHP #์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ #๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค #์ข…์†์„ฑ์œผ๋กœ๋ถ€ํ„ฐ ์ž์œ ๋กœ์›Œ์งˆ ์ˆ˜ ์žˆ์–ด์š”. #๋ฃจ์  ํ˜ธ์ŠคํŒ…(#https://hosting.luzensoft.com)๊ณผ ๊ฐ™์€ ํ™˜๊ฒฝ์—์„œ #๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„ ํ•ต์‹ฌ ๋กœ์ง์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์–ด์š”.



PHP ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ ์ ์šฉํ•˜๊ธฐ

uploadImage

#PHP์—์„œ #ํด๋ฆฐ #์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด #PSR(#PHP #Standard #Recommendation) ๋“ฑ์˜ ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋ฉด์„œ #๊ฐ์ฒด #์ง€ํ–ฅ #์„ค๊ณ„ #์›์น™์„ ์ฒ ์ €ํžˆ ์ ์šฉํ•ด์•ผ ํ•ด์š”.


1. ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ์˜ˆ์‹œ


์ผ๋ฐ˜์ ์ธ #ํด๋ฆฐ #์•„ํ‚คํ…์ฒ˜์˜ #PHP #๋””๋ ‰ํ† ๋ฆฌ #๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•„์š”.

src/
โ”œโ”€โ”€ Domain/          # ์—”ํ‹ฐํ‹ฐ, ๊ฐ’ ๊ฐ์ฒด, ๋„๋ฉ”์ธ ์„œ๋น„์Šค ๋“ฑ ์ˆœ์ˆ˜ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™
โ”œโ”€โ”€ Application/     # ์œ ์Šค์ผ€์ด์Šค, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋น„์Šค (์ž…๋ ฅ/์ถœ๋ ฅ ํฌํŠธ ์ •์˜)
โ”œโ”€โ”€ Infrastructure/  # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌํ˜„์ฒด, ์™ธ๋ถ€ API ํด๋ผ์ด์–ธํŠธ ๋“ฑ (์ธํ„ฐํŽ˜์ด์Šค ์–ด๋Œ‘ํ„ฐ)
โ”œโ”€โ”€ Presentation/    # ์›น ์ปจํŠธ๋กค๋Ÿฌ, CLI ์ปค๋งจ๋“œ ๋“ฑ (์ธํ„ฐํŽ˜์ด์Šค ์–ด๋Œ‘ํ„ฐ)
โ””โ”€โ”€ Shared/          # ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ, ์˜ˆ์™ธ ๋“ฑ


2. ํฌํŠธ์™€ ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด (Hexagonal Architecture)


#ํด๋ฆฐ #์•„ํ‚คํ…์ฒ˜๋Š” ์ข…์ข… #ํฌํŠธ์™€ #์–ด๋Œ‘ํ„ฐ #ํŒจํ„ด(#Ports #and #Adapters #Pattern), ๋˜๋Š” #ํ—ฅ์‚ฌ๊ณ ๋‚  #์•„ํ‚คํ…์ฒ˜(#Hexagonal #Architecture)์™€ ํ•จ๊ป˜ ์„ค๋ช…๋ผ์š”.

  • #ํฌํŠธ(#Ports): #์œ ์Šค์ผ€์ด์Šค ๊ณ„์ธต์—์„œ ์ •์˜ํ•˜๋Š” #์ธํ„ฐํŽ˜์ด์Šค๋กœ, ์™ธ๋ถ€ ์„ธ๊ณ„์™€์˜ ํ†ต์‹  ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•ด์š”. (์˜ˆ: UserRepositoryInterface)

  • #์–ด๋Œ‘ํ„ฐ(#Adapters): ์ด #ํฌํŠธ #์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์™ธ๋ถ€ ์„ธ๊ณ„(#๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, #์›น #ํ”„๋ ˆ์ž„์›Œํฌ ๋“ฑ)์˜ ๊ตฌ์ฒด์ ์ธ #๊ธฐ์ˆ ๊ณผ ์—ฐ๋™ํ•˜๋Š” ์—ญํ• ์„ ํ•ด์š”. (์˜ˆ: DatabaseUserRepository๊ฐ€ UserRepositoryInterface๋ฅผ ๊ตฌํ˜„)

์ด ํŒจํ„ด์„ ํ†ตํ•ด #PHP #์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ #ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ #๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ™์€ ์™ธ๋ถ€ #์˜์กด์„ฑ์œผ๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌ๋˜์–ด, ํ•ต์‹ฌ #๋„๋ฉ”์ธ #๋กœ์ง์˜ #ํ…Œ์ŠคํŠธ๊ฐ€ ํ›จ์”ฌ ์šฉ์ดํ•ด์ง€๊ณ , ์™ธ๋ถ€ ๊ธฐ์ˆ  ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ #์œ ์—ฐ์„ฑ(#Flexibility)์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์–ด์š”.



์š”์•ฝ


#ํด๋ฆฐ #์•„ํ‚คํ…์ฒ˜๋Š” #PHP #์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ #๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ๊ทธ ๊ฐ€์น˜๊ฐ€ ๋”์šฑ ๋น›๋‚˜๋Š” #์„ค๊ณ„ #ํŒจํ„ด์ด์—์š”. #์˜์กด์„ฑ #๊ทœ์น™์„ ์—„๊ฒฉํžˆ ์ง€ํ‚ค๊ณ , #๊ณ„์ธต๋ณ„ #์ฑ…์ž„์„ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ, #์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฝ๊ณ  #๋ณ€ํ™”์— ๊ฐ•ํ•œ #์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์š”. ์ด๋Š” #์ตœ์ƒ๊ธ‰์˜ #PHP #๊ฐœ๋ฐœ์ž๊ฐ€ ์ง€ํ–ฅํ•ด์•ผ ํ•  #๊ฒฌ๊ณ ํ•œ #์•„ํ‚คํ…์ฒ˜ #์„ค๊ณ„์˜ ํ‘œ์ค€์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์–ด์š”.

ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜, Clean Architecture, ์˜์กด์„ฑ ๊ทœ์น™, DIP, ์˜์กด์„ฑ ์—ญ์ „ ์›์น™, ์—”ํ‹ฐํ‹ฐ, ์œ ์Šค์ผ€์ด์Šค, ์ธํ„ฐํŽ˜์ด์Šค ์–ด๋Œ‘ํ„ฐ, PHP, ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„, ํฌํŠธ์™€ ์–ด๋Œ‘ํ„ฐ, ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜, ๋ฃจ์  ํ˜ธ์ŠคํŒ…



๋น ๋ฅธ์†๋„, ๊ฐ„ํŽธํ•œ์‚ฌ์šฉ, ์žฅ์• ์—†๋Š”VPN, ์‚ฌ์šฉ์ด๋ ฅ์—†๋Š” ๊นจ๋—ํ•œ ์•„์ดํ”ผ

https://vpn.luzensoft.com