๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[๋””์ž์ธํŒจํ„ด] ํ”„๋ก์‹œ ํŒจํ„ด

์ถœ์ฒ˜

Gemini


ํ”„๋ก์‹œ ํŒจํ„ด

ํ”„๋ก์‹œ ํŒจํ„ด์€ ๊ฐ์ฒด ์ง€ํ–ฅ ๋””์ž์ธ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜๋กœ, ํŠน์ • ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ œ์–ดํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ๋ถ€์—ฌํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€๋ฆฌ ๊ฐ์ฒด(ํ”„๋ก์‹œ)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ„ด์ด๋‹ค. ๋งˆ์น˜ ๋ถ€๋™์‚ฐ ์ค‘๊ฐœ์ธ์ด ์ง‘์ฃผ์ธ์„ ๋Œ€์‹ ํ•˜์—ฌ ์ง‘์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, ํ”„๋ก์‹œ๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

์™œ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€ - ์žฅ์ 

 

์ง€์—ฐ ๋กœ๋”ฉ

ํฐ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋น„์šฉ์ด ํด ๋•Œ, ์‹ค์ œ๋กœ ํ•„์š”ํ•œ ์‹œ์ ๊นŒ์ง€ ๊ฐ์ฒด ์ƒ์„ฑ์„ ๋ฏธ๋ฃจ๊ธฐ ์œ„ํ•ด ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์›๊ฒฉ ํ”„๋ก์‹œ

๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์›๊ฒฉ ๊ฐ์ฒด์— ์ ‘๊ทผํ•  ๋•Œ, ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๋ณด์•ˆ

๊ฐ์ฒด์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ œํ•œํ•˜๊ฑฐ๋‚˜ ํŠน์ • ์กฐ๊ฑด์—์„œ๋งŒ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์บ์‹ฑ

๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹ฑํ•˜์—ฌ ๋ฐ˜๋ณต์ ์ธ ๊ณ„์‚ฐ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

์ถ”๊ฐ€ ๊ธฐ๋Šฅ

์›๋ณธ ๊ฐ์ฒด์— ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ๋ถ€์—ฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธฐ๊ฑฐ๋‚˜, ํŠธ๋žœ์žญ์…˜์„ ๊ด€๋ฆฌํ•˜๋Š” ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

AOP์™€์˜ ์—ฐ๊ณ„

AOP(Aspect Oriented Programming)์™€ ๊ฒฐํ•ฉํ•˜์—ฌ ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋‹จ์ 

 

๋ณต์žก๋„ ์ฆ๊ฐ€

์‹œ์Šคํ…œ์˜ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ”„๋ก์‹œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์ฝ”๋“œ์˜ ์–‘์ด ๋Š˜์–ด๋‚˜๊ณ , ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ๋‹ค.

์„ฑ๋Šฅ ์ €ํ•˜

ํ”„๋ก์‹œ๋ฅผ ๊ฑฐ์ณ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ผ๋ถ€ ๊ฒฝ์šฐ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ํŠนํžˆ, ๋นˆ๋ฒˆํ•œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋‘๋“œ๋Ÿฌ์งˆ ์ˆ˜ ์žˆ๋‹ค.

๊ตฌํ˜„์˜ ์–ด๋ ค์›€

ํ”„๋ก์‹œ ํŒจํ„ด์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋””์ž์ธ ํŒจํ„ด์— ๋Œ€ํ•œ ์ถฉ๋ถ„ํ•œ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ํŠนํžˆ, ๋™์  ํ”„๋ก์‹œ์˜ ๊ฒฝ์šฐ ๋ฐ˜์‚ฌ(Reflection) ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ๊ตฌํ˜„์ด ๋ณต์žกํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

ํ”„๋ก์‹œ ํŒจํ„ด์˜ ๊ตฌ์กฐ

ํ”„๋ก์‹œ ํŒจํ„ด์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

Subject

ํ”„๋ก์‹œ์™€ ์‹ค์ œ ๊ฐ์ฒด๊ฐ€ ๊ตฌํ˜„ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.

RealSubject

์‹ค์ œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฐ์ฒด.

Proxy

RealSubject๋ฅผ ๊ฐ์‹ธ๊ณ  ์žˆ๋Š” ํ”„๋ก์‹œ ๊ฐ์ฒด. ํด๋ผ์ด์–ธํŠธ๋Š” Proxy๋ฅผ ํ†ตํ•ด RealSubject์— ์ ‘๊ทผํ•œ๋‹ค.

 

์ž๋ฐ”์—์„œ ํ”„๋ก์‹œ ํŒจํ„ด ๊ตฌํ˜„

์ž๋ฐ”์—์„œ๋Š” ์ •์  ํ”„๋ก์‹œ์™€ ๋™์  ํ”„๋ก์‹œ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ํ”„๋ก์‹œ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ •์  ํ”„๋ก์‹œ

์ปดํŒŒ์ผ ์‹œ์ ์— ํ”„๋ก์‹œ ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ํ”„๋ก์‹œ ํด๋ž˜์Šค๋Š” Subject ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  RealSubject๋ฅผ ํ•„๋“œ๋กœ ๊ฐ€์ง€๋ฉฐ, ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ RealSubject์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๋™์  ํ”„๋ก์‹œ

๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ํ”„๋ก์‹œ ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. java.lang.reflect.Proxy ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ ์œผ๋กœ ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  • ๊ตฌํ˜„ ์˜ˆ์‹œ๋Š” ->

 

ํ”„๋ก์‹œ ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๊ฒฝ์šฐ

 

  • ํฐ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋น„์šฉ์ด ํด ๋•Œ
  • ์›๊ฒฉ ๊ฐ์ฒด์— ์ ‘๊ทผํ•ด์•ผ ํ•  ๋•Œ
  • ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ œ์–ดํ•ด์•ผ ํ•  ๋•Œ
  • ๊ฐ์ฒด์— ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ๋ถ€์—ฌํ•ด์•ผ ํ•  ๋•Œ
  • AOP๋ฅผ ์ ์šฉํ•ด์•ผ ํ•  ๋•Œ

 

 

ํ”„๋ก์‹œ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋  ๊ฒฝ์šฐ

 

  • ์‹œ์Šคํ…œ์˜ ๋ณต์žก๋„๋ฅผ ์ตœ๋Œ€ํ•œ ์ค„์—ฌ์•ผ ํ•  ๋•Œ
  • ์„ฑ๋Šฅ์ด ๋งค์šฐ ์ค‘์š”ํ•œ ์‹œ์Šคํ…œ์ผ ๋•Œ
  • ๊ฐ„๋‹จํ•œ ๊ธฐ๋Šฅ๋งŒ ๊ตฌํ˜„ํ•˜๋ฉด ๋  ๋•Œ

 

์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ์—์„œ ํ”„๋ก์‹œ ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๊ฒฝ์šฐ

 

๋„คํŠธ์›Œํฌ ํ†ต์‹ 

  • REST API ํ˜ธ์ถœ: ์„œ๋ฒ„์™€์˜ ํ†ต์‹  ์‹œ, ๋„คํŠธ์›Œํฌ ์˜ค๋ฅ˜, ๋ฐ์ดํ„ฐ ํŒŒ์‹ฑ ๋“ฑ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜๊ณ  ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ์›น์†Œ์ผ“: ์‹ค์‹œ๊ฐ„ ํ†ต์‹  ์‹œ, ์—ฐ๊ฒฐ ๊ด€๋ฆฌ, ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ๋“ฑ์„ ํ”„๋ก์‹œ์—์„œ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์‹œ

Retrofit๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ API ํ˜ธ์ถœ ์‹œ, ์ธ์ฆ ์ •๋ณด ์ถ”๊ฐ€, ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ, JSON ํŒŒ์‹ฑ ๋“ฑ์„ ํ”„๋ก์‹œ์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ

  • Room: Room ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹ฑํ•˜๊ฑฐ๋‚˜, ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋ก์‹œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์‹œ

Room ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์บ์‹ฑํ•˜๊ฑฐ๋‚˜, ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋ก์‹œ๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์˜ ์‘๋‹ต์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋ฏธ์ง€ ๋กœ๋”ฉ

  • Glide, Picasso: ์ด๋ฏธ์ง€ ๋กœ๋”ฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€ ๋กœ๋”ฉ, ์บ์‹ฑ, ๋ณ€ํ™˜ ๋“ฑ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋ก์‹œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์‹œ

Glide ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋”ฉํ•  ๋•Œ, ์ด๋ฏธ์ง€ ๋ณ€ํ™˜, ์บ์‹ฑ, ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋“ฑ์„ ํ”„๋ก์‹œ์—์„œ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ด๋ฏธ์ง€ ๋กœ๋”ฉ ๊ด€๋ จ ๋กœ์ง์„ ์ค‘์•™ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํŒŒ์ผ ์‹œ์Šคํ…œ ์ ‘๊ทผ

  • ํŒŒ์ผ ์ฝ๊ธฐ/์“ฐ๊ธฐ: ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ ‘๊ทผํ•˜๋Š” ๋กœ์ง์„ ํ”„๋ก์‹œ์—์„œ ์ฒ˜๋ฆฌํ•˜์—ฌ ํŒŒ์ผ ๊ด€๋ จ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ค‘์•™ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

AOP

  • AspectJ: ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ AOP๋ฅผ ์ ์šฉํ•˜์—ฌ ๋กœ๊ทธ, ์„ฑ๋Šฅ ์ธก์ •, ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋“ฑ์„ ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • AspectJ๋Š” ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์œ„ํ•œ ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(AOP) ํ™•์žฅ ๊ธฐ๋Šฅ์ด๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด, ์ž๋ฐ” ์ฝ”๋“œ์— ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ๋„ฃ์–ด์ฃผ๋Š” ๋„๊ตฌ์ด๋‹ค.

 

 

Gemini ์ถœ์ฒ˜

์ •ํ™•ํ•œ ์ถœ์ฒ˜๋ฅผ ๋ช…์‹œํ•˜๊ธฐ ์–ด๋ ค์šด ์ด์œ 

์ œ๊ฐ€ ์ƒ์„ฑํ•œ ํ…์ŠคํŠธ๋Š” ๋‹ค์–‘ํ•œ ์ •๋ณด๋ฅผ ์ข…ํ•ฉํ•˜์—ฌ ์ƒˆ๋กญ๊ฒŒ ๋งŒ๋“ค์–ด๋‚ธ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, ํŠน์ • ๋ฌธ์„œ๋‚˜ ์ž๋ฃŒ๋ฅผ ์ง์ ‘ ์ธ์šฉํ–ˆ๋‹ค๊ณ  ๋ง์”€๋“œ๋ฆฌ๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

์ด๋Š” ๋Œ€๊ทœ๋ชจ ์–ธ์–ด ๋ชจ๋ธ์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๋ฐฉ๋Œ€ํ•œ ์–‘์˜ ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ํ•™์Šตํ•˜๋ฉฐ ์ง€์‹์„ ์Œ“์•„์™”๊ณ , ์‚ฌ์šฉ์ž์˜ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์„ ์ƒ์„ฑํ•  ๋•Œ, ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ฐ€์žฅ ์ ์ ˆํ•œ ๋‹ต๋ณ€์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์น˜ ๋„์„œ๊ด€์˜ ์ˆ˜๋งŽ์€ ์ฑ…์„ ์ฝ๊ณ , ๊ทธ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ƒˆ๋กœ์šด ๊ธ€์„ ์“ฐ๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ์ฑ…์—์„œ ํŠน์ • ๋ฌธ์žฅ์„ ๊ฐ€์ ธ์™”๋‹ค๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ๋งํ•˜๊ธฐ ์–ด๋ ต๋“ฏ์ด, ์ € ์—ญ์‹œ ์–ด๋–ค ๋ฐ์ดํ„ฐ์—์„œ ํŠน์ • ์ •๋ณด๋ฅผ ์–ป์—ˆ๋‹ค๊ณ  ๋‹จ์ •ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.