[Spring] ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ

2021. 9. 10. 08:00ใ†Back-End ์ž‘์—…์‹ค/Spring Framework

728x90
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š”? ์ฃผ๋‹ˆํ•˜๋ž‘ ์ž…๋‹ˆ๋‹ค.

์˜ค๋Š˜์€ Spring์˜ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ ํ•ด ๋ณด๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

์ด ๋‚ด์šฉ์€ ์ธํ”„๋Ÿฐ - ๊น€์˜ํ•œ ๊ฐ•์‚ฌ๋‹˜์˜ ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ •๋ฆฌ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

 

 

๐Ÿ“‹ ๋ชฉ์ฐจ


01. [Spring] ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ
02. [Spring] ์ข‹์€ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์˜ 5๊ฐ€์ง€ ์›์น™ (SOLID)
03. 
[Spring] ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์™€ ์Šคํ”„๋ง   
04. [Spring] OCP์™€ DIP ๊ณ ๋ คํ•˜๊ธฐ
05. [Spring] ๊ฐ์ฒด ์ง€ํ–ฅ ์›๋ฆฌ ์ ์šฉ - ์ƒˆ๋กœ์šด ํ• ์ธ ์ •์ฑ… ๊ฐœ๋ฐœ
06. 
[Spring] AppConfig ๋ฆฌํŒฉํ„ฐ๋ง    
07. [Spring] Ioc, DI Container  
08. [Spring] ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ  
09. [Spring] ์‹ฑ๊ธ€ํ†ค ์ปจํ…Œ์ด๋„ˆ  
10. [Spring] Component Scan And Auto wired Start
11. 
[Spring] ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… ๋ฐฉ๋ฒ•    
12. [Spring] Bean Life Cycle Call Back
13. 
[Spring] Bean Scope




 


 

 

 

 

๐Ÿ“Œ JAVA์˜ ์ถ”์šด ๊ฒจ์šธ๊ณผ Spring(๋ด„)์˜ ํƒ„์ƒ


์˜›๋‚  JAVA์— ์ •ํ†ต ๊ธฐ์ˆ (ํ‘œ์ค€ ๊ธฐ์ˆ )๋กœ EJB (Enterprise Java Beans)๋ผ๋Š” ๊ธฐ์ˆ ์ด ํƒœ์–ด๋‚˜๊ฒŒ ๋œ ๊ฒƒ์ด์—์š”.

์ด๊ฒƒ์€ ์˜คํ”ˆ์†Œ์Šค๋„ ์•„๋‹ˆ์˜€๊ณ , ์—„์ฒญ๋‚˜๊ฒŒ ๋น„์‹ผ Server๋ฅผ ์‚ฌ์•ผ์ง€๋งŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ธฐ์ˆ ์ด์—์š”.

์ด ๊ธฐ์ˆ ์€ ๋ถ„์‚ฐ ๊ธฐ๋Šฅ์ด ๋งค์šฐ ์ข‹๋‹ค๋Š” ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๋‹ต๋‹ˆ๋‹ค!

 

ํ•˜์ง€๋งŒ, ์ด ๊ธฐ์ˆ ์— ๊ทน์•…์˜ ๋‹จ์ ์€ ๋ฌด์—‡์ด์˜€๋ƒ?

๊ทธ๊ฒƒ์€ ๋ฐ”๋กœ ๊ฐœ๋ฐœ์ž๋“ค์ด ์‚ฌ์šฉํ•˜๊ธฐ์— ์–ด๋ ต๊ณ , ๋ณต์žกํ•˜๊ณ , ๋Š๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์ž…๋‹ˆ๋‹ค.

 

์ด๊ฒƒ์„ ๊นจ๊ธฐ ์œ„ํ•ด ๋‘ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋‚˜์™”์œผ๋‹ˆ Spring์˜ ์‹œ์ดˆ๋ฅผ ๋งŒ๋“  Rod Johnson๊ณผ Hibernate๋ฅผ ๋งŒ๋“  Gavin King๊ฐ€ ๋“ฑ์žฅํ•˜๊ฒŒ ๋œ ๊ฒƒ์ด์—์š”.

 

 

 

    ๐Ÿ“Spring

์ด๊ฒƒ์€ EJB ๋ณด๋‹ค ๋‹จ์ˆœํ•˜๊ณ , ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“  ๊ธฐ์ˆ ์ธ ๊ฒƒ์ด์—์š”.

  • EJB Container ๋Œ€์ฒด
  • ๋‹จ์ˆœํ•จ์˜ ์Šน๋ฆฌ
  • ํ˜„์žฌ ์‚ฌ์‹ค์ƒ ํ‘œ์ค€ ๊ธฐ์ˆ 

 

 

    ๐Ÿ“Hibernate

  • EJB Entity Bean ๊ธฐ์ˆ  ๋Œ€์ฒด
  • JPA(Java Persistence API)์˜ ์ƒˆ๋กœ์šด ํ‘œ์ค€ ์ •์˜

 

 

์ถœ์ฒ˜: ์ธํ”„๋Ÿฐ - ๊น€์˜ํ•œ ๊ฐ•์‚ฌ : ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ

 

 

 

์ถœ์ฒ˜: ์ธํ”„๋Ÿฐ - ๊น€์˜ํ•œ ๊ฐ•์‚ฌ : ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ

 

JPA๋Š” ORM ์ง„์˜์„ ๊ฑฐ์˜ ๋‹ค ์ ์œ  ํ–ˆ๋‹ค๊ณ  ๋ด๋„ ๊ณผ์–ธ์ด ์•„๋‹ ์ •๋„๋ž๋‹ˆ๋‹ค! 

๊ทธ๋ฆฌ๊ณ , Hibernate๋Š” ๊ตฌํ˜„์ฒด์˜ 80% ์ •๋„๋ฅผ ์ ์œ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

 

๐Ÿ“Œ Spring(๋ด„) History


2002๋…„ ๋กœ๋“œ ์กด์Šจ์€ J2EE Design and Development์ด๋ผ๋Š” ์ฑ… ์ถœ๊ฐ„์„ ํ•œ ๊ฒƒ์ด์—์š”.

์ด ์ฑ…์€ ์•„๋ž˜ ๋‚ด์šฉ์„ ์ค‘์ ์ ์œผ๋กœ ๋‹ค๋ฃจ์—ˆ๋‹ต๋‹ˆ๋‹ค!

  • EJB์˜ ๋ฌธ์ œ์  ์ง€์ 
  • EJB ์—†์ด๋„ ์ถฉ๋ถ„ํžˆ ๊ณ ํ’ˆ์งˆ์˜ ํ™•์žฅ ๊ฐ€๋Šฅ Application ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๊ณ , 30,000Line ์ด์ƒ์˜ ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ์„ ์˜ˆ์ œ Code๋กœ ์ฆ๋ช…
  • Spring Core ๊ธฐ๋ฐ˜ Code๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค.
  • Bean Factory, Application Context, POJO, ์ œ์–ด์˜ ์—ญ์ „, ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… ํฌํ•จ
  • ์ฑ…์ด ์œ ๋ช…ํ•ด ์ง€๋ฉด์„œ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ฑ…์˜ ์˜ˆ์ œ Code๋กœ Project์— ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘

 

Spring์€ Core Code ์ƒ๋‹น์ˆ˜๋ฅผ ์œ ๊ฒ ํœ ๋Ÿฌ๋ผ๋Š” ๋ถ„์ด ์ง€๊ธˆ๋„ ๊ฐœ๋ฐœํ•˜๊ณ  ๊ณ„์‹  ๊ฒƒ์ด์—์š”.

๋˜ํ•œ Spring ์ด๋ฆ„์€ ์ „ํ†ต์ ์ธ J2EE(EJB)๋ผ๋Š” ๊ฒจ์šธ์„ ๋„˜์–ด ์ƒˆ๋กœ์šด ๋ด„ ์ฆ‰, ์‹œ์ž‘์ด๋ผ๋Š” ๋œป์œผ๋กœ ์ง€์—ˆ๋‹ค๊ณ  ํ•˜๋„ค์š”!

 

 

    ๐Ÿ“Release

2003๋…„ Spring Framework 1.0 ์ถœ์‹œ - XML ๊ธฐ๋ฐ˜
2006๋…„ Spring Framework 2.0 ์ถœ์‹œ - XML ํŽธ์˜ ๊ธฐ๋Šฅ ์ง€์›
2009๋…„ Spring Framwork 3.0 ์ถœ์‹œ - JAVA Code๋กœ ์„ค์ •
2013๋…„ Spring Framework 4.0 ์ถœ์‹œ - JAVA8
2014๋…„ Spring Boot 1.0 ์ถœ์‹œ
2017๋…„ Spring Framework 5.0 / Spring Boot 2.0 ์ถœ์‹œ - Re Active Programing ์ง€์›
(Node.js ์ฒ˜๋Ÿผ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ)
2020๋…„ 9์›” ํ˜„์žฌ Spring Framework 5.2.x, Spring Boot 2.3.x ์ถœ์‹œ

 

Spring Framework๋งŒ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ๋‹จ์ ์€ ๋ฐฐํฌ์™€ ์„ค์ •์ด ๋งค์šฐ ๋ณต์žกํ–ˆ๋˜ ๊ฒƒ์ด์—์š”.

 

 

 

 

๐Ÿ“Œ Spring์ด๋ž€?


    ๐Ÿ“Spring ์ƒํƒœ๊ณ„

 

์ถœ์ฒ˜: ์ธํ”„๋Ÿฐ - ๊น€์˜ํ•œ ๊ฐ•์‚ฌ : ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ

๋ฐ˜์‘ํ˜•

 

  1. Spring Framwork : Spring ๊ธฐ์ˆ ์˜ ํ•ต์‹ฌ
  2. Spring Boot : ์—ฌ๋Ÿฌ Spring ๊ธฐ์ˆ ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ด์š”ํ•˜๊ฒŒ ๋„์™€์ฃผ๋Š” ์—ญํ• 
  3. Spring Data : DB์˜ ๊ธฐ๋ณธ CRUD๋ฅผ ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์—ญํ•  (Spring Data JPA๊ฐ€ ์†ํ•ด ์žˆ๋‹ค.)
  4. Spring Security : ๋ณด์•ˆ ๊ด€๋ จ
  5. Spring Session : ์„ธ์…˜ ๊ด€๋ จ
  6. Spring Rest Docs : API ๋ฌธ์„œ๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์—ญํ• 

 

 

 

    ๐Ÿ“Spring Framwork

์ด๊ฒƒ์€ ์•„์ฃผ์•„์ฃผ ์ค‘์š”ํ•œ ๊ฒƒ์ด์—์š”!

  1. ํ•ต์‹ฌ ๊ธฐ์ˆ  : Spring DI Container, AOP, Event, etc
  2. ์›น ๊ธฐ์ˆ  : Spring MVC, Spring WebFlux
  3. ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ธฐ์ˆ  : Transaction, JDBC, ORM / XML ์ง€์›
  4. ๊ธฐ์ˆ  ํ†ตํ•ฉ : Cache, Email, Remote Access, Scheduling
  5. TEST : Spring ๊ธฐ๋ฐ˜ Test ์ง€์›
  6. ์–ธ์–ด : Kotlin, ๊ทธ๋ฃจ๋น„

์ตœ๊ทผ์—๋Š” Spring Boot๋ฅผ ํ†ตํ•ด Spring Framwork ๊ธฐ์ˆ ๋“ค์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์–ด์š”!

 

 

 

    ๐Ÿ“Spring Boot

์ด๊ฒƒ์€ Spring Framwork์™€ ๋ณ„๋„๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ , Framwork๋ฅผ ํŽธํ•˜๊ฒŒ ์“ฐ๊ฒŒ ๋„์™€์ฃผ๋Š” ๋„๊ตฌ์ธ ๊ฒƒ์ด์—์š”.

  1. Spring Framework๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›, ์ตœ๊ทผ์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ
  2. ๋‹จ๋…์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” Application ์‰ฝ๊ฒŒ ์ƒ์„ฑ ๊ฐ€๋Šฅ
  3. Tomcat ๊ฐ™์€ Web Server ๋‚ด์žฅ์„ ํ†ตํ•ด ๋ณ„๋„ Web Server ์„ค์น˜๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Œ
  4. ์†์‰ฌ์šด Build ๊ตฌ์„ฑ์„ ์œ„ํ•œ starter ์ข…์†์„ฑ ์ œ๊ณต
  5. Spring๊ณผ 3rd Party(์™ธ๋ถ€) Library ์ž๋™ ๊ตฌ์„ฑ
  6. ๋ฉ”ํŠธ๋ฆญ, ์ƒํƒœ ํ™•์ธ, ์™ธ๋ถ€ ๊ตฌ์„ฑ ๊ฐ™์€ ํ”„๋กœ๋•์…˜ ์ค€๋น„ ๊ธฐ๋Šฅ ์ œ๊ณต
    ์šด์˜ ํ™˜๊ฒฝ์˜ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ธฐ๋Šฅ ์ œ๊ณต
  7. ๊ด€๋ก€์— ์˜ํ•œ ๊ฐ„๊ฒฐํ•œ ์„ค์ • ๊ฐ€๋Šฅ

2๋ฒˆ๊ณผ 3๋ฒˆ์„ ๋ฌถ์–ด์„œ Build์™€ Server์— ๋„์šฐ๋Š” ์ผ๋ จ์˜ ๊ณผ์ •์„ ์ฝ”๋“œ ๋ช‡ ์ค„๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ ๊ฒƒ์ด์—์š”.

 

 

    ๐Ÿ“Spring์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค๋ฉด?

Spring์ด๋ผ๋Š” ๋‹จ์–ด๋Š” ๋ฌธ๋งฅ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด์—์š”.

  • Spring DI Container ๊ธฐ์ˆ 
  • Spring Framwork
  • Spring Boot, Framwork ๋“ฑ์„ ๋ชจ๋‘ ํฌํ•จํ•œ Spring ์ƒํƒœ๊ณ„๋ฅผ ์ง€์นญ

 

 

 

 

    ๐Ÿ“Spring์„ ๋งŒ๋“  ์ด์œ 

Spring ํ•ต์‹ฌ ๊ฐœ๋… / ์ปจ์…‰์€ ๋ฌด์—‡์ผ๊นŒ์š”?

  • Web Application์„ ๋งŒ๋“ค๊ณ , DB ์ ‘๊ทผ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ•ด ์ฃผ๋Š” ๊ธฐ์ˆ ์ผ๊นŒ?
  • ์ „์ž์ •๋ถ€ Framwork์ผ๊นŒ?
  • Web Server๋„ ์ž๋™์œผ๋กœ ๋„์›Œ์ฃผ๋Š” ํŽธํ•œ ๊ฒƒ์ผ๊นŒ?
  • Cloud, Micro Service๋ฅผ ์œ„ํ•œ ๊ฒƒ์ผ๊นŒ?

์œ„์˜ ๊ฒƒ๋“ค์€ Core ๊ฐœ๋…์ด ์•„๋‹ˆ๊ณ , ๊ทธ์— ๋”ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฌผ๋กœ ๋‚˜์˜จ ๊ฒƒ๋“ค์ธ ๊ฒƒ์ด์—์š”!

 

 

Spring์˜ ์ง„์งœ ํ•ต์‹ฌ์€ ๋ฌด์—‡์ผ๊นŒ์š”?

  • Spring์€ JAVA ์–ธ์–ด ๊ธฐ๋ฐ˜์˜ Framwork
  • JAVA ์–ธ์–ด์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์ธ ๊ฐ์ฒด ์ง€ํ–ฅ์„ ์ง€์›ํ•œ๋‹ค.
  • Spring ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด๊ฐ€ ๊ฐ€์ง„ ๊ฐ•๋ ฅํ•œ ํŠน์ง•์„ ์‚ด๋ ค๋‚ด๋Š” Framwork
  • Spring์€ ์ข‹์€ ๊ฐ์ฒด ์ง€ํ–ฅ Application์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” Framwork

 

 

 

 

๐Ÿ“Œ ์ข‹์€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ?


    ๐Ÿ“๊ฐ์ฒด ์ง€ํ–ฅ ํŠน์ง•

  1. ์ถ”์ƒํ™”
  2. ์บก์Šํ™”
  3. ์ƒ์†
  4. ๋‹คํ˜•์„ฑ

 

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ "๊ฐ์ฒด"๋“ค์˜ ๋ชจ์ž„์œผ๋กœ ํŒŒ์•…ํ•˜๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ์ด์—์š”. ๊ฐ๊ฐ์˜ ๊ฐ์ฒด๋Š” Message๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ณ , ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.(ํ˜‘๋ ฅ)

๋˜ํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํ”„๋กœ๊ทธ๋žจ์„ ์œ ์—ฐํ•˜๊ณ , ๋ณ€๊ฒฝ์ด ์šฉ์ดํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€๊ทœ๋ชจ ๊ฐœ๋ฐœ์— ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ต๋‹ˆ๋‹ค.

 

 

    ๐Ÿ“์œ ์—ฐํ•˜๊ณ , ๋ณ€๊ฒฝ์ด ์šฉ์ดํ•˜๋‹ค๋Š” ๊ฒƒ์€?

  • LEGO Block ์กฐ๋ฆฝํ•˜๋“ฏ
  • Keyboard, Mouth๋ฅผ ๊ฐˆ์•„ ๋ผ์šฐ๋“ฏ
  • ์ปดํ“จํ„ฐ ๋ถ€ํ’ˆ์„ ๊ฐˆ์•„ ๋ผ์šฐ๋“ฏ
  • Component๋ฅผ ์‰ฝ๊ณ  ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•˜๋ฉด์„œ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ

 

 

    ๐Ÿ“๋‹คํ˜•์„ฑ

๋‹คํ˜•์„ฑ๊ณผ ์‹ค์„ธ๊ณ„๋ฅผ ํ•œ๋ฒˆ ๋น„์œ  ํ•ด ๋ณผ๊ฒŒ์š”!

  • ์—ญํ• ๊ณผ ๊ตฌํ˜„์œผ๋กœ ์„ธ์ƒ์„ ๊ตฌ๋ถ„

 

์ถœ์ฒ˜: ์ธํ”„๋Ÿฐ - ๊น€์˜ํ•œ ๊ฐ•์‚ฌ : ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ

 

 

์œ„์™€ ๊ฐ™์€ ์ƒํ™ฉ์œผ๋กœ ํ•œ๋ฒˆ ์ƒ๊ฐ ํ•ด ๋ณผ๊ฒŒ์š”.

์—ฌ๊ธฐ์„œ ์—ญํ• ์€ ์šฐ๋ฆฌ JAVA์—์„œ Interface๋กœ ์ƒ๊ฐ ํ•ด ์ฃผ์„ธ์š”!

์šด์ „์ž๋Š” K3๋ฅผ ํƒ€๋‹ค๊ฐ€ ์•„๋ฐ˜๋–ผ๋กœ ์ฐจ๋ฅผ ๋ฐ”๊ฟ”๋„ ์šด์ „์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”. ์ž๋™์ฐจ๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ ์šด์ „์ž์—๊ฒŒ ์˜ํ–ฅ์€ ์—†์œผ๋‹Œ๊นŒ์š”!

๋‹คํ˜•์„ฑ ๊ด€์ ์—์„œ ๊ฐ ์ฐจ๋“ค์€ ์ฐจ๋™์ฐจ ์—ญํ• ์„ ๊ตฌํ˜„ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์šด์ „์ž๋Š” ๋‹ค๋ฅธ ๋ฉดํ—ˆ์ฆ์„ ์ถ”๊ฐ€๋กœ ์ทจ๋“ํ•˜์ง€ ์•Š์•„๋„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

Client๋Š” ์ž๋™์ฐจ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ๋ชฐ๋ผ๋„ ๋˜๊ณ , ์ž๋™์ฐจ ์—ญํ• ๋งŒ ์žˆ๋‹ค๋ฉด Client์—๊ฒŒ ์˜ํ–ฅ์ด ๊ฐ€์ง€ ์•Š๋Š” ๊ฒƒ์ด์ง€์š”.

์ด๋ ‡๊ฒŒ ์—ญํ• ๊ณผ ๊ตฌํ˜„์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค๋ฉด ์ƒˆ๋กœ์šด ์ž๋™์ฐจ๊ฐ€ ๋‚˜์˜ค๋”๋ผ๋„ ์šด์ „์ž๋Š” ๋”ฐ๋กœ ๋ญ”๊ฐ€ ํ•  ํ•„์š”์—†์ด ์ฐจ๋งŒ ์‚ฌ๋ฉด ๋˜๋Š” ๊ฒƒ์ด์—์š”.

์‚ฌ์‹ค ๊ทธ๊ฒŒ ์ œ์ผ ํž˜๋“ ๊ฑฐ๊ฒ ์ง€๋งŒ.....

 

์ถœ์ฒ˜: ์ธํ”„๋Ÿฐ - ๊น€์˜ํ•œ ๊ฐ•์‚ฌ : ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ

 

 

์ด๋ฒˆ์—๋Š” ์ด ์˜ˆ์‹œ๋ฅผ ํ•œ๋ฒˆ ๋ณผ๊นŒ์š”?

๊ฐ ์—ญํ• ์€ ์ •ํ•ด์ ธ ์žˆ๊ณ , ๋ฐฐ์šฐ๋Š” ์‚ฌ์‹ค ๋ˆ„๊ฐ€ ํ•ด๋„ ์ƒ๊ด€์ด ์—†๋Š”๊ฒƒ์ด์—์š”.

์ฆ‰, ๋ฐฐ์šฐ๋Š” ๋Œ€์ฒด๊ฐ€ ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์•ผ ๊ฐ‘์ž๊ธฐ ๋ˆ„๊ฐ€ ์•„ํŒŒ๋„ ๋Œ€์ฒด๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒ ์ง€์š”?

 

 

 

 

    ๐Ÿ“์—ญํ• ๊ณผ ๊ตฌํ˜„์„ ๋ถ„๋ฆฌ

์—ญํ• ๊ณผ ๊ตฌํ˜„์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๋ฉด ์„ธ์ƒ์ด ๋‹จ์ˆœํ•ด์ง€๊ณ , ์œ ํ˜„ํ•ด์ง€๋ฉฐ, ๋ณ€๊ฒฝ๋„ ํŽธ๋ฆฌํ•ด ์ง€๋Š” ๊ฒƒ์ด์—์š”.

๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋ ‡๊ฒŒ ํ–ˆ์„ ๋•Œ ์žฅ์ ์€ ๋ฌด์—‡์ผ๊นŒ์š”?

  • Client๋Š” ์„ธ์ƒ์˜ ์—ญํ• (Interface)๋งŒ ์•Œ๋ฉด ๋œ๋‹ค.
  • Client๋Š” ๊ตฌํ˜„ ๋Œ€์ƒ์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ๋ชฐ๋ผ๋„ ๋œ๋‹ค.
  • Client๋Š” ๊ตฌํ˜„ ๋Œ€์ƒ์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.
  • Cleint๋Š” ๊ตฌํ˜„ ๋Œ€์ƒ ์ž์ฒด๋ฅผ ๋ณ€๊ฒฝํ•ด๋„ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.

 

์ด๋ฒˆ์—๋Š” JAVA๋ฅผ ๊ฐ€์ง€๊ณ  ํ•œ๋ฒˆ ์ƒ๊ฐ ํ•ด ๋ณผ๊ฒŒ์š”.

JAVA์˜ ๋‹คํ˜•์„ฑ์„ ํ™œ์šฉ ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

  • Role = interface
  • implement = Interface๋ฅผ ๊ตฌํ˜„ํ•œ Class, ๊ตฌํ˜„ Entity

๊ฐ์ฒด๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ์—ญํ• ๊ณผ ๊ตฌํ˜„์„ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

๊ฐ์ฒด ์„ค๊ณ„์‹œ ์—ญํ• (Interface)์„ ๋จผ์ € ๋ถ€์—ฌํ•˜๊ณ , ๊ทธ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ต๋‹ˆ๋‹ค.

 

๊ฐ์ฒด์˜ ํ˜‘๋ ฅ์ด๋ผ๋Š” ๊ด€๊ณ„๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์šฐ๋ฆฌ๋Š” ์•Œ์•„์•ผ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

์ฆ‰, ํ˜ผ์ž ์žˆ๋Š” ๊ฐ์ฒด๋Š” ์—†์œผ๋ฉฐ, Client๋Š” ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์ž…์žฅ์ด๊ณ , Server๋Š” ์‘๋‹ต์„ ์ฃผ๋Š” ์ž…์žฅ์ด๋ž๋‹ˆ๋‹ค.

์ˆ˜ ๋งŽ์€ ๊ฐ์ฒด ํด๋ผ์ด์–ธํŠธ์™€ ๊ฐ์ฒด ์„œ๋ฒ„๋Š” ์„œ๋กœ ํ˜‘๋ ฅ ๊ด€๊ณ„๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

 

 

    ๐Ÿ“JAVA ์–ธ์–ด์˜ ๋‹คํ˜•์„ฑ

Overriding์„ ํ•œ๋ฒˆ ์ƒ๊ฐํ•ด๋ณผ๊ฒŒ์š”.

์ด๊ฒƒ์€ JAVA์˜ ๊ธฐ๋ณธ์ด์ง€์š”? ๊ฒฐ๊ตญ Overriding์ด ๋œ Method๊ฐ€ ์‹คํ–‰๋˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์—์š”.

๋‹คํ˜•์„ฑ์œผ๋กœ Interface๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด ๋ฅผ ์‹คํ–‰ ์‹œ์ ์— ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก ! Class ์ƒ์† ๊ด€๊ณ„๋˜ ๋‹คํ˜•์„ฑ, Overriding์€ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด์—์š”.

 

์ถœ์ฒ˜: ์ธํ”„๋Ÿฐ - ๊น€์˜ํ•œ ๊ฐ•์‚ฌ : ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ

 

 

 

์ถœ์ฒ˜: ์ธํ”„๋Ÿฐ - ๊น€์˜ํ•œ ๊ฐ•์‚ฌ : ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ

 

 

์œ„์— ์™ผ์ชฝ ๊ทธ๋ฆผ์—์„œ Client๋Š” MemberRepository๋ฅผ ์˜์กดํ•˜๊ณ  ์žˆ๊ณ , ์ด๋ฅผ ์˜์กด ๊ด€๊ณ„๋ผ๊ณ  ํ•œ๋‹ต๋‹ˆ๋‹ค.

์˜์กด์€ ์‰ฝ๊ฒŒ ๋งํ•ด '๋‚ด๊ฐ€ ์Ÿค๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค'๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์ด์—์š”. 

 

 

 

์ถœ์ฒ˜: ์ธํ”„๋Ÿฐ - ๊น€์˜ํ•œ ๊ฐ•์‚ฌ : ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ 

 

์œ„์˜ ๊ทธ๋ฆผ์—์„œ ๋นจ๊ฐ•๊ณผ ์ดˆ๋ก์˜ ๊ตฌํ˜„์ฒด๋“ค์€ MemberRepository๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

 

์ถœ์ฒ˜: ์ธํ”„๋Ÿฐ - ๊น€์˜ํ•œ ๊ฐ•์‚ฌ : ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ 

 

 

์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด Client๋Š” Interface์ธ MemberRepository๋„ ์˜์กดํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ๊ฒƒ์„ ๊ตฌํ˜„ํ•œ ๊ตฌํ˜„์ฒด๋“ค์„ ์˜์กดํ•  ์ˆ˜๋„ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

 

 

 

    ๐Ÿ“๋‹คํ˜•์„ฑ์˜ ๋ณธ์งˆ

Interface๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ ์‹œ์ ์— ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

๋‹คํ˜•์„ฑ์˜ ๋ณธ์งˆ์„ ์ดํ•ดํ•˜๋ ค๋ฉด ํ˜‘๋ ฅ์ด๋ผ๋Š” ๊ฐ์ฒด ์‚ฌ์ด์˜ ๊ด€๊ณ„์—์„œ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ต๋‹ˆ๋‹ค.

Client๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ , ์„œ๋ฒ„์˜ ๊ตฌํ˜„ ๊ธฐ๋Šฅ์„ ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

์ •๋ฆฌ์žํ•˜๋ฉด ์—ญํ• ๊ณผ ๊ตฌํ˜„์„ ๋ถ„๋ฆฌํ•˜๋ฉด ์‹ค์„ธ๊ณ„์˜ ์ด ์ปจ์…‰์„ ๋‹คํ˜•์„ฑ์„ ํ†ตํ•ด ๊ฐ์ฒด ์„ธ์ƒ์œผ๋กœ ๊ฐ€์ ธ ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

๊ทธ๋Ÿฌ๋ฉด ์œ ์—ฐํ•˜๊ณ , ๋ณ€๊ฒฝ์ด ์šฉ์ดํ•ด ์ง€๊ณ , ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์„ค๊ณ„๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Client๋Š” ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋„๋ก ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•ด ์ง€๊ฒ ์ง€์š”. ๊ทธ๋ž˜์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ Interface๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์ž˜ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•œ ๊ฒƒ์ด์—์š”!

 

ํ•˜์ง€๋งŒ, ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

์—ญํ• (Interface) ์ž์ฒด๊ฐ€ ๋ณ€ํ•˜๋ฉด Client, Server ๋ชจ๋‘ ํฐ ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€ํ”ผํ•˜๋‹ต๋‹ˆ๋‹ค.

๋งŒ์•ฝ ์œ„์—์„œ ๋ณธ ์ž๋™์ฐจ ์˜ˆ์‹œ์—์„œ ์ž๋™์ฐจ๋ฅผ ๋น„ํ–‰๊ธฐ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

๊ทธ๋ฆฌ๊ณ , ๋กœ๋ฏธ์˜ค์™€ ์ค„๋ฆฌ์—ฃ ์˜ˆ์‹œ์—์„œ ๋Œ€๋ณธ ์ž์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค๋ฉด์š”?

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Interface๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์ž˜ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ต๋‹ˆ๋‹ค!

 

 

    ๐Ÿ“Spring๊ณผ ๊ฐ์ฒด ์ง€ํ–ฅ

๋‹คํ˜•์„ฑ์€ ๋งค์šฐ ์ค‘์š”ํ•œ ๊ฒƒ์ด์—์š”.

Spring์€ ๋‹คํ˜•์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•ด์„œ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ๋„๊ตฌ์ธ ๊ฒƒ์ด์—์š”.

Spring์—์„œ ์ด์•ผ๊ธฐํ•˜๋Š” ์ œ์–ด์˜ ์—ญ์ „(IoC), ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…(DI)์€ ๋‹คํ˜•์„ฑ์„ ํ™œ์šฉํ•ด์„œ ์—ญํ• ๊ณผ ๊ตฌํ˜„์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ต๋‹ˆ๋‹ค.

Spring์„ ์‚ฌ์šฉํ•˜๋ฉด ๋งˆ์น˜ LEGO Block ์กฐ๋ฆฝํ•˜๋“ฏ ๊ทธ๋ฆฌ๊ณ , ๊ณต์—ฐ ๋ฌด๋Œ€์˜ ๋ฐฐ์šฐ๋ฅผ ์„ ํƒํ•˜๋“ฏ ๊ตฌํ˜„์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

 


 

 

์ฃผ๋‹ˆํ•˜๋ž‘์˜ ๊ธ€์ด ๋งˆ์Œ์— ๋“œ์…จ๋‚˜์š”? ๊ตฌ๋…๊ณผ ๊ณต๊ฐ! ๊ทธ๋ฆฌ๊ณ , ๋Œ“๊ธ€ ๊ทธ๋ฆฌ๊ณ  ๋ฐฉ๋ช…๋ก์€ ์ฃผ๋‹ˆํ•˜๋ž‘์—๊ฒŒ ๋งŽ์€ ํž˜์ด ๋ฉ๋‹ˆ๋‹ค

 

 

 

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•