[Spring] intro

Updated:

Categories:

Tags: ,

๐Ÿ“Œ ๊ฐœ์ธ์ ์ธ ๊ณต๊ฐ„์œผ๋กœ ๊ณต๋ถ€๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ๋ณต์Šตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
์ •ํ™•ํ•˜์ง€ ์•Š์€ ์ •๋ณด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ๋ฐ”๋ž๋‹ˆ๋‹ค :๐Ÿ˜ธ
[ํ‹€๋ฆฐ ๋‚ด์šฉ์€ ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์‹œ๋ฉด ๋ณต๋ฐ›์œผ์‹ค๊ฑฐ์—์š”]

Spring Framework

Framework์ด๋ž€?

  1. Frame์€ ์–ด๋–ค ๋Œ€์ƒ์˜ ํฐ ํ‹€์ด๋‚˜ ์™ธํ˜•์ ์ธ ๊ตฌ์กฐ๋ฅผ ์˜๋ฏธ
  2. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ƒ์—์„œ์˜ Framework๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๊ธฐ ์œ„ํ•œ ์–ด๋– ํ•œ ํ‹€์ด๋‚˜ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณต
  3. JAVA์—์„œ ์ปฌ๋ ‰์…˜ํ”„๋ ˆ์ž„์›Œํฌ
    1. Map์ด๋‚˜ Set, List ๋“ฑ์˜ Collection
    2. ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋„๋ฆฌ ์•Œ๋ ค์ ธ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋น„์Šทํ•œ ์œ ํ˜•์˜ ๋ฐ์ดํ„ฐ๋“ค์„ ๊ฐ€๊ณต ๋ฐ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์‰ฝ๋„๋ก ํ‘œ์ค€ํ™”๋œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค์˜ ์ง‘ํ•ฉ
    3. Collection์€ ๋ฐ”๋กœ Map, Set, List ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ทธ ์ธํ„ฐํŽ˜์ด์Šค๋“ค์„ ๊ตฌํ˜„ํ•œ ๊ตฌํ˜„์ฒด๋“ค์˜ ์ง‘ํ•ฉ

Framework์˜ ์žฅ๋‹จ์ 

  1. ์žฅ์ 
    1. ํšจ์œจ์  ์ฝ”๋“œ์ž‘์„ฑ ๊ฐ€๋Šฅ
      1. ๊ฐœ๋ฐœํ•˜๊ณ ์ž ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ทธ ๋ฐ‘๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ์ผ์ผ์ด ์ „๋ถ€ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์„œ๋กœ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์˜ ํ†ต์‹ ์ด๋‚˜, ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์— ์ €์žฅํ•˜๋Š” ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๋“ค ์—ญ์‹œ Framework์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜•ํƒœ๋กœ ์ œ๊ณตํ•จ์œผ๋กœ์จ ๊ฐœ๋ฐœ์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ ๋กœ์ง์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์คŒ
    2. ์ •ํ•ด์ง„ ๊ทœ์•ฝ์ด ์žˆ์Œ
      1. framework์˜ ๊ทœ์•ฝ์— ๋งž๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋” ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ๋ฌธ์ œ์ ์„ ํŒŒ์•…ํ•ด ์ˆ˜์ •๊ฐ€๋Šฅ
      2. ์œ ์ง€๋ณด์ˆ˜ ์ด์™ธ์—๋„ ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•  ๋•Œ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์ด ์šฉ์ดํ•˜๊ณ  ๊ธฐ๋Šฅ์˜ ํ™•์žฅ ๋˜ํ•œ ์‰ฝ๊ฒŒ ํ™•์žฅ์ด ๊ฐ€๋Šฅ
  2. ๋‹จ์ 
    1. Framework์— ๋Œ€ํ•œ ํ•™์Šต์ด ํ•„์š” - ์–ด๋ ค์›€
    2. ์ž์œ ๋กญ๊ณ  ์œ ์—ฐํ•œ ๊ฐœ๋ฐœ์˜ ์–ด๋ ค์›€
      1. ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ Framework๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜, ์œ ์—ฐํ•œ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด Framework๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฒŒ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ ์ •๋ง ๋งŽ์€ ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ์ด ํ•„์š”

Framework๊ณผ Library์˜ ์ฐจ์ด

  1. Library
    1. Library๋Š” ์ž๋™์ฐจ์—์„œ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ถ€ํ’ˆ
    2. ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•ด ๋†“์€ ์ง‘ํ•ฉ์ฒด
    3. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ผ๋ จ์˜ ๋ฐ์ดํ„ฐ ๋ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฝ”๋“œ
    4. ๊ฐœ๋ฐœ์ž๊ฐ€ ์งœ ๋†“์€ ์ฝ”๋“œ ๋‚ด์—์„œ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด ์žˆ์œผ๋ฉด ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ Library
  2. Framework (Library๋ฅผ ํฌํ•จ)
    1. Framework๋Š” ์ž๋™์ฐจ์˜ ๋ผˆ๋Œ€, ์ฆ‰ Frame
    2. JAVA์˜ Math ํ•จ์ˆ˜(max, random ๋“ฑ)์„ ๋ชจ์•„ ๋†“์€ ๊ฒƒ์ด ํ”„๋ ˆ์ž„์›Œํฌ
    3. Framework์—์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ๋ฆ„์„ ๋งŒ๋“ค์–ด ์คŒ

Framework๊ณผ Library์˜ ์ฐจ์ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์ œ์–ด๊ถŒ์˜ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค๊ณ  ํ‘œํ˜„

์ฆ‰, Library๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ๋ฆ„์˜ ์ฃผ๋„๊ถŒ์ด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์žˆ๋Š” ๋ฐ˜๋ฉด, Framework์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ๋ฆ„์˜ ์ฃผ๋„๊ถŒ์ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ Framework์— ์žˆ๋‹ค.

Spring Framework๋ž€?

  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ Framework๋“ค ์ค‘์— ํ•˜๋‚˜
  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ Framework์—๋Š” Spring๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, Django, Express, Flask, Lalavel ๋“ฑ ๋‹ค์–‘ํ•œ Framework๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅ
    1. Spring Framework๋งŒ์˜ ์žฅ์ 
    1. POJO(Plan Old Java Object) ๊ธฐ๋ฐ˜์˜ ๊ตฌ์„ฑ
    2. DI(Dependency Injection) ์ง€์›
    3. AOP(Aspect Oriented Programming, ๊ด€์ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ) ์ง€์›
    4. Java ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์–ป๋Š” ์žฅ์ 
      1. ์ •์  ํƒ€์ž… ์–ธ์–ด๋กœ์„œ ๋ณ€์ˆ˜์˜ ํƒ€์ž…, ๋ฉ”์„œ๋“œ์˜ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์ด ์–ด๋–ค ํƒ€์ž…์„ ๊ฐ€์ ธ์•ผ ํ•˜๋Š”์ง€๋ฅผย ๊ฐ•์ œํ•จ โ‡’ ์›น ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์žˆ์–ด์„œ ๋Ÿฐํƒ€์ž„์— ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋ฅผ ์‚ฌ์ „์— ๋ฐฉ์ง€
  1. Spring Framework์„ ํ•™์Šต์œผ๋กœ ์ธํ•œ ์žฅ์ 
    1. ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™์— ์ž˜ ๋งž๋Š” ์žฌ์‚ฌ์šฉ๊ณผ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์Šคํ‚ฌ์„ ํ–ฅ์ƒ๊ฐ€๋Šฅ
    2. ๋ณด๋‹ค ๋‚˜์€ ์„ฑ๋Šฅ๊ณผ ์„œ๋น„์Šค์˜ ์•ˆ์ „์„ฑ์ด ํ•„์š”ํ•œ ๋ณต์žกํ•œ ๊ธฐ์—…์šฉ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์‹œ์Šคํ…œ์„ ์ œ๋Œ€๋กœ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ๋Šฅ๋ ฅ์„ ๊ธฐ๋ฅผ ์ˆ˜ ์žˆ์Œ
  2. ๋ฐฐ์›Œ์•ผ ํ•˜๋Š” ์ด์œ 
    1. Spring Framework์ด ๋„์ž…๋˜๊ธฐ ์ „์—๋Š” JSP๋‚˜ Servlet ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•œ Model1, Model2 ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ Java ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ œ์ž‘ํ•จ
      • jsp
        • html/Javascript ์ฝ”๋“œ์™€ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์„œ๋ฒ„ ์ธก Java ์ฝ”๋“œ๊ฐ€ ๋’ค์„ž์—ฌ ์žˆ๋Š” ๋ฐฉ์‹
        • ์ฝ”๋“œ๋„ ๊ธธ๊ณ  ์—ฌ๋Ÿฌ ์–ธ์–ด ์„ž์—ฌ ์žˆ์–ด ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๋ฉฐ ์œ ์ง€ ๋ณด์ˆ˜ ์ธก๋ฉด์—์„œ ์ตœ์•…์˜ ๋ฐฉ์‹
      • Servlet
        • ๊ฐ„๋‹จํ•œ ๋กœ์ง์ธ๋ฐ ์ฝ”๋“œ ์ž์ฒด๊ฐ€ ๊ธธ๋‹ค.
    2. Spring MVC ๋ฐฉ์‹์ด ๋„์ž…๋จ์œผ๋กœ์จ Java ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ œ์ž‘ ๋ฐฉ์‹์ด ํš๊ธฐ์ ์œผ๋กœ ๋ณ€ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.
    3. Spring MVC ์„ค์ •์˜ ๋ณต์žกํ•จ๊ณผ ์–ด๋ ค์›€์„ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด Spring Boot์ด ํƒ„์ƒ

Spring Framework์˜ ํŠน์ง•

POJO(Plain Old Java Object)

POJO๋Š” ์ˆœ์ˆ˜ํ•œ JAVA ๊ฐ์ฒด๋ฅผ ์˜๋ฏธ

POJO ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€?

  1. POJO๋ฅผ ์ด์šฉํ•ด์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ
  2. ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ์ •๋„์˜ ๊ธฐ๋ณธ์ ์ธ ๊ทœ์น™
    • Java๋‚˜ Java์˜ ์ŠคํŽ™(์‚ฌ์–‘)์— ์ •์˜๋œ ๊ฒƒ ์ด์™ธ์—๋Š” ๋‹ค๋ฅธ ๊ธฐ์ˆ ์ด๋‚˜ ๊ทœ์•ฝ์— ์–ฝ๋งค์ด์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      
        public class User {
          private String userName;
          private String id;
          private String password;
              
          public String getUserName() {
            return userName;
          }
              
          public void setUserName(String userName) {
          	this.userName = userName;
          }
              
          public String getId() {
          	return id;
          }
              
          public void setId(String id) {
          	this.id = id;
          }
              
          public String getPassword() {
          	return password;
          }
              
          public void setPassword(String password) {
          	this.password = password;
          }
        }
      
      • ์ž๋ฐ”์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ๋งŒ ์‚ฌ์šฉํ•˜์—ฌ getter, setter๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ฝ”๋“œ - ์บก์Аํ™” ํ•  ๋•Œ ์‚ฌ์šฉ
      • Java ์–ธ์–ด ์ด์™ธ์— ํŠน์ •ํ•œ ๊ธฐ์ˆ ์— ์ข…์†๋˜์–ด ์žˆ์ง€ ์•Š์€ ์ˆœ์ˆ˜ํ•œ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— POJO์— ํ•ด๋‹น
      • POJO์ž„๊ณผ ๋™์‹œ์— JAVA BEAN
    • ํŠน์ • ํ™˜๊ฒฝ์— ์ข…์†์ ์ด์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      
        public class MessageForm extends ActionForm{ // (1)
              
        	String message;
              
        	public String getMessage() {
        		return message;
        	}
              
        	public void setMessage(String message) {
        		this.message = message;
        	}
              
        }
              
        public class MessageAction extends Action{ // (2)
              
        	public ActionForward execute(ActionMapping mapping, ActionForm form,
        		HttpServletRequest request, HttpServletResponse response)
                throws Exception {
              
        		MessageForm messageForm = (MessageForm) form;
        		messageForm .setMessage("Hello World");
              
        		return mapping.findForward("success");
        	}
              
        }
              
      
      • ActionForm ํด๋ž˜์Šค๋Š” ๊ณผ๊ฑฐ์— Struts๋ผ๋Š” ์›น ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ง€์›ํ•˜๋Š” ํด๋ž˜์Šค
      • (1)์—์„œ๋Š” Struts๋ผ๋Š” ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ActionForm์„ ์ƒ์†
      • (2)์—์„œ๋Š” ์—ญ์‹œ Struts ๊ธฐ์ˆ ์˜ Action ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๊ณ  ์žˆ์Œ
      • ์ƒ์†๋ฐ›๋Š” ์ˆœ๊ฐ„ Struts์— ์ข…์† ๋จ,
      • ์ž๋ฐ”๋Š” ๋‹จ์ผ ์ƒ์† ๋ฐ–์— ์•ˆ๋จ โ‡’ ์ด๋ฏธ ์ƒ์†์„ ๋ฐ›์•„์„œ ๋‹ค๋ฅธ ์–ด๋–ค๊ฒƒ์„ ์ƒ์†๋ฐ›์ง€ ๋ชปํ•˜๊ธฐ๋•Œ๋ฌธ์— ์Šคํ”„๋ง์œผ๋กœ ์ด๋™์‹œ ๋ฒ—๊ฒจ๋‚ด์•ผํ•จ,
      • ์Šคํ”„๋ง์—์„œ ์“ฐ๋Š” ๊ฐ์ฒด๊ฐ€ ํฌ์กฐ์—ฌ์•ผ ํ•  ํ•„์š”๋Š” ์—†์ง€๋งŒ ํฌ์กฐ๋ฅผ ์ง€ํ–ฅํ•จ.
  3. POJO ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ํ•„์š”ํ•œ ์ด์œ 
    • ํŠน์ • ํ™˜๊ฒฝ์ด๋‚˜ ๊ธฐ์ˆ ์— ์ข…์†์ ์ด์ง€ ์•Š์œผ๋ฉด ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ณ , ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์œ ์—ฐํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ๊ฐ€๋Šฅ
    • ์ €์ˆ˜์ค€ ๋ ˆ๋ฒจ์˜ ๊ธฐ์ˆ ๊ณผ ํ™˜๊ฒฝ์— ์ข…์†์ ์ธ ์ฝ”๋“œ๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์—์„œ ์ œ๊ฑฐํ•จ์œผ๋กœ์จ ์ฝ”๋“œ๊ฐ€ ๊น”๋”ํ•ด์ง โ‡’ ๋””๋ฒ„๊น…ํ•˜๊ธฐ๋„ ์ƒ๋Œ€์ ์œผ๋กœ ์‰ฝ๋‹ค.
    • ํŠน์ • ๊ธฐ์ˆ ์ด๋‚˜ ํ™˜๊ฒฝ์— ์ข…์†์ ์ด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ ์—ญ์‹œ ๋‹จ์ˆœํ•ด์ง.
    • ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ์„ค๊ณ„๋ฅผ ์ œํ•œ ์—†์ด ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.(๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ด์œ )
  4. POJO์™€ Spring์˜ ๊ด€๊ณ„
    1. Spring์€ POJO ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€ํ–ฅํ•˜๋Š” Framework
    2. Spring Framework์€ POJO ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€ํ–ฅํ•˜๊ธฐ ์œ„ํ•ด IoC/DI, AOP, PSA๋ผ๋Š” ๊ธฐ์ˆ ์„ ์ œ๊ณต
    3. POJO ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํšจ๊ณผ์ ์œผ๋กœ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํŠน์ • ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ์ง€์‹๋ณด๋‹ค๋Š” JDK์˜ API์— ๋Œ€ํ•œ ์ง€์‹๊ณผ ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ์‚ฌ๊ณ ๋ฐฉ์‹๊ณผ ์„ค๊ณ„๋ฅผ ์œ„ํ•œ ํ›ˆ๋ จ์ด ์šฐ์„ ์‹œ ๋˜์–ด์•ผ ํ•จ.

IoC/DI

์š”์•ฝ

IoC /DI ๋ผ๋Š” ๋‹จ์–ด๋Š” IoC๋ฅผ ์ง€ํ–ฅํ•˜๊ธฐ์œ„ํ•ด DI๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„. (๋ชฉ์ /์ˆ˜๋‹จ)

  1. IoC
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ๋ฆ„์˜ ์ฃผ๋„๊ถŒ์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์žˆ์ง€ ์•Š๊ณ , Framework์ด๋‚˜ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ๋“ฑ ์™ธ๋ถ€์— ์žˆ๋Š” ๊ฒƒ ์ฆ‰, ํ๋ฆ„์˜ ์ฃผ๋„๊ถŒ์ด ๋’ค๋ฐ”๋€ ๊ฒƒ
  2. DI(Dependency Injection)
    • IoC ๊ฐœ๋…์„ ์กฐ๊ธˆ ๊ตฌ์ฒดํ™”์‹œํ‚จ ๊ฒƒ์œผ๋กœ ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋А์Šจํ•˜๊ฒŒ ํ•ด ์ค€๋‹ค.
  3. ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด ๋‘ ํด๋ž˜์Šค ๊ฐ„์— ์˜์กด ๊ด€๊ณ„๊ฐ€ ์„ฑ๋ฆฝ๋จ
    • ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ new๋ฅผ ์‚ฌ์šฉํ•ด ์ฐธ์กฐํ•  ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ , ์ƒ์„ฑ์ž ๋“ฑ์„ ํ†ตํ•ด ์™ธ๋ถ€์—์„œ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌ๋ฐ›๊ณ  ์žˆ๋‹ค๋ฉด ์˜์กด์„ฑ ์ฃผ์ž…์ด ์ด๋ฃจ์–ด์ง„๊ฒƒ
    • new ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ, ํด๋ž˜์Šค ๊ฐ„์— ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ(Tight Coupling)๋˜์–ด ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.
    • ๋А์Šจํ•˜๊ฒŒ ๊ฒฐํ•ฉ(Loose Coupling) : ์–ด๋–ค ํด๋ž˜์Šค๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค ๊ฐ™์ด ์ผ๋ฐ˜ํ™”๋œ ๊ตฌ์„ฑ ์š”์†Œ์— ์˜์กดํ•˜๊ณ  ์žˆ์„ ๋•Œ โ‡’ ๊ฐ์ฒด๋“ค ๊ฐ„์˜ ๋А์Šจํ•œ ๊ฒฐํ•ฉ์€ ์š”๊ตฌ ์‚ฌํ•ญ์˜ ๋ณ€๊ฒฝ์— ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์ฒ˜ ๊ฐ€๋Šฅ.
  4. ์˜์กด์„ฑ ์ฃผ์ž…(DI)์€ ํด๋ž˜์Šค๋“ค ๊ฐ„์˜ ๊ฐ•ํ•œ ๊ฒฐํ•ฉ์„ ๋А์Šจํ•œ ๊ฒฐํ•ฉ์œผ๋กœ ๋งŒ๋“ค์–ด ์คŒ.
  5. Spring์—์„œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์—์„œ ์ด๋ฃจ์–ด์ง€๋Š” ์˜์กด์„ฑ ์ฃผ์ž…(DI)์„ Spring์—์„œ ๋Œ€์‹ ํ•ด ์คŒ

IoC(Inversion of Control)๋ž€?

  • Library๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ๋ฆ„์˜ ์ฃผ๋„๊ถŒ์ด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์žˆ๊ณ , Framework์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ๋ฆ„์˜ ์ฃผ๋„๊ถŒ์ด Framework์— ์žˆ๋‹ค
  • IoC๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ๋ฆ„์˜ ์ฃผ๋„๊ถŒ์ด ๋’ค๋ฐ”๋€ ๊ฒƒ์„ ์˜๋ฏธ

์„œ๋ธ”๋ฆฟ๊ณผ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์— IoC(์ œ์–ด์˜ ์—ญ์ „)

JAVA ์ฝ˜์†”์˜ ์ฃผ๋„๊ถŒ โ‡’ main() : ๋ฉ”์ธ๋ฉ”์„œ๋“œ

1
2
3
4
5
public class Example2_10 {
    public static void main(String[] args) {
        System.out.println("Hello IoC!");
    }
}
  • main() ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ  ๋‚œ ๋‹ค์Œ์— System ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด์„œ static ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์ธ out์˜ println()์„ ํ˜ธ์ถœ
  • ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ผ๋ฐ˜์ ์ธ ์ œ์–ด ํ๋ฆ„
  • main() ๋ฉ”์„œ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰์ด ์ข…๋ฃŒ

  • ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค๋Š” ์กด์žฌํ•˜์ง€๋งŒ main() ๋ฉ”์ธ ๋ฉ”์„œ๋“œ(=Entry point) ์กด์žฌ ํ•˜์ง€ ์•Š์Œ
  • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ๊ฒฝ์šฐ, ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ๋‚ด์˜ ์ปจํ…Œ์ด๋„ˆ ๋กœ์ง(service() ๋ฉ”์„œ๋“œ)์ด ์„œ๋ธ”๋ฆฟ์„ ์ง์ ‘ ์‹คํ–‰์‹œ์ผœ ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— main() ๋ฉ”์„œ๋“œ๊ฐ€ ํ•„์š” ์—†์Œ
  • ์ฆ‰, ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์„œ๋ธ”๋ฆฟ์„ ์ œ์–ดํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฃผ๋„๊ถŒ์€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์— ์žˆ์Œ

DI(Dependency Injection)๋ž€?

  • IoC ๊ฐœ๋…์„ ์กฐ๊ธˆ ๊ตฌ์ฒดํ™” ์‹œํ‚จ ๊ฒƒ

์˜ˆ๋ฅผ ๋“ค์–ด,

A ํด๋ž˜์Šค๊ฐ€ B ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด B๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ƒํ™ฉ์€

โ€˜Aํด๋ž˜์Šค๋Š” Bํด๋ž˜์Šค์— ์˜์กดํ•œ๋‹ค๋ผ๊ณ  ํ•จ.

MenuControllerํด๋ž˜์Šค

  • ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›๋Š” ์—”๋“œํฌ์ธํŠธ(Endpoint) ์—ญํ• ์„ ํ•จ
  • ๋ฉ”๋‰ดํŒ์— ํ‘œ์‹œ๋˜๋Š” ๋ฉ”๋‰ด ๋ชฉ๋ก์„ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด์„œ MenuService์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ
    • newํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด ์ƒ์„ฑ ํ›„ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ํ•จ
    • ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ ์ฐธ์กฐํ•˜๊ฒŒ ๋˜๋ฉด ์˜์กด ๊ด€๊ณ„๊ฐ€ ์„ฑ๋ฆฝ

MenuServiceํด๋ž˜์Šค

  • MenuControllerํด๋ž˜์Šค๊ฐ€ ์ „๋‹ฌ๋ฐ›์€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• 

but, ์˜์กด๊ด€๊ณ„๋Š” ์„ฑ๋ฆฝ๋˜์—ˆ์ง€๋งŒ ์˜์กด์„ฑ ์ฃผ์ž…์€ X

์˜์กด์„ฑ ์ฃผ์ž… ์˜ˆ์‹œ ์ฝ”๋“œ

  1. MenuController ์ƒ์„ฑ์ž๋กœ MenuService์˜ ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌ๋ฐ›๊ณ  ์žˆ์Œ
  2. ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด์„œ ์–ด๋–ค ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌ๋ฐ›๋Š” ๊ฒƒ์„ โ€˜์˜์กด์„ฑ ์ฃผ์ž…โ€™
    1. ์ƒ์„ฑ์ž์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์„ ์™ธ๋ถ€์—์„œ ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…ํ•œ๋‹ค๋ผ๊ณ  ํ‘œํ˜„
    2. CafeClient ํด๋ž˜์Šค๊ฐ€ MenuController์˜ ์ƒ์„ฑ์ž ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ menuService๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…ํ•ด ์ฃผ๋Š” ์™ธ๋ถ€๊ฐ€ ๋จ.

์˜์กด์„ฑ ์ฃผ์ž…์˜ ํ•„์š” ์ด์œ 

  • ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ ๊ธ‰ํ•˜๊ฒŒ ๋ฉ”๋‰ด๊ฐ€ ํ•„์š”ํ•  ๋•Œ ๋ฐฑ์—”๋“œ์—์„œ ํ”„๋ก ํŠธ์—๊ฒŒ stub(๊ฐ€์งœ๋ฐ์ดํ„ฐ) ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Œ
  • stub์ œ๊ณต์„ ์œ„ํ•ด ๋นจ๊ฐ„ ๋ฐ•์Šค ๋ถ€๋ถ„์ด ์ˆ˜์ •๋˜์–ด์•ผ ํ•จ.
  • but, ์š”๊ตฌ์‚ฌํ•ญ์ด ๋ณ€๊ฒฝ๋จ์œผ๋กœ ์ง์ ‘์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ์˜ณ์ง€ ์•Š์Œ
    • ๋”๋ฏธ๋ฐ์ดํ„ฐ๊ฐ€ 200๊ฐœ 300๊ฐœ ๋ผ๋ฉด?? โ‡’ ์ œ์ผ๋ฌธ์ œ๋Š” ํœด๋จผ์—๋Ÿฌ
  • ๊ฒฐ๊ตญ new๋ฅผ ํ†ตํ•ด ์˜์กด ๊ฐ์ฒด ์ƒ์„ฑ์€ ํ”ผํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ - ํœด๋จผ์—๋Ÿฌ ๋ฐœ์ƒ (๊ฐ•ํ•œ ๊ฒฐํ•ฉ) โ†” ๋А์Šจํ•œ ๊ฒฐํ•ฉ
  • ๋А์Šจํ•œ ๊ฒฐํ•ฉ = ๋‹ค๋ฅธ ๊ฐ์ฒด๊ฐ€ ๋“ค์–ด์™€๋„ ์ˆ˜์ •์—†์ด ์‚ฌ์šฉ๊ฐ€๋Šฅ.

    ๋А์Šจํ•œ ๊ด€๊ณ„๋ฅผ ๋งŒ๋“œ๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ• = ์ธํ„ฐํŽ˜์ด์Šค ์‚ฌ์šฉ

  1. MenuController๊ฐ€ ์ƒ์„ฑ์ž๋กœ MenuServiceStub์„ ๋ฐ›์•„๋„ ์ฃผ์ž…๋ฐ›์€ ๋Œ€์ƒ์€ MenuService ์ธํ„ฐํŽ˜์ด์Šค๋ผ์„œ ์–ด๋–ค ํด๋ž˜์Šค๋„ ์ฃผ์ž…๋ฐ›์„ ์ˆ˜ ์žˆ์Œ.
  2. (1)์—์„œ new๋กœ MenuServiceStub ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ MenuService ์ธํ„ฐํŽ˜์ด์Šค์— ํ• ๋‹น
    1. ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž…์˜ ๋ณ€์ˆ˜์— ๊ทธ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋ฅผ ์—…์บ์ŠคํŒ…(Upcasting)
    2. ์—…์บ์ŠคํŒ…์„ ํ†ตํ•œ ์˜์กด์„ฑ ์ฃผ์ž…์œผ๋กœ ์ธํ•ด MenuController์™€ MenuService๋Š” ๋А์Šจํ•œ ๊ฒฐํ•ฉ ๊ด€๊ณ„๋ฅผ ์œ ์ง€

Spring์—์„œ์˜ ์˜์กด์„ฑ

  • (1)์— ํ•ด๋‹นํ•˜๋Š” ์ฝ”๋“œ๋Š” ๋ชจ๋‘ Spring์—์„œ ์ง€์›ํ•˜๋Š” API ์ฝ”๋“œ
    • ApplicationContext(์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ)
  • @Bean ์–ด๋…ธํ…Œ์ด์…˜ : ๋ฉ”์„œ๋“œ๋กœ๋ถ€ํ„ฐ ๋ฐ˜ํ™˜๋œ ๊ฐ์ฒด๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก
    • ๋นˆ์€ ์ธ์Šคํ„ด์Šคํ™”๋œ ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก๋œ ๊ฐ์ฒด๋ฅผ ์Šคํ”„๋ง ๋นˆ์ด๋ผ ํ•จ
  • Config ํด๋ž˜์Šค๊ฐ€ new ํ‚ค์›Œ๋“œ๋ฅผ ์—†์• ๋Š” ๋ฐ ์„ฑ๊ณต
    • Config ํด๋ž˜์Šค์—์„œ (3)๊ณผ ๊ฐ™์ด MenuController ๊ฐ์ฒด ์ƒ์„ฑ์„ ์ •์˜ํ•ด ๋‘๋ฉด (1)์„ ์ด์šฉํ•ด์„œ ์ด ๊ฐ์ฒด๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉ

ํ•œ๋งˆ๋””๋กœ Config ํด๋ž˜์Šค์— ์ •์˜ํ•ด ๋‘” MenuController ๊ฐ์ฒด๋ฅผ Spring์˜ ๋„์›€์„ ๋ฐ›์•„์„œ CafeClientํด๋ž˜์Šค์—๊ฒŒ ์ œ๊ณต์„ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ


AOP

  • AOP๋ฅผ ํ•œ๊ธ€๋กœ ๋ฒˆ์—ญํ•˜๋ฉด ๊ด€์‹ฌ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ •๋„๋กœ ํ•ด์„
  • AOP๋ผ๋Š” ๊ฒƒ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ ์—…๋ฌด ๋กœ์ง์—์„œ ๋กœ๊น…์ด๋‚˜ ๋ณด์•ˆ, ํŠธ๋žœ์žญ์…˜ ๊ฐ™์€ ๊ณตํ†ต ๊ธฐ๋Šฅ ๋กœ์ง๋“ค์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ
  • ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ(Cross-cutting concern)๊ณผ ํ•ต์‹ฌ ๊ด€์‹ฌ ์‚ฌํ•ญ(Core concern)์œผ๋กœ ๋‚˜๋‰จ
    1. ๊ณตํ†ต ๊ธฐ๋Šฅ๋“ค์— ๋Œ€ํ•œ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ฐ”๋กœ ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ(Cross-cutting concern)
    2. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฃผ๋ชฉ์ ์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ๋กœ์ง์— ๋Œ€ํ•œ ๊ด€์‹ฌ์‚ฌ๋ฅผ ํ•ต์‹ฌ ๊ด€์‹ฌ ์‚ฌํ•ญ(Core concern)
    3. ๊ตฌ๋ถ„ํ•˜๋Š” ๋ฐฉ๋ฒ• : ์—†์–ด๋„ ์‹คํ–‰์ด ๋˜๋Š”์ง€ ์•ˆ๋˜๋Š”์ง€๋ฅผ ํŒŒ์•…ํ•˜๋ฉด ๋จ

      1. ์—†์œผ๋ฉด ์•ˆ๋˜๋Š” ๊ฒƒ์€ ํ•ต์‹ฌ ๊ด€์‹ฌ ์‚ฌํ•ญ
      2. ํ•˜๋‚˜๋กœ ๊ตญํ•œํ•˜์ง€ ์•Š๊ณ  ๋ชจ๋‘์—๊ฒŒ ๊ณตํ†ต๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒƒ : ๊ณตํ†ต๊ด€์‹ฌ์‚ฌํ•ญ
        1. ์˜ˆ๋ฅผ๋“ค์–ด ์ปคํ”ผ์ฃผ๋ฌธ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋ผ ํ•  ๊ฒฝ์šฐ ์ปคํ”ผ์ฃผ๋ฌธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋ณด์ง€ ์•Š๊ณ  ํฌ๊ฒŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ชจ๋‘ ๊ณตํ†ต์ ์œผ๋กœ ์ ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ
          • ๋ณด์•ˆ. ๋กœ๊น…. ํŠธ๋žœ์žญ์…˜(ํ”„๋ก์‹œ ์‚ฌ์šฉํ•  ์ค„ ์•Œ์•„์•ผ ํ•จ, ์Šคํ”„๋ง์€ ์• ๋„ˆํ…Œ์ด์…˜๋งŒ ์ž‘์„ฑํ•˜๋ฉด ๋จ. @transactional)
    4. AOP๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 
      • ์ฝ”๋“œ์˜ ๊ฐ„๊ฒฐ์„ฑ ์œ ์ง€
      • ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™์— ๋งž๋Š” ์ฝ”๋“œ ๊ตฌํ˜„
      • ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ

PSA

  • ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์„ธ๊ณ„์—์„œ ์–ด๋–ค ํด๋ž˜์Šค์˜ ๋ณธ์งˆ์ ์ธ ํŠน์„ฑ๋งŒ์„ ์ถ”์ถœํ•ด์„œ ์ผ๋ฐ˜ํ™”ํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ƒํ™”(Abstraction)
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ถ”์ƒํ™”๋œ ์ƒ์œ„ ํด๋ž˜์Šค๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ๋ฐ”๋ผ๋ณด๋ฉฐ ํ•˜์œ„ ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ์ผ๊ด€๋œ ์„œ๋น„์Šค ์ถ”์ƒํ™”(PSA)์˜ ๊ธฐ๋ณธ ๊ฐœ๋…

    ์ผ๋ฐ˜์ ์œผ๋กœ ์„œ๋ฒ„ / ํด๋ผ์ด์–ธํŠธ ์ธก๋ฉด์—์„œ๋Š” ์„œ๋ฒ„ ์ธก ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๋Š” ์ชฝ์„ ํด๋ผ์ด์–ธํŠธ๋ผ๊ณ  ํ•จ ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” ๋Œ€ํ‘œ์ ์ธ ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฐ”๋กœ ์›น ๋ธŒ๋ผ์šฐ์ €.

    ๊ทธ๋Ÿฐ๋ฐ ์ฝ”๋“œ ๋ ˆ๋ฒจ์—์„œ ์–ด๋–ค ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ์ธก ์—ญ์‹œ ํด๋ผ์ด์–ธํŠธ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊ธฐ์–ตํ•˜๊ธฐ

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


์˜ˆ์ œ

Java ์ฝ˜์†” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Jdbc Connector๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์„œ๋น„์Šค ์ถ”์ƒํ™”์˜ ์˜ˆ

โ€‹

  • JdbcConnector๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ด์šฉํ•˜๋Š” ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๊ฐ€ ๋˜๋Š” ๊ฒƒ
  • Client๋Š” OracleJdbcConnector, MariaDBJdbcConnector, SQLiteJdbcConnector ๊ฐ™์€ JdbcConnector ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด์— ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐํ•ด์„œ Connection์„ ์–ป๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ JdbcConnector ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด(๋А์Šจํ•œ ๊ฒฐํ•ฉ) Connection ๊ฐ์ฒด๋ฅผ ์–ป๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Œ
  • DbClient์—์„œ ์–ด๋–ค JdbcConnector ๊ตฌํ˜„์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ Connection์„ ์–ป๋Š” ๋ฐฉ์‹์€ getConnection() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์ผํ•จ = ์ฆ‰, ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ํ•ด๋‹น ์„œ๋น„์Šค์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ
  • ์ด์ฒ˜๋Ÿผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํŠน์ • ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•  ๋•Œ, ์„œ๋น„์Šค์˜ ๊ธฐ๋Šฅ์„ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹ ์ž์ฒด๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ์œ ์ง€ํ•˜๋ฉด์„œ ๊ธฐ์ˆ  ์ž์ฒด๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์„ PSA(์ผ๊ด€๋œ ์„œ๋น„์Šค ์ถ”์ƒํ™”)

comment

๋“œ๋””์–ด ์Šคํ”„๋ง์— s๋ฅผ ์‚ด์ง ๋ง›๋ณด๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ
ํ•˜๋‚˜์˜ ๊ฐ์ฒด์ง€ํ–ฅ๊ฐ™์€ ๊ฐœ๋…์„ ๋‹ค์‹œ ๋ฐฐ์šฐ๋Š” ๋А๋‚Œ์ด๋‹ค.
๋ญ”๊ฐ€ ์•Œ๊ฒ ๋Š”๋ฐ ๋ชจ๋ฅด๊ฒ ๋Š”โ€ฆ?!
๊ทธ๋ž˜๋„ new๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ•ํ•œ ๊ฒฐํ•ฉ์ด๊ณ 
์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ์ธ์ž์— ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ๋А์Šจํ•œ ๊ฒฐํ•ฉ์ด๋ผ๋Š” ๊ฑด ํ™•์‹คํžˆ ์•Œ๊ฒƒ ๊ฐ™๋‹ค.,!
์•„์ง DI๋Š” ๋“ค์–ด๊ฐ„ ๊ฒƒ๋„ ์•„๋‹ˆ๋ผ๋Š”๋ฐ,,
๋ฌดํŠผ ํ•ต์‹ฌ๊ฐœ๋…์ด๋ผ๊ณ  ํ•˜๋‹ˆ ์ˆ˜์—… ๋†“์น˜์ง€ ์•Š๊ณ  ์ง‘์ค‘ํ•ด์•ผ์ง€!









Spring ์นดํ…Œ๊ณ ๋ฆฌ ๋‚ด ๋‹ค๋ฅธ ๊ธ€ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

Leave a comment