๐ŸŒฑ Spring Boot ์‹œ์ž‘ํ•˜๊ธฐ - 3. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”„๋ ˆ์ž„์›Œํฌ, ๊ทธ๋ฆฌ๊ณ  ์Šคํ”„๋ง

๊น€์„ธํ˜„ยท2025๋…„ 10์›” 22์ผ

Spring

๋ชฉ๋ก ๋ณด๊ธฐ
3/19

๋‚ ์งœ:2025-10-22


ํ•™์Šต ๋ชฉํ‘œ

  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Library)์˜ ๊ฐœ๋…๊ณผ ํŠน์ง• ์ดํ•ด
  • ํ”„๋ ˆ์ž„์›Œํฌ(Framework)์˜ ๊ฐœ๋…๊ณผ ํŠน์ง• ์ดํ•ด
  • ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ(Spring Framework)์˜ ์—ญํ• ๊ณผ ์ค‘์š”์„ฑ ์ดํ•ด

โœ… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Library)

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ž€?

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ํด๋ž˜์Šค, ํ•จ์ˆ˜ ๋“ฑ์„ ๋ชจ์•„๋†“์€ ์ฝ”๋“œ์˜ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค.

  • ๋งˆ์น˜ ๋„์„œ๊ด€์—์„œ ํ•„์š”ํ•œ ์ฑ…์„ ๊บผ๋‚ด ๋ณด๋“ฏ, ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ๋„๊ตฌ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.


๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์žฅ์ 

  • ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณต์žกํ•œ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋จ โ†’ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ
  • ๊ฒ€์ฆ๋œ ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์•ˆ์ •์„ฑ๊ณผ ํ’ˆ์งˆ์ด ๋†’์Œ
  • ์ปค๋ฎค๋‹ˆํ‹ฐ๋‚˜ ๋ฌธ์„œ ์ง€์›์ด ํ’๋ถ€ํ•œ ๊ฒฝ์šฐ, ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›€

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋‹จ์ 

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

โœ… ํ”„๋ ˆ์ž„์›Œํฌ(Framework)

ํ”„๋ ˆ์ž„์›Œํฌ๋ž€?

  • ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ(ํ‹€)์ž…๋‹ˆ๋‹ค.

  • Frame(ํ‹€) + Work(์ผํ•˜๋‹ค) โ†’ โ€œ์ผํ•˜๊ธฐ ์œ„ํ•œ ํ‹€โ€

  • ์ฆ‰, ๊ฐœ๋ฐœ์ž๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ตฌ์กฐ์™€ ๊ทœ์น™ ์•ˆ์—์„œ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์žฅ์ 

  • ์ผ๊ด€๋œ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ๊ณผ ํ˜‘์—… ํšจ์œจ์ด ๋†’์Œ
  • ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘ ๊ฐ€๋Šฅ (๋ฐ˜๋ณต์ ์ธ ์„ค์ • ์ž‘์—… ๊ฐ์†Œ)
  • ๊ธฐ๋ณธ์ ์ธ ๋ณด์•ˆ ๊ธฐ๋Šฅ๊ณผ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ์ œ๊ณต
    -๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•˜๋ฉฐ, ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ๋ฌธ์„œ ์ง€์›์ด ํ’๋ถ€

ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋‹จ์ 

  • ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•˜์—ฌ ์ฒ˜์Œ ํ•™์Šต ๊ณก์„ ์ด ๊ฐ€ํŒŒ๋ฆ„
  • ๋ฒ„์ „์ด ๋ฐ”๋€” ๋•Œ ๊ธฐ์กด ์ฝ”๋“œ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
  • ์ •ํ•ด์ง„ ๊ทœ์น™๊ณผ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ผ์•ผ ํ•˜๋ฏ€๋กœ ์ž์œ ๋„๊ฐ€ ์ œํ•œ๋จ

โœ… ์ •๋ฆฌ: ํ”„๋ ˆ์ž„์›Œํฌ vs ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๊ตฌ๋ถ„๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Library)ํ”„๋ ˆ์ž„์›Œํฌ(Framework)
์˜๋ฏธ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ ๋ฌถ์Œ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๊ตฌ์กฐ์  ํ‹€
์ œ์–ด ํ๋ฆ„๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ œ์–ดํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ œ์–ด (IoC, ์ œ์–ด์˜ ์—ญ์ „)
์‚ฌ์šฉ ๋ชฉ์ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋ฐ˜์„ ๊ตฌ์„ฑ
์˜ˆ์‹œGson, Lombok, JUnit ๋“ฑSpring, Django, React ๋“ฑ
  • ๐Ÿ’ฌ ์ฆ‰, โ€œํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์˜ ๋ชจ์Œ์ด๋ฉฐ, ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๊ตฌ์กฐ์  ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•œ๋‹ค.โ€

-ํ”„๋ ˆ์ž„์›Œํฌ ์•ˆ์—๋Š” ์—ฌ๋Ÿฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๊ณ ,์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด ์„œ๋กœ ํ˜ธํ™˜๋˜๋„๋ก ๊ตฌ์„ฑ๋˜์–ด ์žˆ์–ด ๊ฐœ๋ฐœ์ž๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


โœ… ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ (Spring Framework)

Spring์ด๋ž€?

  • Java ๊ธฐ๋ฐ˜์˜ ์˜คํ”ˆ ์†Œ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.
  • โ€œ์ž๋ฐ” ๊ฐœ๋ฐœ์„ ์‰ฝ๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌโ€

์™œ Spring์ด ์ค‘์š”ํ•œ๊ฐ€์š”?

  • Spring์€ ๋ณต์žกํ•œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์‰ฝ๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ๊ฐ•๋ ฅํ•˜๊ณ  ํฌ๊ด„์ ์ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • ๋ณต์žกํ•œ ์ธํ”„๋ผ ์„ค์ •์„ ์ž๋™ํ™”

  • ๊ฐ์ฒด ๊ฐ„ ์˜์กด์„ฑ ๊ด€๋ฆฌ (IoC, DI)

  • ๋ณด์•ˆ, ํŠธ๋žœ์žญ์…˜, AOP ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ ๋‚ด์žฅ

  • ๐Ÿ’ก ํ•ต์‹ฌ ํฌ์ธํŠธ

    • โ€œ๊ฐœ๋ฐœ์ž๋Š” ์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•ด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค.โ€
    • ๊ธฐ์ˆ ์  ์„ธ๋ถ€ ์‚ฌํ•ญ์€ ์Šคํ”„๋ง์ด ๋Œ€์‹  ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.

์˜ˆ์‹œ๋กœ ๋ณด๋Š” ์ฐจ์ด

Before (Spring ์‚ฌ์šฉ ์ „):

public class UserService {
   private UserRepository repository = new UserRepository(); // ์ง์ ‘ ๊ฐ์ฒด ์ƒ์„ฑ

   public void register() {
       repository.save();
   }
   }

After (Spring ์‚ฌ์šฉ ํ›„):

@Service
    public class UserService {
    private final UserRepository repository;

    public UserService(UserRepository repository) { // ์˜์กด์„ฑ ์ฃผ์ž… (DI)
        this.repository = repository;
    }

    public void register() {
        repository.save();
    }
    }
  • ๐Ÿ‘‰ Spring์ด ๊ฐ์ฒด๋ฅผ ๋Œ€์‹  ๊ด€๋ฆฌํ•˜๊ณ  ์ฃผ์ž…(DI) ํ•ด์ฃผ๋ฏ€๋กœ, ๊ฐœ๋ฐœ์ž๋Š” ์ฝ”๋“œ์˜ โ€œ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์งโ€์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •๋ฆฌ

  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ: ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ์ฝ”๋“œ ๋ชจ์Œ
  • ํ”„๋ ˆ์ž„์›Œํฌ: ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฐœ๋ฐœ ๊ตฌ์กฐ(ํ‹€)
  • Spring: ์ž๋ฐ” ๊ธฐ๋ฐ˜ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•ต์‹ฌ ๋กœ์ง์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋•๋Š” ๋„๊ตฌ
profile
๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ•œ ๊ฑธ์Œ

0๊ฐœ์˜ ๋Œ“๊ธ€