๐Ÿ‘ท๐Ÿป Architecture

3ํŽธ. MSA์— ์‚ฌ์šฉ๋˜๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํŒจํ„ด(Service Discovery, BFF, CQRS)

DevPoong 2024. 4. 1. 01:04

CI/CD ํŒจํ„ด

CI(Continuos Integration) / CD(Continuous Delivery/Deloyment)

MSA ํ™˜๊ฒฝ์—์„œ ๋น„์ง€๋‹ˆ์Šค ๋ฏผ์ฒฉ์„ฑ์„ ํ‚ค์šฐ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐฐํฌ ์ž๋™ํ™”๋ฅผ ๊ตฌ์ถ•ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.
์ด๋•Œ, ์ž๋™ํ™”๋œ ๋นŒ๋“œ๋‚˜ ๋ฐฐํฌ ์ž‘์—…์„ ๋ณดํ†ต CI/CD๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

์ผ๋ฐ˜์ ์ธ ํ”Œ๋กœ์šฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  1. ์ƒˆ๋กœ์šด ๋ฒ„์ „์˜ ์ฝ”๋“œ์™€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ํ•จ๊ป˜ Github์™€ ๊ฐ™์€ ํ˜•์ƒ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์— Push ํ•œ๋‹ค.
  2. ๋นŒ๋“œ ๋„๊ตฌ์—์„œ ํŠน์ • ์‹œ๊ฐ„์— ํ˜•์ƒ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์œผ๋กœ๋ถ€ํ„ฐ ์ฝ”๋“œ๋ฅผ Pullํ•ด์„œ ํ†ตํ•ฉํ•œ ํ›„์—, ์ž๋™์œผ๋กœ ๋นŒ๋“œํ•˜๊ณ  ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  3. ํ…Œ์ŠคํŠธ ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋”ฐ๋กœ ๋กœ๊ทธ ํŒŒ์ผ์— ๋ฆฌํฌํŒ…ํ•˜๊ณ , ๋นŒ๋“œ๋œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์Šคํ…Œ์ด์ง• ํ™˜๊ฒฝ์— ์ž๋™์œผ๋กœ ๋ฐฐํฌํ•œ๋‹ค.
  4. QA ํ…Œ์Šคํ„ฐ๊ฐ€ ์Šคํ…Œ์ด์ง• ํ™˜๊ฒฝ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ , ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋ฉด ์šด์˜ ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•œ๋‹ค.

 

Netflix์˜ ๊ฒฝํ—˜์ด ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ์ƒํƒœ๊ณ„๋กœ

Micro Service๋ฅผ ๊ตฌ์ถ•ํ•˜๋ฉด์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ๋„ทํ”Œ๋ฆญ์Šค๊ฐ€ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋งŽ์€ ๊ธฐ์—ฌ๋ฅผ ํ–ˆ๋‹ค๊ณ  ํ•œ๋‹ค.

Netflix OSS๋Š” Netflix๊ฐ€ Micro Service๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์šด์˜ํ•˜๋ฉด์„œ ์ƒ๊ธด ๋…ธํ•˜์šฐ๋ฅผ ์˜คํ”ˆ์†Œ์Šค๋กœ ๊ณต๊ฐœํ•œ ๊ฒƒ์ด๋‹ค.
์ด๋กœ ์ธํ•ด, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ์ „ํ˜•์ ์ธ ํŒจํ„ด์œผ๋กœ ์ž๋ฆฌ ์žก์•˜๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, API G/W, Service Discovery, Monitoring, Tracing ๋“ฑ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ๊ด€๋ฆฌ ๋ฐ ์šด์˜ํ•˜๊ธฐ ์œ„ํ•œ ํ”Œ๋žซํผ ํŒจํ„ด์œผ๋กœ ์ถ”ํ›„์— ์ด๋Ÿฌํ•œ ํŒจํ„ด์„ ์ ์šฉํ•œ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ์˜คํ”ˆ ์†Œ์Šค๊ฐ€ ์ƒ๊ฒจ๋‚˜๊ฒŒ ๋˜์—ˆ๋‹ค.

 

Spring Cloud (Spring Boot + Netflix OSS)

Netflix OSS๋ฅผ ๋” ์‰ฝ๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๋„๋ก Spring ์ง„์˜์—์„œ๋Š” ๊ธฐ์กด Spring Boot์—์„œ ์ž˜ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก Netflix OSS ๋ชจ๋“ˆ๋“ค์„ Spring Framework๋กœ ๊ฐ์‹ธ์„œ Spring Cloud๋ผ๋Š” ๋ช…์นญ์œผ๋กœ ๋ฐœํ‘œํ–ˆ๋‹ค.

https://spring.io/cloud

https://spring.io/cloud

 

 

Service Discovery ํŒจํ„ด

MSA์™€ Cloud๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ ํ™˜๊ฒฝ์—์„œ Auto Scaling๋“ฑ์— ์˜ํ•ด์„œ ์„œ๋น„์Šค๊ฐ€ ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜์˜ ๋ฐฐํฌ๋กœ ์ธํ•ด,
์„œ๋น„์Šค์˜ IP๊ฐ€ Dynamicํ•˜๊ฒŒ ๋ณ€๊ฒฝ๋˜๋Š” ์ผ์ด ๋งŽ์•„์ง€๊ฒŒ ๋๋‹ค.

 

๋”ฐ๋ผ์„œ, ์„œ๋น„์Šค ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์„œ๋น„์Šค์˜ ์œ„์น˜ ์ฆ‰, IP์ฃผ์†Œ์™€ Port๋ฅผ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๊ฒƒ์„ Service Discovery ํŒจํ„ด์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

Client Side Discovery

https://www.nginx.com/blog/service-discovery-in-a-microservices-architecture/

Client Side Discovery๋Š” ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด Service Client๊ฐ€ Service Registry์—์„œ ์„œ๋น„์Šค์˜ ์œ„์น˜๋ฅผ ์•Œ์•„๋‚ด๊ณ  ํ˜ธ์ถœ ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

 

Server Side Discovery

Server Side Discovery๋Š” ํ˜ธ์ถœ ๋˜๋Š” ์„œ๋น„์Šค ์•ž์— ์ผ์ข…์˜ Proxy ์„œ๋ฒ„(๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ)๋ฅผ ๋ฐฐ์น˜ํ•˜๊ณ , Service Client๋Š” Proxy์ธ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๊ฐ€ Service Registry๋กœ๋ถ€ํ„ฐ ๋“ฑ๋ก๋œ ์„œ๋น„์Šค์˜ ์œ„์น˜๋ฅผ ์•Œ์•„๋‚ด์–ด, ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ผ์šฐํŒ… ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

AWS์˜ ELB๊ฐ€ ๋Œ€ํ‘œ์ ์ธ Server Side Discovery์ด๋‹ค!

 

 

Service Registry

์ด์ œ, Service Discovery ํŒจํ„ด์— ์‚ฌ์šฉ๋˜๋Š” Service Registry๋Š” Netfilx OSS์˜ Eureka๊ฐ€ ๋Œ€ํ‘œ์ ์ธ ์„œ๋น„์Šค์ด๋‹ค.

๊ฐ ์„œ๋น„์Šค Instance๊ฐ€ ๋กœ๋”ฉ๋  ๋•Œ ์ž์‹ ์˜ ์„œ๋น„์Šค ์ด๋ฆ„๊ณผ ํ• ๋‹น๋œ IP ์ฃผ์†Œ๋ฅผ Service Registry์— ๋“ฑ๋กํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•ด๋‹น ์„œ๋น„์Šค๋ช…์„ ํ˜ธ์ถœํ•  ๋•Œ ๋ผ์šฐํ„ฐ๊ฐ€ Service Registry๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ํ•ด๋‹น ์„œ๋น„์Šค์˜ ์ด๋ฆ„๊ณผ ๋งคํ•‘๋œ IP ์ •๋ณด๋ฅผ ํ™•์ธํ•œ ํ›„ ํ˜ธ์ถœํ•œ๋‹ค.

 

์ด๋ ‡๊ฒŒ, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๊ฐ€ ์ฒ˜์Œ ์‹คํ–‰๋  ๋•Œ ์ž์‹ ์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ Service Registry์— ์ €์žฅํ•˜๊ณ , ์„œ๋น„์Šค๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ์œ„์น˜ ์ •๋ณด๋ฅผ ์‚ญ์ œํ•œ๋‹ค.

 

MSA์™€ Spring Cloud์˜ ์—ฐ๊ณ„ ํ๋ฆ„

  1. ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๋Š” ์ธํ”„๋ผ์— ์ข…์†๋˜์ง€ ์•Š๋„๋ก DB, ํŒŒ์ผ ๋“ฑ ์—ฌ๋Ÿฌ ์„ค์ • ์ •๋ณด๋ฅผ ํ˜•์ƒ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์— ์—ฐ๊ณ„๋œ Config Server์—์„œ ๊ฐ€์ ธ์™€ ์„ค์ • ์ •๋ณด๋ฅผ ์ฃผ์ž…ํ•œ๋‹ค.
  2. ๋กœ๋”ฉ๊ณผ ๋™์‹œ์— Service Registry์— ์ž์‹ ์˜ ์„œ๋น„์Šค๋ช…๊ณผ ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผ๋กœ๋ถ€ํ„ฐ ํ• ๋‹น๋ฐ›์€ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋งคํ•‘ํ•˜์—ฌ ๋“ฑ๋กํ•œ๋‹ค.
  3. ํด๋ผ์ด์–ธํŠธ๊ฐ€ API Gateway๋ฅผ ํ†ตํ•ด ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์— ์ ‘๊ทผํ•˜๊ณ , ์ด๋•Œ API ๊ฒŒ์ดํŠธ์›จ์ด๋Š” ์ ์ ˆํ•œ ๋ผ์šฐํŒ… ๋ฐ ๋ถ€ํ•˜ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  4. ๋˜ํ•œ, API Gateway์—์„œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์ฃผ์†Œ๋ฅผ ์•Œ์•„๋‚ด๊ธฐ ์œ„ํ•ด Service Registry์—๊ฒŒ ์š”์ฒญํ•˜์—ฌ ์ฃผ์†Œ๋ฅผ ์•Œ์•„๋‚ธ๋‹ค.
  5. ๋™์‹œ์— API Gateway๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ฐ ์„œ๋น„์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ๊ถŒํ•œ ์„œ๋น„์Šค์™€ ์—ฐ๊ณ„ํ•˜์—ฌ ์ธ์ฆ/์ธ๊ฐ€ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  6. ์ด๋Ÿฌํ•œ, ๋ชจ๋“  ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„์˜ ํ˜ธ์ถœ ํ๋ฆ„์€ Monitoring Service์™€ Tracing(์ถ”์ ) Service์— ์˜ํ•ด ๋ชจ๋‹ˆํ„ฐ๋ง๋œ๋‹ค.

 

์ด๋Ÿฌํ•œ ํŒจํ„ด์€ Spring Cloud ์ด์™ธ์—๋„ ์—ฌ๋Ÿฌ ํด๋ผ์šฐ๋“œ ์ œ๊ณต์—…์ฒด์ธ AWS, Azure, GCP ๋“ฑ์—์„œ๋„ ์œ ์‚ฌํ•œ ํ˜•ํƒœ๋กœ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค.

 

 

BFF(Backend For Frontend)

์ตœ๊ทผ์—๋Š” PC ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค์–‘ํ•œ ์žฅ์น˜ ๋ฐ ํ”Œ๋žซํผ (Web, Android, iOS)์„ ์ง€์›ํ•˜๋ฉด์„œ ๋‹ค์–‘ํ•œ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•ด ํŠนํ™”๋œ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ์ด ์ƒ๊ธด๋‹ค.

์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ ํ˜•ํƒœ์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์—ฌ๋Ÿฌ API์˜ Response ๊ฐ’์„ ์กฐ์ž‘ํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•˜๋ฉฐ, Frontend์—์„œ ๋ณต์žกํ•œ ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์„ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋ฉฐ, ์ฝ”๋“œ ๋ฒ ์ด์Šค๊ฐ€ ๊ฑฐ๋Œ€ํ•ด์ง€๊ณ  ๋ณต์žกํ•ด์ง€๋ฉด์„œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ UI ๋ Œ๋”๋ง์ด ๋Š๋ ค์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

์ด๋Ÿฐ ๋ฌธ์ œ๋“ค์€ API๋ฅผ Direct๋กœ ์˜์กดํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋ฉฐ, Backend For Frontend ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ์œ„ํ•œ ๋ฐฑ์—”๋“œ ์ค‘๊ฐ„ ์„œ๋ฒ„๋ฅผ ๊ตฌํ˜„ํ•จ์œผ๋กœ์จ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. 

๊ฐ ์žฅ์น˜๋“ค์˜ Entry Point๋ฅผ ํ•˜๋‚˜๋กœ ๋‘์ง€ ์•Š๊ณ , ํด๋ผ์ด์–ธํŠธ์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ํŠนํ™”๋œ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” BFF๋ฅผ ์•ž ๋‹จ์— ๋‘๊ณ  ๋’ค์— ํ†ตํ•ฉ์ ์ธ API G/W๋ฅผ ๋‘๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

BFF์˜ ์—ญํ• ์€?

  1. MSA ํ™˜๊ฒฝ์—์„œ API Endpoint๊ฐ€ ๋ถ„๋ฆฌ๋  ๋•Œ Follow Up
  2. ๋ธŒ๋ผ์šฐ์ €์™€ ๋–จ์–ด์งˆ ์ˆ˜ ์—†๋Š” CORS ์ฒ˜๋ฆฌ
  3. API๊ฐ€ ์ง์ ‘์ ์œผ๋กœ ์—ฌ๋Ÿฌ ํ”Œ๋žซํผ์— ๋งž์ถฐ์ค„ ํ•„์š” ์—†๊ฒŒ ํ•ด์คŒ 
  4. ํ”Œ๋žซํผ๋ณ„๋กœ ๋‹ค๋ฅธ ์ธ์ฆ ๋ฐฉ์‹ ์ฒ˜๋ฆฌ (iOS๋Š” FaceID๋ผ๋Š” Android์—๋Š” ์—†๋Š” ์ธ์ฆ ๋ฐฉ์‹์ด ์žˆ์Œ)
  5. ํ™”๋ฉด์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ํ•จ

 

GraphQL์„ ์‚ฌ์šฉํ•œ BFF

BFF๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌํ˜„์ฒด๋กœ GraphQL์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

GraphQL๋กœ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜๋ฉด POST ๋ฐฉ์‹์œผ๋กœ ์š”์ฒญ์ด ๋ฐœ์ƒํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ €์˜ ์บ์‹œ ๋Œ€์‹  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณตํ•ด์ฃผ๊ฒŒ ๋œ๋‹ค.

๋˜ํ•œ, API ์‘๋‹ต๊ฐ’์„ BFF์—์„œ ๋ฐ›์•„์„œ ๊ฐ ํ”Œ๋žซํผ(FE)์—์„œ ์›ํ•˜๋Š” ๋ชจ๋ธ ํƒ€์ž…์œผ๋กœ Convert ํ•ด์ค˜์„œ Response ํ•ด์ค€๋‹ค.

 

 

CQRS ํŒจํ„ด

์ฟ ํŒก, ๋ฐฐ๋ฏผ ๋“ฑ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋ฉด CUD ์ž‘์—…๋ณด๋‹ค Read ์ž‘์—…์ด ํ›จ์”ฌ ๋งŽ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋น„์ง€๋‹ˆ์Šค ๋ชจ๋ธ์—์„œ ํ•˜๋‚˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์— CRUD ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ํ•˜๋„๋ก ๊ตฌ์„ฑํ•˜๋ฉด ์กฐํšŒ ์š”์ฒญ ๋นˆ๋„๊ฐ€ ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋ช…๋ น ๊ธฐ๋Šฅ๋„ ํ™•์žฅํ•ด์•ผ ํ•ด์„œ ํšจ์œจ์ ์ด์ง€ ์•Š๋‹ค.

๋˜ํ•œ, ์“ฐ๊ธฐ ํŠธ๋žœ์žญ์…˜ ์ž‘์—… ์‹œ์— ํ…Œ์ด๋ธ”์— Lock ๋งค์ปค๋‹ˆ์ฆ˜์ด ์ ์šฉ๋œ๋‹ค๋ฉด ์กฐํšŒ ์‘๋‹ต ์†๋„๊ฐ€ ๋–จ์–ด์งˆ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ CQRS(Command Query Responsibility Segregation) ํŒจํ„ด์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

ํ•˜๋‚˜์˜ ์ €์žฅ์†Œ์— ์“ฐ๊ธฐ ๋ชจ๋ธ๊ณผ ์ฝ๊ธฐ ๋ชจ๋ธ์„ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€ํ™”์‹œ์ผœ ์“ฐ๊ธฐ ์„œ๋น„์Šค์™€ ์กฐํšŒ ์„œ๋น„์Šค๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
๋” ํฐ ์‹œ์Šคํ…œ์—์„œ๋Š” ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์“ฐ๊ธฐ ํŠธ๋žœ์žญ์…˜์šฉ ์ €์žฅ์†Œ์™€ ์กฐํšŒ์šฉ ์ €์žฅ์†Œ๋ฅผ ๋”ฐ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

DB ๋‹จ๊ณ„์—์„œ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ ์šฉํ•ด๋ณด์ง€๋Š” ๋ชปํ–ˆ์ง€๋งŒ, ์ด๊ฒƒ์„ ์ฝ”๋“œ๋‹จ๊ณ„๋กœ ์‘์šฉํ•ด์„œ Write ์ž‘์—…์šฉ ์„œ๋น„์Šค ๋ฐ DAO์™€ Read ์ž‘์—…์šฉ ์„œ๋น„์Šค ๋ฐ DAO๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฐœ๋…์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•ด๋ณธ์ ์€ ์žˆ์—ˆ๊ณ  ๊ฐœ์ธ์ ์œผ๋กœ ๋งค์šฐ ์ข‹์•„ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.