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

Spring

Spring / Spring Boot ์•Œ์•„๊ฐ€๊ธฐ

 

Spring๐ŸŒฑ

EJB (Enterprise Java Beans) ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค๊ฐ€ ๋‚ฎ์€ ๊ฐœ๋ฐœ์ƒ์‚ฐ์„ฑ์„ ์ธํ•ด ๋งŒ๋“ ๊ฒƒ์ด Spring ์ด๋‹ค.

๋‹ค์–‘ํ•œ ํŽธ์˜์„ฑ์„ ์ œ๊ณตํ•˜์—ฌ ๊ฐœ๋ฐœ์„ ํŽธํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ์šฉ ๊ฒฝ๋Ÿ‰๊ธ‰ ํ”„๋ ˆ์ž„์›Œํฌ์ž„.

๐Ÿ‘ ๊ฒฝ๋Ÿ‰๊ธ‰

  • ํ”„๋ ˆ์ž„์›Œํฌ ์ž์ฒด๋Š” ๋ฌด๊ฒ์ง€๋งŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ๋งŽ์€ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ตฌํ˜„์ด ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—
    ์‹ค์ œ ์ž‘์„ฑ ์ฝ”๋“œ๊ฐ€ ์ ์–ด ๊ฒฝ๋Ÿ‰๊ธ‰์œผ๋กœ ์นญํ•จ.

 

ํŠน์ง•

POJO (plain Old Java Object) : ์ˆœ์ˆ˜ํ•œ Java ๋งŒ์„ ์‚ฌ์šฉํ•œ ๊ฐ์ฒด๋ฅผ ๋œปํ•จ.

Spring์ด ํƒ„์ƒํ•˜๊ฒŒ๋œ ์ด์œ .
EJB (Enterprise Java Beans) ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค๊ฐ€ ๋‚ฎ์€ ๊ฐœ๋ฐœ์ƒ์‚ฐ์„ฑ์„ ์ธํ•ด ๋งŒ๋“ ๊ฒƒ์ด Spring ์ด๋‹ค.
์ˆœ์ˆ˜ํ•œ ์ž๋ฐ”๊ฐ์ฒด๋กœ ํŠน์ • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ํ™˜๊ฒฝ, ํ”„๋ ˆ์ž„์›Œํฌ์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  ์ข…์†๋˜์ง€ ์•Š๊ฒŒ ํ•ด์•ผํ•˜๋Š” ๊ฐœ๋ฐœ๋ก .

 

IoC (Inversion of Control) : "์ œ์–ด์˜ ์—ญ์ „" / DI (dependency Injection) : "์˜์กด์„ฑ ์ฃผ์ž…"

์˜์กด๊ด€๊ณ„๋กœ ์‚ฌ์šฉ๋  ํด๋ž˜์Šค๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๋Š”๊ฒŒ ์•„๋‹Œ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ํ•„์š”ํ•œ ๋•Œ์— ์ƒ์„ฑํ•˜๋Š”๊ฒƒ. IoC ์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ด€๋ฆฌ๋œ๋‹ค.

  • DI์™€ ๊ฐ™์€ ์ž‘์—…์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•˜๋Š”๊ฒŒ ์•„๋‹Œ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํ•ด์ค€๋‹ค.

  • ๋ณดํ†ต 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด DI๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  1. ์ƒ์„ฑ์ž ์ฃผ์ž… : ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•œ ์˜์กด์„ฑ ์ฃผ์ž…. ์Šคํ”„๋ง์—์„œ ๊ถŒ์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•
class A {
	private final B b;
    // ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•œ ์ฃผ์ž…
    public A(B b){
    this.b = b;
    }
}
  1. ํ•„๋“œ ์ฃผ์ž… : ํ•„๋“œ์— @Autowired ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•œ ์ฃผ์ž….
class A {
	@Autowired
    private B b;
}
  1. Setter ์ฃผ์ž… : ๊ฐ€๋ณ€๊ฐ์ฒด๋ฅผ ์ฃผ์ž…ํ•ด์•ผํ•  ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉ๋จ / ๊ฑฐ์˜ ์—†์Œ
class A {
	@Autowired
    public void setB(B b){
    	this.b = b;
    }
}

โ˜ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒ์„ฑ์ž ์ฃผ์ž…์ด ๊ถŒ์žฅ๋œ๋‹ค.

์ˆœํ™˜์ฐธ์กฐ ์˜ˆ๋ฐฉ

**Application ์ž‘๋™์‹œ์ **์—์„œ ์ˆœํ™˜์ฐธ์กฐ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€ป Spring Boot 2.6 ๋ถ€ํ„ฐ๋Š” ์ˆœํ™˜์ฐธ์กฐ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ—ˆ์šฉ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— 
์ดํ•˜ ๋ฒ„์ „์—์„œ๋งŒ ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค.

๋ถˆ๋ณ€์„ฑ ๋ณด์žฅ

Application ์‹คํ–‰ ์‹œ์ ์—์„œ ์˜์กด์„ฑ์ด ์ฃผ์ž…๋˜๊ณ  final ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๊ณผ ๋‹ฌ๋ฆฌ
๊ฐ์ฒด์˜ ๋ถˆ๋ณ€์„ฑ ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ…Œ์ŠคํŠธ์˜ ํŽธ๋ฆฌํ•จ

์ปดํŒŒ์ผ ์‹œ์ ์˜ ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…๋ฐ›์•„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•˜๊ณ , ๋ˆ„๋ฝ ๊ฐ์ฒด๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ 
์ปดํŒŒ์ผ ์‹œ์ ์—์„œ ํ™•์ธ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ๋ฅผ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

AOP (Aspect Oriented Programming) : "๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ"

๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ ํ˜น์€ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์žฌ์‚ฌ์šฉ, ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋Š”๊ฒƒ.
@Aspect ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉฐ

	@Aspect
   	class A{
    	// Around: ํƒ€์ผ“์˜ ์‹คํ–‰ ์ „ํ›„๋กœ ์ฒ˜๋ฆฌ ๋จ
    	@Around("b()")
		public void test(){
      		// b() ๋ฉ”์†Œ๋“œ์˜ ์ ์šฉ๋  ์ฝ”๋“œ
        }
        // Before: ํƒ€์ผ“์ด ์‹คํ–‰ ์ „ ์ฒ˜๋ฆฌ ๋จ
        @Before("b()")
        public void test2(){
      		// ์ƒ๋žต
        }
        // After Returning: ํƒ€๊ฒŸ์ด ์‹คํ–‰ ํ›„ ์ฒ˜๋ฆฌ ๋จ
        @After Returning("b()")
        public void test3(){
  		// ์ƒ๋žต
        }
        // After Throwing: ํƒ€๊ฒŸ์ด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋ฉด ์ฒ˜๋ฆฌ ๋จ
        @After Throwing("b()")
        public void test4(){
  		// ์ƒ๋žต
        }
	}

์ด์™€ ๊ฐ™์ด ์‹คํ–‰, ์˜ˆ์™ธ์ฒ˜๋ฆฌ ์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œ ์ฒ˜๋ฆฌ๋˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

PSA (Portable Service Abstraction) : "๊ฐ„ํŽธํ•œ ์ถ”์ƒํ™” ์„œ๋น„์Šค"

๊ฐ™์€ ์ถ”์ƒํ™” ๊ณ„์ธต๋‚ด์— ๋‹ค๋ฅธ ์„œ๋น„์Šค๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ์ˆ˜์ •์—†์ด ๊ต์ฒด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

   ์˜์กด์„ฑ์„ spring-boot-starter-web > spring-boot-starter-webflux๋กœ
   ๋ณ€๊ฒฝ๋งŒ ํ•ด๋„ tomcat์ด ์•„๋‹Œ netty๋กœ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
   โ†ณ ์Šคํ”„๋ง์—์„œ ์„œ๋น„์Šค๊ฐ€ ์ถ”์ƒํ™”๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ

 

์žฅ์ 

์ •ํ˜•ํ™” :

  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์ถ”์ƒํ™” ์ธํ„ฐํŽ˜์ด์Šค ๋“ฑ ์ •ํ˜•ํ™”๋œ ๋ถ€๋ถ„์œผ๋กœ ์ผ์ • ์ˆ˜์ค€ ์ด์ƒ์˜ ํ’ˆ์งˆ์„ ์œ ์ง€ํ•˜๊ณ  ์ƒ์‚ฐ์„ฑ์ด ์ฆ๊ฐ€ํ•œ๋‹ค.

IoC / DI :

  • ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•ด์•ผํ•  ๋ถ€๋ถ„์„ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํ•ด์คŒ์œผ๋กœ์จ ์ƒ์‚ฐ์„ฑ์ด ์ฆ๊ฐ€ํ•œ๋‹ค.

Spring Boot ๐ŸŒผ

์„ค์ •์ด ๊ฐ„ํŽธํ•œ ์Šคํ”„๋ง๊ธฐ๋ฐ˜ ํ”„๋ ˆ์ž„์›Œํฌ

๊ธฐ๋ณธ์ ์ธ ๋ถ€๋ถ„์€ ์Šคํ”„๋ง๊ณผ ๋™์ผํ•จ.

spring initializr ๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค๊ฑฐ๋‚˜ InteillJ์™€ ๊ฐ™์€ IDE๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ๊ฐ€๋Šฅ

์žฅ์ 

๋‚ด์žฅ WAS :

  • ํ”„๋กœ์ ํŠธ๋‚ด์— WAS๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ๊ฐ„ํŽธํ•จ.
  • spring-boot-starter-web์ด Tomcat์„ ๋‚ด์žฅ
    โ†ณ spring-boot-starter-webflux์˜ ๊ฒฝ์šฐ netty๋กœ ์„ค์ •๊ฐ€๋Šฅ

์ž๋™ ํ™˜๊ฒฝ์„ค์ • :

  • application.properties์— DB, View, logging ๋“ฑ ๊ฐ„ํŽธํ•˜๊ฒŒ ์„ค์ • ํ•  ์ˆ˜ ์žˆ์Œ.

๋ฐฐํฌ :

  • Jar๋กœ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.Jar๋กœ ๋นŒ๋“œํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•จ.