๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Study/Java

[TIL] ํ”„๋ ˆ์ž„์›Œํฌ : Spring

by hong- 2022. 6. 13.

๐Ÿ‘Š๐Ÿป ํ”„๋ ˆ์ž„์›Œํฌ : Framework

  - ๋ผˆ๋Œ€, ํ‹€, ๊ตฌ์กฐ

  - ์–ด๋–ค ๋Œ€์ƒ์˜ ํฐ ํ‹€์ด๋‚˜ ์™ธํ˜•์ ์ธ ๊ตฌ์กฐ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๊ธฐ ์œ„ํ•œ ํ‹€์ด๋‚˜ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณต

  - ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌํ˜„์„ ์ˆ˜์›”ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์ œ๊ณต๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ํ™˜๊ฒฝ

  - ํ”„๋ ˆ์ž„์›Œํฌ๋งŒ์œผ๋กœ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํ”„๋ ˆ์ž„์›Œํฌ ๋ผˆ๋Œ€ ์œ„์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ๊ฐœ๋ฐœ

  - ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ธํ„ฐํŽ˜์ด์Šค ํŒจํ‚ค์ง€

    ex) Collections ํ”„๋ ˆ์ž„์›Œํฌ์˜ Map, Set, List ๋“ฑ

  ๐Ÿ’ก ์ธํ„ฐํŽ˜์ด์Šค : Interface

      - ๊ฐœ๋ฐœ์˜ ๊ทผ๊ฐ„์„ ์ด๋ฃจ๋Š” ๊ตฌ์กฐ์™€ ํ•„์š”ํ•œ ์ฝ”๋“œ, ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์•”ํ˜ธํ™” ์ฒด๊ณ„, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™ ๋ฐฉ์‹์˜ ์ง‘ํ•ฉ์ฒด

      - ์‚ฌ๋ฌผ๊ฐ„, ์‚ฌ๋žŒ๊ฐ„, ์‚ฌ๋žŒ๊ณผ ์‚ฌ๋ฌผ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ์žฅ์น˜, ๋ฐฉ๋ฒ•, ํ˜•์‹, ๊ณต๊ฐ„ ๋“ฑ


๐Ÿ™Œ๐Ÿป ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : Library

  - ์‚ฌ์ „์— ๋งŒ๋“ค์–ด์ง„ ์ฝ”๋“œ๋“ค์˜ ์ง‘ํ•ฉ

  - ํ•„์š”์‹œ์— ๊ณต๊ฐœ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ž์‹ ์˜ ํ”„๋กœ๊ทธ๋žจ์— ํ˜ธ์ถœํ•˜์—ฌ ์‚ฌ์šฉ

  - ์žฌ์‚ฌ์šฉ์ด ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ๋ฐ˜๋ณต์  ์ฝ”๋“œ ์ž‘์„ฑ์„ ์—†์• ๊ธฐ ์œ„ํ•ด ์–ธ์ œ๋“ ์ง€ ํ•„์š”ํ•œ ๊ณณ์—์„œ ํ˜ธ์ถœ ๊ฐ€๋Šฅ

   ex) ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋ฐ ์ฒ˜๋ฆฌ ์‹œ ์‚ฌ์šฉํ•˜๋Š” pandas, numpy ๋“ฑ๋„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

   ex) Class๋‚˜ Functions์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ๋“ค


๐Ÿ“ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฐจ์ด

  โ–ช๏ธ ๊ณตํ†ต์  : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌํ˜„์„ ์œ„ํ•ด ํ•„์š”ํ•œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ธฐ๋Šฅ ์ œ๊ณต

  โ–ช๏ธ ์ฐจ์ด์  : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ๋ฆ„์— ๋Œ€ํ•œ ์ฃผ๋„๊ถŒ

   โ‘  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ฃผ๋„๊ถŒ์ด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์žˆ์Œ

    - ํ•„์š”ํ•  ๋•Œ ํ•ด๋‹น ๋ชจ๋“ˆ์„ ํ˜ธ์ถœํ•˜์—ฌ ์‚ฌ์šฉ

    - ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ๊ฐ€์ ธ๋‹ค๊ฐ€ ์‚ฌ์šฉ

   โ‘ก ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ฃผ๋„๊ถŒ์ด ํ”„๋ ˆ์ž„์›Œํฌ์— ์žˆ์Œ

    - ๋‹จ์ˆœ ํ˜ธ์ถœ์šฉ์ด ์•„๋‹Œ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ตฌ์กฐ๋ฅผ ์žก์œผ๋ฉฐ ๊ฐ์ข… ์™ธ๋ถ€ ์š”์†Œ์™€ ์ ‘ํ•˜๋Š” ์˜์—ญ์— ๋Œ€ํ•œ ๊ตฌํ˜„ ๋ฐฉ์‹ ์ œ์•ˆ

    - ํ”„๋ ˆ์ž„์›Œํฌ๋ผ๋Š” ํŠน์ • ๊ณต๊ฐ„์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ–์ถฐ์ง„ ๊ตฌ์กฐ ์•ˆ์—์„œ ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ ์ž‘์„ฑ


๐Ÿค™๐Ÿป ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ : Spring Framework

  - ์ž๋ฐ” ๊ธฐ๋ฐ˜์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ framework

  - ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™์— ์ž˜ ๋งž๋Š” ์žฌ์‚ฌ์šฉ๊ณผ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์Šคํ‚ฌ ํ–ฅ์ƒ ๊ฐ€๋Šฅ

  - ์„ฑ๋Šฅ๊ณผ ์„œ๋น„์Šค์˜ ์•ˆ์ „์„ฑ์ด ํ•„์š”ํ•œ ๊ธฐ์—…์šฉ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์‹œ์Šดํ…œ์„ ์ œ๋Œ€๋กœ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ ๋ณด์œ 


  ๐Ÿ“ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ ํŠน์ง•

   โ‘  ์˜์กด์„ฑ ์ฃผ์ž… (DI)

   - ๊ฐ์ฒด๊ฐ€ ์„œ๋กœ ์˜์กดํ•˜๋Š” ๊ด€๊ณ„๊ฐ€ ๋˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ 

   - ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ์–ด๋– ํ•œ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Œ์„ ์˜๋ฏธ

   โ‘ก ์ œ์–ด์˜ ์—ญ์ „ (IoC)

   - ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋žจ์€ '๊ฐ์ฒด์ƒ์„ฑ - ์˜์กด์„ฑ ๊ฐ์ฒด์ƒ์„ฑ - ๊ฐ์ฒด ๋‚ด ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ' : ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœ๊ทธ๋žจ ์ œ์–ด

   - but, ์Šคํ”„๋ง์€ ์ž๊ธฐ๊ฐ€ ์‚ฌ์šฉํ•  ๊ฐ์ฒด๋ฅผ ์„ ํƒํ•˜์ง€ ์•Š๊ณ  ์ž์‹ ์ด ์–ด๋””์„œ ๋งŒ๋“ค์–ด์ง€๊ณ  ์‚ฌ์šฉํ•˜๋Š”์ง€ ๋ชจ๋ฆ„

   โ‘ข ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (AOP)

   - ์ผ๋ฐ˜์ ์œผ๋กœ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋Š” OOP(๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ) ์‚ฌ์šฉ

     → ๊ฐ™์€ ๊ด€์‹ฌ์‚ฌ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๊ณณ์— ๋ถ„๋ฆฌํ•˜์—ฌ ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„๋ฅผ ๊ฐ€์ง = ๋…๋ฆฝ์ ์ด๊ณ  ์œ ์—ฐํ•˜๊ฒŒ ์บก์Аํ™”

     → but, ์ค‘๋ณต๋œ ์ฝ”๋“œ๋“ค์ด ๋งŽ์•„์ง€๊ณ  ๊ฐ€๋…์„ฑ, ํ™•์žฅ์„ฑ, ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋–จ์–ด๋œจ๋ฆผ

     → ๋•Œ๋ฌธ์— ๋“ฑ์žฅํ•œ ๊ฒƒ์ด AOP !

   - AOP๋Š” ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์— ๋กœ๊น…์ด๋‚˜ ๋ณด์•ˆ์„ ์„ค์ •ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ๊ธฐ์กด ๋กœ์ง์—๋Š” ์ˆ˜์ •์„ ๊ฐ€ํ•˜์ง€์•Š๊ณ  ํ™œ์šฉ

     → ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ํ•œ ๊ณณ์— ๋ชจ์•„ ์ค‘๋ณต ์ฝ”๋“œ ์ œ๊ฑฐ ๊ฐ€๋Šฅ

     → ํšจ์œจ์ ์ธ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์žฌ์‚ฌ์šฉ์„ฑ ๊ทน๋Œ€ํ™”

 

→ ์ด๋ฅผ ํ†ตํ•ด SW์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๋ฉฐ ๋‹จ์œ„ํ…Œ์ŠคํŠธ ์šฉ์ด

    - ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์ข…ํ•ฉ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ๋Ÿ‰ํ™” ์†”๋ฃจ์…˜

    - ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ–‰ํ•ด์ง€๋Š” ๋Œ€๊ทœ๋ชจ ํ™˜๊ฒฝ ๊ฐœ๋ฐœ์— ์ ํ•ฉ

    - ๊ฒฝ๋Ÿ‰ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ๋‹ด๊ณ  ๊ด€๋ฆฌ

    - ๊ฐ์ฒด ์ƒ์„ฑ, ์†Œ๋ฉธ ๋“ฑ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋ฉฐ Spring ์ปจํ…Œ์ด๋„ˆ๋กœ๋ถ€ํ„ฐ ํ•„์š” ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉ


 ๐Ÿ“ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์— ์—ด๊ด‘ํ•˜๋Š” ์ด์œ  ?

   - ๊ธฐ์—…์šฉ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์‹œ์Šคํ…œ์—์„œ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋Š”๋ฐ  ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ตœ์ ํ•ฉ

  ๐Ÿ’ก ๊ธฐ์—…์šฉ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์‹œ์Šคํ…œ 

     - ๊ธฐ์—…์˜ ์—…๋ฌด๋ฅผ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ์‹œ์Šคํ…œ

     - ๋Œ€๋Ÿ‰์˜ ์‚ฌ์šฉ์ž ์š”์ฒญ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์„œ๋ฒ„ ์ž์› ํšจ์œจ์„ฑ ๋ฐ ๋ณด์•ˆ์„ฑ, ์‹œ์Šคํ…œ ์•ˆ์ •์„ฑ ๋ฐ ํ™•์žฅ์„ฑ์„ ์ถฉ๋ถ„ํžˆ ๊ณ ๋ คํ•˜์—ฌ ๊ตฌ์ถ•


 ๐Ÿ“ Spring ๋„์ž… ์ „ ์‚ฌ์šฉํ–ˆ๋˜ ๊ธฐ์ˆ 

    โ‘  JSP๋ฅผ ์ด์šฉํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

    - JSP๋Š” Java Server Page์˜ ์•ฝ์ž๋กœ ์ดˆ์ฐฝ๊ธฐ Java ๊ธฐ๋ฐ˜์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ

    - ํ‚ค์›Œ๋“œ๊ฐ€ ํƒœ๊ทธํ™”๋˜์–ด ๋ฐฐ์šฐ๊ธฐ ์‰ฌ์›€

    - ์ž๋ฐ”์ฝ”๋“œ๋ฅผ <% %> ํƒœ๊ทธ ์•ˆ์— ์ฒ˜๋ฆฌํ•ด์ฃผ์–ด์•ผ ํ•จ

    - HTML ์ฒ˜๋Ÿผ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋ฐ”์ฝ”๋“œ๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•จ


  โ‘ก ์„œ๋ธ”๋ฆฟ์„ ์ด์šฉํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

   - ์›น ๊ธฐ๋ฐ˜์˜ ์š”์ฒญ์— ๋Œ€ํ•œ ๋™์ ์ธ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค

   - JSP์—์„œ ์„œ๋ฒ„ ์ธก Java์ฝ”๋“œ๋Š” ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค๋กœ ๋ถ„๋ฆฌ

   ๐Ÿ’ก ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ?

      - ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์–ด๋–ค ์š”์ฒญ์‹œ ๊ทธ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ์ „์†กํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•จ


  โ‘ข Spring MVC๋ฅผ ์ด์šฉํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

   - ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด์˜ค๊ฑฐ๋‚˜ charecter-set์„ ์ง€์ •ํ•ด์ฃผ๋Š” ์ž‘์—… ๋“ฑ์„ ์ง์ ‘ ์ฝ”๋“œ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ Spring์ด ์•Œ์•„์„œ ์ฒ˜๋ฆฌ

   - but, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์žก๋Š” ์„ค์ • ์ž‘์—…์ด ๋ถˆํŽธ


  โ‘ฃ Spring Boot๋ฅผ ์ด์šฉํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

   - Spring์˜ ๋ณต์žกํ•œ ์„ค์ • ์ž‘์—…๋„ Spring์ด ๋Œ€์‹  ์ฒ˜๋ฆฌํ•ด์ฃผ์–ด ๊ฐœ๋ฐœ์ž๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—๋งŒ ์ง‘์ค‘ ๊ฐ€๋Šฅ