[Note] ๐Ÿ“ ๊ธฐ์ˆ ๋ฉด์ ‘ ๋Œ€๋น„ ์ •๋ฆฌ ๋…ธํŠธ

์ด์ค€์˜ยท2023๋…„ 10์›” 11์ผ
0

โœ๐Ÿป Note

๋ชฉ๋ก ๋ณด๊ธฐ
5/5
post-thumbnail

๊ธฐ์ˆ ๋ฉด์ ‘ ๋Œ€๋น„ ๊ฐœ๋… ์ •๋ฆฌ

1. Call by reference๋ž€ ๋ฌด์—‡์ด๊ณ  ๋ณดํ†ต ์–ด๋–ป๊ฒŒ ์“ฐ์ด๋‚˜์š”?

Call by reference - ์ฐธ์กฐ์— ์˜ํ•œ ํ˜ธ์ถœ๋กœ์จ, ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ์•ˆ์—๋Š” ํ•จ์ˆ˜๋ฅผ ์œ„ํ•œ ๋ณ„๋„์˜ ์ž„์‹œ ๊ณต๊ฐ„์ด ์ƒ์„ฑ๋œ๋‹ค. ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ธ์ž๋กœ ์ „๋‹ฌ๋˜๋Š” ๋ณ€์ˆ˜์˜ ๋ ˆํผ๋Ÿฐ์Šค(์ฃผ์†Œ)๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ํ•ด๋‹น ๋ณ€์ˆ˜๋ฅผ ๊ฐ€๋ฅดํ‚จ๋‹ค. ํ•จ์ˆ˜ ์•ˆ์—์„œ ์ธ์ž์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด, ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ์— ์žˆ๋˜ ๋ณ€์ˆ˜๋“ค๋„ ๊ฐ’์ด ๋ฐ”๋€๋‹ค. C์–ธ์–ด์—์„œ Swap์„ ๊ตฌํ˜„ํ• ๋•Œ ๊ฐ’์ด ์•„๋‹Œ ์ฃผ์†Œ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ™์€ ์ด์œ ์—์„œ์ด๋‹ค.
Call by value - ๊ฐ’์— ์˜ํ•œ ํ˜ธ์ถœ๋กœ์จ, ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ์ „๋‹ฌ๋˜๋Š” ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ณต์‚ฌํ•˜์—ฌ ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ „๋‹ฌํ•œ๋‹ค. ๋ณต์‚ฌ๋œ ์ธ์ž๋Š” ํ•จ์ˆ˜ ์‹คํ–‰์ด ์ข…๋ฃŒ๋  ๋•Œ ๊ฐ™์ด ์†Œ๋ฉธํ•˜๋ฉฐ, ์™ธ๋ถ€์˜ ๊ฐ’์„ ๋ณต์‚ฌํ•ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๋ถ€์—์„œ ์ธ์ž์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ ์™ธ๋ถ€์˜ ๊ฐ’์—๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๋‹ค.
Java์—์„œ๋Š” primitive type(int, long, ...)์ด ์•„๋‹ˆ๋ผ๋ฉด call-by-reference๋กœ ๋™์ž‘ํ•œ๋‹ค.

2. Override ์™€ Overload ๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์‹ค ์ˆ˜ ์žˆ์„๊นŒ์š”?

Override๋Š” ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค๋‚˜ ๊ตฌํ˜„ํ•  ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. Override๋Š” ์žฌ์ •์˜ ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„๊ณผ, ๋งค๊ฐœ๋ณ€์ˆ˜, ๋ฆฌํ„ดํ˜•์ด ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
Overload๋Š” ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ฉ”์†Œ๋“œ๋ผ๋„ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์ง€์ •ํ•˜์—ฌ ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•˜๋Š”๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. Overload๋Š” ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„์ด ๊ฐ™์•„์•ผํ•˜๊ณ , ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋‹ฌ๋ผ์•ผํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌํ„ดํƒ€์ž…์€ ๊ฐ™๊ฑฐ๋‚˜ ๋‹ฌ๋ผ๋„ ์ƒ๊ด€ ์—†์ง€๋งŒ, ๋ฆฌํ„ดํƒ€์ž…๋งŒ ๋‹ค๋ฅด๋‹ค๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ ์ž…์žฅ์—์„œ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์—†๊ธฐ์— Overload๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค.

3. JPA๋Š” ์–ธ์ œ ํ•„์š”ํ•˜๊ณ  ์–ธ์ œ ํ•„์š”ํ•˜์ง€ ์•Š์€์ง€ ์„ค๋ช…ํ•ด์ฃผ์‹ค ์ˆ˜ ์žˆ์„๊นŒ์š”?

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

4. JPA์˜ ๋”ํ‹ฐ ์ฒดํ‚น์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•˜๋ฉด JPA์˜ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ ๋‚ด๋ถ€์—์„œ ๋ฐœ์ƒํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ฒดํฌํ•˜๊ณ  ํŠธ๋žœ์žญ์…˜์ด ๋๋‚˜ flush๊ฐ€ ๋  ๋•Œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ ์šฉ์‹œํ‚ค๋Š” ์ฟผ๋ฆฌ๋ฌธ์ด ๋‚ ์•„๊ฐ€๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋Š” ๋”ํ‹ฐ์ฒดํ‚น, ์“ฐ๊ธฐ์ง€์—ฐ ์ €์žฅ์†Œ, 1์ฐจ์บ์‹œ ๋“ฑ์˜ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•˜๋Š”๋ฐ, ๊ทธ์ค‘ ๋”ํ‹ฐ์ฒดํ‚น์ด๋ž€ ์ฒ˜์Œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ 1์ฐจ์บ์‹œ์— ์ €์žฅํ•ด๋†“์€ ์Šค๋ƒ…์ƒท๊ณผ ์ดํ›„ ๋ฐ์ดํ„ฐ ์‚ฌ์ด์— ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์žˆ์„๊ฒฝ์šฐ ์ด๋ฅผ ์ฒดํฌํ•˜๊ณ  ์—…๋ฐ์ดํŠธ ์ฟผ๋ฆฌ๋ฌธ์„ db์— ๋‚ ๋ ค์ฃผ๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

5. JVM ์ด๋ž€ ๋ฌด์—‡์ด๊ณ  ์™œ ํ•„์š”ํ•œ์ง€ ์„ค๋ช…ํ•ด์ฃผ์‹ค ์ˆ˜ ์žˆ์„๊นŒ์š”?

JVM์€ Java Virtual Machine ์œผ๋กœ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œ์ผœ์ฃผ๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋žจ์€ OS์— ์ข…์†์ ์ด๊ฒŒ ๊ฐœ๋ฐœ์ด ๋˜์—ˆ์ง€๋งŒ, Java๋Š” ๊ฐ OS์— ๋งž๊ฒŒ ์ œ๊ณต๋œ JVM์ด ๋„์›Œ์งˆ ์ˆ˜ ์žˆ๊ธฐ์— ๊ฐ™์€ ์†Œ์Šค์ฝ”๋“œ๋กœ ๋‹ค๋ฅธ OS์—์„œ ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. JVM์ด ์ฃผ๋Š” ์ด์ ์œผ๋กœ๋Š” ์ด๊ฒƒ ์ด์™ธ์—๋„ GC๋ฅผ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ํ•ด์ค€๋‹ค๋Š” ์ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

6. Java๊ฐ€ ์ปดํŒŒ์ผ๋˜๋Š” ๊ณผ์ •์€ ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์‹ค ์ˆ˜ ์žˆ์„๊นŒ์š”?

  • ์šฐ์„  ์ž๋ฐ” ํŒŒ์ผ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ์ž‘์„ฑํ•œ ์ž๋ฐ” ํŒŒ์ผ์„ ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ์ด๋ฃจ์–ด์ง„ .classํŒŒ์ผ๋กœ ์ปดํŒŒ์ผ ํ•ด ์ค๋‹ˆ๋‹ค.
  • ๋ฐ”์ดํŠธ์ฝ”๋“œ(.class)๋ฅผ JVM์˜ ํด๋ž˜์Šค๋กœ๋”๊ฐ€ ๋ฐ›์•„ ๋™์ ๋กœ๋”ฉ(Dynamic Loading)์„ ํ†ตํ•ด ํ•„์š”ํ•œ ํด๋ž˜์Šค๋“ค์„ ๋กœ๋”ฉ ๋ฐ ๋งํฌํ•˜์—ฌ ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ, JVM์˜ ๋ฉ”๋ชจ๋ฆฌ์˜์—ญ์— ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.
  • ์‹คํ–‰ ์—”์ง„(Execution Engine)์€ JVM ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์˜จ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋“ค์„ ๋ช…๋ น์–ด ๋‹จ์œ„๋กœ ํ•˜๋‚˜์”ฉ ๊ฐ€์ ธ์™€ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ, ์‹คํ–‰ ์—”์ง„์€ ๋‘๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ ํ•ฉ๋‹ˆ๋‹ค.
    • ์ธํ„ฐํ”„๋ฆฌํ„ฐ : ๋ฐ”์ดํŠธ ์ฝ”๋“œ ๋ช…๋ น์–ด๋ฅผ ํ•˜๋‚˜์”ฉ ์ฝ์–ด์„œ ํ•ด์„ํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜ํ•˜๋‚˜์˜ ์‹คํ–‰์€ ๋น ๋ฅด๋‚˜, ์ „์ฒด์ ์ธ ์‹คํ–‰ ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
    • JIT ์ปดํŒŒ์ผ๋Ÿฌ(Just-In-Time Compiler) : ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋œ ๋ฐฉ์‹์œผ๋กœ ๋ฐ”์ดํŠธ ์ฝ”๋“œ ์ „์ฒด๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ์ดํ›„์—๋Š” ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ๋”์ด์ƒ ์ธํ„ฐํ”„๋ฆฌํŒ… ํ•˜์ง€ ์•Š๊ณ , ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๋กœ ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜์”ฉ ์ธํ„ฐํ”„๋ฆฌํŒ…ํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฐ”์ดํŠธ ์ฝ”๋“œ ์ „์ฒด๊ฐ€ ์ปดํŒŒ์ผ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด์ ์ธ ์‹คํ–‰์†๋„๋Š” ์ธํ„ฐํ”„๋ฆฌํŒ… ๋ฐฉ์‹๋ณด๋‹ค ๋น ๋ฆ…๋‹ˆ๋‹ค.

7. JVM์˜ ์Šคํƒ๊ณผ ํž™๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ๋Œ€ํ•ด ์•„๋Š” ๋งŒํผ ์„ค๋ช…ํ•ด์ฃผ์‹ค ์ˆ˜ ์žˆ์„๊นŒ์š”?

JVM์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์€ ํฌ๊ฒŒ ๋ฉ”์†Œ๋“œ, ์Šคํƒ, ํž™ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ์ค‘์— Stack์˜์—ญ ์—๋Š” heap ์˜์—ญ์— ์ƒ์„ฑ๋œ Object ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋“ค์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์œ„ํ•œ ๊ฐ’๋“ค์ด ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์›์‹œํƒ€์ž…(primitive types) - byte, short, int, long, double, float, boolean, char ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋“ค์ด ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋‚ด๋ถ€์— ์„ ์–ธ๋œ ์ง€์—ญ๋ณ€์ˆ˜๋“ค์ด ์Šคํƒ ์˜์—ญ์— ์ƒ์„ฑ๋˜๊ฒŒ ๋˜๊ณ , ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ์ด ๋๋‚˜๋ฉด ํ•ด๋‹น ์ง€์—ญ๋ณ€์ˆ˜๋“ค์€ ์Šคํƒ์˜์—ญ์—์„œ ์†Œ๋ฉธํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
heap์˜์—ญ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ ์–ธํ•œ ๋ฐ์ดํ„ฐ์˜ ์ธ์Šคํ„ด์Šค ์ •๋ณด๋“ค์ด ๋‹ด๊ฒจ์žˆ๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋“ค์€ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์•„๋„ ์ฐธ์กฐํ•˜๋Š” ๋ณ€์ˆ˜๊ฐ€ ์—†์–ด ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•ด ์ง„๋‹ค๋ฉด, JVM์˜ GC์— ์˜ํ•ด ์†Œ๋ฉธ๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํž™ ์˜์—ญ์€ ๋‚ด๋ถ€๊ฐ€ ํฌ๊ฒŒ๋Š” Young ์˜์—ญ๊ณผ Old ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ์žˆ๊ณ , Old์˜์—ญ์€ ์ฐธ์กฐ๊ฐ€ ์˜ค๋žฌ๋™์•ˆ ์œ ์ง€๋˜์–ด ์˜จ ์ธ์Šคํ„ด์Šค๋“ค์ด ์กด์žฌํ•˜๊ณ  young ์˜์—ญ์—๋Š” ์ƒ์„ฑ๋œ์ง€ ์–ผ๋งˆ ๋˜์ง€ ์•Š์€ ์ธ์Šคํ„ด์Šค๋“ค์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. young ์˜์—ญ์€ eden์˜์—ญ๊ณผ servial์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง€๋Š”๋ฐ eden์˜์—ญ์€ ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋“ค์ด ์œ„์น˜ํ•˜๊ณ , GC๊ฐ€ ์ผ์–ด๋‚œ ํ›„ ์‚ญ์ œ๋˜์ง€ ์•Š๊ณ  ์‚ด์•„๋‚จ์€ ์ธ์Šคํ„ด์Šค๋“ค์€ servial์˜์—ญ์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

8. ํด๋ž˜์Šค์™€ ์ธ์Šคํ„ด์Šค์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์‹ค ์ˆ˜ ์žˆ์„๊นŒ์š”?

ํด๋ž˜์Šค๋Š” ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ ๋ถ•์–ด๋นต ํ‹€ ๊ฐ™์ด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์„ค๊ณ„๋„์ด๊ณ , ์ธ์Šคํ„ด์Šค๋Š” ๋ถ•์–ด๋นต ์ž์ฒด ์ฆ‰, ์‹ค์กดํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

9. Garbage Collector์˜ ์—ญํ• , ์›๋ฆฌ, ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์•„๋Š” ๋งŒํผ ์„ค๋ช…ํ•ด์ฃผ์‹ค ์ˆ˜ ์žˆ์„๊นŒ์š”?

GC๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ๋ฒ•์ค‘ ํ•˜๋‚˜๋กœ, ํ”„๋กœ๊ทธ๋žจ์ด ๋™์ ์œผ๋กœ ํ• ๋‹นํ–ˆ๋˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ์ค‘์—์„œ ํ•„์š” ์—†๊ฒŒ ๋œ ์˜์—ญ์„ ํ•ด์ œํ•ด ์ค๋‹ˆ๋‹ค.
GC๋Š” JVM์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ค‘ Heap ์˜์—ญ์—์„œ ์ผ์–ด๋‚˜๊ฒŒ ๋˜๋Š”๋ฐ, Heap์˜์—ญ์€ Young,Old ๋‘๊ฐ€์ง€ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์˜์—ญ์ด ๋‚˜๋ˆ„์–ด์ง€๊ฒŒ ๋œ ์ด์œ ๋Š” ๊ฐ์ฒด๋Š” ๋Œ€๋ถ€๋ถ„ ์ผํšŒ์„ฑ์ด๊ณ , ๋ฉ”๋ชจ๋ฆฌ์— ์˜ค๋ž˜ ๋‚จ์•„์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋“œ๋ฌผ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋Š” Young ์˜์—ญ์— ์ €์žฅ๋˜๊ณ , Young ์˜์—ญ์—์„œ ์ผ์–ด๋‚˜๋Š” GC๋ฅผ Minor GC๋ผ๊ณ  ํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. Young์˜์—ญ์€ Eden ์˜์—ญ๊ณผ 2๊ฐœ์˜ survival์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง‘๋‹ˆ๋‹ค. MinorGC๋Š” eden์˜์—ญ์ด ๊ฐ€๋“ ์ฐจ๋ฉด ์‹คํ–‰๋˜๊ฒŒ ๋˜๊ณ , GC์ดํ›„ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์€ age๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด์„œ survival์˜์—ญ์„ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉฐ ์ด๋™ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์–ด๋Š์ •๋„ age๊ฐ€ ์Œ“์ด๊ฒŒ ๋˜๋ฉด ํ•ด๋‹น ๊ฐ์ฒด๋“ค์€ old์˜์—ญ์œผ๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
Old์˜์—ญ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ฐ€๋“ ์ฐจ๊ฒŒ๋˜๋ฉด GC๊ฐ€ ์ผ์–ด๋‚˜๊ฒŒ ๋˜๊ณ  ์ด GC๋ฅผ Major GC๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. GC๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๊ณผ์ •์€ ํฌ๊ฒŒ ๋‘๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š”๋ฐ,
1. Stop the World
  • GC๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‹œ์Šคํ…œ์˜ ๊ธฐ๋Šฅ์„ ์ž ์‹œ ๋ฉˆ์ถ”๋Š” ์‹œ๊ฐ„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. Stop the world๊ฐ€ ์งง์„ ์ˆ˜๋ก ์ข‹์€ ์„ฑ๋Šฅ์˜ GC๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
2. Mark and Sweep
  • Mark - ์‚ญ์ œ๋Œ€์ƒ์ด๋˜๋Š” ๊ฐ€๋น„์ง€ ๋ฐ์ดํ„ฐ๋“ค์„ ์ฒดํฌํ•ฉ๋‹ˆ๋‹ค.
  • Sweep - ์ฒดํฌํ–ˆ๋˜ ๊ฐ€๋น„์ง€ ๋ฐ์ดํ„ฐ๋“ค์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
๋‘๊ฐ€์ง€ ๊ณผ์ •์œผ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

10. Java Map์˜ ๋‚ด๋ถ€ ๊ตฌํ˜„์€ ์–ด๋–ป๊ฒŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์„์ง€ ์ถ”์ธกํ•ด๋ณด์‹ค ์ˆ˜ ์žˆ์„๊นŒ์š”?

Hash Map

HashMap์€ Hash Table ์„ ์ด์šฉํ•˜์—ฌ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค.
Hash Table์€ key ์™€ value๋ฅผ ์ €์žฅํ•˜๋ฉฐ, key๋ฅผ ์ด์šฉํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
ํŠน์ • key๋Š” ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•˜์—ฌ bucket์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” index๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. index๋ฅผ ํ†ตํ•˜์—ฌ bucket์— ์ ‘๊ทผํ•˜๊ณ , bucket์— ๋งž๋Š” index์— key์™€ value๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

Tree Map

TreeMap์€ Node๋“ค์˜ ์—ฐ๊ฒฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฃจํŠธ๋ผ๋Š” ์ตœ์ƒ์œ„ Node๊ฐ€ ์กด์žฌํ•˜๊ณ , ๋ถ€๋ชจ Node ์™€ ์ž์‹ Node ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Node ๋งˆ๋‹ค key ์™€ value ๊ฐ€ ๊ฐ™์ด ์ €์žฅ๋˜๋ฉฐ, key ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์ขŒ์ธก ์šฐ์ธก์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

11. DI์™€ IoC์— ๋Œ€ํ•ด ์•„๋Š” ๋งŒํผ ์„ค๋ช…ํ•ด์ฃผ์‹ค ์ˆ˜ ์žˆ์„๊นŒ์š”?

DI๋Š” Dependency Injection๋กœ, ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ํ•„์š”๋กœํ•˜๋Š” ์š”์†Œ๋“ค์„ ์™ธ๋ถ€์—์„œ ์ฃผ์ž…ํ•ด์ฃผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์Šคํ”„๋ง์—์„œ ์ œ๊ณตํ•˜๋Š” DI๋กœ๋Š” ํ•„๋“œ์ฃผ์ž…, ์ƒ์„ฑ์ž์ฃผ์ž…, ์ˆ˜์ •์ž ์ฃผ์ž…, ๋ฉ”์†Œ๋“œ ์ฃผ์ž… ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
IoC๋Š” ์ œ์–ด์˜ ์—ญ์ „์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด๊ฐ€ ๋‚ด๋ถ€ ๋ณ€์ˆ˜๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ๊ฐ์ฒด๊ฐ€ ํ•ด๋‹น ๋ณ€์ˆ˜๋ฅผ ์ œ์–ดํ•˜๊ณ  ์žˆ๊ฒŒ ๋˜์ง€๋งŒ, ๋งŒ์•ฝ ํ•ด๋‹น ๋‚ด๋ถ€ ๋ณ€์ˆ˜๋ฅผ ์™ธ๋ถ€์—์„œ ์ œ๊ณตํ•ด์ค€๋‹ค๋ฉด, ์ œ์–ด์˜ ๋ฐฉํ–ฅ์ด ์™ธ๋ถ€์—์„œ ๋‚ด๋ถ€๋กœ ์—ญ์ „์ด ์ผ์–ด๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ IoC๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

12. MVC ๋ชจ๋ธ์ด๋ž€ ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์‹ค ์ˆ˜ ์žˆ์„๊นŒ์š”?

MVC ๋ชจ๋ธ์ด๋ž€ Model View Controller๋กœ ์–ด๋–ค ํŠน์ •ํ•œ ์—ญํ• ๋“ค์— ๋Œ€ํ•ด ์—ญํ• ๋ถ„๋‹ด์„ ํ•  ๋•Œ ๊ฐ€์ด๋“œ๋ผ์ธ์„ ์ œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

13. Annotation์ด๋ž€ ๋ฌด์—‡์ด๊ณ  ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ค ๊ฒƒ์ด ์žˆ๋Š”์ง€ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด ์„ค๋ช…ํ•ด์ฃผ์‹ค ์ˆ˜ ์žˆ์„๊นŒ์š”?

์ž๋ฐ” ์• ๋„ˆํ…Œ์ด์…˜(Java Annotation)์€ ์ž๋ฐ” ์†Œ์Šค ์ฝ”๋“œ์— ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์˜ ์ผ์ข…์ž…๋‹ˆ๋‹ค. ๋ณดํ†ต @ ๊ธฐํ˜ธ๋ฅผ ์•ž์— ๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ•˜๊ณ , JDK 1.5 ๋ฒ„์ „ ์ด์ƒ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ž๋ฐ” ์• ๋„ˆํ…Œ์ด์…˜์€ ํด๋ž˜์Šค ํŒŒ์ผ์— ์ž„๋ฒ ๋””๋“œ๋˜์–ด ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ์ƒ์„ฑ๋œ ํ›„ ์ž๋ฐ” ๊ฐ€์ƒ๋จธ์‹ ์— ํฌํ•จ๋˜์–ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
์–ด๋…ธํ…Œ์ด์…˜๋„ ์ข…๋ฅ˜๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
  • ํ‘œ์ค€(๋‚ด์žฅ) ์–ด๋…ธํ…Œ์ด์…˜ : ์ž๋ฐ”๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•ด์ฃผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜
    • @Override - ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•  ๋•Œ, ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„์„ ์ž˜๋ชป์ ๋Š” ์‹ค์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•ด์ฃผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜
    • @Deprecated - ์•ž์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๋Š” ํ•„๋“œ๋‚˜ ๋ฉ”์„œ๋“œ์— ๋ถ™์ด๋Š” ์–ด๋…ธํ…Œ์ด์…˜
    • @SuppressWarnings- ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๊ฒฝ๊ณ ๋ฉ”์„ธ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๊ฒŒํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜
  • ๋ฉ”ํƒ€ ์–ด๋…ธํ…Œ์ด์…˜ : ์–ด๋…ธํ…Œ์ด์…˜์„ ์œ„ํ•œ ์–ด๋…ธํ…Œ์ด์…˜
    • @Taget - ์–ด๋…ธํ…Œ์ด์…˜์„ ์ •์˜ํ•  ๋•Œ, ์ ์šฉ๋Œ€์ƒ์„ ์ง€์ •ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ
    • @Retention - ์–ด๋…ธํ…Œ์ด์…˜์ด ์œ ์ง€๋˜๋Š” ๊ธฐ๊ฐ„์„ ์ง€์ •ํ•  ๋•Œ ์‚ฌ์šฉ
      • SOURCE : ์†Œ์Šค ํŒŒ์ผ์—๋งŒ ์กด์žฌ.
      • RUNTIME : ํด๋ž˜์Šค ํŒŒ์ผ์— ์กด์žฌ. ์‹คํ–‰์‹œ์— ์‚ฌ์šฉ๊ฐ€๋Šฅ
  • ์‚ฌ์šฉ์ž์ •์˜ ์–ด๋…ธํ…Œ์ด์…˜ : ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ •์˜ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜

14. Spring Security์˜ ๊ตฌ์กฐ์™€ JWT ๋ฐœ๊ธ‰ ๊ณผ์ •์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์‹ค ์ˆ˜ ์žˆ์„๊นŒ์š”?

Spring Security๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ•„ํ„ฐ๊ฐ€ ์ด์–ด์ ธ ์ธ์ฆ ๋ฐ ์ธ๊ฐ€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.

Spring Security์˜ ์ธ์ฆ ๊ตฌ์กฐ๋Š” ์ด๋Ÿฐ ํ˜•ํƒœ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

1.Http request (์ธ์ฆ์š”์ฒญ)
2. AuthenticationFilter๋ฅผ ๊ฑฐ์นจ(์—ฌ๊ธฐ์„œ๋Š”UsernamePasswordAuthenticationFilter).
HttpServletRequest๋ฅผ ์ธํ„ฐ์…‰ํŠธํ•˜์—ฌ AuthenticationManager์— Authentication ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด (UsernamePasswordAuthenticationToken) ์ „๋‹ฌ
3. AuthenticationFilter๋กœ๋ถ€ํ„ฐ ์ธ์ฆ๊ฐ์ฒด ์ „๋‹ฌ ๋ฐ›์Œ.
4. ํ•ด๋‹น ์ธ์ฆ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์ธ์ฆ์„ ์ง„ํ–‰ํ•˜๋Š” AuthenticationProvider๋ฅผ ์ฐพ์•„ ์ธ์ฆ ๊ฐ์ฒด(UsernamePasswordAuthenticationToken)๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ์ธ์ฆ์„ ์š”์ฒญ
5. 6. 7 Provider์—์„œ Service๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ UserDetails๋ฅผ ํ†ตํ•ด ์ธ์ฆ์„ ์ง„ํ–‰( DB ๋ฐ์ดํ„ฐ ์กฐํšŒ ๋ฐ ๊ฒ€์ฆ )
8. 9 .10 ์ธ์ฆ ์„ฑ๊ณต์‹œ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ด๊ธด Authentication ๊ฐ์ฒด๋ฅผ SecurityContextHolder์— ์ €์žฅํ•˜๊ณ  AuthenticationSuccessHandle๋ฅผ ์‹คํ–‰. (์‹คํŒจ์‹œ AuthenticationFailureHandler ์‹คํ–‰)

JWT๊ฐ€ ๋ฐœ๊ธ‰๋˜๋Š” ๊ณผ์ •์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์ฒ˜์Œ ๋กœ๊ทธ์ธ์„ ์‹œ๋„ํ•˜๊ณ  ์œ ์ €์ •๋ณด ์ธ์ฆ์— ์„ฑ๊ณตํ•˜๋ฉด, ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ธ์ฆํ† ํฐ์„ ๊ด€๋ฆฌํ•˜๋„๋ก JWT๋ฅผ ์ฟ ํ‚ค๋‚˜ ํ—ค๋”์— ๋‹ด์•„ ๋ฐ˜ํ™˜ํ•ด์ค๋‹ˆ๋‹ค.
JWT๋ฅผ ๋ฐœ๊ธ‰ํ•ด์ฃผ๋Š” ์„œ๋ฒ„๋Š” JWT Secretkey๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ํ‚ค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ JWT๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ธ์ฆํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

15. N+1 ๋ฌธ์ œ์˜ ๋ฐœ์ƒ ์ด์œ ์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์‹ค ์ˆ˜ ์žˆ์„๊นŒ์š”? ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ 3๊ฐ€์ง€ ์ด์ƒ ๋ง์”€ํ•ด์ฃผ์‹œ๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.

N+1 ๋ฌธ์ œ๋Š” 1๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ–ˆ์„ ๋•Œ, ๊ทธ ๊ฐœ์ˆ˜๋งŒํผ(N) ์ฟผ๋ฆฌ๊ฐ€ ๋‚ ์•„๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•ด ์˜ค๋ฉด์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋ณดํ†ต ์ฆ‰์‹œ๋กœ๋”ฉ์œผ๋กœ ์ผ๋Œ€๋‹ค ๊ด€๊ณ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ฑฐ๋‚˜, ์ง€์—ฐ๋กœ๋”ฉ์œผ๋กœ ์กฐํšŒํ•œ ๋ฐ์ดํ„ฐ์™€ ์—ฐ๊ด€๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ถ”๊ฐ€์ ์œผ๋กœ ์กฐํšŒํ•ด์˜ค๋ฉด์„œ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์œผ๋กœ๋Š”

1. Fetch Join ์‚ฌ์šฉ
JPQL (Java Persistence Query Language)๋กœ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ, JOIN FETCH๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ด€๋ จ ์—”ํ„ฐํ‹ฐ๋ฅผ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ด€๋ จ๋œ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ์กฐ์ธ์„ ์‚ฌ์šฉํ•ด์„œ ํ•„์š”ํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์˜ ์งˆ์˜๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ณต์žกํ•œ ์งˆ์˜๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์งˆ์˜์˜ ์ˆ˜๋ฅผ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
2. @EntityGraph ์–ด๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉ
@EntityGraph ์˜ attributePaths์— ์ฟผ๋ฆฌ ์ˆ˜ํ–‰์‹œ ๋ฐ”๋กœ ๊ฐ€์ ธ์˜ฌ ํ•„๋“œ๋ช…์„ ์ง€์ •ํ•˜๋ฉด Lazy๊ฐ€ ์•„๋‹Œ Eager ์กฐํšŒ๋กœ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. Fetch join๊ณผ ๋™์ผํ•˜๊ฒŒ JPQL์„ ์‚ฌ์šฉํ•˜์—ฌ query ๋ฌธ์„ ์ž‘์„ฑํ•˜๊ณ  ํ•„์š”ํ•œ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ EntityGraph์— ์„ค์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
3. BatchSize ์„ค์ •
application.yml์—์„œ Batchsize๋ฅผ ์„ค์ •ํ•ด์ฃผ๊ฑฐ๋‚˜, @BatchSize ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•˜์—ฌ ์„ค์ •ํ•ด์ฃผ๋ฉด, ์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ ์ง€์ •๋œ size ๋งŒํผ SQL์˜ IN์ ˆ์„ ์‚ฌ์šฉํ•ด์„œ ์กฐํšŒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

16. ์ฆ‰์‹œ๋กœ๋”ฉ๊ณผ ์ง€์—ฐ๋กœ๋”ฉ์€ ๊ฐ๊ฐ ์–ธ์ œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€์ง€ ์„ค๋ช…ํ•ด์ฃผ์‹ค ์ˆ˜ ์žˆ์„๊นŒ์š”?

์ฆ‰์‹œ๋กœ๋”ฉ (Eager Loading)
  • ์ฆ‰์‹œ๋กœ๋”ฉ์€ ์กฐํšŒ์‹œ ๊ด€๋ จ๋œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ๋กœ๋“œํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. JPA์—์„œ๋Š” ์ผ๋Œ€์ผ, ๋‹ค๋Œ€์ผ๊ด€๊ณ„์ผ ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฆ‰์‹œ๋กœ๋”ฉ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•ญ์ƒ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ํ”„๋กœ์ ํŠธ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด์„œ ๋ฐ์ดํ„ฐ๋“ค์˜ ์—ฐ๊ด€๊ด€๊ณ„๊ฐ€ ๋ณต์žกํ•ด ์งˆ ๊ฒฝ์šฐ ์ฟผ๋ฆฌ๊ฐ€ ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ•œ ํ˜•ํƒœ๋กœ ๋‚ ์•„๊ฐˆ ์ˆ˜ ์žˆ๊ธฐ์— ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ง€์—ฐ๋กœ๋”ฉ (Lazy Loading)
  • ์ง€์—ฐ๋กœ๋”ฉ์€ ์กฐํšŒ์‹œ ํ•ด๋‹น ๊ฐ์ฒด์™€ ์—ฐ๊ด€๋œ ๋ฐ์ดํ„ฐ๋“ค์„ ํ”„๋ก์‹œ ๊ฐ์ฒด๋กœ ๊ฐ€์ ธ์™€ ์ž„์‹œ๋กœ ๋‹ด์•„๋‘๊ณ , ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ํ˜ธ์ถœํ•  ๊ฒฝ์šฐ ์ถ”๊ฐ€์ ์œผ๋กœ ์ฟผ๋ฆฌ๋ฌธ์„ DB์— ๋‚ ๋ ค ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•˜์ง€ ์•Š๊ณ  ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๋กœ๋“œํ•˜๋ฏ€๋กœ, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ผ๋Œ€๋‹ค ๋˜๋Š” ๋‹ค๋Œ€๋‹ค ๊ด€๊ณ„์—์„œ๋Š” ์ง€์—ฐ๋กœ๋”ฉ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์ง€์—ฐ๋กœ๋”ฉ์€ N+1 ๋ฌธ์ œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ธฐ์— ์ฆ‰์‹œ๋กœ๋”ฉ์ด ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ณด์ด์ง€๋งŒ, ์ง€์—ฐ๋กœ๋”ฉ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ , ์ถ”๊ฐ€์ ์œผ๋กœ ์‚ฌ์šฉ๋  ๋ฐ์ดํ„ฐ๋Š” fetch join์„ ์‚ฌ์šฉํ•ด ํ•จ๊ป˜ ๋ถˆ๋Ÿฌ์˜ค๋Š”๊ฒƒ์ด ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

17. Spring bean container ์ƒ์„ฑ๋ถ€ํ„ฐ ์Šคํ”„๋ง ์ข…๋ฃŒ๊นŒ์ง€์˜ ์‚ฌ์ดํด์— ๋Œ€ํ•ด ์•Œ๋ ค์ฃผ์‹ค ์ˆ˜ ์žˆ์„๊นŒ์š”? @PostConstruct, @PreDestroy ์–ด๋…ธํ…Œ์ด์…˜์˜ ์—ญํ• ๋„ ํ•จ๊ป˜ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.

์Šคํ”„๋ง์ด ์‹œ์ž‘๋˜์–ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ํฌ๊ฒŒ ์•„๋ž˜์™€ ๊ฐ™์€ ํ๋ฆ„์œผ๋กœ ํ˜๋Ÿฌ๊ฐ‘๋‹ˆ๋‹ค.
์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ -> ์Šคํ”„๋ง ๋นˆ ์ƒ์„ฑ -> ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… -> ์ดˆ๊ธฐํ™” ์ฝœ๋ฐฑ -> ์‚ฌ์šฉ(๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ) -> ์†Œ๋ฉธ์ „ ์ฝœ๋ฐฑ -> ์Šคํ”„๋ง ์ข…๋ฃŒ
1. ์Šคํ”„๋ง IoC ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , @Component, @Bean์„ ํ†ตํ•ด ์Šคํ”„๋ง ๋นˆ๋“ค์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
2. ์Šคํ”„๋ง ๋นˆ๋“ค์˜ ์˜์กด๊ด€๊ณ„์— ๋งž๊ฒŒ ์˜์กด๊ด€๊ณ„๋ฅผ ์ฃผ์ž…ํ•ด ์ค๋‹ˆ๋‹ค.
3. ์ดํ›„ ์Šคํ”„๋ง ๋นˆ๋“ค๋งˆ๋‹ค ์ง€์ •ํ•ด๋‘์—ˆ๋˜ ์ดˆ๊ธฐํ™” ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
4. ์Šคํ”„๋ง์ด ์ข…๋ฃŒ๋˜๊ธฐ ์ „์— ์Šคํ”„๋ง ๋นˆ๋“ค์€ ์†Œ๋ฉธ์ „ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ณ  ์†Œ๋ฉธํ•˜๋ฉฐ ์Šคํ”„๋ง์ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

์ดˆ๊ธฐํ™” ์ฝœ๋ฐฑ, ์†Œ๋ฉธ์ „ ์ฝœ๋ฐฑ ์ง€์ • ๋ฐฉ๋ฒ• 3๊ฐ€์ง€
  1. ์ธํ„ฐํŽ˜์ด์Šค(InitiallizingBean, DisposableBean) -๋น„์ถ”์ฒœ
  2. @Bean(initMethod, DestroyMethod) - ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ
  3. @PostConstruct, @PreDestory - ์ถ”์ฒœ
@PostConstruct - ์Šคํ”„๋ง ๋นˆ ์ƒ์„ฑ ์ดํ›„, ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… ์ดํ›„ ํ˜ธ์ถœํ•  ์ดˆ๊ธฐํ™” ์ฝ”๋“œ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
@PreDestroy - ์Šคํ”„๋ง ๋นˆ ์†Œ๋ฉธ ์ง์ „์— ํ˜ธ์ถœํ•  ์ฝ”๋“œ๋“ค์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์œ„์˜ ์ฝœ๋ฐฑ ๋ฐฉ์‹์€ ์Šคํ”„๋ง์—์„œ ๊ฐ€์žฅ ๊ถŒ์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
  • ์ž๋ฐ” ํ‘œ์ค€ ๊ธฐ์ˆ ์ด์–ด์„œ ์Šคํ”„๋ง์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ์—์„œ๋„ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž˜ ์–ด์šธ๋ฆฝ๋‹ˆ๋‹ค.
  • ์œ ์ผํ•œ ๋‹จ์ ์€ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” ์ ์šฉํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฒฝ์šฐ @Bean(initMethod ="", destory="")์„ค์ •์ •๋ณด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์„œ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

18. AOP, Interceptor, Filter ์˜ ์ฐจ์ด์ , Request๊ฐ€ ๋“ค์–ด์˜ฌ๋•Œ ๊ฑฐ์น˜๋Š” ์ˆœ์„œ, ๊ฐ ์—ญํ• ๋“ค์˜ ์žฅ์ ์„ ์„ค๋ช…ํ•ด์ฃผ์‹ค ์ˆ˜ ์žˆ์„๊นŒ์š”?

Filter์™€ Interceptor๋Š” ์„œ๋ธ”๋ฆฟ ๋‹จ์œ„์—์„œ ์‹คํ–‰๋˜๊ณ , AOP๋Š” ๋ฉ”์†Œ๋“œ ์•ž์—์„œ proxy์˜ ํ˜•ํƒœ๋กœ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š” ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
Request๊ฐ€ ๋“ค์–ด์˜จ๋‹ค๋ฉด Filter -> Interceptor -> AOP -> Interceptor -> Filter ์ˆœ์œผ๋กœ ๊ฑฐ์น˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
๊ฐ ์—ญํ• ๋“ค์˜ ์žฅ์ 
Filter- ์Šคํ”„๋ง ์ปจํ…์ŠคํŠธ ์™ธ๋ถ€์— ์กด์žฌํ•˜์—ฌ ์Šคํ”„๋ง๊ณผ ๋ฌด๊ด€ํ•œ ์ž์›์— ๋Œ€ํ•ด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ํ•„ํ„ฐ๋Š” DispatcherServlet ์ด์ „์— ์‹คํ–‰์ด ๋˜๋Š”๋ฐ ํ•„ํ„ฐ๊ฐ€ ๋™์ž‘ํ•˜๋„๋ก ์ง€์ •๋œ ์ž์›์˜ ์•ž๋‹จ์—์„œ ์š”์ฒญ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜, ์ธ์ฆ, ์ธ๊ฐ€ ๋“ฑ์˜ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ฒดํฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ž์›์˜ ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚œ ํ›„ ์‘๋‹ต๋‚ด์šฉ์— ๋Œ€ํ•ด์„œ๋„ ๋ณ€๊ฒฝํ•˜๋Š” ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Interceptor- ์ธํ„ฐ์…‰ํ„ฐ๋Š” ์Šคํ”„๋ง์˜ DistpatcherServlet์ด ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „, ํ›„๋กœ ๋ผ์–ด๋“ค์–ด ์Šคํ”„๋ง ์˜์—ญ ๋‚ด๋ถ€์—์„œ Controller์— ๊ด€ํ•œ ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๋Œ€ํ•ด ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ธํ„ฐ์…‰ํ„ฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ธ์ฆ, ์ธ๊ฐ€ , ํ”„๋กœ๊ทธ๋žจ ์ˆ˜ํ–‰ ์‹œ๊ฐ„ ๋“ฑ์„ ์ฒดํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

AOP - ๋ฉ”์†Œ๋“œ ์ „ํ›„์˜ ์ง€์ ์— ์ž์œ ๋กญ๊ฒŒ ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๊ณ , ํฌ์ธํŠธ ์ปท์„ ํ™œ์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ๋ชจ๋“ˆ์„ ์›ํ•˜๋Š” ๋ฉ”์†Œ๋“œ์— ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ฉ”์†Œ๋“œ์— ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ์„ ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ๋กœ ๋ฌถ์–ด ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

19. NoSQL๊ณผ RDBMS์˜ ํŠน์ง•๊ณผ ์ฐจ์ด์ ์— ๋Œ€ํ•ด์„œ ์žฅ, ๋‹จ์ ์„ ๋“ค์–ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

RDBMS๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฆ„๊ณผ ๊ฐ™์ด RDBMS๋Š” RDB๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์‹œ์Šคํ…œ์ด๋ฉฐ RDB๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ๊ธฐ์ดˆ๋กœ ๋‘๊ณ  ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์†์„ฑ(column)์„ ๊ฐ€์ง„ 2์ฐจ์› ํ…Œ์ด๋ธ” ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ž…๋‹ˆ๋‹ค. RDBMS๋Š” SQL(Structured Query Language)๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

NoSQL(Not Only SQL)์€ RDB์™€ ๋‹ค๋ฅธ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.RDBMS์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ํ…Œ์ด๋ธ” ๊ฐ„ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”์€ ๊ทธ๋ƒฅ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์ด๊ณ , ์ผ๋ฐ˜์ ์œผ๋กœ ํ…Œ์ด๋ธ”๊ฐ„ Join๋„ ๋ถˆ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค.
๋น…๋ฐ์ดํ„ฐ์˜ ๋“ฑ์žฅ์œผ๋กœ ๋ฐ์ดํ„ฐ์™€ ํŠธ๋ž˜ํ”ฝ์ด ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ RDBMS์˜ ๋‹จ์ ์ธ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์€ ํฌ๊ธฐํ•˜๋˜, ๋น„์šฉ์„ ๊ณ ๋ฃŒํ•˜์—ฌ ์—ฌ๋Ÿฌ๋Œ€์˜ ๋ฐ์ดํ„ฐ์— ๋ถ„์‚ฐํ•˜์—ฌ ์ €์žฅํ•˜๋Š” Scale-Out์„ ๋ชฉํ‘œ๋กœ ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค.

RDBMS์™€ NoSQL์˜ ์žฅ๋‹จ์ 

RDBMS
์žฅ์ 
  • ์ •ํ•ด์ง„ ์Šคํ‚ค๋งˆ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์—ฌ์•ผ ํ•˜๋ฏ€๋กœ ๋ช…ํ™•ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋ณด์žฅ.
  • ๋˜ํ•œ ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘๋ณต์—†์ด ํ•œ ๋ฒˆ๋งŒ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Œ.
๋‹จ์ 
  • ํ…Œ์ด๋ธ” ๊ฐ„ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ์‹œ์Šคํ…œ์ด ์ปค์งˆ๊ฒฝ์šฐ Join๋ฌธ์ด ๋งŽ์€ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์–ด ์งˆ ์ˆ˜ ์žˆ์Œ.
  • ์Šคํ‚ค๋งˆ๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์—ฐํ•˜์ง€ ๋ชปํ•˜๋‹ค. ๋‚˜์ค‘์— ์Šคํ‚ค๋งˆ๊ฐ€ ๋ณ€๊ฒฝ ๋  ๊ฒฝ์šฐ ๋ฒˆ๊ฑฐ๋กญ๊ณ  ์–ด๋ ต๋‹ค.
NoSQL
์žฅ์ 
  • ์Šคํ‚ค๋งˆ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์œ ์—ฐํ•˜๊ณ  ์ž์œ ๋กœ์šด ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค.
  • ์–ธ์ œ๋“  ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ •ํ•˜๊ณ  ์ƒˆ๋กœ์šด ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
๋‹จ์ 
  • ๋ฐ์ดํ„ฐ ์ค‘๋ณต์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ ๋  ๊ฒฝ์šฐ ์ˆ˜์ •์„ ๋ชจ๋“  ์ปฌ๋ ‰์…˜์—์„œ ํ•ด์•ผํ•จ.
  • ์Šคํ‚ค๋งˆ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•„ ๋ช…ํ™•ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

RDBMS, NoSQL ์–ธ์ œ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ?

RDBMS๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ๋ช…ํ™•ํ•˜์—ฌ ๋ณ€๊ฒฝ๋  ์—ฌ์ง€๊ฐ€ ์—†๊ณ , ๊ด€๊ณ„๋ฅผ ๋งบ๊ณ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ž์ฃผ ๋ณ€๊ฒฝ์ด ์ด๋ฃจ์–ด์ง€๋Š” ์‹œ์Šคํ…œ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
NoSQL์€ ์ •ํ™•ํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์•Œ ์ˆ˜ ์—†๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ/ํ™•์žฅ์ด ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ์—๋Š” ๋ชจ๋“  ์ปฌ๋ ‰์…˜์—์„œ ์ˆ˜์ •์„ ํ•ด์•ผ ํ•˜๊ธฐ์— Update ๊ฐ€ ๋งŽ์ด ์ด๋ฃจ์–ด์ง€์ง€ ์•Š๋Š” ์‹œ์Šคํ…œ์— ์ข‹์Šต๋‹ˆ๋‹ค.

20. mvc ํŒจํ„ด์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

MVC ๋ž€

MVC ๋Š” Model, View, Controller์˜ ์•ฝ์ž ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ๊ทธ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์„ธ๊ฐ€์ง€์˜ ์—ญํ• ๋กœ ๊ตฌ๋ถ„ํ•œ ํŒจํ„ด์ž…๋‹ˆ๋‹ค.
MVC์—์„œ ๋ชจ๋ธ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ •๋ณด(๋ฐ์ดํ„ฐ)๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๋ทฐ๋Š” ํ…์ŠคํŠธ, ์ฒดํฌ๋ฐ•์Šค ํ•ญ๋ชฉ ๋“ฑ๊ณผ ๊ฐ™์€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์š”์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ , ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ฐ์ดํ„ฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์‚ฌ์ด์˜ ์ƒํ˜ธ๋™์ž‘์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

21. RDBMS์˜ ์ •๊ทœํ™”์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

DB๋ฅผ ์ž˜๋ชป ์„ค๊ณ„ํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์ค‘๋ณต์ด ๋ฐœ์ƒํ•˜์—ฌ ๋ฆด๋ ˆ์ด์…˜์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…,์‚ญ์ œ,์ˆ˜์ • ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋ถ€์ž‘์šฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ถ€์ž‘์šฉ์„ ์ด์ƒ(anomaly)ํ˜„์ƒ์ด๋ผ๊ณ  ํ•˜๊ณ , ์ด๋Ÿฌํ•œ ์ด์ƒ ํ˜„์ƒ์„ ์ œ๊ฑฐํ•˜๋ฉด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค๊ณ„ํ•ด ๋‚˜๊ฐ€๋Š” ๊ณผ์ •์ด ์ •๊ทœํ™” ์ž…๋‹ˆ๋‹ค.

22. Primary Key, Foreign Key์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

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

23. HTTP ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

HTTP ๋ฉ”์„œ๋“œ๋ž€ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด์— ์ด๋ฃจ์–ด์ง€๋Š” ์š”์ฒญ(Request)๊ณผ ์‘๋‹ต(Response) ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์— ์ฃผ์–ด์ง„ ๋ฆฌ์†Œ์Šค์— ์ˆ˜ํ–‰ํ•˜๊ธธ ์›ํ•˜๋Š” ํ–‰๋™, ์„œ๋ฒ„๊ฐ€ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ๋™์ž‘์„ ์ง€์ •ํ•˜๋Š” ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
HTTP ๋ฉ”์†Œ๋“œ์—๋Š” 9๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. 5๊ฐœ๋Š” ์ต์ˆ™ํ•˜์ง€๋งŒ 4๊ฐœ๋Š” ์จ๋ณด์ง€ ์•Š์€ ๋ฉ”์†Œ๋“œ๋“ค ์ž…๋‹ˆ๋‹ค.
์ฃผ์š” ๋ฉ”์†Œ๋“œ
GET : ๋ฆฌ์†Œ์Šค ์กฐํšŒ
POST: ์š”์ฒญ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ, ์ฃผ๋กœ ๋“ฑ๋ก์— ์‚ฌ์šฉ
PUT : ๋ฆฌ์†Œ์Šค๋ฅผ ๋Œ€์ฒด(๋ฎ์–ด์“ฐ๊ธฐ), ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๊ฐ€ ์—†์œผ๋ฉด ์ƒ์„ฑ
PATCH : ๋ฆฌ์†Œ์Šค ๋ถ€๋ถ„ ๋ณ€๊ฒฝ (PUT์ด ์ „์ฒด ๋ณ€๊ฒฝ, PATCH๋Š” ์ผ๋ถ€ ๋ณ€๊ฒฝ)
DELETE : ๋ฆฌ์†Œ์Šค ์‚ญ์ œ
๊ธฐํƒ€ ๋ฉ”์†Œ๋“œ
HEAD : GET๊ณผ ๋™์ผํ•˜์ง€๋งŒ ๋ฉ”์‹œ์ง€ ๋ถ€๋ถ„(body ๋ถ€๋ถ„)์„ ์ œ์™ธํ•˜๊ณ , ์ƒํƒœ ์ค„๊ณผ ํ—ค๋”๋งŒ ๋ฐ˜ํ™˜
OPTIONS : ๋Œ€์ƒ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ํ†ต์‹  ๊ฐ€๋Šฅ ์˜ต์…˜(๋ฉ”์„œ๋“œ)์„ ์„ค๋ช…(์ฃผ๋กœ CORS์—์„œ ์‚ฌ์šฉ)
CONNECT : ๋Œ€์ƒ ์ž์›์œผ๋กœ ์‹๋ณ„๋˜๋Š” ์„œ๋ฒ„์— ๋Œ€ํ•œ ํ„ฐ๋„์„ ์„ค์ •
TRACE : ๋Œ€์ƒ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๊ฒฝ๋กœ๋ฅผ ๋”ฐ๋ผ ๋ฉ”์‹œ์ง€ ๋ฃจํ”„๋ฐฑ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰

24. CORS(Cross Origin Resource Sharing)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ๋ณด์•ˆ์ ์ธ ์ด์œ ๋กœ ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ์— ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” cross-origin HTTP ์š”์ฒญ๋“ค์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ cross-origin ์š”์ฒญ์„ ํ•˜๋ ค๋ฉด ์„œ๋ฒ„์˜ ๋™์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์„œ๋ฒ„๊ฐ€ ๋™์˜ํ•œ๋‹ค๋ฉด ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ์š”์ฒญ์„ ํ—ˆ๋ฝํ•˜๊ณ , ๋™์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ฑฐ์ ˆํ•ฉ๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ํ—ˆ๋ฝ์„ ๊ตฌํ•˜๊ณ  ๊ฑฐ์ ˆํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ HTTP-header๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ€๋Šฅํ•œ๋ฐ, ์ด๋ฅผ CORS(Cross-Origin Resource Sharing)๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

cross-origin

cross-origin์ด๋ž€ ๋‹ค์Œ ์ค‘ ํ•œ ๊ฐ€์ง€๋ผ๋„ ๋‹ค๋ฅธ ๊ฒฝ์šฐ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.
ํ”„๋กœํ† ์ฝœ - http์™€ https๋Š” ํ”„๋กœํ† ์ฝœ์ด ๋‹ค๋ฅด๋‹ค.
๋„๋ฉ”์ธ - domain.com๊ณผ other-domain.com์€ ๋‹ค๋ฅด๋‹ค.
ํฌํŠธ ๋ฒˆํ˜ธ - 8080ํฌํŠธ์™€ 3000ํฌํŠธ๋Š” ๋‹ค๋ฅด๋‹ค.

25. ๋ธŒ๋ผ์šฐ์ €์˜ ์ž‘๋™๋ฐฉ์‹์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

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

26. ์ฟ ํ‚ค, ์„ธ์…˜์˜ ๊ฐœ๋…๊ณผ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”

์ฟ ํ‚ค
  • ํด๋ผ์ด์–ธํŠธ๋กœ์ปฌ์— ์ €์žฅ๋˜๋Š” ํ‚ค์™€ ๊ฐ’์ด ๋“ค์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ ํŒŒ์ผ
  • ์‚ฌ์šฉ์ž ์ธ์ฆ์ด ์œ ํšจํ•œ ์‹œ๊ฐ„์„ ๋ช…์‹œ ๊ฐ€๋Šฅ, ์‹œ๊ฐ„์ด ์ •ํ•ด์ง€๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋˜์–ด๋„ ์ธ์ฆ์ด ์œ ์ง€๋œ๋‹ค๋Š” ํŠน์ง•
  • ์‚ฌ์šฉ์ž๊ฐ€ ๋”ฐ๋กœ ์š”์ฒญํ•˜์ง€ ์•Š์•„๋„ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ Request์‹œ์— Header์— ๋„ฃ์–ด์„œ ์ž๋™์œผ๋กœ ์„œ๋ฒ„์— ์ „์†ก
์„ธ์…˜
  • ์ฟ ํ‚ค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ณ  ์žˆ์ง€๋งŒ, ์‚ฌ์šฉ์ž ์ •๋ณด ํŒŒ์ผ์„ ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅํ•˜๋Š” ์ฟ ํ‚ค์™€ ๋‹ค๋ฅด๊ฒŒ, ์„œ๋ฒ„ ์ธก์—์„œ ์„ธ์…˜์„ ๊ด€๋ฆฌ
  • ์„œ๋ฒ„์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ์„ธ์…˜ID๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ ์ฟ ํ‚ค๋ฅผ ํ†ตํ•ด ์ด๋ฅผ ์ธ์ฆ

27. TCP/UDP์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

TCP, UDP ๋Š” TCP/IP ๋ชจ๋ธ์˜ ์ „์†ก ๊ณ„์ธต ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํ† ์ฝœ ์ž…๋‹ˆ๋‹ค.
TCP, UDP ๋ชจ๋‘ ํŒจํ‚ท์„ ํ•œ ์ปดํ“จํ„ฐ์—์„œ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ๋กœ ์ „๋‹ฌํ•ด์ฃผ๋Š” IP ํ”„๋กœํ† ์ฝœ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.
TCP๋Š” Transmission Control Protocol์˜ ์•ฝ์ž์ž…๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ๋œ ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ •์ ์œผ๋กœ, ์ˆœ์„œ๋Œ€๋กœ ๊ตํ™˜ํ•˜๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. TCP๋Š” ์—ฐ์†์„ฑ๋ณด๋‹ค ์‹ ๋ขฐ์„ฑ์ด ์žˆ๋Š” ์ „์†ก์ด ์ค‘์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค.
UDP๋Š” User Datagram Protocol์˜ ์•ฝ์ž์ž…๋‹ˆ๋‹ค.์—ฌ๊ธฐ์„œ Datagram์€ ๋…๋ฆฝ์ ์ธ ๊ด€๊ณ„๋ฅผ ์ง€๋‹ˆ๋Š” ํŒจํ‚ท์„ ๋œปํ•ฉ๋‹ˆ๋‹ค.์ฆ‰, ๊ฐ๊ฐ์˜ ํŒจํ‚ท์ด ๋…๋ฆฝ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ํŒจํ‚ท๋งˆ๋‹ค ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. UDP๋Š” ์‹ ๋ขฐ์„ฑ๋ณด๋‹ค ์—ฐ์†์„ฑ์ด ์žˆ๋Š” ์ „์†ก์ด ์ค‘์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค.

28. http, https ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

HTTP(Hypertext Transfer Protocol)๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•œ ํ†ต์‹  ๊ทœ์น™ ์„ธํŠธ ๋˜๋Š” ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์›น ์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•˜๋ฉด ์‚ฌ์šฉ์ž ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์›น ์„œ๋ฒ„์— HTTP ์š”์ฒญ์„ ์ „์†กํ•˜๊ณ  ์›น ์„œ๋ฒ„๋Š” HTTP ์‘๋‹ต์œผ๋กœ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค. ์›น ์„œ๋ฒ„์™€ ์‚ฌ์šฉ์ž ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ๊ตํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด HTTP ํ”„๋กœํ† ์ฝœ์€ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ์ž‘๋™ํ•˜๊ฒŒ ํ•˜๋Š” ๊ธฐ๋ณธ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด HTTPS(Hypertext Transfer Protocol Secure)๋Š” HTTP์˜ ํ™•์žฅ ๋ฒ„์ „ ๋˜๋Š” ๋” ์•ˆ์ „ํ•œ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. HTTPS์—์„œ๋Š” ๋ธŒ๋ผ์šฐ์ €์™€ ์„œ๋ฒ„๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ธฐ ์ „์— ์•ˆ์ „ํ•˜๊ณ  ์•”ํ˜ธํ™”๋œ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
HTTPS ์›น ์‚ฌ์ดํŠธ๋Š” ๋…๋ฆฝ๋œ ์ธ์ฆ ๊ธฐ๊ด€(CA)์—์„œ SSL/TLS ์ธ์ฆ์„œ๋ฅผ ํš๋“ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์›น ์‚ฌ์ดํŠธ๋Š” ์‹ ๋ขฐ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•˜๊ธฐ ์ „์— ๋ธŒ๋ผ์šฐ์ €์™€ ์ธ์ฆ์„œ๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. SSL ์ธ์ฆ์„œ๋Š” ์•”ํ˜ธํ™” ์ •๋ณด๋„ ํฌํ•จํ•˜๋ฏ€๋กœ ์„œ๋ฒ„์™€ ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ์•”ํ˜ธํ™”๋œ ๋ฐ์ดํ„ฐ๋‚˜ ์Šคํฌ๋žจ๋ธ”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

29. DI, IoC์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

DI(Dependency Injection)๋ž€ ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ์™ธ๋ถ€์—์„œ ์ƒ์„ฑํ•œ ํ›„ ์ฃผ์ž… ์‹œ์ผœ์ฃผ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
DI(์˜์กด์„ฑ ์ฃผ์ž…)๋ฅผ ํ†ตํ•ด์„œ ๋ชจ๋“ˆ ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์•„์ง€๊ณ  ์œ ์—ฐ์„ฑ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค.
์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ DI๋ฅผ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ, ๋Œ€ํ‘œ์ ์œผ๋กœ ์ƒ์„ฑ์ž ์ฃผ์ž…, ๋ฉ”์†Œ๋“œ ์ฃผ์ž…, ํ•„๋“œ ์ฃผ์ž… ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
IoC(Inversion of Controll)๋Š” ๊ตฌํ˜„์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋‹ค๋ฉด, ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ๊ตฌํ˜„์ฒด๋ฅผ ์ž…๋ ฅ ๋ฐ›๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

30. ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€ ๋ฌด์—‡์ด๊ณ  ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„ ์ค‘ ํ•˜๋‚˜๋กœ, ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ƒํ™”์‹œ์ผœ ์ƒํƒœ์™€ ํ–‰์œ„๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ ๊ฐ์ฒด๋“ค ๊ฐ„์˜ ์œ ๊ธฐ์ ์ธ ์ƒํ˜ธ์ž‘์šฉ์„ ํ†ตํ•ด ๋กœ์ง์„ ๊ตฌ์„ฑํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ๋ฒ•์ด๋‹ค.

31. ๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ ๋ฐœ์ƒ ์‹œ ์–ด๋–ป๊ฒŒ ๋Œ€์‘ํ•ด์•ผ ํ•˜๋‚˜์š”?

  • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์ด์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ๋Œ€์˜ ์„œ๋ฒ„๊ฐ€ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค ์ œ๊ณต ์—…์ฒด์˜ ์˜คํ†  ์Šค์ผ€์ผ๋ง ๊ธฐ๋Šฅ(์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋ฅผ ์ฒดํฌํ•˜์—ฌ ์„œ๋ฒ„๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹)์„ ์‚ฌ์šฉํ•ด ๋ด…๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์ƒค๋”ฉ์„ ์ ์šฉ(DB ํ…Œ์ด๋ธ”์„ ์ˆ˜ํ‰ ๋ถ„ํ• ํ•˜์—ฌ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์„œ๋กœ ๋‹ค๋ฅธ๊ณณ์— ๋ถ„์‚ฐ ์ €์žฅ)
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ ˆํ”Œ๋ฆฌ์นด ์ ์šฉ
  • ์„œ๋ฒ„๋ฅผ ์Šค์ผ€์ผ ์—…ํ•ฉ๋‹ˆ๋‹ค.
  • ์ •์  ์ปจํ…์ธ ์— ๋Œ€ํ•ด CDN ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ์ปจํ…์ธ  ๋‹ค์šด ์‹œ๊ฐ„์„ ๋‹จ์ถ•์‹œํ‚ต๋‹ˆ๋‹ค.
  • API์˜ ์‘๋‹ต์†๋„๋ฅผ ๋‹จ์ถ•์‹œํ‚ค์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•ด๋ด…๋‹ˆ๋‹ค.

32. ORM์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ฟผ๋ฆฌ๊ฐ€ ๋ณต์žกํ•ด์ง€๋Š” ๊ฒฝ์šฐ์—๋Š” ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•˜๋Š”๊ฒŒ ์ข‹์„๊นŒ์š”?

  • ์ผ๋‹จ JPA ์ž์ฒด๋Š” ์ •์ ์ธ ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•˜๋Š”๊ฑธ ๊ถŒ์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์žกํ•œ ์ฟผ๋ฆฌ์™€ ๋™์ ์ธ ์ฟผ๋ฆฌ์— ๋Œ€ํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ๊ทธ๋Ÿด๋•Œ๋Š” JPQL๊ณผ Querydsl์„ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

33. GET, POST์˜ ๊ฐœ๋…๊ณผ ํ•จ๊ป˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

GET ๋ฉ”์„œ๋“œ:

  • GET ๋ฉ”์„œ๋“œ๋Š” ์ •๋ณด๋ฅผ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์š”์ฒญํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ๋ฐ์ดํ„ฐ์˜ ์กฐํšŒ ๋ฐ ๊ฒ€์ƒ‰๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋Š” URL ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ตํ•ด ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, https://example.com/resource?param1=value1ยถm2=value2์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋Š” URL์˜ ์ผ๋ถ€์ด๋ฏ€๋กœ ๋ธŒ๋ผ์šฐ์ € ํžˆ์Šคํ† ๋ฆฌ์— ์ €์žฅ๋˜๋ฉฐ ๋ถ๋งˆํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • GET ์š”์ฒญ์€ ์บ์‹ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์š”์ฒญ์ด ๋ฐ˜๋ณต๋  ๋•Œ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉฑ๋“ฑ(idempotent)ํ•œ ํŠน์„ฑ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

POST ๋ฉ”์„œ๋“œ:

  • POST ๋ฉ”์„œ๋“œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋กœ ์ œ์ถœํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ๋ฐ์ดํ„ฐ์˜ ์ƒ์„ฑ, ์—…๋ฐ์ดํŠธ ๋ฐ ์‚ญ์ œ์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋Š” HTTP ์š”์ฒญ ๋ณธ๋ฌธ(body)์— ํฌํ•จ๋˜๋ฉฐ, URL์— ์ง์ ‘ ๋…ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋กœ์จ ๋ฐ์ดํ„ฐ๋Š” ์•ˆ์ „ํ•˜๊ฒŒ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.
  • POST ์š”์ฒญ์€ ๋ฐ์ดํ„ฐ์˜ ๊ธธ์ด๋‚˜ ํ˜•ํƒœ์— ์ œํ•œ์ด ์—†์œผ๋ฉฐ, ํŒŒ์ผ ์—…๋กœ๋“œ์™€ ๊ฐ™์ด ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • POST ์š”์ฒญ์€ ์บ์‹ฑํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ์š”์ฒญ์ด ๋ฐ˜๋ณต๋  ๋•Œ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉฑ๋“ฑํ•˜์ง€ ์•Š์€(non-idempotent) ํŠน์„ฑ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ํ๋ฆ„

  • ํด๋ผ์ด์–ธํŠธ(์›น ๋ธŒ๋ผ์šฐ์ € ๋˜๋Š” ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜)๋Š” HTTP GET ๋˜๋Š” POST ์š”์ฒญ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • GET ์š”์ฒญ์˜ ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ๋Š” URL์— ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด๋กœ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. POST ์š”์ฒญ์˜ ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ๋Š” HTTP ์š”์ฒญ ๋ณธ๋ฌธ์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • ์š”์ฒญ๋œ ๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜ ์š”์ฒญ ํ—ค๋”์™€ ๋ฉ”์„œ๋“œ(GET ๋˜๋Š” POST) ๋“ฑ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ HTTP ์š”์ฒญ์ด ์„œ๋ฒ„๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„๋Š” ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๊ณ , ํ•ด๋‹น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • GET ์š”์ฒญ์˜ ๊ฒฝ์šฐ, ์„œ๋ฒ„๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ต์˜ ์ผ๋ถ€๋กœ ๋‹ค์‹œ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. POST ์š”์ฒญ์˜ ๊ฒฝ์šฐ, ์„œ๋ฒ„๋Š” ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๊ณ  ๋‹ค์‹œ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด์„ํ•˜๊ณ  ์›ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ‘œ์‹œํ•˜๊ฑฐ๋‚˜ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

34. OSI 7๊ณ„์ธต์— ๋Œ€ํ•ด ์•„๋Š”๋Œ€๋กœ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

1. ๋ฌผ๋ฆฌ ๊ณ„์ธต (Physical Layer):

๋ฌผ๋ฆฌ์ ์ธ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ผ€์ด๋ธ”, ์Šค์œ„์น˜, ํ—ˆ๋ธŒ ๋“ฑ์˜ ํ•˜๋“œ์›จ์–ด ๋””๋ฐ”์ด์Šค์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฐ์ดํ„ฐ ๋น„ํŠธ๋ฅผ ์ „์†กํ•˜๊ณ  ์‹ ํ˜ธ๋ฅผ ๋ณ€ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
๋ฌผ๋ฆฌ ๊ณ„์ธต์—์„œ ์†ก์ˆ˜์‹ ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ”„๋ ˆ์ž„(frame)์œผ๋กœ ๋ถ„ํ• ํ•˜๊ณ , ์˜ค๋ฅ˜ ๊ฒ€์ถœ ๋ฐ ์ˆ˜์ •์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
MAC ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ์ปฌ ๋„คํŠธ์›Œํฌ ๋‚ด์—์„œ์˜ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
์Šค์œ„์น˜ ๋“ฑ์˜ ์žฅ๋น„๊ฐ€ ์ด ๊ณ„์ธต์—์„œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

3. ๋„คํŠธ์›Œํฌ ๊ณ„์ธต (Network Layer):

๋ฐ์ดํ„ฐ ํŒจํ‚ท(packet)์˜ ๊ฒฝ๋กœ ์„ ํƒ ๋ฐ ๋ผ์šฐํŒ…์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒจํ‚ท์„ ๋ชฉ์ ์ง€๊นŒ์ง€ ์ „๋‹ฌํ•˜๋ฉฐ, ์„œ๋ธŒ๋„ท ๊ฐ„์˜ ํ†ต์‹ ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
๋ผ์šฐํ„ฐ๊ฐ€ ์ด ๊ณ„์ธต์—์„œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

4. ์ „์†ก ๊ณ„์ธต (Transport Layer):

๋ฐ์ดํ„ฐ ์ „์†ก์˜ ์‹ ๋ขฐ์„ฑ๊ณผ ์ •ํ™•์„ฑ์„ ๊ด€๋ฆฌํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ์˜ ์˜ค๋ฅ˜ ๋ณต๊ตฌ์™€ ํ๋ฆ„ ์ œ์–ด๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ํ†ต์‹ ์„ ์ง€์›ํ•˜๋ฉฐ, TCP์™€ UDP ํ”„๋กœํ† ์ฝœ์ด ์ด ๊ณ„์ธต์—์„œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

5. ์„ธ์…˜ ๊ณ„์ธต (Session Layer):

์„ธ์…˜์˜ ์„ค์ •, ์œ ์ง€, ์ข…๋ฃŒ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ์‹œ์Šคํ…œ ๊ฐ„์˜ ๋‹ค์ค‘ ์ž‘์—… ๋ฐ ๋™์‹œ์„ฑ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

6. ํ‘œํ˜„ ๊ณ„์ธต (Presentation Layer):

๋ฐ์ดํ„ฐ๋ฅผ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ๋ฐ์ดํ„ฐ ์••์ถ•, ์•”ํ˜ธํ™”, ์ธ์ฝ”๋”ฉ ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
๋ฐ์ดํ„ฐ ํ˜•์‹ ๋ฐ ๋ฌธ๋ฒ• ๋ณ€ํ™˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

7. ์‘์šฉ ๊ณ„์ธต (Application Layer):

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

35. ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ๊ณผ ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ(Session-Based Authentication):

  1. ์„œ๋ฒ„ ์ธก ์ €์žฅ: ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ์€ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด(์˜ˆ: ๋กœ๊ทธ์ธ ์ƒํƒœ)๋ฅผ ์„œ๋ฒ„ ์ธก์— ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž ์„ธ์…˜์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

  2. ์ฟ ํ‚ค ์‚ฌ์šฉ: ์ผ๋ฐ˜์ ์œผ๋กœ ์„ธ์…˜ ID๊ฐ€ ์ฟ ํ‚ค๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ์ด ์„ธ์…˜ ID๋ฅผ ์š”์ฒญ ํ—ค๋”์— ํฌํ•จํ•˜์—ฌ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ์„ธ์…˜ ID๋ฅผ ํ™•์ธํ•˜๊ณ  ํ•ด๋‹น ์„ธ์…˜์— ์—ฐ๊ฒฐ๋œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

  3. ์„œ๋ฒ„ ์ธก ์œ ์ง€: ์„ธ์…˜์€ ์„œ๋ฒ„ ์ธก์—์„œ ์œ ์ง€๋˜๋ฏ€๋กœ ํด๋ผ์ด์–ธํŠธ๋Š” ์„ธ์…˜์— ๋Œ€ํ•œ ๊ด€๋ฆฌ๋‚˜ ์ €์žฅ์„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ƒ๋Œ€์ ์œผ๋กœ ๋œ ๋ถ€๋‹ด์„ ์ฃผ๋Š” ์žฅ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  4. ๋กœ๊ทธ์•„์›ƒ ๋ฐ ์„ธ์…˜ ๊ด€๋ฆฌ: ๋กœ๊ทธ์•„์›ƒ์€ ์„œ๋ฒ„ ์ธก์—์„œ ๊ด€๋ฆฌ๋˜๋ฉฐ, ์„ธ์…˜์˜ ๋งŒ๋ฃŒ ์‹œ๊ฐ„์„ ์„ค์ •ํ•˜์—ฌ ์„ธ์…˜ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ(Token-Based Authentication):

  1. ์„œ๋ฒ„ ์ธก ์ €์žฅ ์—†์Œ: ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ์—์„œ๋Š” ์„œ๋ฒ„ ์ธก์— ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ •๋ณด๋Š” ํ† ํฐ ์ž์ฒด์— ํฌํ•จ๋˜์–ด ์žˆ๊ฑฐ๋‚˜, ํ† ํฐ์ด ์„œ๋ฒ„ ์ธก์—์„œ ๊ฒ€์ฆ๋  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ํ† ํฐ ์‚ฌ์šฉ: ์‚ฌ์šฉ์ž๋Š” ์ธ์ฆ ํ›„ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ํ† ํฐ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์ด ํ† ํฐ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ ์ธก์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค(๋กœ์ปฌ ์ €์žฅ์†Œ, ์ฟ ํ‚ค, ๋ธŒ๋ผ์šฐ์ € ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ).

  3. ํด๋ผ์ด์–ธํŠธ ์ธก ์œ ์ง€: ํ† ํฐ์€ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์œ ์ง€๋˜๋ฉฐ, ํด๋ผ์ด์–ธํŠธ๋Š” ํ† ํฐ์„ ์„œ๋ฒ„์— ์ œ๊ณตํ•˜์—ฌ ์ž๊ฒฉ ์ฆ๋ช…์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  4. ๋กœ๊ทธ์•„์›ƒ ๋ฐ ํ† ํฐ ๊ด€๋ฆฌ: ๋กœ๊ทธ์•„์›ƒ ๋ฐ ํ† ํฐ ๋งŒ๋ฃŒ๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์œผ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ํ† ํฐ์—๋Š” ์œ ํšจ ๊ธฐ๊ฐ„์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์„œ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

์ฐจ์ด์  ์š”์•ฝ:

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

36. JWT, Refresh, Access Token์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

  1. JWT (JSON Web Token):

    • JWT๋Š” ์›น ๋ฐ ๋„คํŠธ์›Œํฌ ๋ณด์•ˆ์—์„œ ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ปดํŒฉํŠธํ•˜๊ณ  ์ž์ฒด ์ˆ˜์šฉ ๊ฐ€๋Šฅํ•œ ๋ฐฉ์‹์˜ ํ† ํฐ์ž…๋‹ˆ๋‹ค.
    • JWT๋Š” JSON ํ˜•์‹์œผ๋กœ ์ธ์ฝ”๋”ฉ๋˜๋ฉฐ, ์ฃผ๋กœ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด์™€ ํด๋ ˆ์ž„(claim) ์ •๋ณด(์˜ˆ: ์‚ฌ์šฉ์ž ID, ๋งŒ๋ฃŒ ์‹œ๊ฐ„, ๊ถŒํ•œ ๋“ฑ)๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
    • JWT๋Š” ์„œ๋ฒ„์—์„œ ์„œ๋ช…๋˜์–ด ์žˆ์–ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋„๋ก ๋ณด์žฅ๋˜๋ฉฐ, ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.
    • JWT๋Š” ์ฃผ๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ API์—์„œ ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ์— ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค.
  2. Access Token:

    • Access Token์€ ์‚ฌ์šฉ์ž๋ฅผ ๋Œ€ํ‘œํ•˜์—ฌ API ๋˜๋Š” ์„œ๋น„์Šค์— ์ ‘๊ทผํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ† ํฐ์ž…๋‹ˆ๋‹ค.
    • ์ฃผ๋กœ OAuth 2.0 ๋ฐ OpenID Connect์™€ ๊ฐ™์€ ํ”„๋กœํ† ์ฝœ์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ์‚ฌ์šฉ์ž๊ฐ€ ์ž์›์— ์ ‘๊ทผํ•  ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๊ณ  ์ธ์ฆํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • Access Token์€ ์ผ๋ฐ˜์ ์œผ๋กœ JWT ๋˜๋Š” ๋‹ค๋ฅธ ํ˜•์‹์˜ ํ† ํฐ์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ์งง์€ ์œ ํšจ ๊ธฐ๊ฐ„์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.
  3. Refresh Token:

    • Refresh Token์€ Access Token์„ ๊ฐฑ์‹ ํ•˜๊ฑฐ๋‚˜ ์žฌ๋ฐœ๊ธ‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํŠน์ˆ˜ํ•œ ํ† ํฐ์ž…๋‹ˆ๋‹ค.
    • Access Token์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์œ ํšจ ๊ธฐ๊ฐ„์ด ์งง๊ธฐ ๋•Œ๋ฌธ์—, Refresh Token์„ ์‚ฌ์šฉํ•˜์—ฌ Access Token์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • Refresh Token์€ ์ฃผ๋กœ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•˜๊ณ , ๋งŒ๋ฃŒ๋œ Access Token์„ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • Refresh Token์€ ์ผ๋ฐ˜์ ์œผ๋กœ Access Token๊ณผ๋Š” ๋ณ„๋„๋กœ ์ €์žฅ ๋ฐ ๋ณดํ˜ธ๋˜๋ฉฐ, ๋” ๊ธด ์œ ํšจ ๊ธฐ๊ฐ„์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

37. OAuth์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

OAuth(Open Authorization)๋Š” ์ธํ„ฐ๋„ท์„ ํ†ตํ•ด ๋‹ค๋ฅธ ์›น ์„œ๋น„์Šค ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์ œํ•œ๋œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๊ธฐ ์œ„ํ•œ ๊ถŒํ•œ ๋ถ€์—ฌ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. OAuth๋Š” ์‚ฌ์šฉ์ž ๋˜๋Š” ์„œ๋น„์Šค ์†Œ์œ ์ž์˜ ๋™์˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค๋ฅธ ์„œ๋น„์Šค ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. OAuth๋Š” ๋‹ค์–‘ํ•œ ์›น ์„œ๋น„์Šค ๋ฐ API์—์„œ ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ๋„๋ฆฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

OAuth์˜ ํ•ต์‹ฌ ์š”์†Œ์™€ ๊ฐœ๋…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  1. ์ธ์ฆ ์„œ๋ฒ„(Authentication Server): OAuth ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์‚ฌ์šฉ์ž ์ธ์ฆ์„ ์œ„ํ•ด ์ธ์ฆ ์„œ๋ฒ„์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ์ธ์ฆ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  2. ํด๋ผ์ด์–ธํŠธ(Client): OAuth๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋˜๋Š” ์„œ๋น„์Šค๋ฅผ ํด๋ผ์ด์–ธํŠธ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๋ ค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

  3. ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„(Resource Server): ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ๋˜๋Š” ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๊ฐ€ ํ•„์š”ํ•œ ์„œ๋ฒ„ ๋˜๋Š” API๋ฅผ ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

  4. ๋ฆฌ์†Œ์Šค ์†Œ์œ ์ž(Resource Owner): ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ์œ ํ•˜๊ฑฐ๋‚˜ ์ œ์–ดํ•˜๋Š” ์‚ฌ์šฉ์ž๋ฅผ ๋ฆฌ์†Œ์Šค ์†Œ์œ ์ž๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

  5. ์•ก์„ธ์Šค ํ† ํฐ(Access Token): OAuth ํ”„๋กœ์„ธ์Šค๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•œ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ํ† ํฐ์ž…๋‹ˆ๋‹ค. ์ด ํ† ํฐ์€ ์ œํ•œ๋œ ๊ถŒํ•œ์„ ๊ฐ€์ง€๋ฉฐ, ์œ ํšจ ๊ธฐ๊ฐ„์ด ์ œํ•œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

OAuth ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ๊ณ„๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค:

  1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ๋ก: ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ OAuth ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ธ์ฆ ์„œ๋ฒ„ ๋ฐ ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„์™€ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

  2. ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ: ํด๋ผ์ด์–ธํŠธ๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•˜๊ธฐ ์œ„ํ•ด ์ธ์ฆ ์„œ๋ฒ„๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธํ•˜๊ณ , ์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์˜ ์ž๊ฒฉ ์ฆ๋ช…์œผ๋กœ ์ธ์ฆํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์†Œ์Šค์˜ ๋ฒ”์œ„๋ฅผ ์„ ํƒํ•˜๊ณ , ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

  3. ์•ก์„ธ์Šค ํ† ํฐ ์š”์ฒญ: ์ธ์ฆ์ด ์„ฑ๊ณตํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ์•ก์„ธ์Šค ํ† ํฐ์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ์ด ์š”์ฒญ์€ ๊ถŒํ•œ ์ฝ”๋“œ(authorization code)๋‚˜ ๋ฆฌ์†Œ์Šค ์†Œ์œ ์ž์˜ ์ž๊ฒฉ ์ฆ๋ช…(๋น„๋ฐ€ ๋ฒˆํ˜ธ)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  4. ์•ก์„ธ์Šค ํ† ํฐ ๋ฐœ๊ธ‰: ์ธ์ฆ ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์•ก์„ธ์Šค ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

  5. ์•ก์„ธ์Šค ํ† ํฐ์„ ์‚ฌ์šฉํ•œ ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„ ์•ก์„ธ์Šค: ํด๋ผ์ด์–ธํŠธ๋Š” ์•ก์„ธ์Šค ํ† ํฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„์— ์•ก์„ธ์Šคํ•˜๊ณ , ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ๋‚˜ ์„œ๋น„์Šค๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

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

38. HTTP ์ƒํƒœ์ฝ”๋“œ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

HTTP(ํ•˜์ดํผํ…์ŠคํŠธ ์ „์†ก ํ”„๋กœํ† ์ฝœ) ์ƒํƒœ ์ฝ”๋“œ๋Š” ์›น ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ˜ํ™˜ํ•˜๋Š” 3์ž๋ฆฌ ์ˆซ์ž ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ํ˜„์žฌ ์š”์ฒญ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ํ†ต์‹ ์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. HTTP ์ƒํƒœ ์ฝ”๋“œ๋Š” ์š”์ฒญ์ด ์„ฑ๊ณตํ–ˆ๋Š”์ง€, ์‹คํŒจํ–ˆ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์‹คํŒจํ•œ ๊ฒฝ์šฐ ๊ทธ ์ด์œ ๋ฅผ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

HTTP ์ƒํƒœ ์ฝ”๋“œ๋Š” ๋‹ค์Œ ์„ธ ๊ฐ€์ง€ ๋ฒ”์ฃผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  1. 1xx (Informational - ์ •๋ณด): ์š”์ฒญ์ด ๋ฐ›์•˜์œผ๋ฉฐ ์ฒ˜๋ฆฌ ์ค‘์ž„์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒํƒœ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ ์‘๋‹ต์€ ์•„์ง ๋„์ฐฉํ•˜์ง€ ์•Š์€ ์ƒํƒœ์ด๋ฉฐ, ํด๋ผ์ด์–ธํŠธ๋Š” ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  2. 2xx (Successful - ์„ฑ๊ณต): ์š”์ฒญ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒํƒœ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ํ”ํ•œ ์ƒํƒœ ์ฝ”๋“œ๋Š” 200(OK)์ด๋ฉฐ, ์š”์ฒญ์ด ์„ฑ๊ณตํ–ˆ๊ณ  ํด๋ผ์ด์–ธํŠธ๋Š” ์‘๋‹ต์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.

  3. 3xx (Redirection - ๋ฆฌ๋””๋ ‰์…˜): ์ถ”๊ฐ€ ์กฐ์น˜๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์š”์ฒญ์„ ๋‹ค๋ฅธ ์œ„์น˜๋กœ ๋ฆฌ๋””๋ ‰ํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  4. 4xx (Client Error - ํด๋ผ์ด์–ธํŠธ ์˜ค๋ฅ˜): ์š”์ฒญ์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒํƒœ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 404(Not Found)๋Š” ์š”์ฒญํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

  5. 5xx (Server Error - ์„œ๋ฒ„ ์˜ค๋ฅ˜): ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋™์•ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒํƒœ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 500(Internal Server Error)๋Š” ์„œ๋ฒ„์—์„œ ๋‚ด๋ถ€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

39. CI/CD์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

CI/CD๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ๋ฐ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™”ํ•˜๊ณ  ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๊ฐœ๋…๊ณผ ๋ฐฉ๋ฒ•๋ก ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์šฉ์–ด์ž…๋‹ˆ๋‹ค. CI๋Š” "์ง€์†์ ์ธ ํ†ตํ•ฉ(Continuous Integration)"์˜ ์•ฝ์ž์ด๋ฉฐ, CD๋Š” "์ง€์†์ ์ธ ์ „๋‹ฌ(Continuous Delivery)" ๋˜๋Š” "์ง€์†์ ์ธ ๋ฐฐํฌ(Continuous Deployment)"์˜ ์•ฝ์ž์ž…๋‹ˆ๋‹ค. ์ด ๋‘ ๊ฐ€์ง€ ๊ฐœ๋…์€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ๋ฐ ๋ฐฐํฌ์˜ ํšจ์œจ์„ฑ๊ณผ ํ’ˆ์งˆ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

  1. ์ง€์†์ ์ธ ํ†ตํ•ฉ(CI - Continuous Integration):

    • CI๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ณต์œ  ์ฝ”๋“œ ์ €์žฅ์†Œ(์˜ˆ: Git)์— ํ‘ธ์‹œํ•  ๋•Œ ์ž๋™์œผ๋กœ ํ†ตํ•ฉ ๋ฐ ํ…Œ์ŠคํŠธ๋˜๋Š” ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    • CI ์‹œ์Šคํ…œ์€ ์ฝ”๋“œ ํ†ตํ•ฉ ํ›„ ์ž๋™ํ™”๋œ ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ํ’ˆ์งˆ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋กœ ์ธํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๋นˆ๋ฒˆํ•œ ์ฝ”๋“œ ํ†ตํ•ฉ๊ณผ ํ’ˆ์งˆ ํ–ฅ์ƒ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ž ์žฌ์ ์ธ ๋ฒ„๊ทธ ๋ฐ ์ถฉ๋Œ์„ ์กฐ๊ธฐ์— ๋ฐœ๊ฒฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  2. ์ง€์†์ ์ธ ์ „๋‹ฌ(CD - Continuous Delivery):

    • CD๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์œผ๋กœ ์ž๋™์œผ๋กœ ์ „๋‹ฌํ•˜๊ณ , ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์Šน์ธํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    • CI์™€ ํ•จ๊ป˜ CD๋Š” ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ํŒจํ‚ค์ง• ๋ฐ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์œผ๋กœ ๋ฐฐํฌ๋ฅผ ์ž๋™ํ™”ํ•ฉ๋‹ˆ๋‹ค.
    • CD๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ๋œ ์†Œํ”„ํŠธ์›จ์–ด๋Š” ํ”„๋กœ๋•์…˜ ์ค€๋น„ ์ƒํƒœ๋กœ ๊ณ„์† ์ „๋‹ฌ๋˜๋ฏ€๋กœ, ๋ฆด๋ฆฌ์ฆˆ ๋ฒ„์ „์˜ ๋ฐฐํฌ๋ฅผ ์–ธ์ œ๋“  ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์ง€์†์ ์ธ ๋ฐฐํฌ(CD - Continuous Deployment):

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

40. TDD์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

TDD(Test-Driven Development)๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก  ์ค‘ ํ•˜๋‚˜๋กœ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•˜๊ณ , ๊ทธ ๋‹ค์Œ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์„ ๊ฐ•์กฐํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์ž…๋‹ˆ๋‹ค. TDD๋Š” ๋‹ค์Œ ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค:

  1. ํ…Œ์ŠคํŠธ ์ž‘์„ฑ ๋‹จ๊ณ„ (Red - ๋นจ๊ฐ•):

    • ๋จผ์ €, ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๋˜๋Š” ๋ชจ๋“ˆ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์ „์— ํ•ด๋‹น ๊ธฐ๋Šฅ ๋˜๋Š” ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ ์ž‘์„ฑ๋œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ์•„์ง ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๊ธฐ๋Šฅ ๋˜๋Š” ๋ชจ๋“ˆ์„ ๊ฒ€์‚ฌํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋กœ ์ธํ•ด ํ…Œ์ŠคํŠธ๋Š” ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค(๋นจ๊ฐ„ ๋ถˆ) because the functionality is not yet implemented.
  2. ์ฝ”๋“œ ์ž‘์„ฑ ๋‹จ๊ณ„ (Green - ์ดˆ๋ก):

    • ์ด ๋‹จ๊ณ„์—์„œ ๋ชฉํ‘œ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๋„๋ก ์ตœ์†Œํ•œ์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ ์ž‘์„ฑ์€ ์ฃผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ ์ž‘์„ฑ์— ์ดˆ์ ์„ ๋งž์ถฅ๋‹ˆ๋‹ค. ์ฝ”๋“œ๊ฐ€ ์•„์ง ์™„๋ฒฝํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. ์ฃผ์š” ๋ชฉํ‘œ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๋Š” ๊ฒƒ(์ดˆ๋ก ๋ถˆ)์ž…๋‹ˆ๋‹ค.
  3. ๋ฆฌํŒฉํ„ฐ๋ง ๋‹จ๊ณ„ (Refactor):

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

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

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

41. ํ”„๋กœ์„ธ์Šค์™€ ์“ฐ๋ ˆ๋“œ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜๊ณ  ๊ทธ ์ฐจ์ด์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

ํ”„๋กœ์„ธ์Šค๋Š” ์‹คํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์“ฐ๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์‹คํ–‰๋˜๋ฉด์„œ ์ž์›์„ ๊ณต์œ ํ•˜๋Š” ์ž‘์€ ์‹คํ–‰ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ๋ผ๋ฉด์„ ๋“์ด๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋Œ์•„๊ฐ€๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด, ๊ทธ ๋‚ด๋ถ€์—์„œ๋Š” ๋ฌผ์„ ๋ฐ›์•„์˜ค๋Š” ์“ฐ๋ ˆ๋“œ, ๋ผ๋ฉด์„ ๊ฐ€์ ธ์˜ค๋Š” ์“ฐ๋ ˆ๋“œ, ๋ถˆ์„ ์ผœ๋Š” ์“ฐ๋ ˆ๋“œ ๋“ฑ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์š”์•ฝํ•˜์ž๋ฉด, ํ”„๋กœ์„ธ์Šค๋Š” ๋…๋ฆฝ์ ์ด๊ณ  ์ž์ฒด์ ์ธ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ๊ฐ€์ง€๋ฉฐ, ์Šค๋ ˆ๋“œ๋Š” ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์‹คํ–‰๋˜๋ฉด์„œ ์ž์›์„ ๊ณต์œ ํ•˜๋Š” ์ž‘์€ ์‹คํ–‰ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค.

42. ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์Šค์™€ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ์˜ ํŠน์ง•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค

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

๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ

๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ๋Š” ๊ฐ ์“ฐ๋ ˆ๋“œ๋“ค์ด ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ์•ˆ์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๋ฉฐ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ํ”„๋กœ์„ธ์Šค ์ „์ฒด๊ฐ€ ์˜ํ–ฅ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์“ฐ๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ž์›์„ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์“ฐ๋ ˆ๋“œ๋“ค๊ฐ„์˜ ํ†ต์‹ ์ด ๋น„๊ต์  ๊ฐ„๋‹จํ•˜์ง€๋งŒ ๋™๊ธฐํ™” ๋ฌธ์ œ ๋“ฑ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์“ฐ๋ ˆ๋“œ๋Š” ์ƒ์„ฑ๊ณผ ์†Œ๋ฉธ์ด ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค ์‹œ๊ฐ„๊ณผ ์ž์›์ด ์ ๊ฒŒ ๋“ญ๋‹ˆ๋‹ค.

43. ์ฟผ๋ฆฌ ์ตœ์ ํ™”์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์‹œ๊ณ  ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

44. DB ๋กœ์ง ์ตœ์†Œํ™”๋ฅผ ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”?

45. ํ…Œ์ŠคํŠธ์ฝ”๋“œ์— ๋Œ€ํ•ด์„œ ์•„๋Š”๋Œ€๋กœ ์„ค๋ช…ํ•ด์ฃผ์‹œ๊ณ  ํ™œ์šฉ ๊ฒฝํ—˜์— ๋Œ€ํ•ด์„œ ๋‹ต๋ณ€ํ•ด์ฃผ์„ธ์š”.

46. Array, LinkedList์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์‹œ๊ณ  ๊ฐ๊ฐ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ๋ง์”€ํ•ด์ฃผ์„ธ์š”.

47. AWS S3, EC2๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์™€ ์‚ฌ์šฉ ๊ฒฝํ—˜์— ๋Œ€ํ•ด์„œ ๋‹ต๋ณ€ํ•ด์ฃผ์„ธ์š”.

48. ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด์„œ ์•„๋Š”๋Œ€๋กœ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

profile
์ž‘์€ ๊ฑธ์Œ์ด๋ผ๋„ ๊พธ์ค€ํžˆ

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