๋ฉ‹์‚ฌ Backend Plus 4์ผ์ฐจ ๐Ÿฆ

์‹ ์žฌ์›ยท2023๋…„ 10์›” 26์ผ

์ž๋ฐ” ํ™˜๊ฒฝ๋ณ€์ˆ˜

  • ํ˜„์—…์— ๋‚˜๊ฐ€๋ณด๋ฉด ์ž๋ฐ” 8, 11, ์ตœ์‹  release ๋ฒ„์ „์ธ 17๋ฒ„์ „๊นŒ์ง€ ๋‹ค์–‘ํ•˜๊ฒŒ ์‚ฌ์šฉ ํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฐ•์‚ฌ๋‹˜ ๊ป˜์„œ๋Š” ์ด๋ฒˆ ๊ณผ์ •์€ ์ž๋ฐ” 11๋ฒ„์ „์„ ์‚ฌ์šฉ ํ•œ๋‹ค๊ณ  ํ•˜์…”์„œ, ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (๊ธฐ์กด์€ 17๋ฒ„์ „ ์‚ฌ์šฉ)

์ž๋ฐ” 11๋ฒ„์ „ ์„ค์ • ๋ธ”๋กœ๊ทธ Reference
์ž๋ฐ” 17๋ฒ„์ „ ์„ค์ • ๋ธ”๋กœ๊ทธ Reference

ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •์„ ์ž˜ ์ •๋ฆฌํ•ด์ฃผ์‹  ๋ธ”๋กœ๊ทธ ์ž…๋‹ˆ๋‹ค. ์ฐธ๊ณ ํ•˜์…”์„œ ์„ค์ • ํ•˜๋ฉด ๋ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.


๊ธฐ๋ณธ์ ์ธ Spring ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ์ž‘์„ฑ ํ•˜์ง€ ์•Š๊ณ  ์ž‘์„ฑ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Spring vs Spring Boot

  • Spring ์ด๋ž€

Spring Framework ๋ผ๊ณ ๋„ ํ•˜๋ฉฐ ์ž๋ฐ” ์–ธ์–ด๋ฅผ ํ†ตํ•ด ์†์‰ฝ๊ฒŒ ๋™์ ์ธ ์›น ์‚ฌ์ดํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณต ํ•ฉ๋‹ˆ๋‹ค.
EX :
DI (์˜์กด์„ฑ ์ฃผ์ž…),
AOP (๊ด€์ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ) โฌ… ์ฃผ๋‹ˆ์–ดํ•œํ…Œ ๋งก๊ธฐ์ง„ ์•Š๋Š”๋‹ค๊ณ  ํ•˜์‹ฌ.

โžก ํ•˜์ง€๋งŒ ์˜์กด์„ฑ (dependency) ๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋ฒ„์ „(version) ๊นŒ์ง€ ์ •ํ™•ํ•˜๊ฒŒ ํ•œ๋•€ ํ•œ๋•€ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
โžก ๊ตฌ์„ฑ์— ๋Œ€ํ•œ ์„ค์ • ์ฆ‰ Spring Boot ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด application.properties, yml ํŒŒ์ผ์—์„œ ๊ตฌ์กฐ๋ฅผ ๋งž์ถฐ ์ž‘์„ฑํ•˜๋ฉด ๋˜์ง€๋งŒ, Spring ์—์„œ๋Š” ๊ตฌ์„ฑ์— ๋Œ€ํ•ด ์„ค์ •ํ•˜๋ ค๋ฉด ๊ธด ๋กœ์ง์„ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Spring Boot ๋ž€

์ด๋Ÿฌํ•œ ์˜์กด์„ฑ์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๊ฐ€ ์งง์•„์ง€๊ณ , ์•„๋ž˜์˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ starter ๋ฅผ ํ†ตํ•œ ๋ฒ„์ „์„ ์ž๋™ํ™” ํ•ฉ๋‹ˆ๋‹ค. (์—„์ฒญ๋‚œ ์žฅ์ )
โžก ์ถ”๊ฐ€๋กœ jar ํŒŒ์ผ์„ ํ†ตํ•ด ์†์‰ฝ๊ฒŒ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค.

Spring Boot ์ •๋ฆฌ

  1. ์„ค์ •์ด ๊ฐ„ํŽธํ•จ
  2. ์˜์กด์„ฑ ์ถ”๊ฐ€์™€ ์‚ญ์ œ๊ฐ€ ํŽธ๋ฆฌ, ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ํ•ด์คŒ
  3. ๋‚ด์žฅ ์„œ๋ฒ„๋กœ ์ธํ•œ ๋ฐฐํฌ๊ฐ€ ๊ฐ„๋‹จํ•จ
  4. Spring Security, Spring Data Jpa ๋“ฑ์˜ ์˜์กด์„ฑ์„ ์‰ฝ๊ฒŒ ์‚ฌ์šฉ ํ• ์ˆ˜ ์žˆ๋‹ค.

WS (์›น์„œ๋ฒ„) vs WAS (์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„)

  • WS (์›น์„œ๋ฒ„) ๋ž€

HTTP ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, ์˜ˆ๋ฅผ ๋“ค์–ด HTML, CSS ๋“ฑ ์ •์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ์‹œ ์ œํ’ˆ๊ตฐ : apache, Nginx

  • WAS (์›น "์• ํ”Œ๋ฆฌ์ผ€์ด์…˜" ์„œ๋ฒ„) ๋ž€

๋™์ ์ธ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด ๋‚ผ์ˆ˜ ์žˆ๋Š” ์„œ๋ฒ„, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๋„ ์ˆ˜ํ–‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ์‹œ ์ œํ’ˆ๊ตฐ : Tomcat, ์ œ์šฐ์Šค

์ •๋ฆฌ

WS (์›น์„œ๋ฒ„) ๋Š” ์ •์ ์ธ ํŽ˜์ด์ง€์™€ ๊ฐ™์€ ์ปจํ…์ธ ๋งŒ ์ œ๊ณตํ• ์ˆ˜ ์žˆ๊ณ ,

WAS (์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„) ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์‹คํ–‰ํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜๊ณ  ์–ด๋– ํ•œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋งŒ๋“ค์–ด์ง„ ๋ฐ์ดํ„ฐ ์ปจํ…์ธ ๋ฅผ ์ œ๊ณตํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โžก ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋ณ€ํ™”๋˜๋Š” ์ •๋ณด๋ฅผ ์ œ๊ณตํ• ์ˆ˜ ์žˆ๋Š”์ง€ ์ œ๊ณตํ• ์ˆ˜ ์—†์œผ๋ฉด WS,
์žˆ์œผ๋ฉด WAS ์ž…๋‹ˆ๋‹ค.

์‹ค์Šต

@RestController ๋กœ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
โžก View ์—”์ง„๊ณผ ์ƒ๊ด€์—†์ด RestFul API ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค๋•Œ ์‚ฌ์šฉ

์•„๋ž˜์˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋˜๋ฉด json ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ ๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
(์ฒ˜์Œ ์•ˆ ์‚ฌ์‹ค ์ด์˜€๋‹ค.)
(๋‚˜์ค‘์—๋Š” DTO ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœ๊ณผ ๋ฐ˜ํ™˜)
(์—ฌ๊ธฐ์„œ DTO ํด๋ž˜์Šค๋Š” ํ…Œ์ด๋ธ”๋‹น ํ•œ๊ฐœ ๋ผ๊ณ  ํ•˜์‹ฌ) โžก (VO (read-only) ๊ฐœ๋…๊ณผ ์ฐจ์ด)

์—ฌ๊ธฐ์„œ ์™œ HashMap<Object,Object> store = new HashMap<>() ์ด ์•„๋‹ˆ๋ผ Map<Object, Object> store = new HashMap<>() ์œผ๋กœ ์„ ์–ธ ํ• ๊นŒ์š”?
(ArrayList ๊ฐ์ฒด๋„ ๋งˆ์ฐฌ๊ฐ€์ง€)

๊ตฌํ˜„์ฒด ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ ์–ธํ•จ์œผ๋กœ์จ ๋‹คํ˜•์„ฑ์„ ์ง€์›ํ•˜๊ณ , ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ณ€๊ฒฝ์— ์œ ์—ฐํ•œ ๊ตฌ์กฐ๋กœ ์„ค๊ณ„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ž…๋‹ˆ๋‹ค.

์•„๋ž˜์˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ LinkedList ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ArrayList ๋กœ ์„ ์–ธ๋œ ๋ชจ๋“  ๋ถ€๋ถ„์„ ๋ฐ”๊ฟ”์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. โžก ์œ ์—ฐํ•˜์ง€ ๋ชปํ•จ


Sring.buffer ์™€ SringBuilder ์˜ ์ด์•ผ๊ธฐ์—์„œ ํŒŒ์ƒ๋˜์–ด ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ, ์“ฐ๋ ˆ๋“œ ์•ˆ์ •์„ฑ, ๋™๊ธฐํ™” ๊ฐœ๋…์„ ์„ค๋ช… ํ•ด์ฃผ์…จ๊ณ  POJO์— ๋Œ€ํ•ด์„œ๋„ ์„ค๋ช… ํ•ด์ฃผ์…จ์ง€๋งŒ
๋‡Œ๊ฐ€ ๋ฒ„ํ‹ฐ์ง€ ๋ชปํ–ˆ๋‹ค....
(์›น ๊ฐœ๋ฐœ ํ• ๋•Œ๋Š” ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•˜์‹ฌ)
(์‹œ๊ฐ„ ๋‚ด์–ด์„œ ๊ณต๋ถ€ ํ•ด๋ณด์ž ๐Ÿค”)

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