spring

[Spring] ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์™€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๊ด€ํ•œ ์งˆ์˜์‘๋‹ต (ChatGPT)

devJK93 2024. 8. 31.

๐Ÿ”ฅ ์„œ๋ธ”๋ฆฟ์€ ์š”์ฒญ์‹œ๋งˆ๋‹ค ์ƒ์„ฑ๋˜๋Š”๊ฐ€?

โ“ Question

์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋™์‹œ์— ์š”์ฒญ์„ ํ•œ๋‹ค๋ฉด ์“ฐ๋ ˆ๋“œ ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ๊ฐ๊ฐ ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜์”ฉ ์ƒ์„ฑํ•ด์„œ ๋™์‹œ์— service ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.

์—ฌ๋Ÿฌ ์š”์ฒญ์ด A์„œ๋ธ”๋ฆฟ์„ ์š”์ฒญํ•œ๋‹ค๋ฉด A์„œ๋ธ”๋ฆฟ์ด ์—ฌ๋Ÿฌ๊ฐœ ์ƒ์„ฑ๋˜์–ด ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ธ๊ฐ€? init()์ด ์—ฌ๋Ÿฌ๋ฒˆ ํ˜ธ์ถœ๋˜๋Š” ๊ฑด๊ฐ€?

 

๐Ÿ“ Answer

์•„๋‹ˆ์š”, ์„œ๋ธ”๋ฆฟ(Servlet)์€ ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์ƒ์„ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ(Servlet Container)๋Š” ํŠน์ • ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค์— ๋Œ€ํ•ด ๋‹จ์ผ ์ธ์Šคํ„ด์Šค๋งŒ ์ƒ์„ฑํ•˜๊ณ , ์ด ์ธ์Šคํ„ด์Šค๋ฅผ ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์— ๋Œ€ํ•ด ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‚ฌํ•ญ์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค:

  1. ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ํ•˜๋‚˜๋งŒ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค: ์„œ๋ธ”๋ฆฟ์ด ์ฒ˜์Œ ์š”์ฒญ๋  ๋•Œ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ํ•ด๋‹น ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ํ•˜๋‚˜ ์ƒ์„ฑํ•˜๊ณ , ๊ทธ ์ดํ›„์—๋Š” ์ด ์ธ์Šคํ„ด์Šค๋ฅผ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  2. init() ๋ฉ”์†Œ๋“œ๋Š” ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค: ์„œ๋ธ”๋ฆฟ์˜ init() ๋ฉ”์†Œ๋“œ๋Š” ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ฒ˜์Œ ์ƒ์„ฑ๋  ๋•Œ ๋‹จ ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ์ดํ›„์— ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์ด ์žˆ์„ ๋•Œ๋Š” init() ๋ฉ”์†Œ๋“œ๊ฐ€ ๋‹ค์‹œ ํ˜ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  3. ์—ฌ๋Ÿฌ ์š”์ฒญ์€ ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค: ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์ƒˆ๋กœ์šด ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ํ’€(pool)์—์„œ ๊ฐ€์ ธ์™€ service() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ, ๋™์ผํ•œ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ service() ๋ฉ”์†Œ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ์—์„œ ๋™์‹œ์— ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๋™๊ธฐํ™” ๋ฌธ์ œ์— ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ, ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ํ•˜๋‚˜๋งŒ ์ƒ์„ฑ๋˜๊ณ , ์ด ์ธ์Šคํ„ด์Šค๋Š” ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ์—์„œ ๋™์‹œ์— ๊ณต์œ ๋˜์–ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ init() ๋ฉ”์†Œ๋“œ๋Š” ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœ๋˜๋ฉฐ, service() ๋ฉ”์†Œ๋“œ๋Š” ์—ฌ๋Ÿฌ ๋ฒˆ ํ˜ธ์ถœ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ”ฅ A ์“ฐ๋ ˆ๋“œ๊ฐ€ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค1์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉด ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ๋“ค์€ ๋Œ€๊ธฐํ•˜๋Š”๊ฐ€?

โ“ Question

์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๊ฐ™์€ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•˜๋‚˜์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๊ทธ๊ฒƒ์„ ์ด์šฉํ•  ๋•Œ ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ๋Š” ๊ธฐ๋‹ค๋ฆฌ๋Š”๊ฑฐ์•ผ?

 

๐Ÿ“ Answer

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๊ฐ™์€ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” ๊ฐ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์„œ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์‹œ์— service() ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์„ ๋•Œ์—๋„ ๊ฐ ์“ฐ๋ ˆ๋“œ๋Š” ๋™์‹œ์— ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์“ฐ๋ ˆ๋“œ๋“ค์ด ๊ฐ์ž ๋…๋ฆฝ์ ์œผ๋กœ service() ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉฐ, ์ด๋ฅผ "๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ"์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

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

 

๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•

  1. ์„œ๋ธ”๋ฆฟ์˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ์‚ฌ์šฉ ์ž์ œ: ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค์—์„œ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ํ”ผํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋Œ€์‹ , ๊ฐ ์š”์ฒญ์— ๋Œ€ํ•ด์„œ๋Š” ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  2. ๋™๊ธฐํ™” ๋ธ”๋ก ์‚ฌ์šฉ: ๋งŒ์•ฝ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋‚˜ ๋‹ค๋ฅธ ๊ณต์œ  ์ž์›์— ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, synchronized ๋ธ”๋ก์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™๊ธฐํ™”๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์ด๋Š” ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์“ฐ๋ ˆ๋“œ ์•ˆ์ „ํ•œ ๊ฐ์ฒด ์‚ฌ์šฉ: ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•  ๋•Œ ์“ฐ๋ ˆ๋“œ ์•ˆ์ „ํ•œ ๊ฐ์ฒด(์˜ˆ: ConcurrentHashMap, CopyOnWriteArrayList ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๋™๊ธฐํ™”์˜ ๊ฒฝ์šฐ

์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค ์ž์ฒด์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋™๊ธฐํ™”๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์“ฐ๋ ˆ๋“œ๊ฐ€ ๊ฐ๊ฐ service() ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ๋ฅผ ๊ธฐ๋‹ค๋ฆด ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ๋น„๋™๊ธฐ์ ์œผ๋กœ ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ ์š”์ฒญ์€ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌ๋˜๋ฉฐ, ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ์—๋Š” ํ•œ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

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

 

๐Ÿ”ฅ JSP๋Š” ๊ฒฐ๊ตญ Servlet์œผ๋กœ ์‹คํ–‰๋˜๋‚˜?

โ“ Question

Servlet๊ณผ JSP๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ํ˜•ํƒœ์ด์ง€๋งŒ, ์‚ฌ์‹ค ์–ด๋Š ์ชฝ์ด๋“  ๊ฒฐ๊ตญ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์€ Servlet์ด๋‹ค. ์ฆ‰, WAS๊ฐ€(์ •ํ™•ํžˆ๋Š” JSP ์ปจํ…Œ์ด๋„ˆ๊ฐ€) JSP๋ฅผ Servlet ์ฝ”๋“œ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ , ๊ทธ ์„œ๋ธ”๋ฆฟ์„ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

1. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์›น ์„œ๋ฒ„์— ์š”์ฒญ
2. ์›น ์„œ๋ฒ„๊ฐ€ JSP ์ปจํ…Œ์ด๋„ˆ์— ์š”์ฒญ
3. JSP ์ปจํ…Œ์ด๋„ˆ๋Š” ํ•ด๋‹น JSP ํด๋ž˜์Šค ํŒŒ์ผ์ด ์žˆ๋Š”์ง€ ์ฐพ์•„๋ด„
4. ์—†์„ ๊ฒฝ์šฐ JSP ํŽ˜์ด์ง€๋ฅผ ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‹คํ–‰

์ด๊ฑธ ์ข€ ์ž์„ธํžˆ ์„ค๋ช…ํ•ด์ค„๋ž˜? ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰๊ณผ์ •์ด ๊ถ๊ธˆํ•˜๋‹ค

 

๐Ÿ“ Answer

JSP ํŽ˜์ด์ง€๊ฐ€ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ณ€ํ™˜๋˜์–ด ์‹คํ–‰๋˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ „์ฒด ๊ณผ์ •์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์€ JSP๊ฐ€ ์–ด๋–ป๊ฒŒ ์›น ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌ๋˜๊ณ , ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €์— ์ตœ์ข… ๊ฒฐ๊ณผ๊ฐ€ ํ‘œ์‹œ๋˜๋Š”์ง€๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

 

1. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์›น ์„œ๋ฒ„์— ์š”์ฒญ

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

2. ์›น ์„œ๋ฒ„๊ฐ€ JSP ์ปจํ…Œ์ด๋„ˆ์— ์š”์ฒญ ์ „๋‹ฌ

  • ์›น ์„œ๋ฒ„(์˜ˆ: Apache, Nginx)๋Š” ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค์˜ ์œ ํ˜•์— ๋”ฐ๋ผ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • JSP๋Š” ๋™์  ์›น ์ฝ˜ํ…์ธ ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ์ˆ ์ด๋ฏ€๋กœ, ์›น ์„œ๋ฒ„๋Š” ์ด ์š”์ฒญ์„ JSP๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋ธ”๋ฆฟ/JSP ์ปจํ…Œ์ด๋„ˆ(์˜ˆ: Apache Tomcat)๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • ์›น ์„œ๋ฒ„๋Š” ์ด ์ปจํ…Œ์ด๋„ˆ์— ์š”์ฒญ์„ ํฌ์›Œ๋”ฉํ•˜์—ฌ JSP ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

3. JSP ์ปจํ…Œ์ด๋„ˆ๊ฐ€ JSP ํŒŒ์ผ์„ ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜

  • JSP ํŒŒ์ผ ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ: JSP ์ปจํ…Œ์ด๋„ˆ๋Š” ํ•ด๋‹น JSP ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค ํŒŒ์ผ(.class)์ด ์ด๋ฏธ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    • ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ: ๊ธฐ์กด์— ์ƒ์„ฑ๋œ ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค ํŒŒ์ผ์ด ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ: JSP ์ปจํ…Œ์ด๋„ˆ๋Š” ๋‹ค์Œ์˜ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค:
      1. JSP๋ฅผ ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜: JSP ํŒŒ์ผ์€ ์„œ๋ธ”๋ฆฟ ์ž๋ฐ” ์ฝ”๋“œ(.java)๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ JSP ํŒŒ์ผ ๋‚ด์˜ HTML ์ฝ”๋“œ๋Š” ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ณ€ํ™˜๋˜๊ณ , JSP ์Šคํฌ๋ฆฝํ‹€๋ฆฟ(<% %>) ์•ˆ์˜ ์ž๋ฐ” ์ฝ”๋“œ๊ฐ€ ์„œ๋ธ”๋ฆฟ์˜ service() ๋ฉ”์†Œ๋“œ ์•ˆ์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
      2. ์„œ๋ธ”๋ฆฟ ์ž๋ฐ” ์ฝ”๋“œ ์ปดํŒŒ์ผ: ๋ณ€ํ™˜๋œ ์„œ๋ธ”๋ฆฟ ์ž๋ฐ” ํŒŒ์ผ์€ ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค ํŒŒ์ผ(.class)๋กœ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค.
  • ์ด ๋ณ€ํ™˜ ๋ฐ ์ปดํŒŒ์ผ ๊ณผ์ •์€ ํ•œ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰๋˜๋ฉฐ, ์ดํ›„ ๊ฐ™์€ JSP ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์ด๋ฏธ ์ƒ์„ฑ๋œ ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค ํŒŒ์ผ์ด ์žฌ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

4. ์„œ๋ธ”๋ฆฟ์˜ ์‹คํ–‰

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

5. ๊ฒฐ๊ณผ๋ฅผ ์›น ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ๋ธŒ๋ผ์šฐ์ €์— ๋ฐ˜ํ™˜

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

๐Ÿ“™ ์š”์•ฝ

  1. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์›น ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  2. ์›น ์„œ๋ฒ„๋Š” JSP ์š”์ฒญ์„ ์„œ๋ธ”๋ฆฟ/JSP ์ปจํ…Œ์ด๋„ˆ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  3. JSP ์ปจํ…Œ์ด๋„ˆ๋Š” JSP ํŒŒ์ผ์ด ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ณ€ํ™˜๋œ ์ ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์—†๋‹ค๋ฉด JSP๋ฅผ ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ณ€ํ™˜๋œ ์„œ๋ธ”๋ฆฟ์ด ์‹คํ–‰๋˜์–ด ๋™์  ์›น ์ฝ˜ํ…์ธ ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  5. ์›น ์„œ๋ฒ„๋Š” ์ƒ์„ฑ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์— ๋ฐ˜ํ™˜ํ•˜์—ฌ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ด๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ณผ์ • ๋•๋ถ„์— JSP๋Š” ์„œ๋ฒ„์—์„œ ๋™์ ์œผ๋กœ ์›น ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‹ค์ œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์€ ์„œ๋ธ”๋ฆฟ์ด์ง€๋งŒ ๊ฐœ๋ฐœ์ž๋Š” JSP ํŒŒ์ผ๋กœ ์‰ฝ๊ฒŒ ์›น ํŽ˜์ด์ง€๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ”ฅ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” Java ํŒŒ์ผ์ธ๊ฐ€

โ“ Question

์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ์ž๋ฐ”ํŒŒ์ผ์ธ๊ฐ€?

 

๐Ÿ“ Answer

์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ์ž๋ฐ” ํŒŒ์ผ(Java ํŒŒ์ผ)์ด ์•„๋‹™๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์™€ ์ž๋ฐ” ํŒŒ์ผ ๊ฐ„์˜ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์„œ๋ธ”๋ฆฟ์ด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์ข€ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณผ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค

  • ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค: ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค๋Š” ์ž๋ฐ”๋กœ ์ž‘์„ฑ๋˜๋ฉฐ, javax.servlet.http.HttpServlet ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„ doGet(), doPost() ๋“ฑ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ์ƒ์„ฑ๋˜๊ณ  ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
  • ์—ญํ• : ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ํด๋ผ์ด์–ธํŠธ์˜ HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , HTTP ์‘๋‹ต์„ ์ƒ์„ฑํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์— ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์ž๋ฐ” ํŒŒ์ผ

  • ์ž๋ฐ” ํŒŒ์ผ: ์ž๋ฐ” ํŒŒ์ผ(.java)์€ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์†Œ์Šค ์ฝ”๋“œ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๋Š” ์ž๋ฐ” ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ ํŒŒ์ผ์€ ์ผ๋ฐ˜์ ์œผ๋กœ .java ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์„œ๋ธ”๋ฆฟ์˜ ์‹ค์ œ ๊ตฌํ˜„์„ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ปดํŒŒ์ผ: ์ž๋ฐ” ํŒŒ์ผ์€ ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ๋ฐ”์ดํŠธ์ฝ”๋“œ ํŒŒ์ผ(.class)๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฐ”์ดํŠธ์ฝ”๋“œ ํŒŒ์ผ์€ JVM(Java Virtual Machine)์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š” ํ˜•์‹์ž…๋‹ˆ๋‹ค.

์„œ๋ธ”๋ฆฟ ์‹คํ–‰ ๊ณผ์ •

  1. ์„œ๋ธ”๋ฆฟ ์†Œ์Šค ์ฝ”๋“œ ์ž‘์„ฑ: ์„œ๋ธ”๋ฆฟ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด .java ํŒŒ์ผ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์—๋Š” ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ๊ฐ€ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.
  2. ์ปดํŒŒ์ผ: ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ธ”๋ฆฟ .java ํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•˜์—ฌ .class ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด .class ํŒŒ์ผ์€ ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค์˜ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ, JVM์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  3. ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ: ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ์„œ๋ธ”๋ฆฟ์„ ์ฒ˜์Œ ์š”์ฒญํ•  ๋•Œ, ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋ฉฐ, ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ์ด ์ธ์Šคํ„ด์Šค์˜ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“™ ์š”์•ฝ

  • ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ์ปดํŒŒ์ผ๋œ ์ž๋ฐ” ํด๋ž˜์Šค ํŒŒ์ผ์—์„œ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋กœ, ์‹ค์ œ ์‹คํ–‰ ์ค‘์ธ ์„œ๋ธ”๋ฆฟ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • ์ž๋ฐ” ํŒŒ์ผ์€ ์„œ๋ธ”๋ฆฟ์˜ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋‹ด๊ธด ํŒŒ์ผ๋กœ, ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค์˜ ์ •์˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ, ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ์ž๋ฐ” ํŒŒ์ผ์ด ์•„๋‹ˆ๋ผ ์ปดํŒŒ์ผ๋œ ์ž๋ฐ” ํด๋ž˜์Šค ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋œ ์‹คํ–‰ ์ค‘์ธ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

 

๐Ÿ”ฅ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ๊ฐ์ฒด?

โ“ Question

์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ๊ฐ์ฒด๋„ค

 

๐Ÿ“ Answer

๋„ค, ๋งž์Šต๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ์ž๋ฐ” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ์ฒด๋Š” ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋กœ, ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ์ƒ์„ฑ๋˜์–ด HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์ข€ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜์ž๋ฉด:

 

์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค

  • ๊ฐ์ฒด์˜ ์ƒ์„ฑ: ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘๋  ๋•Œ ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค๋Š” javax.servlet.http.HttpServlet์„ ์ƒ์†๋ฐ›์•„ ๊ตฌํ˜„๋˜๋ฉฐ, ์ด ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์‹ค์ œ๋กœ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ์—ญํ• : ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›๊ณ  ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ์‘๋‹ต์„ ์ƒ์„ฑํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด doGet(), doPost() ๋“ฑ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒ๋ช… ์ฃผ๊ธฐ: ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ์„œ๋ธ”๋ฆฟ์˜ ์ƒ๋ช… ์ฃผ๊ธฐ ๋™์•ˆ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„์—์„œ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค:
    • ์ƒ์„ฑ: ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ์ดˆ๊ธฐํ™”: ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ init() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์„œ๋ธ”๋ฆฟ์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ ์„œ๋ธ”๋ฆฟ์ด ํ•„์š”ํ•œ ์ž์›(์˜ˆ: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๋“ฑ)์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
    • ์š”์ฒญ ์ฒ˜๋ฆฌ: ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ service() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • ์ข…๋ฃŒ: ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ์ข…๋ฃŒ๋  ๋•Œ destroy() ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ ์„œ๋ธ”๋ฆฟ์ด ์‚ฌ์šฉํ•œ ์ž์›(์˜ˆ: ์—ด๋ฆฐ ํŒŒ์ผ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๋“ฑ)์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์™€ ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค

  • ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค: ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•œ ์ž๋ฐ” ํŒŒ์ผ(.java)์€ ์„œ๋ธ”๋ฆฟ์˜ ๋กœ์ง์„ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค๋Š” HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ(doGet(), doPost() ๋“ฑ)๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž๋ฐ” ํŒŒ์ผ์€ ์ปดํŒŒ์ผ๋˜์–ด .class ํŒŒ์ผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.
  • ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค: ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค์˜ .class ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋œ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ด ์ธ์Šคํ„ด์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“™ ์š”์•ฝ

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

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

 

๐Ÿ”ฅ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ์‹œ์ 

โ“ Question

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ์„œ๋ธ”๋ฆฟ์„ ์ฒ˜์Œ ์š”์ฒญํ•  ๋•Œ, ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•  ๋•Œ ํด๋ž˜์ŠคํŒŒ์ผ์˜ ๋ชจ๋“  ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค๋ฉด ์š”์ฒญํ• ๋•Œ๋Š” ์ƒ์„ฑํ•  ํ•„์š” ์—†์ž–์•„

 

๐Ÿ“ Answer

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•  ๋•Œ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š”์ง€๋ฅผ ์„ค๋ช…ํ•˜๋ฉด, ํด๋ž˜์Šค ํŒŒ์ผ๊ณผ ์ธ์Šคํ„ด์Šค ๊ฐ„์˜ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ

  1. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ์‹œ
    • ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค ๋กœ๋”ฉ: ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘๋  ๋•Œ ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค์˜ .class ํŒŒ์ผ์ด ๋กœ๋“œ๋˜์–ด ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ (JVM)์— ์˜ํ•ด ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
    • ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ: ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฐ”๋กœ ๋ชจ๋“  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ค€๋น„๊ฐ€ ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ์š”์ฒญ์ด ๋ฐœ์ƒํ•˜๊ธฐ ์ „์— ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜, ์ตœ์ดˆ์˜ ์š”์ฒญ์ด ๋ฐœ์ƒํ•  ๋•Œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ดˆ๊ธฐํ™” ๊ณผ์ •์—์„œ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ชจ๋“  ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ์‹œ์— ์ƒ์„ฑ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.
  2. ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ ์š”์ฒญ ์ฒ˜๋ฆฌ
    • ์ดˆ๊ธฐํ™”: ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฐ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•œ ํ›„ init() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ดˆ๊ธฐํ™” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„์—์„œ ์„œ๋ธ”๋ฆฟ์€ ํ•„์š”ํ•œ ์ž์›(์˜ˆ: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ)์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์š”์ฒญ ์ฒ˜๋ฆฌ: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ธ”๋ฆฟ์— ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ๋งˆ๋‹ค, ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ธฐ์กด์˜ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ service() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์ƒ์„ฑ๋œ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ ๊ด€๋ฆฌ ์ „๋žต

  • ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ ์‹œ์ : ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ตœ์ดˆ ์š”์ฒญ ์‹œ์— ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์„œ๋ฒ„์˜ ์„ฑ๋Šฅ์„ ๊ณ ๋ คํ•˜์—ฌ ์š”์ฒญ์ด ๋ฐœ์ƒํ•  ๋•Œ๊นŒ์ง€ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋ฅผ ์ง€์—ฐ ์ƒ์„ฑ(lazy initialization)ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • ์„œ๋ธ”๋ฆฟ ํ’€: ์ผ๋ถ€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋ฅผ ํ’€(pool)์—์„œ ๊ด€๋ฆฌํ•˜์—ฌ, ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋Œ€์‹ , ๋ฏธ๋ฆฌ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค ์ค‘ ํ•˜๋‚˜๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

๐Ÿ“™ ์š”์•ฝ

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

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ํšจ์œจ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ์š”์ฒญ์— ๋”ฐ๋ผ ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ์žฌ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ž์›์„ ์ ˆ์•ฝํ•˜๊ณ  ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ”ฅ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ ์‹œ์ ์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ

โ“ Question

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

์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ์š”์ฒญ์ด ๋ฐœ์ƒํ•˜๊ธฐ ์ „์— ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜, ์ตœ์ดˆ์˜ ์š”์ฒญ์ด ๋ฐœ์ƒํ•  ๋•Œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋‚˜๋‰˜๋Š” ๊ธฐ์ค€์ด ๋ญ”๋ฐ

 

๐Ÿ“ Answer

์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ ์‹œ์ ์€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ์„ค์ •๊ณผ ๊ตฌํ˜„ ๋ฐฉ์‹์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ๋ฐฉ์‹์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค:

 

1. ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ ์ง€์—ฐ ์ƒ์„ฑ (Lazy Initialization)

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

2. ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ ์‚ฌ์ „ ์ƒ์„ฑ (Eager Initialization)

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

์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ์‹œ์  ๊ฒฐ์ • ๊ธฐ์ค€

์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ ์‹œ์  ๊ฒฐ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ์ค€์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  1. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ์„ค์ •: ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ์„ค์ •์ด๋‚˜ ๊ตฌํ˜„์— ๋”ฐ๋ผ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋ฐฉ์‹์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ผ๋ถ€ ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์—ฐ ์ƒ์„ฑ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ณ , ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋Š” ์‚ฌ์ „ ์ƒ์„ฑ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์š”๊ตฌ์‚ฌํ•ญ: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋ฐฉ์‹์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋†’์€ ์„ฑ๋Šฅ๊ณผ ๋น ๋ฅธ ์‘๋‹ต์ด ์ค‘์š”ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์‚ฌ์ „ ์ƒ์„ฑ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ด๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ ์ง€์—ฐ ์ƒ์„ฑ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™”: ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ์ „๋žต์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•˜๊ณ  ํ’€(pool)์—์„œ ๊ด€๋ฆฌํ•˜๊ฑฐ๋‚˜, ์ตœ์ดˆ ์š”์ฒญ ์‹œ ์ƒ์„ฑํ•˜๋Š” ๋“ฑ์˜ ๋ฐฉ์‹์œผ๋กœ ์„ฑ๋Šฅ์„ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“™ ์š”์•ฝ

  • ์ง€์—ฐ ์ƒ์„ฑ (Lazy Initialization): ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ตœ์ดˆ ์š”์ฒญ ์‹œ ์ƒ์„ฑ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ์ดˆ๊ธฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ค„์ด๊ณ  ๋น ๋ฅธ ์‹œ์ž‘์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์ „ ์ƒ์„ฑ (Eager Initialization): ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ์‹œ ๋ชจ๋“  ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ๋น ๋ฅธ ์‘๋‹ต๊ณผ ์ดˆ๊ธฐํ™” ์™„๋ฃŒ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ ์‹œ์ ์€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ์„ค์ •๊ณผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

 

๐Ÿ”ฅ ์ง€์—ฐ ์ƒ์„ฑ, ์‚ฌ์ „ ์ƒ์„ฑ ์„ค์ • ๋ฐฉ๋ฒ•

โ“ Question

๊ทธ๊ฑด ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š”๊ฑฐ๋„ค ์–ด๋–ค๊ฑด ์ง€์—ฐ ์ƒ์„ฑ์œผ๋กœ ์–ด๋–ค๊ฑด ์‚ฌ์ „ ์ƒ์„ฑ์œผ๋กœ

 

๐Ÿ“ Answer

์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ ์‹œ์ ์„ ์ง€์—ฐ ์ƒ์„ฑ(lazy initialization)๊ณผ ์‚ฌ์ „ ์ƒ์„ฑ(eager initialization) ์ค‘์—์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ์„ค์ •์ด๋‚˜ ์„œ๋ธ”๋ฆฟ์˜ ์ดˆ๊ธฐํ™” ๋ฐฉ์‹์— ๋”ฐ๋ผ ์ด ์ƒ์„ฑ ๋ฐฉ์‹์ด ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์—, ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๊ฐœ๋ฐœ์ž๋Š” ์ด๋ฅผ ์ง์ ‘ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  ์ปจํ…Œ์ด๋„ˆ์˜ ๊ธฐ๋ณธ ๋™์ž‘์— ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ช‡ ๊ฐ€์ง€ ๊ด€๋ จ ๊ฐœ๋…๊ณผ ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•˜๋ฉด, ๊ฐ„์ ‘์ ์œผ๋กœ ์ด ๋™์ž‘์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ์‹œ์  ์ œ์–ด ๋ฐฉ๋ฒ•

  1. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ์„ค์ •
    • ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ณธ ๋™์ž‘: ๋Œ€๋ถ€๋ถ„์˜ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ(์˜ˆ: Apache Tomcat, Jetty ๋“ฑ)๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋ฅผ ์ตœ์ดˆ ์š”์ฒญ ์‹œ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์ปจํ…Œ์ด๋„ˆ๋Š” ํŠน์ • ์„ค์ •์„ ํ†ตํ•ด ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ปจํ…Œ์ด๋„ˆ ์„ค์ • ํŒŒ์ผ: ์ผ๋ถ€ ์ปจํ…Œ์ด๋„ˆ๋Š” ์„ค์ • ํŒŒ์ผ(์˜ˆ: server.xml ๋˜๋Š” context.xml)์—์„œ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ ์ดˆ๊ธฐํ™” ๋™์ž‘์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์˜ต์…˜์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ์„ ์‚ฌ์ „ ์ƒ์„ฑ ๋ฐฉ์‹์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ดˆ๊ธฐํ™” ์‹œ์ ์„ ์กฐ์ •ํ•˜๊ฑฐ๋‚˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค.
  2. ์„œ๋ธ”๋ฆฟ์˜ ์ดˆ๊ธฐํ™” ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ์„ค์ •
    • web.xml์˜ <load-on-startup>: web.xml ํŒŒ์ผ์—์„œ ์„œ๋ธ”๋ฆฟ์˜ load-on-startup ์„ค์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ธ”๋ฆฟ์˜ ์ดˆ๊ธฐํ™” ์ˆœ์„œ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. load-on-startup ๊ฐ’์ด 0 ์ด์ƒ์˜ ์ •์ˆ˜์ธ ๊ฒฝ์šฐ, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘๋  ๋•Œ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์€ ์‚ฌ์ „ ์ƒ์„ฑ(eager initialization) ๋ฐฉ์‹์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

      ```xml
      <servlet>
          <servlet-name>exampleServlet</servlet-name>
          <servlet-class>com.example.ExampleServlet</servlet-class>
          <load-on-startup>1</load-on-startup>
      </servlet>
      ```

    • load-on-startup ๊ฐ’: ์ด ๊ฐ’์ด -1์ธ ๊ฒฝ์šฐ, ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ์š”์ฒญ์ด ๋ฐœ์ƒํ•  ๋•Œ๊นŒ์ง€ ์ง€์—ฐ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ฐ’์„ 0 ์ด์ƒ์˜ ์ •์ˆ˜๋กœ ์„ค์ •ํ•˜๋ฉด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ์‹œ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด ์„ค์ •์„ ํ†ตํ•ด ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ ์‚ฌ์ „ ์ƒ์„ฑ ์—ฌ๋ถ€๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™”
    • ์„œ๋ธ”๋ฆฟ ํ’€ ๊ด€๋ฆฌ: ์ผ๋ถ€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋ฅผ ํ’€(pool)์—์„œ ๊ด€๋ฆฌํ•˜์—ฌ, ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ๋ฏธ๋ฆฌ ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ์š”์ฒญ ์‹œ ์žฌ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์„ค์ •์€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ๋‚ด๋ถ€ ์„ค์ •์— ์˜์กดํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์กฐ์ •ํ•˜๊ธฐ๋ณด๋‹ค๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฌธ์„œ์™€ ์„ค์ •์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๐Ÿ“™ ์š”์•ฝ

  • ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ ์‹œ์ ์€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ๊ธฐ๋ณธ ๋™์ž‘ ๋ฐ ์„ค์ •์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.
  • load-on-startup ์„ค์ •์„ ํ†ตํ•ด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ดˆ๊ธฐํ™” ๊ณผ์ •์—์„œ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ ์‚ฌ์ „ ์ƒ์„ฑ ์—ฌ๋ถ€๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋Œ€๋ถ€๋ถ„์˜ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์—ฐ ์ƒ์„ฑ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์‚ฌ์ „ ์ƒ์„ฑ์€ web.xml์˜ ์„ค์ •์„ ํ†ตํ•ด ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ, ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ ์‹œ์ ์€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ๋™์ž‘ ๋ฐฉ์‹๊ณผ ์„ค์ •์— ํฌ๊ฒŒ ์˜์กดํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๋Š” web.xml ํŒŒ์ผ์˜ ์„ค์ •์„ ํ†ตํ•ด ๊ฐ„์ ‘์ ์œผ๋กœ ์ด๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ”ฅ ์„œ๋ธ”๋ฆฟ๊ณผ JSP ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒํ˜ธ ์ž‘์šฉ

โ“ Question

๋ณดํ†ต ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ์ž๋ฐ” ๊ฐ์ฒด์ž–์•„ ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ ๊ฐ์ฒด๊ฐ€ ์‹คํ–‰๋˜์„œ JSP๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ž–์•„ ๊ทธ ๋‹ค์Œ JSP์ปจํ…Œ์ด๋„ˆ๋ฅผ ํƒ€๋Š”๊ฑด๊ฐ€?

 

๐Ÿ“ Answer

๋งž์Šต๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ์ž๋ฐ” ๊ฐ์ฒด๋กœ, ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ์‘๋‹ต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ์‘๋‹ต์ด JSP ํŽ˜์ด์ง€๋ฅผ ํฌํ•จํ•  ๋•Œ๋Š”, ์„œ๋ธ”๋ฆฟ๊ณผ JSP ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒํ˜ธ ์ž‘์šฉ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค:

 

์„œ๋ธ”๋ฆฟ๊ณผ JSP์˜ ์ƒํ˜ธ ์ž‘์šฉ ๊ณผ์ •

  1. ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ
    • ์‚ฌ์šฉ์ž๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด, ์›น ์„œ๋ฒ„๋Š” ์ด๋ฅผ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  2. ์„œ๋ธ”๋ฆฟ์˜ ์š”์ฒญ ์ฒ˜๋ฆฌ
    • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์š”์ฒญ์„ ํ•ด๋‹น ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ service() ๋ฉ”์†Œ๋“œ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
    • ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” service() ๋ฉ”์†Œ๋“œ ๋‚ด์—์„œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ JSP ํŽ˜์ด์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ ค๋ฉด, ์„œ๋ธ”๋ฆฟ์€ JSP ํŽ˜์ด์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. JSP ํŽ˜์ด์ง€์˜ ๋ฐ˜ํ™˜
    • ์„œ๋ธ”๋ฆฟ์ด JSP๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ: ์„œ๋ธ”๋ฆฟ์ด JSP ํŽ˜์ด์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์„ค์ •ํ•œ ๊ฒฝ์šฐ, ์„œ๋ธ”๋ฆฟ์€ RequestDispatcher๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JSP ํŽ˜์ด์ง€๋กœ ํฌ์›Œ๋”ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

      ```java
      RequestDispatcher dispatcher = request.getRequestDispatcher("page.jsp"); 
      dispatcher.forward(request, response);
      ```

    • ์ด ๊ฒฝ์šฐ ์„œ๋ธ”๋ฆฟ์€ JSP ํŽ˜์ด์ง€๋กœ ํฌ์›Œ๋”ฉํ•˜๊ณ , JSP ์ปจํ…Œ์ด๋„ˆ๊ฐ€ JSP ํŽ˜์ด์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ตœ์ข… HTML ์‘๋‹ต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  4. JSP ์ปจํ…Œ์ด๋„ˆ์˜ ์ฒ˜๋ฆฌ
    • JSP ํŽ˜์ด์ง€์˜ ์ฒ˜๋ฆฌ: JSP ์ปจํ…Œ์ด๋„ˆ๋Š” JSP ํŽ˜์ด์ง€๋ฅผ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. JSP ํŒŒ์ผ์€ ์ž๋ฐ” ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋˜๊ณ , ์ด ์„œ๋ธ”๋ฆฟ์ด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ตœ์ข… HTML์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ์—ญํ• : JSP ์ปจํ…Œ์ด๋„ˆ๋Š” JSP ํŽ˜์ด์ง€๋ฅผ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ์ƒ์„ฑ๋œ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ service() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  5. ์ตœ์ข… ์‘๋‹ต ๋ฐ˜ํ™˜
    • JSP ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ƒ์„ฑํ•œ ์ตœ์ข… HTML ์‘๋‹ต์€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

๐Ÿ“™ ์š”์•ฝ

  1. ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค: ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ํ•„์š”ํ•œ ๊ฒฝ์šฐ JSP ํŽ˜์ด์ง€๋กœ ํฌ์›Œ๋”ฉํ•ฉ๋‹ˆ๋‹ค.
  2. JSP ํŽ˜์ด์ง€: ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๊ฐ€ ์š”์ฒญ์„ JSP ํŽ˜์ด์ง€๋กœ ํฌ์›Œ๋”ฉํ•˜๋ฉด, JSP ์ปจํ…Œ์ด๋„ˆ๋Š” JSP ํŒŒ์ผ์„ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  3. JSP ์ปจํ…Œ์ด๋„ˆ: JSP ํŽ˜์ด์ง€๋ฅผ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ์ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ตœ์ข… HTML ์‘๋‹ต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  4. ์‘๋‹ต ๋ฐ˜ํ™˜: ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์ตœ์ข… ์‘๋‹ต์„ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ, ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๊ฐ€ JSP ํŽ˜์ด์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ, JSP ์ปจํ…Œ์ด๋„ˆ๊ฐ€ JSP ํŽ˜์ด์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ตœ์ข… ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ณผ์ •์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์€ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์™€ JSP ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์˜ ํ˜‘์—…์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

 

๐Ÿ”ฅ JSP๊ฐ€ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ณ€ํ™˜๋˜๋Š” ๊ณผ์ •

โ“ Question

JSP ํŽ˜์ด์ง€๋Š” HTML์ฒ˜๋Ÿผ ์ƒ๊ฒผ๋Š”๋ฐ ์ž๋ฐ” ๊ฐ์ฒด์ธ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค๋Š”๊ฒŒ ์ž˜ ์ดํ•ด๋˜์ง€ ์•Š๋Š”๋‹ค. ์ฝ”๋“œ๋ฅผ ์˜ˆ์‹œ๋กœ ๋“ค์–ด ์„ค๋ช…ํ•ด์ค„๋ž˜?

 

๐Ÿ“ Answer

๋ฌผ๋ก ์ž…๋‹ˆ๋‹ค. JSP ํŽ˜์ด์ง€๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ HTML๊ณผ ์ž๋ฐ” ์ฝ”๋“œ๊ฐ€ ์„ž์—ฌ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ์ž‘์„ฑ๋˜์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ณ€ํ™˜๋˜์–ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด, ๊ฐ„๋‹จํ•œ JSP ํŽ˜์ด์ง€์™€ ๊ทธ๊ฒƒ์ด ๋ณ€ํ™˜๋œ ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์˜ˆ์‹œ JSP ํŽ˜์ด์ง€

์•„๋ž˜๋Š” ๊ฐ„๋‹จํ•œ JSP ํŽ˜์ด์ง€์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>JSP Example</title>
</head>
<body>
    <h1>Hello, JSP!</h1>
    <p>The current time is: <%= new java.util.Date() %></p>
</body>
</html>

์ด JSP ํŽ˜์ด์ง€๋Š” HTML๊ณผ ์ž๋ฐ” ์ฝ”๋“œ๊ฐ€ ์„ž์—ฌ ์žˆ์œผ๋ฉฐ, <%= new java.util.Date() %> ๊ตฌ๋ฌธ์€ ํ˜„์žฌ ์‹œ๊ฐ„์„ JSP ํŽ˜์ด์ง€์— ํฌํ•จ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

JSP ํŽ˜์ด์ง€๊ฐ€ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ณ€ํ™˜๋˜๋Š” ๊ณผ์ •

  1. JSP ํŒŒ์ผ์ด ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ณ€ํ™˜๋จ
    JSP ์ปจํ…Œ์ด๋„ˆ๋Š” JSP ํŽ˜์ด์ง€๋ฅผ ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ JSP ํŽ˜์ด์ง€๊ฐ€ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ณ€ํ™˜๋œ ์ฝ”๋“œ๋Š” ๋Œ€๋žต ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค:

    ```java
    package org.apache.jsp;

    import javax.servlet.*;
    import javax.servlet.http.*;
    import javax.servlet.jsp.*;
    import java.util.Date;

    public final class example_jsp extends HttpServlet implements jsp_page {
        private static final long serialVersionUID = 1L;

        public void _jspService(HttpServletRequest request, HttpServletResponse response)
                throws java.io.IOException, ServletException {
            response.setContentType("text/html; charset=UTF-8");
            JspWriter out = response.getWriter();
            PageContext pageContext = null;
            ServletContext application = null;
            HttpSession session = null;
            ServletConfig config = null;

            try {
                pageContext = new PageContextImpl();
                application = pageContext.getServletContext();
                session = request.getSession();
                config = pageContext.getServletConfig();

                out.write("<!DOCTYPE html>\n");
                out.write("<html>\n");
                out.write("<head>\n");
                out.write("    <meta charset=\"UTF-8\">\n");
                out.write("    <title>JSP Example</title>\n");
                out.write("</head>\n");
                out.write("<body>\n");
                out.write("    <h1>Hello, JSP!</h1>\n");
                out.write("    <p>The current time is: ");
                out.print(new Date());
                out.write("</p>\n");
                out.write("</body>\n");
                out.write("</html>\n");
            } finally {
                out.close();
            }
        }
    }
    ```

  2. ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ์˜ ์ฃผ์š” ๋ถ€๋ถ„ ์„ค๋ช…
    • ํŒจํ‚ค์ง€ ๋ฐ ์ž„ํฌํŠธ: ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค๋Š” org.apache.jsp ํŒจํ‚ค์ง€์— ์œ„์น˜ํ•˜๊ณ , ํ•„์š”ํ•œ ํด๋ž˜์Šค๋ฅผ ์ž„ํฌํŠธํ•ฉ๋‹ˆ๋‹ค.
    • _jspService ๋ฉ”์†Œ๋“œ: JSP ํŽ˜์ด์ง€์˜ ์ฃผ์š” ๋‚ด์šฉ์€ _jspService ๋ฉ”์†Œ๋“œ ๋‚ด์— ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์†Œ๋“œ๋Š” ์„œ๋ธ”๋ฆฟ์˜ service ๋ฉ”์†Œ๋“œ์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • HTML ์ถœ๋ ฅ: JspWriter๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ HTML์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. out.write() ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด HTML์„ ์ง์ ‘ ์ƒ์„ฑํ•˜๊ณ , out.print() ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์ž๋ฐ” ๊ฐ์ฒด์˜ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ํ˜„์žฌ ์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด new Date()๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  3. ์„œ๋ธ”๋ฆฟ์ด ์ฒ˜๋ฆฌํ•˜๋Š” ์š”์ฒญ
    • ์š”์ฒญ ์ฒ˜๋ฆฌ: ์„œ๋ธ”๋ฆฟ์€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ์‘๋‹ต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. JSP ํŽ˜์ด์ง€์˜ HTML๊ณผ ์ž๋ฐ” ์ฝ”๋“œ๋Š” ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋˜์–ด HTML ์‘๋‹ต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ์‘๋‹ต ๋ฐ˜ํ™˜: ์ตœ์ข…์ ์œผ๋กœ ์ƒ์„ฑ๋œ HTML์€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

๐Ÿ“™ ์š”์•ฝ

  1. JSP ํŒŒ์ผ: HTML๊ณผ ์ž๋ฐ” ์ฝ”๋“œ๊ฐ€ ์„ž์ธ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.
  2. ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ณ€ํ™˜: JSP ์ปจํ…Œ์ด๋„ˆ๊ฐ€ JSP ํŒŒ์ผ์„ ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  3. ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ: ๋ณ€ํ™˜๋œ ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ ๋‚ด์—์„œ๋Š” HTML ์ƒ์„ฑ๊ณผ ์ž๋ฐ” ์ฝ”๋“œ ์‹คํ–‰์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
  4. ์‘๋‹ต ์ƒ์„ฑ: ์„œ๋ธ”๋ฆฟ์ด ์ตœ์ข… HTML ์‘๋‹ต์„ ์ƒ์„ฑํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ณผ์ •์€ JSP ํŽ˜์ด์ง€๊ฐ€ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ณ€ํ™˜๋˜๊ณ , ์„œ๋ธ”๋ฆฟ์ด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ์ตœ์ข…์ ์œผ๋กœ ์›น ํŽ˜์ด์ง€๊ฐ€ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ”ฅ JVM๊ณผ WAS(tomcat)์˜ ๊ด€๊ณ„

โ“ Question

JVM๊ณผ WAS(tomcat)์˜ ๊ด€๊ณ„

 

๐Ÿ“ Answer

JVM (Java Virtual Machine)๊ณผ WAS (Web Application Server, ์˜ˆ: Apache Tomcat)๋Š” Java ๊ธฐ๋ฐ˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋‘ ๊ฐ€์ง€ ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค. ์ด๋“ค์˜ ๊ด€๊ณ„๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์€ Java ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰ ๊ณผ์ •์„ ๋ช…ํ™•ํžˆ ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ JVM๊ณผ Tomcat (WAS)์˜ ๊ด€๊ณ„๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค:

 

JVM (Java Virtual Machine)

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

Tomcat (WAS)

  • ์—ญํ• : Tomcat์€ ์ž๋ฐ” ์„œ๋ธ”๋ฆฟ๊ณผ JSP(JavaServer Pages)๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„(WAS)์ž…๋‹ˆ๋‹ค. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋Š” HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ์„œ๋ธ”๋ฆฟ ๋ฐ JSP ํŽ˜์ด์ง€๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์›น ์‘๋‹ต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๋Šฅ:
    • ์„œ๋ธ”๋ฆฟ ๋ฐ JSP ์ฒ˜๋ฆฌ: ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ๋ฐ JSP ์—”์ง„์„ ์ œ๊ณตํ•˜์—ฌ ๋™์ ์ธ ์›น ์ฝ˜ํ…์ธ ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ด€๋ฆฌ: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐฐํฌ, ๊ด€๋ฆฌ, ๋ณด์•ˆ ์„ค์ •์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
    • HTTP ์š”์ฒญ ์ฒ˜๋ฆฌ: ํด๋ผ์ด์–ธํŠธ์˜ HTTP ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๊ณ , ์ ์ ˆํ•œ ์„œ๋ธ”๋ฆฟ ๋˜๋Š” JSP ํŽ˜์ด์ง€๋กœ ์ „๋‹ฌํ•˜์—ฌ ์‘๋‹ต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

JVM๊ณผ Tomcat์˜ ๊ด€๊ณ„

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

๐Ÿ“™ ์š”์•ฝ

  • JVM: ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์œผ๋กœ, ์ž๋ฐ” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ์“ฐ๋ ˆ๋“œ ๊ด€๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
  • Tomcat: ์ž๋ฐ” ์„œ๋ธ”๋ฆฟ๊ณผ JSP๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋กœ, Tomcat์˜ ์‹คํ–‰์€ JVM ์œ„์—์„œ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
  • ๊ด€๊ณ„: Tomcat์€ JVM ๋‚ด์—์„œ ์‹คํ–‰๋˜๋ฉฐ, Tomcat์ด ์ฒ˜๋ฆฌํ•˜๋Š” ์„œ๋ธ”๋ฆฟ๊ณผ JSP๋Š” ๋ชจ๋‘ JVM์˜ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์ฆ‰, Tomcat์€ JVM์—์„œ ์‹คํ–‰๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋กœ, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ชจ๋“  ์ž‘์—…์€ JVM์˜ ์ž๋ฐ” ์‹คํ–‰ ํ™˜๊ฒฝ์—์„œ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

 

๐Ÿ”ฅ JVM์œ„์—์„œ WAS๊ฐ€ ์‹คํ–‰?

โ“ Question

JVM์œ„์—์„œ WAS๊ฐ€ ์‹คํ–‰๋˜๋Š”๊ฑฐ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ฒ ๋„ค

 

๐Ÿ“ Answer

์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค. JVM ์œ„์—์„œ WAS๊ฐ€ ์‹คํ–‰๋œ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ด€๊ณ„๋ฅผ ์ข€ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค:

 

JVM๊ณผ WAS์˜ ๊ด€๊ณ„

  1. JVM์˜ ์—ญํ• 
    • ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰: JVM์€ ์ž๋ฐ” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์œผ๋กœ, ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์ˆ˜์ ์ธ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ์“ฐ๋ ˆ๋“œ ๊ด€๋ฆฌ: JVM์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฉ”๋ชจ๋ฆฌ์™€ ์“ฐ๋ ˆ๋“œ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์ด ํšจ์œจ์ ์œผ๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ์ž์›์„ ํ• ๋‹นํ•˜๊ณ , ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  2. WAS์˜ ์—ญํ• 
    • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„: WAS๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ, JSP, ์›น ์„œ๋น„์Šค ๋“ฑ์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋™์ ์ธ ์›น ์ฝ˜ํ…์ธ ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • HTTP ์š”์ฒญ ์ฒ˜๋ฆฌ: ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ์˜ HTTP ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๊ณ , ์„œ๋ธ”๋ฆฟ์ด๋‚˜ JSP๋ฅผ ํ†ตํ•ด ์‘๋‹ต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  3. WAS๊ฐ€ JVM ์œ„์—์„œ ์‹คํ–‰๋˜๋Š” ๊ณผ์ •
    • ์„ค์น˜ ๋ฐ ์‹คํ–‰: WAS(์˜ˆ: Apache Tomcat)๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” JVM์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Tomcat๊ณผ ๊ฐ™์€ WAS๋Š” ์ž๋ฐ”๋กœ ์ž‘์„ฑ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์ด๊ธฐ ๋•Œ๋ฌธ์—, JVM์ด ์—†๋Š” ํ™˜๊ฒฝ์—์„œ๋Š” ์‹คํ–‰๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
    • ์ž๋ฐ” ํด๋ž˜์Šค ๋กœ๋”ฉ: WAS๋Š” ์ž๋ฐ” ํด๋ž˜์Šค์™€ ์„œ๋ธ”๋ฆฟ, JSP ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ณผ์ •์€ JVM ๋‚ด์—์„œ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
    • ์š”์ฒญ ์ฒ˜๋ฆฌ: ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด WAS๋Š” JVM์˜ ์ž์›์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ, JSP ์—”์ง„ ๋“ฑ WAS์˜ ์ฃผ์š” ์ปดํฌ๋„ŒํŠธ๋Š” JVM์—์„œ ์‹คํ–‰๋˜๋ฉฐ, HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“™ ์š”์•ฝ

  • WAS: ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋กœ, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • JVM: ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์œผ๋กœ, WAS๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ž๋ฐ” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ๊ด€๊ณ„: WAS๋Š” JVM ์œ„์—์„œ ์‹คํ–‰๋˜๋ฉฐ, JVM์€ WAS๊ฐ€ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž์›๊ณผ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ, WAS๊ฐ€ JVM ์œ„์—์„œ ์‹คํ–‰๋œ๋‹ค๋Š” ์„ค๋ช…์ด ์ •ํ™•ํ•˜๋ฉฐ, ์ด๋Š” ์ž๋ฐ” ๊ธฐ๋ฐ˜์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๊ฐ€ JVM์˜ ์ž์›๊ณผ ํ™˜๊ฒฝ์„ ํ™œ์šฉํ•˜์—ฌ ๋™์ž‘ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ”ฅ JVM๊ณผ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ

โ“ Question

์š”์ฒญ๋“ค์ด ๋“ค์–ด์˜ค๋ฉด ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๋ฅผ ํ†ตํ•ด ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋„ JVM ๋•์ด๋„ค?

 

๐Ÿ“ Answer

๋งž์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์š”์ฒญ์ด ๋™์‹œ์— ๋“ค์–ด์˜ฌ ๋•Œ, ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๋ฅผ ํ†ตํ•ด ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋„ JVM์˜ ๊ธฐ๋Šฅ ๋•๋ถ„์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์ข€ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

JVM๊ณผ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋”ฉ

  1. JVM์˜ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋”ฉ ์ง€์›
    • ์“ฐ๋ ˆ๋“œ ๊ด€๋ฆฌ: JVM์€ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ž๋ฐ”์˜ ์“ฐ๋ ˆ๋“œ๋Š” JVM์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋กœ, ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋˜๋ฉด์„œ ์ž์›(๋ฉ”๋ชจ๋ฆฌ, CPU ๋“ฑ)์„ ํšจ์œจ์ ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
    • ์“ฐ๋ ˆ๋“œ ์Šค์ผ€์ค„๋ง: JVM์€ ์šด์˜ ์ฒด์ œ์™€ ํ˜‘๋ ฅํ•˜์—ฌ ์“ฐ๋ ˆ๋“œ์˜ ์Šค์ผ€์ค„๋ง์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์“ฐ๋ ˆ๋“œ๋Š” CPU์—์„œ ์‹คํ–‰๋˜๋ฉฐ, JVM์ด ์ด๋ฅผ ์กฐ์ •ํ•˜์—ฌ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  2. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์™€ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋”ฉ
    • ๋™์‹œ ์š”์ฒญ ์ฒ˜๋ฆฌ: ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์š”์ฒญ์€ ๋ณ„๋„์˜ ์“ฐ๋ ˆ๋“œ์—์„œ ์ฒ˜๋ฆฌ๋˜๋ฉฐ, ์ด๋กœ ์ธํ•ด ์—ฌ๋Ÿฌ ์š”์ฒญ์ด ๋™์‹œ์— ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์™€ ์“ฐ๋ ˆ๋“œ: ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑ๊ธ€ํ„ด(์ฆ‰, ์ธ์Šคํ„ด์Šค ํ•˜๋‚˜)์œผ๋กœ ์กด์žฌํ•˜๋ฏ€๋กœ, ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์ผํ•œ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์—ฌ๋Ÿฌ ์š”์ฒญ์ด ๋™์‹œ์— ์ฒ˜๋ฆฌ๋˜๋”๋ผ๋„ ๊ฐ ์š”์ฒญ์„ ๋…๋ฆฝ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์“ฐ๋ ˆ๋“œ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  3. ์„œ๋ธ”๋ฆฟ์˜ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋”ฉ๊ณผ ๋™๊ธฐํ™”
    • ๋™์‹œ ์ ‘๊ทผ: ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์ผํ•œ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์‹œ์— ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ, ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ ์ƒํƒœ๋ฅผ ๋™๊ธฐํ™”ํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, ์„œ๋ธ”๋ฆฟ ๊ฐœ๋ฐœ์ž๋Š” ๋™๊ธฐํ™”(synchronization)๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ์˜ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ: ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ์˜ ์•ˆ์ „์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ์„ค๊ณ„๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์„œ๋ธ”๋ฆฟ์˜ service() ๋ฉ”์†Œ๋“œ๊ฐ€ ๋™์‹œ์— ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ์— ์˜ํ•ด ํ˜ธ์ถœ๋˜๋”๋ผ๋„ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์ด ์œ ์ง€๋˜๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ: ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋”ฉ์„ ์ด์šฉํ•œ ์„œ๋ธ”๋ฆฟ ์ฒ˜๋ฆฌ

  1. ์š”์ฒญ ์ฒ˜๋ฆฌ ๊ณผ์ •
    • ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›น ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
    • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ์“ฐ๋ ˆ๋“œ ์ƒ์„ฑ: ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฐ ์š”์ฒญ์„ ๋ณ„๋„์˜ ์“ฐ๋ ˆ๋“œ์—์„œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค ์‚ฌ์šฉ: ๊ฐ ์“ฐ๋ ˆ๋“œ๋Š” ๋™์ผํ•œ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ service() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • ์‘๋‹ต ๋ฐ˜ํ™˜: ๊ฐ ์“ฐ๋ ˆ๋“œ๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ์‘๋‹ต์„ ์ƒ์„ฑํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  2. JVM๊ณผ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ํ˜‘๋ ฅ
    • JVM: ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋”ฉ์„ ์ง€์›ํ•˜์—ฌ ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
    • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ: ์“ฐ๋ ˆ๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ๊ฐ ์š”์ฒญ์„ ์ ์ ˆํžˆ ์ฒ˜๋ฆฌํ•˜์—ฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“™ ์š”์•ฝ

  • JVM: ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋”ฉ์„ ์ง€์›ํ•˜๋ฉฐ, ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ: ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ์— ์˜ํ•ด ๊ณต์œ ๋ฉ๋‹ˆ๋‹ค.
  • ํ˜‘๋ ฅ: JVM์˜ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋”ฉ ์ง€์› ๋•๋ถ„์— ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ , ์ด๋ฅผ ํ†ตํ•ด ๋†’์€ ์„ฑ๋Šฅ๊ณผ ํšจ์œจ์ ์ธ ์š”์ฒญ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ, JVM ๋•๋ถ„์— ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋™์‹œ์— ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ์ž๋ฐ” ๊ธฐ๋ฐ˜์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋†’์€ ๋™์‹œ์„ฑ์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋Š” ์ค‘์š”ํ•œ ์ด์œ  ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

 

๐Ÿ”ฅ WAS ๋Š” web.xml ์„ ์ฐธ์กฐํ•˜์—ฌ ํ•ด๋‹น Servlet ์— ๋Œ€ํ•œ Thread ๋ฅผ ์ƒ์„ฑ?

โ“ Question

1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ HTTP ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•ด์„œ ์š”์ฒญ์„ Web Server ์—๊ฒŒ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
2. Web Server ๋Š” ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ HTTP ์š”์ฒญ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.
3. ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ์ •์  ํŽ˜์ด์ง€์ธ ๊ฒฝ์šฐ Web Server ๋Š” ํŒŒ์ผ ๊ฒฝ๋กœ ์ด๋ฆ„์„ ํ†ตํ•ด file content ๋ฅผ ๋ฐ”๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
4. ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ๋™์  ํŽ˜์ด์ง€์ธ ๊ฒฝ์šฐ Web Server ๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ WAS๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
5. WAS ๋Š” ๊ด€๋ จ๋œ Servlet ์„ ํž™ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.
6. WAS ๋Š” web.xml ์„ ์ฐธ์กฐํ•˜์—ฌ ํ•ด๋‹น Servlet ์— ๋Œ€ํ•œ Thread ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
7. Servlet ์˜ Service() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์š”์ฒญ์— ๋งž๊ฒŒ doGet() or doPost() ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
8. ์ธ์ž์— ๋งž๊ฒŒ ์ƒ์„ฑ๋œ ์ ์ ˆํ•œ ๋™์  ํŽ˜์ด์ง€๋ฅผ Response ๊ฐ์ฒด์— ๋‹ด์•„ WAS ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
9. WAS ๋Š” Response ๊ฐ์ฒด๋ฅผ HttpResponse ํ˜•ํƒœ๋กœ ๋ฐ”๊พธ์–ด Web Server ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
10. ์ƒ์„ฑ๋œ Thread ๋ฅผ ์ข…๋ฃŒํ•˜๊ณ  ๊ด€๋ จ๋œ ๊ฐ์ฒด๋ฅผ ๋ชจ๋‘ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

6๋ฒˆ์ด ๋งž๋Š” ๋ง์ด์•ผ?

 

๐Ÿ“ Answer

6๋ฒˆ์˜ ์„ค๋ช…์€ ์•ฝ๊ฐ„์˜ ์˜คํ•ด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •ํ™•ํžˆ ์„ค๋ช…ํ•˜์ž๋ฉด, **WAS (Web Application Server)**๊ฐ€ web.xml์„ ์ฐธ์กฐํ•˜์—ฌ ์„œ๋ธ”๋ฆฟ์— ๋Œ€ํ•œ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ์‚ฌ์‹ค์ด ์•„๋‹™๋‹ˆ๋‹ค. web.xml ํŒŒ์ผ์€ ์„œ๋ธ”๋ฆฟ์˜ ๋งคํ•‘๊ณผ ์„ค์ • ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ, ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์—ญํ• ์€ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

 

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ์š”์ฒญ ์ฒ˜๋ฆฌ ๊ณผ์ •

  1. ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ: ํด๋ผ์ด์–ธํŠธ๊ฐ€ HTTP ์š”์ฒญ์„ ์›น ์„œ๋ฒ„์— ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  2. ์›น ์„œ๋ฒ„์˜ ์—ญํ• :
    • ์ •์  ํŽ˜์ด์ง€ ์š”์ฒญ: ์š”์ฒญ์ด ์ •์  ํŽ˜์ด์ง€์ผ ๊ฒฝ์šฐ, ์›น ์„œ๋ฒ„๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ ํ•ด๋‹น ํŒŒ์ผ์„ ์ฝ์–ด ์ง์ ‘ ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.
    • ๋™์  ํŽ˜์ด์ง€ ์š”์ฒญ: ์š”์ฒญ์ด ๋™์  ํŽ˜์ด์ง€์ผ ๊ฒฝ์šฐ, ์›น ์„œ๋ฒ„๋Š” ์š”์ฒญ์„ WAS๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  3. WAS์˜ ์—ญํ• :
    • ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ: WAS๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๊ด€๋ จ ์„œ๋ธ”๋ฆฟ์„ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ํž™ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. WAS๋Š” ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋ฅผ ํ•„์š”์— ๋”ฐ๋ผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜, ์ด๋ฏธ ์ƒ์„ฑ๋œ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋ฅผ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • web.xml ์ฐธ์กฐ: WAS๋Š” web.xml ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์—ฌ ์š”์ฒญ๋œ URL์— ๋งคํ•‘๋œ ์„œ๋ธ”๋ฆฟ์„ ์ฐพ์Šต๋‹ˆ๋‹ค. web.xml์€ ์„œ๋ธ”๋ฆฟ์˜ URL ํŒจํ„ด๊ณผ ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค์˜ ๋งคํ•‘ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  4. ์š”์ฒญ ์ฒ˜๋ฆฌ:
    • ์“ฐ๋ ˆ๋“œ ์ƒ์„ฑ: ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฐ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ์“ฐ๋ ˆ๋“œ๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์„œ๋ธ”๋ฆฟ์˜ service() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์™€ ์“ฐ๋ ˆ๋“œ๋Š” ๋ณ„๊ฐœ๋กœ, ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” web.xml์— ์˜ํ•ด ์ •์˜๋˜๊ณ , ์“ฐ๋ ˆ๋“œ๋Š” ์š”์ฒญ ์ฒ˜๋ฆฌ์— ์˜ํ•ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
    • service() ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ: ์„œ๋ธ”๋ฆฟ์˜ service() ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉฐ, ์ด ๋ฉ”์†Œ๋“œ ๋‚ด์—์„œ ์š”์ฒญ์˜ ํƒ€์ž…์— ๋”ฐ๋ผ doGet() ๋˜๋Š” doPost() ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
  5. ์‘๋‹ต ์ƒ์„ฑ:
    • ์‘๋‹ต ๊ฐ์ฒด ์ƒ์„ฑ: ์„œ๋ธ”๋ฆฟ์€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ต์„ ์ƒ์„ฑํ•˜์—ฌ HttpServletResponse ๊ฐ์ฒด์— ๋‹ด์Šต๋‹ˆ๋‹ค.
    • ์‘๋‹ต ๋ฐ˜ํ™˜: ์ƒ์„ฑ๋œ ์‘๋‹ต์€ WAS๋ฅผ ํ†ตํ•ด ์›น ์„œ๋ฒ„๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. ์›น ์„œ๋ฒ„๋Š” ์ด ์‘๋‹ต์„ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  6. ๋ฆฌ์†Œ์Šค ์ •๋ฆฌ:
    • ์“ฐ๋ ˆ๋“œ ์ข…๋ฃŒ: ์š”์ฒญ ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋œ ํ›„, WAS๋Š” ์‚ฌ์šฉ๋œ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
    • ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ ์ƒํƒœ ๊ด€๋ฆฌ: ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” WAS์˜ ๊ด€๋ฆฌ ํ•˜์— ์žˆ์œผ๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ์™€ ์ƒํƒœ๋Š” WAS๊ฐ€ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“™ ์š”์•ฝ

  • web.xml: ์„œ๋ธ”๋ฆฟ์˜ URL ๋งคํ•‘ ๋ฐ ์„ค์ • ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ, ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.
  • ์“ฐ๋ ˆ๋“œ ์ƒ์„ฑ: ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค WAS๋Š” ์ƒˆ๋กœ์šด ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด ์“ฐ๋ ˆ๋“œ๋Š” ์„œ๋ธ”๋ฆฟ์˜ service() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ, 6๋ฒˆ์˜ ์„ค๋ช…์„ ์ˆ˜์ •ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

6. WAS๋Š” web.xml์„ ์ฐธ์กฐํ•˜์—ฌ ์š”์ฒญ์— ๋Œ€ํ•œ ์ ์ ˆํ•œ ์„œ๋ธ”๋ฆฟ์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ๊ทธ ํ›„, ์ƒˆ๋กœ์šด ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์„œ๋ธ”๋ฆฟ์˜ service() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ”ฅ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑ?

โ“ Question

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š”๊ฑฐ๋„ค

 

๐Ÿ“ Answer

๋งž์Šต๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ(๋˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„, ์˜ˆ: Apache Tomcat)๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

 

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ์“ฐ๋ ˆ๋“œ ๊ด€๋ฆฌ ๊ณผ์ •

  1. ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์ˆ˜์‹ 
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์— HTTP ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  2. ์“ฐ๋ ˆ๋“œ ์ƒ์„ฑ
    • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ์“ฐ๋ ˆ๋“œ๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์„œ๋ธ”๋ฆฟ์˜ service() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  3. ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค ํ˜ธ์ถœ
    • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” web.xml ํŒŒ์ผ(ํ˜น์€ ์• ๋„ˆํ…Œ์ด์…˜)์„ ์ฐธ์กฐํ•˜์—ฌ ์š”์ฒญ์— ๋งคํ•‘๋œ ์„œ๋ธ”๋ฆฟ์„ ์ฐพ์Šต๋‹ˆ๋‹ค.
    • ํ•ด๋‹น ์„œ๋ธ”๋ฆฟ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ ธ์™€์„œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  4. service() ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ
    • ์ƒ์„ฑ๋œ ์“ฐ๋ ˆ๋“œ๋Š” ์„œ๋ธ”๋ฆฟ์˜ service() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์š”์ฒญ์˜ ํƒ€์ž…์— ๋”ฐ๋ผ doGet() ๋˜๋Š” doPost() ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
  5. ์‘๋‹ต ์ƒ์„ฑ
    • ์„œ๋ธ”๋ฆฟ์€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ HttpServletResponse ๊ฐ์ฒด์— ๋‹ด์•„ ์‘๋‹ต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  6. ์‘๋‹ต ๋ฐ˜ํ™˜
    • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์‘๋‹ต์„ ์›น ์„œ๋ฒ„๋กœ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์›น ์„œ๋ฒ„๋Š” ์ด๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  7. ์“ฐ๋ ˆ๋“œ ์ข…๋ฃŒ
    • ์š”์ฒญ ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด, ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์“ฐ๋ ˆ๋“œ๋ฅผ ์ข…๋ฃŒํ•˜๊ฑฐ๋‚˜ ์žฌ์‚ฌ์šฉํ•  ์ค€๋น„๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ์“ฐ๋ ˆ๋“œ ๊ด€๋ฆฌ

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

๐Ÿ“™ ์š”์•ฝ

  • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ: ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ์“ฐ๋ ˆ๋“œ ๊ด€๋ฆฌ: ์“ฐ๋ ˆ๋“œ๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ์„œ๋ธ”๋ฆฟ์˜ service() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์‘๋‹ต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ์“ฐ๋ ˆ๋“œ ํ’€: ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์ข…์ข… ์“ฐ๋ ˆ๋“œ ํ’€์„ ์‚ฌ์šฉํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ์“ฐ๋ ˆ๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ, ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์ค‘์š”ํ•œ ์—ญํ• ์„ ๋งก๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ”ฅ JVM ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

โ“ Question

ํž™์˜์—ญ ์Šคํƒ์˜์—ญ ๋ฉ”์„œ๋“œ์˜์—ญ์— ๋Œ€ํ•œ ์„ค๋ช…์ข€ ๊ทธ๋ฆฌ๊ณ  ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ํž™ ์˜์—ญ์— ์žˆ๋Š”๊ฑฐ์ง€?

 

๐Ÿ“ Answer

 

Java ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ JVM์— ์˜ํ•ด ์‹คํ–‰๋˜๋ฉฐ, JVM์€ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰์„ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์—ฌ๋Ÿฌ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค:

  1. ํž™(Heap) ์˜์—ญ
  2. ์Šคํƒ(Stack) ์˜์—ญ
  3. ๋ฉ”์„œ๋“œ(Method) ์˜์—ญ (๋˜๋Š” ํด๋ž˜์Šค ์˜์—ญ)

1. ํž™(Heap) ์˜์—ญ

  • ์„ค๋ช…: ํž™ ์˜์—ญ์€ ์ž๋ฐ” ๊ฐ์ฒด๊ฐ€ ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฐ์ฒด์™€ ๋ฐฐ์—ด์€ ํž™ ์˜์—ญ์— ํ• ๋‹น๋˜๋ฉฐ, ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ํž™์— ์ €์žฅ๋œ ๊ฐ์ฒด๋Š” GC(Garbage Collection)์— ์˜ํ•ด ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
  • ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค: ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ์ž๋ฐ” ๊ฐ์ฒด์ด๋ฏ€๋กœ ํž™ ์˜์—ญ์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด, ๊ทธ ์ธ์Šคํ„ด์Šค๋Š” ํž™ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
  • ํŠน์ง•:
    • ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
    • JVM์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ํž™ ์˜์—ญ์„ ๊ด€๋ฆฌํ•˜๋ฉฐ, ๋” ์ด์ƒ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ์ž๋™์œผ๋กœ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

2. ์Šคํƒ(Stack) ์˜์—ญ

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

3. ๋ฉ”์„œ๋“œ(Method) ์˜์—ญ

  • ์„ค๋ช…: ๋ฉ”์„œ๋“œ ์˜์—ญ์€ ํด๋ž˜์Šค์™€ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ(ํด๋ž˜์Šค ์ •๋ณด, ๋ฉ”์„œ๋“œ ์ •๋ณด, ์ƒ์ˆ˜, ์ •์  ๋ณ€์ˆ˜ ๋“ฑ)๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค. ์ด ์˜์—ญ์€ JVM์ด ๋กœ๋“œํ•œ ํด๋ž˜์Šค์˜ ๋ฐ”์ดํŠธ์ฝ”๋“œ์™€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜์—ญ์€ ๋Ÿฐํƒ€์ž„ ์‹œ JVM์— ์˜ํ•ด ๊ณต์œ ๋˜๋ฉฐ, ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํŠน์ง•:
    • ํด๋ž˜์Šค์˜ ๊ตฌ์กฐ, ๋ฉ”์„œ๋“œ์˜ ๋ฐ”์ดํŠธ์ฝ”๋“œ, ์ƒ์ˆ˜ ํ’€, ์ •์  ๋ณ€์ˆ˜ ๋“ฑ์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
    • ์ •์ (static) ๋ณ€์ˆ˜๋Š” ์ด ๋ฉ”์„œ๋“œ ์˜์—ญ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
    • ํด๋ž˜์Šค ๋กœ๋”๊ฐ€ ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œํ•  ๋•Œ, ๋ฉ”์„œ๋“œ ์˜์—ญ์— ํ•ด๋‹น ํด๋ž˜์Šค์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜

  • ํž™ ์˜์—ญ: ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ์ž๋ฐ” ๊ฐ์ฒด์ด๋ฏ€๋กœ ํž™ ์˜์—ญ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด, ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๋Š” ํž™ ๋ฉ”๋ชจ๋ฆฌ์— ์œ„์น˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • ์Šคํƒ ์˜์—ญ: ์„œ๋ธ”๋ฆฟ์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด, ํ•ด๋‹น ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ง€์—ญ ๋ณ€์ˆ˜๋Š” ๊ฐ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์“ฐ๋ ˆ๋“œ์˜ ์Šคํƒ ์˜์—ญ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฉ”์„œ๋“œ ์˜์—ญ: ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(ํด๋ž˜์Šค ๊ตฌ์กฐ, ๋ฉ”์„œ๋“œ ๋ฐ”์ดํŠธ์ฝ”๋“œ ๋“ฑ)๋Š” ๋ฉ”์„œ๋“œ ์˜์—ญ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ“™ ์š”์•ฝ

  • ํž™(Heap) ์˜์—ญ: ์ž๋ฐ” ๊ฐ์ฒด์™€ ๋ฐฐ์—ด์ด ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„์œผ๋กœ, ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋„ ์ด๊ณณ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  • ์Šคํƒ(Stack) ์˜์—ญ: ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ ์ƒ์„ฑ๋˜๋Š” ํ”„๋ ˆ์ž„์ด ์Œ“์ด๋Š” ๊ณต๊ฐ„์œผ๋กœ, ์ง€์—ญ ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ •๋ณด๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฉ”์„œ๋“œ(Method) ์˜์—ญ: ํด๋ž˜์Šค์™€ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ์ •์  ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.

์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ์ž๋ฐ” ๊ฐ์ฒด์ด๋ฏ€๋กœ ํž™ ์˜์—ญ์— ์œ„์น˜ํ•˜๋ฉฐ, ์„œ๋ธ”๋ฆฟ์˜ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ ํ•„์š”ํ•œ ์ •๋ณด๋Š” ์Šคํƒ ์˜์—ญ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

 

๐Ÿ”ฅ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์™€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ณต์กด?

โ“ Question

์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ์˜ ๊ตฌ์กฐ์—์„œ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์™€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ณต์กดํ•ด?

 

๐Ÿ“ Answer

๋„ค, ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์™€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•จ๊ป˜ ๊ณต์กดํ•˜๋ฉฐ ์„œ๋กœ ํ˜‘๋ ฅํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ์—ญํ• ์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

 

1. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ (Servlet Container)

  • ์—ญํ• : ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์˜ ์ผ๋ถ€๋กœ, ์„œ๋ธ”๋ฆฟ๊ณผ JSP๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ํด๋ผ์ด์–ธํŠธ์˜ HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ทธ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ: Tomcat, Jetty ๋“ฑ.
  • ์ž‘๋™ ๋ฐฉ์‹: ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์š”์ฒญ์„ ๋ฐ›์•„์„œ, ์ ์ ˆํ•œ ์„œ๋ธ”๋ฆฟ์ด๋‚˜ JSP๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

2. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ (Spring Container)

  • ์—ญํ• : ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํ•ต์‹ฌ์œผ๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋“  ๋นˆ(Bean) ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์˜์กด์„ฑ ์ฃผ์ž…(DI), ์• ์ŠคํŽ™ํŠธ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(AOP), ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋“ฑ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ: ApplicationContext, WebApplicationContext ๋“ฑ.
  • ์ž‘๋™ ๋ฐฉ์‹: ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์„ค์ • ํŒŒ์ผ ๋˜๋Š” ์• ๋„ˆํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜์œผ๋กœ ์ •์˜๋œ ๋นˆ๋“ค์„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , ํ•„์š”์— ๋”ฐ๋ผ ๋นˆ์„ ์ƒ์„ฑ ๋ฐ ์ฃผ์ž…ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰์„ ๋•์Šต๋‹ˆ๋‹ค.

์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ์—์„œ์˜ ๊ณต์กด

์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋ณดํ†ต ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์™€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋ฉฐ, ๊ทธ๋“ค์˜ ํ˜‘๋ ฅ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  1. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ์ดˆ๊ธฐํ™”:
    • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ(Tomcat ๋“ฑ)๊ฐ€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋กœ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • ์ด ๊ณผ์ •์—์„œ web.xml ๋˜๋Š” Java Config (์„œ๋ธ”๋ฆฟ 3.0 ์ด์ƒ)์—์„œ ์ง€์ •๋œ ์„œ๋ธ”๋ฆฟ์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
  2. ์Šคํ”„๋ง MVC์™€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ํ†ตํ•ฉ:
    • ์Šคํ”„๋ง MVC ๊ธฐ๋ฐ˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” DispatcherServlet์ด ์ฃผ์š” ์„œ๋ธ”๋ฆฟ์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
    • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” DispatcherServlet์„ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋กœ๋“œํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
    • DispatcherServlet์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ(WebApplicationContext)๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
  3. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ดˆ๊ธฐํ™”:
    • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ •์˜๋œ ๋นˆ๋“ค์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
    • ์ด ๋•Œ, ์ปจํŠธ๋กค๋Ÿฌ, ์„œ๋น„์Šค, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋“ฑ์˜ ๋นˆ์ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
  4. ์š”์ฒญ ์ฒ˜๋ฆฌ:
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด, ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ด๋ฅผ ๋ฐ›์•„ DispatcherServlet์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
    • DispatcherServlet์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ ์ ˆํ•œ ์ปจํŠธ๋กค๋Ÿฌ ๋นˆ์„ ์ฐพ์•„ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“™ ์š”์•ฝ

  • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋ณธ ์š”์ฒญ/์‘๋‹ต ์‚ฌ์ดํด์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋นˆ ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ์Šคํ”„๋ง MVC๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋“  ๋นˆ์„ ๊ด€๋ฆฌํ•˜๋ฉด์„œ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์™€ ํ˜‘๋ ฅํ•˜์—ฌ ์›น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๋‘ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์„œ๋กœ ํ˜‘๋ ฅํ•˜์—ฌ ์Šคํ”„๋ง ๊ธฐ๋ฐ˜์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์›ํ™œํ•˜๊ฒŒ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ”ฅ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํฌํ•จํ•˜๋Š”๊ฐ€?

โ“ Question

Spring MVC ์—ญ์‹œ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋Š” ๊ฑฐ๋Œ€ํ•œ ์„œ๋ธ”๋ฆฟ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์„œ๋ธ”๋ฆฟ ์—†์ด Spring MVC๋งŒ ์žˆ์œผ๋ฉด ๋œ๋‹ค๊ณ  ํ•˜๋Š” ๊ฒƒ์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ Spring์„ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ๊ฒƒ์ด์ง€, ์„œ๋ธ”๋ฆฟ์ด ํ•„์š” ์—†๋‹ค๋Š” ๋œป์ด ์•„๋‹™๋‹ˆ๋‹ค.

์•„๋ž˜ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์— ์กด์žฌํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์™€ ๋…๋ฆฝ์ ์ธ ์กด์žฌ๊ฐ€ ์•„๋‹ˆ๋ฉฐ, ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ Spring Bean์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฑฐ์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒŒ ๋ฌด์Šจ๋ง์ด์ง€? ๋งž๋Š”๋ง์ธ๊ฐ€?

 

๐Ÿ“ Answer

๋„ค, ๋งž๋Š” ๋ง์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ ์Šคํ”„๋ง MVC์™€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ๊ด€๊ณ„๋ฅผ ์กฐ๊ธˆ ๋” ๊นŠ์ด ์žˆ๊ฒŒ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

Spring MVC์™€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ๊ด€๊ณ„

  • Spring MVC๋Š” Java์˜ ์„œ๋ธ”๋ฆฟ ๊ธฐ๋ฐ˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์ฆ‰, Spring MVC ์ž์ฒด๋„ ์„œ๋ธ”๋ฆฟ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. Spring MVC์˜ ํ•ต์‹ฌ ์„œ๋ธ”๋ฆฟ์€ **DispatcherServlet**์ž…๋‹ˆ๋‹ค. DispatcherServlet์€ ๋ชจ๋“  HTTP ์š”์ฒญ์„ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•˜๋Š” "ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ" ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” DispatcherServlet๊ณผ ๊ฐ™์€ ์„œ๋ธ”๋ฆฟ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„(Tomcat, Jetty ๋“ฑ)์˜ ์ผ๋ถ€๋ถ„์œผ๋กœ, ํด๋ผ์ด์–ธํŠธ์˜ HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Spring ์ปจํ…Œ์ด๋„ˆ์™€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ๊ด€๊ณ„

  • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ApplicationContext ๋˜๋Š” WebApplicationContext์™€ ๊ฐ™์€ ๊ฐ์ฒด๋กœ, ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์˜ ๋ชจ๋“  ๋นˆ(Bean)์„ ๊ด€๋ฆฌํ•˜๊ณ , ๋นˆ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด, ์˜์กด์„ฑ ์ฃผ์ž… ๋“ฑ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
  • ์Šคํ”„๋ง MVC๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ DispatcherServlet์ด ์ดˆ๊ธฐํ™”๋  ๋•Œ, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋„ ํ•จ๊ป˜ ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, DispatcherServlet์€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜์ง€๋งŒ, DispatcherServlet์ด ์ดˆ๊ธฐํ™”๋˜๋ฉด์„œ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋„ ์ดˆ๊ธฐํ™”๋˜์–ด, ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์˜ ๋ชจ๋“  ๋นˆ์ด ๊ด€๋ฆฌ๋˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • ์ค‘์š”ํ•œ ํฌ์ธํŠธ:
    • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ์ผ๋ถ€๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • DispatcherServlet์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์ ‘๊ทผํ•˜์—ฌ, ์š”์ฒญ์— ๋งž๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ์•„ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • ๋”ฐ๋ผ์„œ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์Šคํ”„๋ง ๋นˆ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ†ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ๋กœ ์ดํ•ดํ•˜๊ธฐ

  1. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์„œ๋ธ”๋ฆฟ์„ ์ดˆ๊ธฐํ™”:
    • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ(Tomcat ๋“ฑ)๊ฐ€ ์‹คํ–‰๋˜๋ฉด web.xml ์„ค์ • ๋˜๋Š” Java Config์— ๋”ฐ๋ผ DispatcherServlet์ด ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.
    • ์ด ์‹œ์ ์— ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ(WebApplicationContext)๋„ ํ•จ๊ป˜ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
  2. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์ดˆ๊ธฐํ™”:
    • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ชจ๋“  ์Šคํ”„๋ง ๋นˆ์„ ๋กœ๋“œํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋นˆ๋“ค์€ ์ปจํŠธ๋กค๋Ÿฌ, ์„œ๋น„์Šค, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋“ฑ์œผ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์ฒ˜๋ฆฌ:
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ด๋ฅผ ๋ฐ›์•„ DispatcherServlet์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
    • DispatcherServlet์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์ ‘๊ทผํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ปจํŠธ๋กค๋Ÿฌ ๋นˆ์„ ์ฐพ๊ณ , ํ•ด๋‹น ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ†ตํ•ด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“™ ๊ฒฐ๋ก 

  • Spring MVC์™€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ: Spring MVC๋Š” ์„œ๋ธ”๋ฆฟ ๊ธฐ๋ฐ˜์˜ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Spring MVC๋Š” DispatcherServlet์„ ํ†ตํ•ด ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์™€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ: ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ๋™์ž‘ํ•˜๋ฉฐ, ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์Šคํ”„๋ง ๋นˆ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฑฐ์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์™€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ๋…๋ฆฝ์ ์ธ ์กด์žฌ๊ฐ€ ์•„๋‹ˆ๋ฉฐ, ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์Šคํ”„๋ง MVC ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ๋™ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•„์š”ํ•˜๊ณ , ๊ทธ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ”ฅ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํฌํ•จํ•˜๋Š”๊ฐ€? 2

โ“ Question

์ด ๊ทธ๋ฆผ์€ ๋งž๋Š” ๊ทธ๋ฆผ์ธ๊ฐ€? ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋ž‘ ์Šคํ”„๋ง์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…์†๊ด€๊ณ„๊ฐ€ ์•„๋‹ˆ๋ผ ์„œ๋กœ ํ˜‘์กฐํ•˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๋ณด์—ฌ

 

๐Ÿ“ Answer

์ด ๊ทธ๋ฆผ์€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์™€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ๊ด€๊ณ„๋ฅผ ์„ค๋ช…ํ•˜๋Š”๋ฐ, ์ผ๋ถ€ ์ธก๋ฉด์—์„œ๋Š” ๋งž๋Š” ์„ค๋ช…์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์ง€๋งŒ, ๋ช‡ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์ ์„ ์ •ํ™•ํžˆ ์ดํ•ดํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

1. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์™€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ํ˜‘๋ ฅ

  • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, DispatcherServlet์€ Spring MVC์˜ ํ•ต์‹ฌ ์„œ๋ธ”๋ฆฟ์œผ๋กœ์„œ, ๋ชจ๋“  HTTP ์š”์ฒญ์„ ๋ฐ›์•„์„œ ์ ์ ˆํ•œ ์ปจํŠธ๋กค๋Ÿฌ์— ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์˜ ๋นˆ(Bean) ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, DispatcherServlet๋„ ์ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌ๋˜๋Š” ๋นˆ๋“ค์— ์ ‘๊ทผํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

2. ๊ทธ๋ฆผ์˜ ํ•ด์„

  • ๊ทธ๋ฆผ์—์„œ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” DispatcherServlet์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด ์„œ๋ธ”๋ฆฟ์ด Spring MVC ์ปจํ…Œ์ด๋„ˆ(์ผ์ข…์˜ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ)์˜ ์ผ๋ถ€๋กœ ๋™์ž‘ํ•˜๊ณ  ์žˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
  • Spring MVC ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ์ดˆ๊ธฐํ™”์— ์˜ํ•ด ์ดˆ๊ธฐํ™”๋˜๋ฉฐ, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ์ฆ‰, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ์„œ๋ธŒ์…‹์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌ๋˜๋ฉฐ, ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์™€ ํ˜‘๋ ฅํ•˜์—ฌ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆผ์—์„œ์˜ "ํ˜‘๋ ฅ" ๊ด€๊ณ„๊ฐ€ ๊ฐ•์กฐ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์— ์ข…์†์ ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ์—†์ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

3. ๊ทธ๋ฆผ์—์„œ์˜ ์ฃผ์š” ํฌ์ธํŠธ

  • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํฌํ•จํ•˜๊ณ , ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๋Š” ๋นˆ๋“ค์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” HTTP ์š”์ฒญ์„ ๋ฐ›์•„ DispatcherServlet์— ์ „๋‹ฌํ•˜๊ณ , DispatcherServlet์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ†ตํ•ด ์ ์ ˆํ•œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ์•„ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“™ ๊ฒฐ๋ก 

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

 

๐Ÿ”ฅ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ≠ ํ†ฐ์บฃ

โ“ Question

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์™€ ํ†ฐ์บฃ์€ ๊ฐ™์€ ์˜๋ฏธ๋Š” ์•„๋‹ˆ์ง€? ํ†ฐ์บฃ ์„œ๋ฒ„ ๋‚ด์— ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žˆ๋Š”๊ฑฐ ์ž๋‚˜

 

๐Ÿ“ Answer

๋งž์Šต๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์™€ **ํ†ฐ์บฃ(Tomcat)**์€ ๊ฐ™์€ ์˜๋ฏธ๊ฐ€ ์•„๋‹ˆ๋ฉฐ, ํ†ฐ์บฃ ์„œ๋ฒ„ ๋‚ด์— ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์กฐ๊ธˆ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

1. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ(Servlet Container)

  • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” **Java EE (ํ˜„์žฌ๋Š” Jakarta EE)**์˜ ์„œ๋ธ”๋ฆฟ ๊ทœ๊ฒฉ์„ ๊ตฌํ˜„ํ•œ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค. ์ฃผ๋œ ์—ญํ• ์€ ์„œ๋ธ”๋ฆฟ์„ ๋กœ๋“œํ•˜๊ณ , ์ดˆ๊ธฐํ™”ํ•˜๋ฉฐ, ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ์„œ๋ธ”๋ฆฟ์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” HTTP ์š”์ฒญ์„ ๋ฐ›์•„์„œ ์„œ๋ธ”๋ฆฟ์„ ํ†ตํ•ด ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ , ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๋Š” ์ผ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ API๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ , ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

2. ํ†ฐ์บฃ(Tomcat)

  • **ํ†ฐ์บฃ(Tomcat)**์€ Apache Software Foundation์—์„œ ๊ฐœ๋ฐœํ•œ ์˜คํ”ˆ์†Œ์Šค **์›น ์„œ๋ฒ„(Web Server)**์ด์ž **์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ(Servlet Container)**์ž…๋‹ˆ๋‹ค.
  • ํ†ฐ์บฃ์€ Java Servlet ๋ฐ JavaServer Pages (JSP) ๊ธฐ์ˆ ์„ ๊ตฌํ˜„ํ•œ ์„œ๋ฒ„๋กœ, ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ†ฐ์บฃ ์„œ๋ฒ„๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, JSP ์—”์ง„, HTTP ์ปค๋„ฅํ„ฐ ๋“ฑ ๋‹ค์–‘ํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํฌํ•จํ•˜์—ฌ, ์ „์ฒด์ ์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

3. ํ†ฐ์บฃ ์„œ๋ฒ„ ๋‚ด์˜ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ

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

๐Ÿ“™ ๊ฒฐ๋ก 

  • ํ†ฐ์บฃ์€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํฌํ•จํ•œ ์›น ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. ํ†ฐ์บฃ ์„œ๋ฒ„๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ†ตํ•ด ์„œ๋ธ”๋ฆฟ์„ ๊ด€๋ฆฌํ•˜๊ณ , ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋™์  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ํ†ฐ์บฃ ๋‚ด์˜ ์ปดํฌ๋„ŒํŠธ ์ค‘ ํ•˜๋‚˜๋กœ, ์„œ๋ธ”๋ฆฟ์˜ ์ƒ๋ช… ์ฃผ๊ธฐ์™€ HTTP ์š”์ฒญ/์‘๋‹ต ์ฒ˜๋ฆฌ๋ฅผ ์ „๋‹ดํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ, ํ†ฐ์บฃ๊ณผ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ๋™์ผํ•œ ๊ฐœ๋…์ด ์•„๋‹ˆ์ง€๋งŒ, ํ†ฐ์บฃ์€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋™์ž‘ํ•˜๋Š” ์„œ๋ฒ„๋ผ๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ”ฅ ์›น ์ปจํ…Œ์ด๋„ˆ ๏นฆ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ?

โ“ Question

์›น ์ปจํ…Œ์ด๋„ˆ๋ผ๋Š”๊ฒŒ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์•ผ?

 

๐Ÿ“ Answer

๋„ค, **์›น ์ปจํ…Œ์ด๋„ˆ(Web Container)**์™€ **์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ(Servlet Container)**๋Š” ๊ฑฐ์˜ ๊ฐ™์€ ์˜๋ฏธ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„œ๋ธ”๋ฆฟ(Servlet)๊ณผ JSP(JavaServer Pages)๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด ์šฉ์–ด๋“ค์€ ์ข…์ข… ํ˜ผ์šฉ๋˜๋Š”๋ฐ, ์•ฝ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ๊ฐ™์€ ๊ฐœ๋…์„ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.

 

์›น ์ปจํ…Œ์ด๋„ˆ(Web Container)

  • ์›น ์ปจํ…Œ์ด๋„ˆ๋Š” **์„œ๋ธ”๋ฆฟ(Servlet)**๊ณผ **JSP(JavaServer Pages)**๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์„ฑ ์š”์†Œ์ธ ์„œ๋ธ”๋ฆฟ, JSP, ํ•„ํ„ฐ(Filter), ๋ฆฌ์Šค๋„ˆ(Listener) ๋“ฑ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  • ์›น ์ปจํ…Œ์ด๋„ˆ๋Š” HTTP ์š”์ฒญ์„ ๋ฐ›์•„์„œ ์ด๋ฅผ ์ ์ ˆํ•œ ์„œ๋ธ”๋ฆฟ์ด๋‚˜ JSP๋กœ ์ „๋‹ฌํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ HTTP ์‘๋‹ต์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ผ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ(Servlet Container)

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

์ฐจ์ด์ 

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

๐Ÿ“™ ๊ฒฐ๋ก 

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

 

๐Ÿ”ฅ ์Šคํ”„๋ง Bean / ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค

โ“ Question

๋นˆ์€ ์„œ๋ธ”๋ฆฟ์ธ์Šคํ„ด์Šค๋ž‘ ๋น„์Šทํ•œ ๋Š๋‚Œ์ธ๋ฐ ๋นˆ์€ DI ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š”๊ฑฐ๊ณ  ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š”๊ฑฐ์ง€?

 

๐Ÿ“ Answer

๋„ค, ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค! **๋นˆ(Bean)**๊ณผ **์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค(Servlet Instance)**๋Š” ๋น„์Šทํ•œ ๊ฐœ๋…์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋‘˜ ์‚ฌ์ด์—๋Š” ์ค‘์š”ํ•œ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋‘ ๊ฐœ๋…์„ ๊ตฌ๋ถ„ํ•˜๋Š” ํ•ต์‹ฌ์€ ๊ฐ๊ฐ ์–ด๋–ค ์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ด€๋ฆฌ๋˜๋Š๋ƒ์ž…๋‹ˆ๋‹ค.

 

1. ๋นˆ(Bean)

  • **๋นˆ(Bean)**์€ Spring Framework์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • ๋นˆ์€ DI ์ปจํ…Œ์ด๋„ˆ(Dependency Injection Container), ์ฆ‰ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ์ƒ์„ฑ๋˜๊ณ , ๊ด€๋ฆฌ๋˜๋ฉฐ, ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection) ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ๋นˆ์˜ ์ƒ๋ช…์ฃผ๊ธฐ(์ƒ์„ฑ, ์ดˆ๊ธฐํ™”, ์†Œ๋ฉธ)๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „๋ฐ˜์— ๊ฑธ์ณ ํ•„์š”ํ•œ ๊ณณ์— ๋นˆ์„ ์ œ๊ณตํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

2. ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค(Servlet Instance)

  • **์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค(Servlet Instance)**๋Š” Java Servlet API๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ(Servlet Container), ์ฆ‰ ์›น ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ์ƒ์„ฑ๋˜๊ณ  ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
  • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ์˜ ์ƒ๋ช…์ฃผ๊ธฐ(์ƒ์„ฑ, ์ดˆ๊ธฐํ™”, ์„œ๋น„์Šค, ์†Œ๋ฉธ)๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ํ•ด๋‹น ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค์˜ service() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ์ฐจ์ด์ 

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

๐Ÿ“™ ๊ฒฐ๋ก 

  • ๋นˆ๊ณผ ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค ๋ชจ๋‘ ํŠน์ • ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.
  • ๋นˆ์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๊ด€๋ จ๋œ ๊ฐ์ฒด๋กœ, ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์—์„œ HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ์ฒด๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

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

 

๐Ÿ”ฅ web.xml ํ•ด์„

โ“ Question

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://Java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<!-- ์ฒซ๋ฒˆ์งธ -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring/root-context.xml</param-value>
	</context-param>
	
	<!-- ๋‘๋ฒˆ์งธ -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<!-- ์„ธ๋ฒˆ์งธ -->
	<servlet>
		<servlet-name>appServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<!-- ๋„ค๋ฒˆ์งธ -->
	<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>

</web-app>

ํ•ด์„์„ ์ž์„ธํžˆ ํ•ด์ค˜

 

๐Ÿ“ Answer

์ด web.xml ํŒŒ์ผ์€ Java ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ **๋ฐฐํฌ ์„œ์ˆ ์ž(Deployment Descriptor)**๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋  ๋•Œ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ฝ์–ด์„œ ์ดˆ๊ธฐ ์„ค์ •์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ค‘์š”ํ•œ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์„ ํ†ตํ•ด ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์™€ ์„œ๋ธ”๋ฆฟ์„ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ• ์ง€ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ์„น์…˜์ด ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค:

 

1. <context-param> ํƒœ๊ทธ (์ปจํ…์ŠคํŠธ ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •)

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>

 

  • ์ด ์„น์…˜์€ ์ „์—ญ ์ปจํ…์ŠคํŠธ ์„ค์ • ํŒŒ์ผ์ธ root-context.xml์˜ ์œ„์น˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • contextConfigLocation: ์ด ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ด๋ฆ„์€ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•œ ์„ค์ • ํŒŒ์ผ์˜ ์œ„์น˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ง€์ •๋œ ํŒŒ์ผ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ๊ณต์œ ๋˜๋Š” ์Šคํ”„๋ง ๋นˆ๋“ค์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • /WEB-INF/spring/root-context.xml: ์ด ๊ฐ’์€ ์„ค์ • ํŒŒ์ผ์˜ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น XML ํŒŒ์ผ์—๋Š” ์ „์—ญ์ ์œผ๋กœ ์‚ฌ์šฉ๋  ์Šคํ”„๋ง ๋นˆ ์„ค์ •์ด ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค.

2. <listener> ํƒœ๊ทธ (๋ฆฌ์Šค๋„ˆ ์„ค์ •)

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

 

  • ์ด ์„น์…˜์€ **ContextLoaderListener**๋ผ๋Š” ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋ฆฌ์Šค๋„ˆ๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.
  • ContextLoaderListener: ์ด ๋ฆฌ์Šค๋„ˆ๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘๋  ๋•Œ **์Šคํ”„๋ง์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ(ApplicationContext)**๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , ์•ž์„œ ์ •์˜๋œ context-param์˜ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ root-context.xml ํŒŒ์ผ์„ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ๋ฆฌ์Šค๋„ˆ๋Š” ์ „์—ญ์ ์œผ๋กœ ์ ์šฉ๋˜๋Š” **ApplicationContext**๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜์—ฌ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋นˆ๋“ค์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

3. <servlet> ํƒœ๊ทธ (์„œ๋ธ”๋ฆฟ ์„ค์ •)

<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
  • ์ด ์„น์…˜์€ **DispatcherServlet**์„ ๋“ฑ๋กํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. **DispatcherServlet**์€ ์Šคํ”„๋ง MVC์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์„œ๋ธ”๋ฆฟ์œผ๋กœ, ๋ชจ๋“  HTTP ์š”์ฒญ์„ ๋ฐ›์•„์„œ ์ ์ ˆํ•œ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์ „๋‹ฌํ•˜๊ณ  ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • appServlet: ์ด ์„œ๋ธ”๋ฆฟ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  • DispatcherServlet: ์ด ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค๋Š” ์Šคํ”„๋ง MVC์˜ ์ค‘์‹ฌ ์—ญํ• ์„ ํ•˜๋Š” ์„œ๋ธ”๋ฆฟ์ž…๋‹ˆ๋‹ค.
  • init-param: DispatcherServlet์ด ๋กœ๋“œ๋  ๋•Œ ์‚ฌ์šฉํ•  ์„ค์ • ํŒŒ์ผ์˜ ์œ„์น˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ง€์ •๋œ servlet-context.xml ํŒŒ์ผ์€ ์ด ์„œ๋ธ”๋ฆฟ๊ณผ ์—ฐ๊ด€๋œ ์Šคํ”„๋ง ๋นˆ๋“ค์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • /WEB-INF/spring/appServlet/servlet-context.xml: ์ด ํŒŒ์ผ์—๋Š” ์ฃผ๋กœ ์Šคํ”„๋ง MVC์™€ ๊ด€๋ จ๋œ ๋นˆ ์ •์˜๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ, ๋ทฐ ๋ฆฌ์กธ๋ฒ„ ๋“ฑ์˜ ์„ค์ •์ด ์ด ํŒŒ์ผ์— ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • <load-on-startup>1</load-on-startup>: ์ด ์„œ๋ธ”๋ฆฟ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘๋  ๋•Œ ๋ฐ”๋กœ ์ดˆ๊ธฐํ™”๋˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’์ด 1๋กœ ์„ค์ •๋˜์–ด ์žˆ์–ด, ์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์ฆ‰์‹œ ์ด ์„œ๋ธ”๋ฆฟ์ด ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋˜๊ณ  ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.

4. <servlet-mapping> ํƒœ๊ทธ (์„œ๋ธ”๋ฆฟ ๋งคํ•‘)

<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>
  • ์ด ์„น์…˜์€ URL ํŒจํ„ด์„ ์„œ๋ธ”๋ฆฟ์— ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค.
  • appServlet: ์ด ๋งคํ•‘์ด ์—ฐ๊ฒฐ๋  ์„œ๋ธ”๋ฆฟ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ด ์ด๋ฆ„์€ ์•ž์„œ ์ •์˜ํ•œ DispatcherServlet์˜ ์ด๋ฆ„๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • *.do: ์ด URL ํŒจํ„ด์€ .do๋กœ ๋๋‚˜๋Š” ๋ชจ๋“  ์š”์ฒญ์„ appServlet ์„œ๋ธ”๋ฆฟ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, /example.do๋ผ๋Š” ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์ด ์„œ๋ธ”๋ฆฟ์ด ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ“™ ์ข…ํ•ฉ

์ด web.xml ํŒŒ์ผ์€ ์Šคํ”„๋ง MVC ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋ณธ ์„ค์ •์„ ์ •์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • root-context.xml์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์—ญ์—์„œ ์‚ฌ์šฉํ•  ์Šคํ”„๋ง ๋นˆ์„ ์ •์˜ํ•˜๊ณ ,
  • DispatcherServlet์„ ์„ค์ •ํ•˜์—ฌ servlet-context.xml์„ ์‚ฌ์šฉํ•ด ์Šคํ”„๋ง MVC ๊ด€๋ จ ์„ค์ •์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ๋งˆ์ง€๋ง‰์œผ๋กœ, *.do ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • URL๋กœ ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ์Šคํ”„๋ง MVC์˜ DispatcherServlet์ด ์ฒ˜๋ฆฌํ•˜๋„๋ก ์„ค์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŒŒ์ผ์€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์‹คํ–‰ํ•  ๋•Œ, ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์™€ ์„œ๋ธ”๋ฆฟ ๊ฐ„์˜ ํ†ตํ•ฉ์„ ์„ค์ •ํ•˜๋Š” ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

๐Ÿ”ฅ ApplicationContext ๏นฆ Spring DI ์ปจํ…Œ์ด๋„ˆ ?

โ“ Question

ApplicationContext๋Š” Spring DI ์ปจํ…Œ์ด๋„ˆ์ง€?

 

๐Ÿ“ Answer

๋„ค, ๋งž์Šต๋‹ˆ๋‹ค! **ApplicationContext**๋Š” ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํ•ต์‹ฌ์œผ๋กœ, **์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection, DI)**์„ ๋‹ด๋‹นํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ์ž…๋‹ˆ๋‹ค.

 

ApplicationContext์˜ ์ฃผ์š” ์—ญํ• :

  1. ๋นˆ(Bean) ๊ด€๋ฆฌ:
    • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•  ๊ฐ์ฒด๋“ค์„ ๋นˆ(Bean)์œผ๋กœ ๋“ฑ๋กํ•˜๊ณ , ๊ทธ ๋นˆ์˜ ์ƒ์„ฑ๊ณผ ์ดˆ๊ธฐํ™”, ์˜์กด์„ฑ ์ฃผ์ž… ๋“ฑ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • ApplicationContext๋Š” ์ด๋Ÿฌํ•œ ๋นˆ๋“ค์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, ํ•„์š”์— ๋”ฐ๋ผ ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค.
  2. ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection, DI):
    • ApplicationContext๋Š” ์„ค์ • ํŒŒ์ผ(XML, Java Config ๋“ฑ)์ด๋‚˜ ์• ๋…ธํ…Œ์ด์…˜(@Autowired, @Inject ๋“ฑ)์œผ๋กœ ์ •์˜๋œ ๋นˆ ๊ฐ„์˜ ์˜์กด์„ฑ์„ ์ž๋™์œผ๋กœ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ฝ”๋“œ์— ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ ๋„, ํ•„์š”ํ•œ ๊ณณ์— ํ•„์š”ํ•œ ๊ฐ์ฒด๊ฐ€ ์ฃผ์ž…๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ๋นˆ ํƒ์ƒ‰ ๋ฐ ์ œ๊ณต:
    • ApplicationContext๋Š” ํ•„์š”ํ•  ๋•Œ ๋นˆ์„ ์š”์ฒญ๋ฐ›์•„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์–ด๋Š ๋ถ€๋ถ„์—์„œ๋“ ์ง€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ๋นˆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. ๋นˆ ์ •์˜ ํŒŒ์ผ ์ฝ๊ธฐ:
    • ApplicationContext๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘๋  ๋•Œ, ์ง€์ •๋œ ์„ค์ • ํŒŒ์ผ(applicationContext.xml ๋˜๋Š” Java Config ํด๋ž˜์Šค ๋“ฑ)์„ ์ฝ์–ด์„œ ๋นˆ๋“ค์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
  5. ์ด๋ฒคํŠธ ๋ฐœํ–‰ ๋ฐ ๋ฆฌ์Šค๋‹:
    • ์Šคํ”„๋ง ์ด๋ฒคํŠธ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ, ApplicationContext ๋‚ด์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋‹ค์–‘ํ•œ ์ด๋ฒคํŠธ๋“ค์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“™ ๊ฐ„๋‹จํ•œ ์š”์•ฝ

  • **ApplicationContext**๋Š” ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋นˆ(Bean)๋“ค์„ ๊ด€๋ฆฌํ•˜๊ณ , **์˜์กด์„ฑ ์ฃผ์ž…(DI)**์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ํ•ต์‹ฌ ์ปจํ…Œ์ด๋„ˆ์ž…๋‹ˆ๋‹ค.
  • ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ค‘์‹ฌ ์—ญํ• ์„ ํ•˜๋ฉฐ, ๋ชจ๋“  ๋นˆ์˜ ์ƒ์„ฑ, ์˜์กด์„ฑ ๊ด€๋ฆฌ, ์ƒ๋ช…์ฃผ๊ธฐ ๋“ฑ์„ ์ฑ…์ž„์ง‘๋‹ˆ๋‹ค.

 

๐Ÿ”ฅ root-context.xml ์€ ๋นˆ์„ ์ •์˜ํ•˜๋Š” ์„ค์ • ํŒŒ์ผ

โ“ Question

root-context.xml ๋Š” ์Šคํ”„๋ง ๋นˆ์„ ์ •์˜ํ•œ ์„ค์ • ํŒŒ์ผ์ด์•ผ?

 

๐Ÿ“ Answer

๋„ค, ๋งž์Šต๋‹ˆ๋‹ค! root-context.xml ํŒŒ์ผ์€ ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋นˆ(Bean)์„ ์ •์˜ํ•˜๊ณ  ์„ค์ •ํ•˜๋Š” ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

 

root-context.xml ํŒŒ์ผ์˜ ์—ญํ• :

  1. ์Šคํ”„๋ง ๋นˆ ์ •์˜:
    • ์ด ํŒŒ์ผ์—๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ๋  ๋นˆ๋“ค์ด ์ •์˜๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์„œ๋น„์Šค, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ๋นˆ ๋“ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋นˆ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด, ์˜์กด์„ฑ, ์ดˆ๊ธฐํ™” ๋ฐ ์†Œ๋ฉธ ๋ฉ”์„œ๋“œ ๋“ฑ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์ „์—ญ ์„ค์ •:
    • root-context.xml์€ ๋ณดํ†ต ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์—ญ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋นˆ์„ ์ •์˜ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์—์„œ ์ •์˜๋œ ๋นˆ๋“ค์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋“  ์„œ๋ธ”๋ฆฟ์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ์†Œ์Šค, ํŠธ๋žœ์žญ์…˜ ๋งค๋‹ˆ์ €, ์„œ๋น„์Šค ๊ณ„์ธต์˜ ๋นˆ ๋“ฑ์„ ์ด ํŒŒ์ผ์— ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  3. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฃจํŠธ ์ปจํ…์ŠคํŠธ:
    • ์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด, ์ด ํŒŒ์ผ์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฃจํŠธ ์ปจํ…์ŠคํŠธ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. DispatcherServlet์ด๋‚˜ ๋‹ค๋ฅธ ์„œ๋ธ”๋ฆฟ๊ณผ ๊ตฌ๋ณ„๋˜๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ๊ณต์œ ๋˜๋Š” ๋นˆ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“™ ์˜ˆ์‹œ

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- Example: Bean definition for a service -->
    <bean id="myService" class="com.example.MyService">
        <property name="repository" ref="myRepository"/>
    </bean>

    <!-- Example: Bean definition for a repository -->
    <bean id="myRepository" class="com.example.MyRepository">
        <!-- Configuration properties -->
    </bean>

</beans>

์œ„์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์„œ๋น„์Šค, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ •๋ณด ๋“ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ“™ ์š”์•ฝ

  • **root-context.xml**์€ ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „๋ฐ˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋นˆ์„ ์ •์˜ํ•˜๋Š” ์„ค์ • ํŒŒ์ผ๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ „์—ญ ์„ค์ •์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ํŒŒ์ผ์—์„œ ์ •์˜๋œ ๋นˆ๋“ค์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋“  ์„œ๋ธ”๋ฆฟ์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ”ฅ root-context.xml  /  servlet-context.xml

โ“ Question

root-context.xml ๋Š” ์Šคํ”„๋ง ๋นˆ์„ ์ •์˜ํ•œ ์„ค์ • ํŒŒ์ผ์ด์•ผ?

servlet-context.xml๋Š” ๋ญ์•ผ ๊ทธ๋Ÿผ

 

๐Ÿ“ Answer

root-context.xml๊ณผ servlet-context.xml์€ ๋‘˜ ๋‹ค ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๋นˆ(Bean)์„ ์ •์˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์„ค์ • ํŒŒ์ผ์ด์ง€๋งŒ, ๊ทธ ์—ญํ• ๊ณผ ๋ฒ”์œ„๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

 

root-context.xml

  • ์—ญํ• : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์—ญ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋นˆ์„ ์ •์˜ํ•˜๋Š” ์„ค์ • ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.
  • ๋ฒ”์œ„: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ๊ณต์œ ๋˜๋Š” ๋นˆ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ๋นˆ, ์„œ๋น„์Šค ๊ณ„์ธต์˜ ๋นˆ, ์ „์—ญ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋นˆ ๋“ฑ์„ ์ด ํŒŒ์ผ์— ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์šฉ๋„: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋“  ์„œ๋ธ”๋ฆฟ(๋˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ)์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ „์—ญ ๋นˆ์„ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

servlet-context.xml

  • ์—ญํ• : ํŠน์ • ์„œ๋ธ”๋ฆฟ, ํŠนํžˆ ์Šคํ”„๋ง MVC์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ์™€ ๊ด€๋ จ๋œ ๋นˆ์„ ์ •์˜ํ•˜๋Š” ์„ค์ • ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.
  • ๋ฒ”์œ„: ์ฃผ๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŠน์ • ์„œ๋ธ”๋ฆฟ ๋˜๋Š” ์Šคํ”„๋ง MVC์™€ ๊ด€๋ จ๋œ ๋นˆ๋“ค์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ์šฉ๋„: ์Šคํ”„๋ง MVC์™€ ๊ด€๋ จ๋œ ์„ค์ •(์˜ˆ: ๋ทฐ ๋ฆฌ์กธ๋ฒ„, ์ปจํŠธ๋กค๋Ÿฌ ๋นˆ, ์ธํ„ฐ์…‰ํ„ฐ ๋“ฑ)์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ DispatcherServlet๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์—ญํ• ์˜ ์ฐจ์ด์ 

  1. root-context.xml:
    • ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋นˆ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    • DispatcherServlet์„ ํฌํ•จํ•œ ๋ชจ๋“  ์„œ๋ธ”๋ฆฟ์ด ์ด ์„ค์ • ํŒŒ์ผ์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ „์—ญ์ ์ธ ์„œ๋น„์Šค, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ, ๋ฐ์ดํ„ฐ ์†Œ์Šค ๊ฐ™์€ ๋นˆ์„ ์ •์˜ํ•˜๋Š” ๋ฐ ์ฃผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  2. servlet-context.xml:
    • ์Šคํ”„๋ง MVC์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ์™€ ๋ทฐ ๊ด€๋ จ ๋นˆ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
    • DispatcherServlet๊ณผ ์ง์ ‘ ์—ฐ๊ด€๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ด ์„œ๋ธ”๋ฆฟ๊ณผ ๊ด€๋ จ๋œ ์š”์ฒญ ์ฒ˜๋ฆฌ์— ํ•„์š”ํ•œ ๋นˆ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ์ฃผ๋กœ ์›น ๊ณ„์ธต๊ณผ ๊ด€๋ จ๋œ ๋นˆ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ปจํŠธ๋กค๋Ÿฌ ๋นˆ, ๋ทฐ ๋ฆฌ์กธ๋ฒ„, ํฌ๋งทํ„ฐ, ์ธํ„ฐ์…‰ํ„ฐ ๋“ฑ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ๋กœ ์ดํ•ดํ•˜๊ธฐ

 

root-context.xml ์˜ˆ์‹œ:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- ์ „์—ญ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋นˆ -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <!-- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์„ค์ • -->
    </bean>

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <bean id="myService" class="com.example.service.MyService">
        <!-- ์˜์กด์„ฑ ์„ค์ • -->
    </bean>

</beans>

 

servlet-context.xml ์˜ˆ์‹œ:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- ์ปจํŠธ๋กค๋Ÿฌ ๋นˆ -->
    <bean id="homeController" class="com.example.web.HomeController">
    </bean>

    <!-- ๋ทฐ ๋ฆฌ์กธ๋ฒ„ ์„ค์ • -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

 

๐Ÿ“™ ์š”์•ฝ

  • **root-context.xml**์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „๋ฐ˜์— ๊ฑธ์ณ ์‚ฌ์šฉ๋  ์ „์—ญ ๋นˆ์„ ์ •์˜ํ•˜๋Š” ์„ค์ • ํŒŒ์ผ์ด๊ณ ,
  • **servlet-context.xml**์€ ์Šคํ”„๋ง MVC์™€ ๊ด€๋ จ๋œ ์›น ๊ณ„์ธต ๋นˆ์„ ์ •์˜ํ•˜๋Š” ์„ค์ • ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

์ด ๋‘ ํŒŒ์ผ์€ ์—ญํ• ๊ณผ ๋ฒ”์œ„๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ๊ฐ์˜ ํŒŒ์ผ์— ๋นˆ์„ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.

 

๐Ÿ”ฅ ์›น ํ”„๋กœ์ ํŠธ ์„ค์ • ํŒŒ์ผ๋“ค

โ“ Question

ํ†ฐ์บฃ์„ค์น˜๊ฒฝ๋กœ/conf/server.xml -> Tomcat ์„œ๋ฒ„ ์„ค์ • ํŒŒ์ผ
ํ†ฐ์บฃ์„ค์น˜๊ฒฝ๋กœ/conf/web.xml -> Tomcat์˜ ๋ชจ๋“  web app์˜ ๊ณตํ†ต ์„ค์ •
์›น์•ฑ์ด๋ฆ„/WEB-INF/web.xml -> web app์˜ ๊ฐœ๋ณ„ ์„ค์ •

Spring์„ค์ •
root-context.xml -> non-web
servlet-context.xml -> web

์ž์„ธํžˆ ์„ค๋ช… ์ข€ ํ•ด์ค˜

 

๐Ÿ“ Answer

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

 

ํ†ฐ์บฃ(Tomcat) ์„ค์ • ํŒŒ์ผ

  1. ํ†ฐ์บฃ์„ค์น˜๊ฒฝ๋กœ/conf/server.xml
    • ์—ญํ• : ์ด ํŒŒ์ผ์€ ํ†ฐ์บฃ ์„œ๋ฒ„์˜ ์ „์ฒด ์„ค์ •์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
    • ์ฃผ์š” ์„ค์ •:
      • ํฌํŠธ ์„ค์ •: HTTP, HTTPS, AJP ๋“ฑ์˜ ํ”„๋กœํ† ์ฝœ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ปค๋„ฅํ„ฐ(Connector)์˜ ํฌํŠธ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
      • ํ˜ธ์ŠคํŠธ ๋ฐ ์ปจํ…์ŠคํŠธ ์„ค์ •: ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•œ ํ˜ธ์ŠคํŠธ์™€ ์ปจํ…์ŠคํŠธ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
      • ๋ฆฌ์†Œ์Šค ์ •์˜: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ํ’€์ด๋‚˜ ์ „์—ญ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋“ค์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ์‹œ:
      xml
      <Connector port="8080" protocol="HTTP/1.1"
                            connectionTimeout="20000"
                            redirectPort="8443" />
  2. ํ†ฐ์บฃ์„ค์น˜๊ฒฝ๋กœ/conf/web.xml
    • ์—ญํ• : ์ด ํŒŒ์ผ์€ ํ†ฐ์บฃ์— ๋ฐฐํฌ๋œ ๋ชจ๋“  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๊ณตํ†ต์ ์œผ๋กœ ์ ์šฉ๋˜๋Š” ์„ค์ •์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
    • ์ฃผ์š” ์„ค์ •:
      • ๋””ํดํŠธ ์„œ๋ธ”๋ฆฟ: ํ†ฐ์บฃ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ ์„œ๋ธ”๋ฆฟ์˜ ์„ค์ •.
      • ๊ณตํ†ต ํ•„ํ„ฐ: ๋ชจ๋“  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ์šฉ๋˜๋Š” ํ•„ํ„ฐ.
      • MIME ํƒ€์ž…: ํŒŒ์ผ ํ™•์žฅ์ž์— ๋”ฐ๋ฅธ MIME ํƒ€์ž… ์ •์˜.
    • ์˜ˆ์‹œ:
      xml
      <servlet>
                <servlet-name>default</servlet-name>
                <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
                <load-on-startup>1</load-on-startup>
      </servlet>
  3. ์›น์•ฑ์ด๋ฆ„/WEB-INF/web.xml
    • ์—ญํ• : ๊ฐ ๊ฐœ๋ณ„ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ค์ •์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐฐํฌ ์„ค๋ช…์ž๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋ฉฐ, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋™์ž‘์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
    • ์ฃผ์š” ์„ค์ •:
      • ์„œ๋ธ”๋ฆฟ ๋ฐ ์„œ๋ธ”๋ฆฟ ๋งคํ•‘: ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค์™€ URL ๋งคํ•‘์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
      • ํ•„ํ„ฐ ๋ฐ ํ•„ํ„ฐ ๋งคํ•‘: ํŠน์ • ์š”์ฒญ์— ๋Œ€ํ•ด ํ•„ํ„ฐ๋ฅผ ์ ์šฉํ•˜๋Š” ์„ค์ •.
      • ๋ฆฌ์Šค๋„ˆ: ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ผ์ดํ”„์‚ฌ์ดํด ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
      • ๋ณด์•ˆ ์„ค์ •: ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ ์„ค์ •.
    • ์˜ˆ์‹œ:
      xml
      <servlet>
                <servlet-name>exampleServlet</servlet-name>
                <servlet-class>com.example.ExampleServlet</servlet-class>
      </servlet>
      <servlet-mapping>
                 <servlet-name>exampleServlet</servlet-name>
                 <url-pattern>/example</url-pattern>
      </servlet-mapping>

์Šคํ”„๋ง(Spring) ์„ค์ • ํŒŒ์ผ

  1. root-context.xml
    • ์—ญํ• : ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ **์›น๊ณผ ๋ฌด๊ด€ํ•œ ์ „์—ญ์ ์ธ ๋นˆ(Bean)**์„ ์ •์˜ํ•˜๋Š” ์„ค์ • ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.
    • ์ฃผ์š” ์„ค์ •:
      • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ๋นˆ, ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋นˆ ๋“ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์—ญ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋นˆ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
      • ์ฃผ๋กœ DispatcherServlet ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉ๋  ๋นˆ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ์‹œ:
      xml
      <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
                  <!-- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์„ค์ • -->
      </bean>
      <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
                  <property name="dataSource" ref="dataSource"/>
      </bean>
  2. servlet-context.xml
    • ์—ญํ• : ์›น ๊ณ„์ธต์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋นˆ์„ ์ •์˜ํ•˜๊ณ , ์Šคํ”„๋ง MVC๋ฅผ ์„ค์ •ํ•˜๋Š” ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.
    • ์ฃผ์š” ์„ค์ •:
      • ์ปจํŠธ๋กค๋Ÿฌ ๋นˆ, ๋ทฐ ๋ฆฌ์กธ๋ฒ„, ํฌ๋งทํ„ฐ, ์ธํ„ฐ์…‰ํ„ฐ ๋“ฑ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๊ด€๋ จ๋œ ์„ค์ •์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
      • DispatcherServlet์ด ๋กœ๋“œํ•  ๋•Œ ์ฐธ์กฐํ•˜๋ฉฐ, ์›น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋นˆ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ์‹œ:
      xml
      <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                    <property name="prefix" value="/WEB-INF/views/"/>
                    <property name="suffix" value=".jsp"/>
      </bean>
       
      <bean id="homeController" class="com.example.web.HomeController" />

๐Ÿ“™ ์š”์•ฝ

  • ํ†ฐ์บฃ ์„ค์ • ํŒŒ์ผ๋“ค:
    • server.xml: ํ†ฐ์บฃ ์„œ๋ฒ„ ์ „์ฒด์˜ ์„ค์ •.
    • web.xml(ํ†ฐ์บฃ ์„ค์น˜ ๊ฒฝ๋กœ์˜): ๋ชจ๋“  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๊ณตํ†ต์ ์œผ๋กœ ์ ์šฉ๋˜๋Š” ์„ค์ •.
    • web.xml(์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์˜): ๊ฐœ๋ณ„ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ค์ •.
  • ์Šคํ”„๋ง ์„ค์ • ํŒŒ์ผ๋“ค:
    • root-context.xml: ์›น๊ณผ ๋ฌด๊ด€ํ•œ ์ „์—ญ ๋นˆ ์„ค์ •.
    • servlet-context.xml: ์›น ๊ณ„์ธต๊ณผ ๊ด€๋ จ๋œ ๋นˆ ๋ฐ ์Šคํ”„๋ง MVC ์„ค์ •.

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

 

 

๐Ÿ”ฅ root-context๊ฐ€ servlet-context ์˜ ๋ถ€๋ชจ ?

โ“ Question

root-context๊ฐ€ servlet-context์˜ ๋ถ€๋ชจ๋ผ๊ณ  ๋ด๋„ ๋ ๊นŒ?

 

๐Ÿ“ Answer

๋„ค, **root-context**๊ฐ€ **servlet-context**์˜ ๋ถ€๋ชจ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ด€๊ณ„๋Š” ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ์˜ ๊ณ„์ธต ๊ตฌ์กฐ์— ์˜ํ•ด ํ˜•์„ฑ๋ฉ๋‹ˆ๋‹ค.

 

๋ถ€๋ชจ-์ž์‹ ์ปจํ…์ŠคํŠธ ๊ด€๊ณ„

  • **root-context**๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „๋ฐ˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ „์—ญ์ ์ธ ์Šคํ”„๋ง ๋นˆ๋“ค์„ ์ •์˜ํ•˜๋Š” ์ปจํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋ณดํ†ต **ContextLoaderListener**์— ์˜ํ•ด ์ดˆ๊ธฐํ™”๋˜๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐ€์žฅ ์ƒ์œ„ ๋ ˆ๋ฒจ์—์„œ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
  • **servlet-context**๋Š” **DispatcherServlet**๊ณผ ์—ฐ๊ด€๋œ ์ปจํ…์ŠคํŠธ๋กœ, ์ฃผ๋กœ ์›น ๊ณ„์ธต๊ณผ ๊ด€๋ จ๋œ ๋นˆ๋“ค์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ปจํ…์ŠคํŠธ๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…์ŠคํŠธ๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋ฉฐ, ํŠน์ • ์„œ๋ธ”๋ฆฟ(์ฃผ๋กœ DispatcherServlet)์— ๋Œ€ํ•œ ์„ค์ •์„ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณ„์ธต ๊ตฌ์กฐ์˜ ์ž‘๋™ ๋ฐฉ์‹

  • servlet-context๋Š” root-context์˜ ์ž์‹ ์ปจํ…์ŠคํŠธ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” servlet-context์—์„œ ์ •์˜๋œ ๋นˆ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ root-context์— ์ •์˜๋œ ๋นˆ๋„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ, root-context๋Š” servlet-context์— ์ •์˜๋œ ๋นˆ์„ ์ฐธ์กฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ์ด ๊ณ„์ธต ๊ตฌ์กฐ ๋•๋ถ„์— ์ „์—ญ์ ์œผ๋กœ ๊ณต์œ ํ•ด์•ผ ํ•  ๋นˆ(์˜ˆ: ์„œ๋น„์Šค ๋นˆ, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋นˆ ๋“ฑ)์€ root-context์— ์ •์˜๋˜๊ณ , ํŠน์ • ์„œ๋ธ”๋ฆฟ๊ณผ ๊ด€๋ จ๋œ ๋นˆ(์˜ˆ: ์ปจํŠธ๋กค๋Ÿฌ ๋นˆ, ๋ทฐ ๋ฆฌ์กธ๋ฒ„ ๋“ฑ)์€ servlet-context์— ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ

root-context.xml (์ „์—ญ์ ์ธ ๋นˆ ์ •์˜)

<beans>
    <!-- ์ „์—ญ์ ์œผ๋กœ ๊ณต์œ ํ•  ์„œ๋น„์Šค ๋นˆ -->
    <bean id="myService" class="com.example.service.MyService" />
</beans>

 

servlet-context.xml (์›น ๊ณ„์ธต ๊ด€๋ จ ๋นˆ ์ •์˜)

<beans>
    <!-- ์ปจํŠธ๋กค๋Ÿฌ ๋นˆ -->
    <bean id="myController" class="com.example.web.MyController">
        <!-- ๋ถ€๋ชจ ์ปจํ…์ŠคํŠธ(root-context)์˜ ๋นˆ์„ ์ฃผ์ž…๋ฐ›์„ ์ˆ˜ ์žˆ์Œ -->
        <property name="myService" ref="myService" />
    </bean>

    <!-- ๋ทฐ ๋ฆฌ์กธ๋ฒ„ -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

 

์ด๋ ‡๊ฒŒ ๋ถ€๋ชจ-์ž์‹ ์ปจํ…์ŠคํŠธ ๊ตฌ์กฐ ๋•๋ถ„์— ์ „์—ญ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ๋นˆ๊ณผ ์›น ๊ณ„์ธต์—์„œ๋งŒ ์‚ฌ์šฉํ•  ๋นˆ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์กฐ๋ฅผ ๋” ๋ช…ํ™•ํ•˜๊ณ  ์œ ์—ฐํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€