์จ๋ผ์ธ ๊ฐ์
>PHP - ์ต์๊ธ
๐ PHP ์ต์๊ธ - 1์ฃผ์ฐจ: ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ (MSA) ๊ฐ์ - 03 PHP์์ MSA ๊ตฌํ ์ ๋ต
์ฃผ์ ํ๋ก๊ทธ๋จ ์คํ
- ํ์ : 10.0
- ๋ผ์ด์ ์ค: free
- ์ด์์ฒด์ :
- ํ์ผ ํฌ๊ธฐ: 0
ํผ๋๋ฐฑ ๋ฐ ๋ค์ด๋ก๋
- ์ฌ์ฉ์ ํ์ : 10.0
- ๋ค์ด๋ก๋ ์: 1
- ์กฐํ์: 40
์ ์กฐ์ฌ ๋ฐ ๋ฑ๋ก ์ ๋ณด
- ์ ์์ฌ: LUZENSOFT
- ๋ฑ๋ก์ผ: 2025-10-02 19:52:49
- ์ค๋ช
PHP, MSA์ ์ ํฉํ๊ฐ?
#PHP ๋ ์ ํต์ ์ผ๋ก #๋ชจ๋๋ฆฌ์_์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ ์ ๋ณด์ฌ์์ต๋๋ค. ๊ทธ๋ฌ๋ PHP์ ๋น ๋ฅธ ๊ฐ๋ฐ ์๋, ๋ฎ์ ํ์ต ๊ณก์ , ๊ทธ๋ฆฌ๊ณ #Composer ์ #PSR ํ์ค์ ํตํ ํ๋ํ ๋๋ถ์, PHP๋ ์ด์ #๋ง์ดํฌ๋ก์๋น์ค_์ํคํ ์ฒ(#MSA) ๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ๋งค์ฐ ์ ํฉํ ์ธ์ด ์ค ํ๋๊ฐ ๋์์ต๋๋ค. ํนํ ๋น์ฆ๋์ค ๋ก์ง์ด ๋ง๊ณ ๋น ๋ฅธ ๊ฐ๋ฐ์ด ์๊ตฌ๋๋ ์๋น์ค ๋ ์ด์ด์ PHP๋ฅผ ํ์ฉํ๋ ์ ๋ต์ด ๋๋ฆฌ ์ฐ์ด๊ณ ์์ต๋๋ค. ๐ก
1. MSA ๊ตฌํ์ ์ํ PHP ํ๋ ์์ํฌ ์ ํ
MSA ํ๊ฒฝ์์ PHP ์๋น์ค๋ ์๊ณ ๋น ๋ฅด๊ฒ ์์ฒญ์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
1.1. ๊ฒฝ๋ ํ๋ ์์ํฌ ํ์ฉ (Swoole, Lumen, Slim)
์ ํต์ ์ธ ๋ํ ํ๋ ์์ํฌ(Laravel, Symfony)๋ ๊ฐ๋ ฅํ์ง๋ง, ๋ถํธ์คํธ๋ฉ(์ด๊ธฐ ๊ตฌ๋)์ ์๊ฐ์ด ๊ฑธ๋ ค #๋ง์ดํฌ๋ก์๋น์ค ์ ๋ฏผ์ฒฉ์ฑ์ ๋ถ๋ด์ด ๋ ์ ์์ต๋๋ค.
#Swoole: PHP์ #๋น๋๊ธฐ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ์์ฃผํ๋ ์๋ฒ ํ๋ก์ธ์ค๋ฅผ ๋ง๋ค๊ณ , ์ผ๋ฐ์ ์ธ FPM ํ๊ฒฝ๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๊ณ ๋ฎ์ ๋ ์ดํด์๋ก ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. MSA์ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ํด๊ฒฐํ๋ ๋ฐ ํต์ฌ์ ์ธ ๊ธฐ์ ์ ๋๋ค.
#Lumen (Laravel ๊ธฐ๋ฐ): Laravel์ ๊ฒฝ๋ ๋ฒ์ ์ผ๋ก, API ๋ฐ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ๋น ๋ฅด๊ฒ ๊ตฌ์ถํ๋ ๋ฐ ์ต์ ํ๋์ด ์์ต๋๋ค.
#Slim / #Mezzio: ์ต์ํ์ ๊ธฐ๋ฅ๋ง์ ์ ๊ณตํ๋ ๋ง์ดํฌ๋ก ํ๋ ์์ํฌ๋ก, ๊ฐ๋ณ๊ณ ๋น ๋ฅด๊ฒ API ์๋ํฌ์ธํธ๋ฅผ ๊ตฌํํ๋ ๋ฐ ์ด์์ ์ ๋๋ค.
1.2. ๊ธฐ์ ๋ถ๋ฆฌ (Polyglot Persistence & Programming)
MSA์ ์ฅ์ ์ ์ด๋ ค, ๊ฐ ์๋น์ค์ ๊ฐ์ฅ ์ ํฉํ ๊ธฐ์ ์ ์ ํํฉ๋๋ค.
API Gateway ๋๋ #์ธ์ฆ_์๋น์ค ์ ๊ฐ์ด I/O ๋ณ๋ชฉ์ด ์ค์ํ ๋ถ๋ถ์ Go๋ Node.js๋ฅผ ์ฌ์ฉํ๊ณ , ๋น์ฆ๋์ค ๋ก์ง์ ๋น ๋ฅด๊ฒ ๊ตฌํํด์ผ ํ๋ ์ฃผ๋ฌธ/์ฌ์ฉ์ ์๋น์ค๋ PHP๋ฅผ ์ฌ์ฉํ๋ #๋ค์ค_์ธ์ด_์ ๋ต (Polyglot Programming)์ ์ทจํ ์ ์์ต๋๋ค.
2. ์๋น์ค ๊ฐ ํต์ ์ ๋ต
๋ง์ดํฌ๋ก์๋น์ค์ ํต์ฌ์ ์๋น์ค ๊ฐ์ ํต์ ๋ฐฉ์์ ๋๋ค. PHP ํ๊ฒฝ์์ ์ฃผ๋ก ์ฌ์ฉ๋๋ ํต์ ๋ฐฉ์์ ๋ ๊ฐ์ง์ ๋๋ค.
2.1. ๋๊ธฐ ํต์ (Synchronous Communication) - HTTP/REST
๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ฐฉ์์ผ๋ก, ์๋น์ค A๊ฐ ์๋น์ค B์ #API ์๋ํฌ์ธํธ์ ์ง์ HTTP ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ต์ ๊ธฐ๋ค๋ฆฝ๋๋ค.
์ฅ์ : ๊ตฌํ์ด ๋จ์ํ๊ณ ์ดํดํ๊ธฐ ์ฝ์ต๋๋ค.
๋จ์ : ์๋น์ค ๊ฐ #๊ฒฐํฉ๋ ๊ฐ ๋์์ง๊ณ , ์๋ต์ ๊ธฐ๋ค๋ฆฌ๋ ๋์ #๋คํธ์ํฌ_์ง์ฐ ์ด ๋ฐ์ํ๋ฉฐ, ์๋น์ค B์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ์๋น์ค A๊น์ง ์ํฅ์ ๋ฏธ์นฉ๋๋ค (์ฅ์ ์ ํ).
PHP ๊ตฌํ: Guzzle๊ณผ ๊ฐ์ HTTP ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
2.2. ๋น๋๊ธฐ ํต์ (Asynchronous Communication) - ๋ฉ์์ง ํ
#๋ฉ์์ง_ํ (#RabbitMQ, #Kafka ๋ฑ)๋ฅผ ์ฌ์ฉํ์ฌ ํต์ ํฉ๋๋ค. ์๋น์ค A๋ ๋ฉ์์ง๋ฅผ ํ์ ๋ฐํ(Publish)ํ๊ณ , ์๋น์ค B๋ ํ์์ ๋ฉ์์ง๋ฅผ ๊ตฌ๋ (Consume)ํ์ฌ ๋ ๋ฆฝ์ ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
์ฅ์ : ์๋น์ค ๊ฐ์ #๊ฒฐํฉ๋ ๊ฐ ๋ฎ์์ง๊ณ , ์์คํ ์ #ํ๋ ฅ์ฑ ์ด ํฅ์๋ฉ๋๋ค. ๋์ฉ๋ ํธ๋ํฝ ์ฒ๋ฆฌ ๋ฐ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ํจ์จ์ ์ ๋๋ค.
๋จ์ : ํ์ ์ปจ์๋จธ(Consumer) ํ๋ก์ธ์ค๋ฅผ ๋ณ๋๋ก ๊ด๋ฆฌํด์ผ ํ๋ฏ๋ก ์ด์ ๋ณต์ก๋๊ฐ ์ฆ๊ฐํ๊ณ , #๋ถ์ฐ_ํธ๋์ญ์ ์ฒ๋ฆฌ๊ฐ ๋ณต์กํด์ง๋๋ค.
PHP ๊ตฌํ: #Laravel_Queue ๋๋ AMQP ํ์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
3. MSA ํ๊ฒฝ์ ํ์ ๊ตฌ์ฑ ์์
PHP ์๋น์ค๋ฅผ MSA ํ๊ฒฝ์์ ์์ ์ ์ผ๋ก ์ด์ํ๊ธฐ ์ํด ํ์ํ ์ธํ๋ผ ์์๋ค์ ๋๋ค.
3.1. API ๊ฒ์ดํธ์จ์ด (API Gateway)
๋ชจ๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ๋ค์ด์ค๋ ๋จ์ผ ์ง์ ์ ์ญํ ์ ํฉ๋๋ค.
๋ผ์ฐํ , ๋ถํ ๋ถ์ฐ, ์ธ์ฆ ๋ฐ ๊ถํ ํ์ธ ๋ฑ์ ์์ ์ ์ฒ๋ฆฌํ์ฌ ๊ฐ๋ณ ์๋น์ค๋ ๋น์ฆ๋์ค ๋ก์ง์๋ง ์ง์คํ๊ฒ ํฉ๋๋ค. (์: Kong, Ocelot)
3.2. ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ (Service Discovery)
์๋น์ค๊ฐ ๋์ ์ผ๋ก ์์ฑ๋๊ฑฐ๋ ํ๊ดด๋ ๋, ํด๋ผ์ด์ธํธ๊ฐ ํด๋น ์๋น์ค์ ๋คํธ์ํฌ ์์น๋ฅผ ์ฐพ์ ์ ์๋๋ก ๋์ต๋๋ค.
PHP ์๋น์ค๋ ์์ ์ ์์ ์ ์์น๋ฅผ #๋ ์ง์คํธ๋ฆฌ ์ ๋ฑ๋กํ๊ณ , ํด๋ผ์ด์ธํธ๋ ๊ฒ์ดํธ์จ์ด๋ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ํตํด ์๋น์ค ์์น๋ฅผ ์กฐํํฉ๋๋ค. (์: Consul, Eureka)
3.3. ๋ถ์ฐ ์ถ์ ๋ฐ ๋ก๊น (Distributed Tracing & Logging)
์๋ง์ ์๋น์ค์์ ๋ฐ์ํ๋ #๋ก๊ทธ ๋ฅผ ํตํฉํ๊ณ , ํ๋์ ์์ฒญ์ด ์ฌ๋ฌ ์๋น์ค๋ฅผ ๊ฑฐ์ณ๊ฐ๋ ๊ณผ์ ์ ์ถ์ ํด์ผ ํฉ๋๋ค.
๋ก๊น : #ELK_Stack (Elasticsearch, Logstash, Kibana)์ ์ฌ์ฉํ์ฌ ๋ก๊ทธ๋ฅผ ์ค์ ์ง์คํํฉ๋๋ค.
์ถ์ : #Zipkin ์ด๋ #Jaeger ๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญ์ ์์๋ถํฐ ๋๊น์ง์ ๋ชจ๋ ํธ์ถ ํ๋ฆ๊ณผ ์ง์ฐ ์๊ฐ(Latency)์ ๊ธฐ๋กํฉ๋๋ค.
๋ง์น๋ฉฐ
PHP๋ MSA์ ํต์ฌ ์๊ตฌ ์ฌํญ์ธ ๋น ๋ฅธ ๊ฐ๋ฐ ๋ฏผ์ฒฉ์ฑ์ ์ ๊ณตํ๋ฉฐ, Swoole๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ฑ๋ฅ ๋ฌธ์ ๊น์ง ํด๊ฒฐํด ์ค๋๋ค. ์ฑ๊ณต์ ์ธ MSA ๊ตฌํ์ ๋จ์ํ ์๋น์ค๋ฅผ ๋ถ๋ฆฌํ๋ ๊ฒ์ ๋์ด, ๋น๋๊ธฐ ํต์ ์ ๋ต์ ์ฑํํ๊ณ , API ๊ฒ์ดํธ์จ์ด, ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ ๊ฐ์ #์ด์_์ธํ๋ผ ๋ฅผ ๊ฒฌ๊ณ ํ๊ฒ ๊ตฌ์ถํ๋ ๋ฐ ๋ฌ๋ ค ์์ต๋๋ค. ๋ค์ ์ฃผ์ฐจ๋ถํฐ๋ ์ด ๊ตฌ์ฑ ์์๋ค์ PHP๋ก ๊ตฌํํ๋ ์ค์ต ์์ฃผ์ ๋ด์ฉ์ ๋ค๋ฃจ๊ฒ ์ต๋๋ค. ๐ ๏ธ
์ผ๋ฐ์ฌ๋ฌด/๊ฒ์/๋ง์ผํ ์ฉ๋๋ณ ๊ณ ์ IP ์ ๊ณต, ๋ง์ผํ ,๊ฒ์ ์ ์ฉ ๊ฐ๋ฅ
https://xn--299ao67b9qbmsf04c.net/