[Servlet][๊ฐœ๋…] ๐Ÿš€ ์›น ์•„ํ‚คํ…์ฒ˜ ๋งˆ์Šคํ„ฐํ•˜๊ธฐ: Servlet๋ถ€ํ„ฐ Adapter Pattern๊นŒ์ง€! ๐ŸŒ

๊น€์ƒ์šฑยท2024๋…„ 9์›” 23์ผ
0
post-thumbnail

์›น ์•„ํ‚คํ…์ฒ˜ ์„ค๋ช…

  1. ํด๋ผ์ด์–ธํŠธ(Client):

    • ์›น ๋ธŒ๋ผ์šฐ์ €(Web Browser): ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์„œ๋ฒ„์— ์š”์ฒญ(request)์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, URL์— ์ ‘์†ํ•˜๊ฑฐ๋‚˜ ํผ์„ ์ œ์ถœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
    • ์š”์ฒญ๊ณผ ์‘๋‹ต ํ๋ฆ„: ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , ์„œ๋ฒ„๊ฐ€ ์ฒ˜๋ฆฌํ•œ ์‘๋‹ต์„ ๋ฐ›์•„ ์›น ๋ธŒ๋ผ์šฐ์ €์— ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
  2. ์„œ๋ฒ„(Server):

    • ์›น ์„œ๋ฒ„(Web Server): ์›น ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์•„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•˜๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌํ•œ ์‘๋‹ต์„ ํด๋ผ์ด์–ธํŠธ๋กœ ๋Œ๋ ค๋ณด๋‚ด๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  3. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ (WAS - Web Application Server):

    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ์ ์ธ ๋กœ์ง์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ด ์„œ๋ฒ„๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋กœ์ง์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค:
      • ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๋กœ์ง(Presentation Logic): ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋Š” ํ™”๋ฉด์˜ ๊ตฌ์„ฑ๊ณผ ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•œ ๋‚ด์šฉ์ด ์–ด๋–ป๊ฒŒ ํ™”๋ฉด์— ๋ณด์—ฌ์งˆ์ง€ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
      • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง(Business Logic): ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™, ๊ณ„์‚ฐ, ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋“ฑ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
      • ํผ์‹œ์Šคํ„ด์Šค ๋กœ์ง(Persistence Logic): ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ, ์กฐํšŒ, ์—…๋ฐ์ดํŠธ, ์‚ญ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  4. RDBMS (Relational Database Management System):

    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. RDBMS๋Š” ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, SQL ์ฟผ๋ฆฌ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋Š” JDBC (Java Database Connectivity)๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๊ฒฐํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์Šต๋‹ˆ๋‹ค.

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

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

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


๋‹ค์Œ์€ Dynamic Web Project์˜ context root, ๋ฐฐํฌ ๊ณผ์ •, ๋นŒ๋“œ ๊ณผ์ •, ์„ค์ • ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์„ ํฌํ•จํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์ด์ „ ์„ค๋ช…์—์„œ ๋ˆ„๋ฝ๋œ ๋ถ€๋ถ„์„ ๋ชจ๋‘ ์ถ”๊ฐ€ํ•˜์—ฌ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.


Dynamic Web Project ๊ตฌ์กฐ ๋ฐ ๋ฐฐํฌ ๊ณผ์ • ์„ค๋ช…

Dynamic Web Project๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ณ  ๋ฐฐํฌํ•˜๋Š” ํ‘œ์ค€์ ์ธ ๋ฐฉ๋ฒ•์„ ๋”ฐ๋ฅด๋Š” ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์ด ๊ตฌ์กฐ๋Š” Java ์„œ๋ธ”๋ฆฟ, JSP, Spring ํ”„๋ ˆ์ž„์›Œํฌ ๋“ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ณ  ์„œ๋ฒ„์— ๋ฐฐํฌํ•˜๋Š” ๋ฐ ์ตœ์ ํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

1. Context Root์™€ ๋ฐฐํฌ ๊ด€๋ จ ์„ค๋ช…

  • Context Root:

    • Context Root๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฃจํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ, ์›น ์„œ๋ฒ„์—์„œ ํ•ด๋‹น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ ‘๊ทผ๋˜๋Š” ๊ธฐ๋ณธ URL ๊ฒฝ๋กœ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, http://localhost:8080/myapp์—์„œ myapp์ด context root์ž…๋‹ˆ๋‹ค.
    • Context Root ์•ˆ์—๋Š” HTML, CSS, JavaScript, JSP ํŒŒ์ผ์ด ํฌํ•จ๋˜์–ด ์žˆ์–ด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์†Œ์Šค๋“ค์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐฐํฌ ๊ณผ์ •:

    • WAR ํŒŒ์ผ๋กœ ๋ฐฐํฌ:
      • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ WAR (Web Application Archive) ํŒŒ์ผ ํ˜•์‹์œผ๋กœ ํŒจํ‚ค์ง•๋˜์–ด ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. WAR ํŒŒ์ผ์€ ๋ชจ๋“  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŒŒ์ผ๋“ค์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์ฃผ๋Š” ์••์ถ• ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.
      • ์ž๋™ ์••์ถ• ํ•ด์ œ: ์„œ๋ฒ„(Tomcat ๋“ฑ)์— WAR ํŒŒ์ผ์„ ๋ฐฐํฌํ•˜๋ฉด ์„œ๋ฒ„๋Š” ์ด๋ฅผ ์ž๋™์œผ๋กœ ํ•ด์ œํ•˜์—ฌ Context Root ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋  ์ค€๋น„๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
      • ๋ฐฐํฌ ํ‘œ์ค€: WAR ํŒŒ์ผ์„ ์‚ฌ์šฉํ•œ ๋ฐฐํฌ๋Š” J2EE ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋ฉฐ, ์—ฌ๋Ÿฌ ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ ์ผ๊ด€์„ฑ ์žˆ๊ณ  ์•ˆ์ •์ ์œผ๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ํ‘œ์ค€์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์€ ์œ ์ง€๋ณด์ˆ˜์™€ ํ˜‘์—…์— ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

2. ๋นŒ๋“œ ๋ฐ ํด๋ž˜์Šค ํŒŒ์ผ ๋ฐฐ์น˜

  • ๋นŒ๋“œ ๊ณผ์ •:

    • Java ์†Œ์Šค ํŒŒ์ผ์€ src/main/java ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค.

    • ์ž‘์„ฑ๋œ Java ํŒŒ์ผ๋“ค์€ ์ปดํŒŒ์ผ๋˜์–ด build/classes ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์œ„์น˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” ํ”„๋กœ์ ํŠธ ๋‚ด๋ถ€์—์„œ ์ž„์‹œ ์ €์žฅ์†Œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

    • WEB-INF/classes๋กœ ๋ณต์‚ฌ: ์ปดํŒŒ์ผ๋œ ํด๋ž˜์Šค ํŒŒ์ผ๋“ค์€ WEB-INF/classes ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ๋ณต์‚ฌ๋ฉ๋‹ˆ๋‹ค. ์ด ์œ„์น˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋  ๋•Œ ์ฐธ์กฐํ•˜๋Š” ์ฃผ์š” ๋””๋ ‰ํ„ฐ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋Š” ์ตœ์‹ ์˜ ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

    • JRE(Java Runtime Environment): JRE ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๊ธฐ๋ณธ์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ (JVM)์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. JRE ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์„œ๋ฒ„๊ฐ€ ์ด๋ฏธ ์„ค์น˜๋œ ํ™˜๊ฒฝ์˜ ์ผ๋ถ€๋กœ ๊ฐ„์ฃผ๋˜์–ด ๋ฐฐํฌ ํŒŒ์ผ(WAR ํŒŒ์ผ)์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    • Tomcat Library (Server Runtime): Apache Tomcat ์„œ๋ฒ„๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ฃผ๋กœ servlet-api.jar์™€ ๊ฐ™์€ ์„œ๋ธ”๋ฆฟ ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์„œ๋ฒ„์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์˜ ์—ฐ๋™์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

    • Webapp ๋””๋ ‰ํ„ฐ๋ฆฌ (webapp): ์ด ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” HTML, CSS, JavaScript, JSP ํŒŒ์ผ ๋“ฑ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ œ๊ณต๋˜๋Š” ์›น ๋ฆฌ์†Œ์Šค ํŒŒ์ผ๋“ค์ด ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

    • META-INF: ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ๊ด€๋ จ๋œ ์„ค์ • ํŒŒ์ผ๋“ค์„ ๋‹ด๊ณ  ์žˆ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ์ž…๋‹ˆ๋‹ค. ๋ณดํ†ต JAR ๋˜๋Š” WAR ํŒŒ์ผ์˜ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

    WEB-INF

    • classes: ์ปดํŒŒ์ผ๋œ Java ํด๋ž˜์Šค ํŒŒ์ผ๋“ค์ด ์œ„์น˜ํ•˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. ์ด ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ํŒŒ์ผ๋“ค์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ์™ธ๋ถ€์—์„œ ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
    • lib: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‚ฌ์šฉํ•˜๋Š” .jar ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒŒ์ผ๋“ค์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ํ™•์žฅ ๊ธฐ๋Šฅ์„ ์ด ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • web.xml (Deployment Descriptor): ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ ์„ค์ • ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ ๋งคํ•‘, ํ•„ํ„ฐ, ๋ฆฌ์Šค๋„ˆ ๋“ฑ์˜ ์„ค์ •์„ ์ •์˜ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์„œ๋ฒ„์—์„œ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ• ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์›น ๋ชจ๋“ˆ 3.0 ์ด์ƒ์—์„œ๋Š” ์• ๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ XML ์„ค์ •์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ†ฐ์บฃ ์„œ๋ฒ„ ๋ฐฐํฌ:

    • Tomcat ์„œ๋ฒ„๋Š” WEB-INF/classes ๋””๋ ‰ํ„ฐ๋ฆฌ์™€ lib ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ๋Š” .jar ํŒŒ์ผ๋“ค์„ ๋กœ๋“œํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋กœ์ง์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ตฌ์กฐ๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํด๋ž˜์Šค ๋กœ๋”๊ฐ€ ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ํ‘œ์ค€ ์œ„์น˜๋กœ, ์„œ๋ฒ„์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

3. ์„ค์ • ๋ฐฉ๋ฒ•: Annotation ๊ธฐ๋ฐ˜๊ณผ XML ์„ค์ •

  • ์ปจํ…Œ์ด๋„ˆ์™€ ์„ค์ • ๊ด€๋ฆฌ:

    • Annotation ๊ธฐ๋ฐ˜ ์„ค์ •:
      • ์ตœ๊ทผ์˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” Annotation์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ธ”๋ฆฟ, ํ•„ํ„ฐ, ๋ฆฌ์Šค๋„ˆ ๋“ฑ์˜ ์„ค์ •์„ ์ง์ ‘ Java ์ฝ”๋“œ ๋‚ด์—์„œ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, @WebServlet ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด XML ํŒŒ์ผ ์—†์ด ์„œ๋ธ”๋ฆฟ ๋งคํ•‘์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • XML ์„ค์ •:
      • ์ „ํ†ต์ ์ธ ์„ค์ • ๋ฐฉ์‹์œผ๋กœ, web.xml ํŒŒ์ผ์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋™์ž‘ ๋ฐฉ์‹์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์—๋Š” ์„œ๋ธ”๋ฆฟ ๋งคํ•‘, ํ•„ํ„ฐ ์„ค์ •, ๋ฆฌ์Šค๋„ˆ ์ •์˜ ๋“ฑ ๋‹ค์–‘ํ•œ ์„ค์ •์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
      • XML ์„ค์ •์€ ๋ช…์‹œ์ ์ด๊ณ  ๊ตฌ์กฐํ™”๋œ ํ˜•ํƒœ๋กœ, ๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋„ ์ผ๊ด€๋œ ์„ค์ •์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ปจํ…Œ์ด๋„ˆ์™€์˜ ์†Œํ†ต:

    • ์„ค์ • ์ •๋ณด๋Š” ์„œ๋ฒ„์˜ ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ์ฝํžˆ๊ณ , ์ปจํ…Œ์ด๋„ˆ๋Š” ์ด๋Ÿฌํ•œ ์„ค์ •์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. Annotation๊ณผ XML์€ ์ปจํ…Œ์ด๋„ˆ์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์˜ ์„ค์ • ์ •๋ณด๋ฅผ ์†Œํ†ตํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์ „์ฒด์ ์ธ ๋™์ž‘ ํ๋ฆ„ ์ •๋ฆฌ

  1. ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ๊ณผ Context Root:

    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” context root์— ํ•ด๋‹นํ•˜๋Š” ๊ฒฝ๋กœ๋กœ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  2. WAR ํŒŒ์ผ ๋ฐฐํฌ:

    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ WAR ํŒŒ์ผ๋กœ ์••์ถ•๋˜์–ด ์„œ๋ฒ„์— ๋ฐฐํฌ๋˜๋ฉฐ, ์„œ๋ฒ„๋Š” ์ด๋ฅผ ์ž๋™์œผ๋กœ ํ•ด์ œํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์€ ํ‘œ์ค€ํ™”๋œ ๋ฐฐํฌ ๋ฐฉ์‹์œผ๋กœ ์•ˆ์ •์ ์ธ ์šด์˜ ํ™˜๊ฒฝ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
  3. ๋นŒ๋“œ ๋ฐ ํด๋ž˜์Šค ๋ฐฐํฌ:

    • Java ์†Œ์Šค๋Š” ์ปดํŒŒ์ผ๋˜์–ด WEB-INF/classes๋กœ ๋ณต์‚ฌ๋˜๋ฉฐ, Tomcat ์„œ๋ฒ„๋Š” ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์€ ์ตœ์‹  ์ฝ”๋“œ๋ฅผ ๋ฐ˜์˜ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
  4. ์„ค์ •๊ณผ ์‹คํ–‰:

    • ์„ค์ •์€ XML ํŒŒ์ผ ๋˜๋Š” Annotation์„ ํ†ตํ•ด ๊ด€๋ฆฌ๋˜๋ฉฐ, ์„œ๋ฒ„ ์ปจํ…Œ์ด๋„ˆ๋Š” ์ด ์„ค์ •์„ ์ฝ์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋™์ž‘ ๋ฐฉ์‹์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„์—์„œ์˜ ์ปจํ…Œ์ด๋„ˆ ์—ญํ• ๊ณผ ๊ฐœ๋…

์ปจํ…Œ์ด๋„ˆ๋Š” Java ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—์„œ ์„œ๋ธ”๋ฆฟ(Servlet), JSP(JavaServer Pages)์™€ ๊ฐ™์€ ์›น ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋Š” Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋  ๋•Œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„, ์˜ˆ๋ฅผ ๋“ค์–ด Apache Tomcat, JBoss, WebLogic, WebSphere ๋“ฑ์˜ ์„œ๋ฒ„๊ฐ€ ๋Œ€ํ‘œ์ ์ธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

1. ์ปจํ…Œ์ด๋„ˆ(Container)๋ž€?

  • ์ปจํ…Œ์ด๋„ˆ์˜ ์ •์˜:

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

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

2. ์ปจํ…Œ์ด๋„ˆ์˜ ์ข…๋ฅ˜

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

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

    • ์›น ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ, JSP์™€ ๊ฐ™์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ถ”๊ฐ€๋กœ ์ง€์›ํ•˜๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. JSP๋Š” ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ณ€ํ™˜๋˜์–ด ์‹คํ–‰๋˜๋ฉฐ, ์ด ๊ณผ์ •๋„ ์›น ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
  • EJB ์ปจํ…Œ์ด๋„ˆ:

    • ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์ž๋ฐ”๋นˆ(Enterprise JavaBeans, EJB)์„ ๊ด€๋ฆฌํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋กœ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ์‹คํ–‰๊ณผ ๊ด€๋ฆฌ์— ํŠนํ™”๋œ ํ™˜๊ฒฝ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋” ๋ณต์žกํ•˜๊ณ  ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ, ๋ถ„์‚ฐ ์ปดํ“จํŒ… ๋“ฑ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

3. ์„œ๋ฒ„์—์„œ์˜ ์ปจํ…Œ์ด๋„ˆ ๋™์ž‘ ๋ฐฉ์‹

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

4. ์ปจํ…Œ์ด๋„ˆ์˜ ์„ค์ •๊ณผ ๋ฐฐํฌ

  • ์„ค์ • ํŒŒ์ผ (web.xml ๋˜๋Š” Annotation):

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

    • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ WAR ํŒŒ์ผ๋กœ ํŒจํ‚ค์ง•๋˜์–ด ์ปจํ…Œ์ด๋„ˆ์— ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋Š” WAR ํŒŒ์ผ์„ ์ž๋™์œผ๋กœ ํ•ด์ œํ•˜๊ณ , ํ•ด๋‹น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ์ค€๋น„๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

Servlet ํŒŒ์ผ ์ƒ์„ฑ ๋ฐ ์‹คํ–‰ ๊ณผ์ •

Servlet์€ Java ๊ธฐ๋ฐ˜์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๋Š” ์„œ๋ฒ„ ์ธก ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. Servlet ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ , Tomcat ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ์‹คํ–‰ํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ™•์ธํ•˜๋Š” ์ „์ฒด ๊ณผ์ •์„ ๋‹จ๊ณ„๋ณ„๋กœ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

1. Servlet ํŒŒ์ผ ์ƒ์„ฑ

  1. ์ƒˆ Servlet ํŒŒ์ผ ์ƒ์„ฑํ•˜๊ธฐ:

    • IDE(Eclipse, IntelliJ ๋“ฑ)์—์„œ New Servlet์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ํŒŒ์ผ ์ƒ์„ฑ ๊ฒฝ๋กœ: src/main/java ๋˜๋Š” src ํด๋” ํ•˜์œ„์˜ ํŒจํ‚ค์ง€์— ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. URL Mapping ์„ค์ •:

    • Servlet ์ƒ์„ฑ ์‹œ URL ๋งคํ•‘์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. URL ๋งคํ•‘์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํŠน์ • ๊ฒฝ๋กœ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ํ•ด๋‹น ์„œ๋ธ”๋ฆฟ์ด ์‹คํ–‰๋˜๋„๋ก ํ•˜๋Š” ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, /hello๋กœ ๋งคํ•‘ํ•˜๋ฉด http://localhost:8080/yourapp/hello๋กœ ์ ‘๊ทผ ์‹œ ํ•ด๋‹น ์„œ๋ธ”๋ฆฟ์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
    • ๋งคํ•‘ ๋ณ€๊ฒฝ์€ @WebServlet("/path") ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. Service Method ์„ ํƒ ๋ฐ ๊ตฌํ˜„:

    • Servlet ํŒŒ์ผ ์ƒ์„ฑ ์‹œ ๊ตฌํ˜„ํ•  HTTP ๋ฉ”์„œ๋“œ(์˜ˆ: doGet, doPost)๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ผ๋ฐ˜์ ์œผ๋กœ doGet()์€ GET ์š”์ฒญ์„, doPost()๋Š” POST ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • ์ƒ์„ฑ ํ›„ ์„ ํƒํ•œ ๋ฉ”์„œ๋“œ์— ํ•„์š”ํ•œ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

2. ํŒŒ์ผ ์ •๋ฆฌ ๋ฐ ์„œ๋น„์Šค ๋ฉ”์„œ๋“œ ๊ตฌํ˜„

  • ํŒŒ์ผ ์ •๋ฆฌ:

    • ํŒจํ‚ค์ง€ ๊ตฌ์กฐ์— ๋งž๊ฒŒ ์ƒ์„ฑ๋œ Servlet ํŒŒ์ผ์ด ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์— ์ €์žฅ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    • ํ•„์š”์— ๋”ฐ๋ผ ์ถ”๊ฐ€์ ์ธ ๋กœ์ง์„ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Service Method ๊ตฌํ˜„:

    • Servlet์˜ ํ•ต์‹ฌ์€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๋Š” service() ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. doGet()์ด๋‚˜ doPost() ๋ฉ”์„œ๋“œ์— HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ๋กœ์ง์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

3. Tomcat ์‹คํ–‰ ๋ฐ ๋ธŒ๋ผ์šฐ์ € ํ™•์ธ

  • Tomcat ์„œ๋ฒ„ ์‹คํ–‰:

    • ํ”„๋กœ์ ํŠธ๋ฅผ Tomcat ์„œ๋ฒ„์— ์ถ”๊ฐ€ํ•˜๊ณ  ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • Tomcat ์„œ๋ฒ„๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ localhost:8080 ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ํ”„๋กœ์ ํŠธ์˜ Context Root์™€ Servlet์˜ URL ๋งคํ•‘์„ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ™•์ธ:

    • ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์—ด๊ณ  Servlet์˜ URL ๋งคํ•‘ ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์„œ๋ธ”๋ฆฟ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ: http://localhost:8080/yourapp/hello

Servlet ์˜ˆ์ œ: ๊ฐ„๋‹จํ•œ "Hello World" ์„œ๋ธ”๋ฆฟ ๊ตฌํ˜„

๋‹ค์Œ์€ ๊ฐ„๋‹จํ•œ "Hello World" Servlet์„ ์ƒ์„ฑํ•˜๊ณ , doGet() ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

1. Servlet ์ƒ์„ฑ ๋ฐ URL Mapping ์„ค์ •

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;

// URL ๋งคํ•‘ ์„ค์ • - ๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:8080/yourapp/hello ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {

    // GET ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฉ”์„œ๋“œ ๊ตฌํ˜„
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        // ์‘๋‹ต ์ฝ˜ํ…์ธ  ํƒ€์ž… ์„ค์ •
        response.setContentType("text/html");

        // ์‘๋‹ต์„ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ PrintWriter ์ƒ์„ฑ
        PrintWriter out = response.getWriter();

        // HTML ์‘๋‹ต ์ƒ์„ฑ
        out.println("<html>");
        out.println("<head><title>Hello Servlet</title></head>");
        out.println("<body>");
        out.println("<h1>Hello, World!</h1>");
        out.println("<p>Welcome to my first Servlet example.</p>");
        out.println("</body>");
        out.println("</html>");
    }
}

2. Tomcat ์‹คํ–‰ ๋ฐ ํ™•์ธ

  1. Tomcat์— ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ: ์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ Tomcat ์„œ๋ฒ„์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  2. Tomcat ์„œ๋ฒ„ ์‹œ์ž‘: Tomcat์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ™•์ธ: ๋ธŒ๋ผ์šฐ์ €์— http://localhost:8080/yourapp/hello๋ฅผ ์ž…๋ ฅํ•˜์—ฌ HelloServlet์ด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

3. ์„ค๋ช…

  • @WebServlet("/hello"): ์„œ๋ธ”๋ฆฟ์˜ URL ๋งคํ•‘์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ /hello๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ์ด ์„œ๋ธ”๋ฆฟ์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • doGet() ๋ฉ”์„œ๋“œ: GET ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ HTML ํ˜•์‹์˜ ์‘๋‹ต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • PrintWriter: PrintWriter ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ตํ•  HTML ์ฝ˜ํ…์ธ ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

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


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

Java Servlet ๊ฐœ์š”

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

์ฃผ์š” ํŠน์ง•

  • ๋™์  ์›น ํŽ˜์ด์ง€ ์ƒ์„ฑ: ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์— ๋”ฐ๋ผ HTML, XML, JSON ๋“ฑ์˜ ๋™์  ์ฝ˜ํ…์ธ ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„ ์„ฑ๋Šฅ ํ–ฅ์ƒ: ์š”์ฒญ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” CGI์™€ ๋‹ฌ๋ฆฌ, Servlet์€ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋” ์ ์€ ๋ฆฌ์†Œ์Šค๋กœ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ํ”Œ๋žซํผ ๋…๋ฆฝ์ : Java๋กœ ์ž‘์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์–‘ํ•œ ์šด์˜์ฒด์ œ์™€ ์›น ์„œ๋ฒ„์—์„œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

Servlet์˜ ๋™์ž‘ ๋ฐฉ์‹

  1. ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„ (Initialization):

    • ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ(Tomcat, Jetty ๋“ฑ)๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ฒ˜์Œ ์š”์ฒญ์„ ๋ฐ›์„ ๋•Œ ์„œ๋ธ”๋ฆฟ์„ ๋กœ๋“œํ•˜๊ณ , init() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„๋Š” ์„œ๋ธ”๋ฆฟ์ด ์ตœ์ดˆ ํ˜ธ์ถœ๋  ๋•Œ ํ•œ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.
  2. ์š”์ฒญ ์ฒ˜๋ฆฌ ๋‹จ๊ณ„ (Request Handling):

    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด, ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” service() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š” ์š”์ฒญ์˜ ์ข…๋ฅ˜(GET, POST ๋“ฑ)์— ๋”ฐ๋ผ doGet(), doPost(), doPut() ๋“ฑ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • ์š”์ฒญ ๋ฐ์ดํ„ฐ๋Š” HttpServletRequest ๊ฐ์ฒด๋กœ ์ „๋‹ฌ๋˜๋ฉฐ, ์‘๋‹ต ๋ฐ์ดํ„ฐ๋Š” HttpServletResponse ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.
  3. ์ข…๋ฃŒ ๋‹จ๊ณ„ (Termination):

    • ์„œ๋ธ”๋ฆฟ์ด ๋” ์ด์ƒ ํ•„์š” ์—†์„ ๋•Œ, ์ปจํ…Œ์ด๋„ˆ๋Š” destroy() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์„œ๋ธ”๋ฆฟ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š” ์„œ๋ธ”๋ฆฟ์˜ ์ž์›์„ ์ •๋ฆฌํ•˜๊ณ  ์ข…๋ฃŒํ•  ๋•Œ ํ•„์š”ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Servlet๊ณผ JSP์˜ ์ฐจ์ด

  • Servlet: Java ์ฝ”๋“œ๊ฐ€ ์ฃผ๋กœ HTML๊ณผ ๊ฐ™์€ ์‘๋‹ต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, Java ์ฝ”๋“œ ๋‚ด์— HTML์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ์ง ์ค‘์‹ฌ์˜ ์ฝ”๋“œ ์ž‘์„ฑ์— ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • JSP (JavaServer Pages): HTML ์ฝ”๋“œ ์•ˆ์— Java ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•˜์—ฌ ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ํ”„๋ก ํŠธ์—”๋“œ์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์œ„ํ•œ ํ…œํ”Œ๋ฆฟ ์ž‘์„ฑ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • Servlet์€ ๋กœ์ง ์ค‘์‹ฌ, JSP๋Š” ํ…œํ”Œ๋ฆฟ ์ค‘์‹ฌ์ด๋ฏ€๋กœ, ์ข…์ข… Servlet์ด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๊ณ , JSP๊ฐ€ ๊ฒฐ๊ณผ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

Java Servlet์˜ ์žฅ์ 

  1. ์„ฑ๋Šฅ:

    • Servlet์€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” CGI(Common Gateway Interface)์™€ ๋‹ฌ๋ฆฌ, ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ›จ์”ฌ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ์ ๊ณ , ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋น ๋ฅด๋ฉฐ ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  2. ์•ˆ์ •์„ฑ:

    • ์ž๋ฐ”๋กœ ๊ตฌํ˜„๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์™€ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ์•ˆ์ •์ ์ž…๋‹ˆ๋‹ค. ์ž๋ฐ”์˜ ๊ฐ•๋ ฅํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์™€ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ์˜ ์•ˆ์ •์„ฑ์€ ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹ ๋ขฐ์„ฑ์„ ๋†’์—ฌ์ค๋‹ˆ๋‹ค.
  3. ์žฌ์‚ฌ์šฉ์„ฑ:

    • ์„œ๋ธ”๋ฆฟ์€ ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ํŠน์„ฑ์„ ํ™œ์šฉํ•˜์—ฌ, ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. MVC ํŒจํ„ด๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ์˜ ๋ถ„๋ฆฌ์™€ ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.
  4. ํ”Œ๋žซํผ ๋…๋ฆฝ์„ฑ:

    • Java๋กœ ๊ตฌํ˜„๋˜์–ด ๋‹ค์–‘ํ•œ ์šด์˜์ฒด์ œ์™€ ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. JVM๋งŒ ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๋ฉด ์–ด๋””์„œ๋“  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  5. ํ™•์žฅ์„ฑ ๋ฐ ํ†ตํ•ฉ:

    • ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”„๋ ˆ์ž„์›Œํฌ(Spring, Hibernate ๋“ฑ)์™€ ์‰ฝ๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ด ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.

Servlet๊ณผ ๋‹ค๋ฅธ ๊ธฐ์ˆ ๊ณผ์˜ ๋น„๊ต

  1. CGI (Common Gateway Interface):

    • CGI๋Š” ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋งŽ์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • Servlet์€ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ, ์„ฑ๋Šฅ๊ณผ ํšจ์œจ์„ฑ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.
  2. PHP, ASP ๋“ฑ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด:

    • PHP์™€ ASP๋Š” ์ฝ”๋“œ๊ฐ€ ์„œ๋ฒ„์—์„œ ์ธํ„ฐํ”„๋ฆฌํŠธ๋˜์–ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋“ค์€ ๋™์ ์ธ ์›น ํŽ˜์ด์ง€ ์ƒ์„ฑ์„ ์œ„ํ•œ ๋น ๋ฅธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, Java Servlet์— ๋น„ํ•ด ์„ฑ๋Šฅ ๋ฐ ์•ˆ์ •์„ฑ์—์„œ ์ œํ•œ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • Servlet์€ ์ปดํŒŒ์ผ๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ์‹คํ–‰๋˜๋ฏ€๋กœ, ์„ฑ๋Šฅ์ด ๋” ๋›ฐ์–ด๋‚˜๋ฉฐ ๋‹ค์–‘ํ•œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ธฐ๋Šฅ(ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ, ๋ณด์•ˆ ๋“ฑ)์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ: ๊ฐ„๋‹จํ•œ Servlet ์ฝ”๋“œ

์•„๋ž˜๋Š” ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ๋ฐ›์•„ "Hello, Servlet!" ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ„๋‹จํ•œ Servlet ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

// ์„œ๋ธ”๋ฆฟ ๋งคํ•‘์„ ์œ„ํ•œ URL ๊ฒฝ๋กœ ์„ค์ •
@WebServlet("/helloServlet")
public class HelloServlet extends HttpServlet {
    
    // GET ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฉ”์„œ๋“œ
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        // ์‘๋‹ต ์ฝ˜ํ…์ธ  ํƒ€์ž… ์„ค์ •
        response.setContentType("text/html");

        // ์‘๋‹ต์„ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ PrintWriter ๊ฐ์ฒด ์ƒ์„ฑ
        PrintWriter out = response.getWriter();

        // HTML ํ˜•ํƒœ์˜ ์‘๋‹ต ์ƒ์„ฑ
        out.println("<html>");
        out.println("<head><title>Servlet Example</title></head>");
        out.println("<body>");
        out.println("<h1>Hello, Servlet!</h1>");
        out.println("</body>");
        out.println("</html>");
    }
}

์„ค๋ช…

  • Servlet์˜ URL ๋งคํ•‘: @WebServlet("/helloServlet") ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์„œ๋ธ”๋ฆฟ์ด /helloServlet ๊ฒฝ๋กœ๋กœ ์š”์ฒญ์ด ์™”์„ ๋•Œ ์‹คํ–‰๋˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • doGet() ๋ฉ”์„œ๋“œ: ํด๋ผ์ด์–ธํŠธ์˜ GET ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , HTML ํ˜•์‹์˜ ์‘๋‹ต์„ ์ƒ์„ฑํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • PrintWriter ์‚ฌ์šฉ: PrintWriter ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด HTTP ์‘๋‹ต์œผ๋กœ HTML ์ฝ˜ํ…์ธ ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

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


Servlet ๋™์ž‘ ํ๋ฆ„ ์ƒ์„ธ ์„ค๋ช…

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

1. ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ (Request)

  • Web Browser (ํด๋ผ์ด์–ธํŠธ):
    • ์‚ฌ์šฉ์ž๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ํŠน์ • URL์„ ์š”์ฒญํ•˜๋ฉด, ์ด ์š”์ฒญ์ด ์„œ๋ฒ„๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ์š”์ฒญ์€ ์ฃผ๋กœ HTTP GET ๋˜๋Š” POST ํ˜•์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
    • ์˜ˆ: ์‚ฌ์šฉ์ž๊ฐ€ http://localhost:8080/myapp/hello์— ์ ‘์†ํ•˜๋ฉด, ๋ธŒ๋ผ์šฐ์ €๋Š” ์ด URL์— ํ•ด๋‹นํ•˜๋Š” ์š”์ฒญ์„ ์„œ๋ฒ„์— ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

2. Web Application Server์—์„œ์˜ ์ฒ˜๋ฆฌ

  • Web Application Server:

    • ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ Apache Tomcat, Jetty ๋“ฑ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๊ฐ€ ์ด ์—ญํ• ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
    • ์„œ๋ฒ„๋Š” ์š”์ฒญ์„ ๋ฐ›์•„ ์ ์ ˆํ•œ Servlet์œผ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • Servlet์˜ ์—ญํ• :

    1. ๋ฐ์ดํ„ฐ ์ˆ˜์‹  (Data Get):

      • Servlet์€ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ HttpServletRequest ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ, ํ—ค๋” ์ •๋ณด, ์„ธ์…˜ ์ •๋ณด ๋“ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
      • ์˜ˆ๋ฅผ ๋“ค์–ด, GET ์š”์ฒญ์—์„œ๋Š” URL์˜ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ, POST ์š”์ฒญ์—์„œ๋Š” ํผ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.
    2. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌ (Logic - Business):

      • Servlet์€ ์ˆ˜์‹ ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๊ณ„์‚ฐ, ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์กฐํšŒ ๋“ฑ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™ (JDBC):
        • Servlet์ด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด, JDBC(Java Database Connectivity)๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๊ฒฐํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
        • JDBC๋Š” Java์—์„œ RDBMS์™€์˜ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” API์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    3. ์‘๋‹ต ํŽ˜์ด์ง€ ์ƒ์„ฑ (Response Page):

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

3. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ƒํ˜ธ์ž‘์šฉ

  • RDBMS (Relational Database Management System):
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” MySQL, Oracle, PostgreSQL ๋“ฑ ๋‹ค์–‘ํ•œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • JDBC๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ:
      • Servlet์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ๋•Œ JDBC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์„ ํ†ตํ•ด ์„œ๋ฒ„๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ •๋ณด๋ฅผ ์ฝ๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. ํด๋ผ์ด์–ธํŠธ ์‘๋‹ต (Response)

  • ์‘๋‹ต ์ฒ˜๋ฆฌ:
    • Servlet์—์„œ ์ƒ์„ฑ๋œ ์‘๋‹ต์€ HttpServletResponse ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.
    • ์‘๋‹ต์€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ•ด์„๋˜์–ด ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์‘๋‹ต์€ HTML, JSON ๋“ฑ์˜ ํ˜•์‹์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๊ฒฐ๊ณผ ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

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

Servlet API์˜ ์ƒ์† ๊ตฌ์กฐ ์„ค๋ช…

1. ์ธํ„ฐํŽ˜์ด์Šค Servlet

  • ์„ค๋ช…: Servlet ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ชจ๋“  ์„œ๋ธ”๋ฆฟ์ด ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ธฐ๋ณธ ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. Servlet์˜ ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ์ธ init(), service(), destroy(), getServletConfig(), getServletInfo() ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์—ญํ• : ๋ชจ๋“  Servlet ํด๋ž˜์Šค์˜ ๋™์ž‘์„ ์ •์˜ํ•˜๋ฉฐ, ์„œ๋ธ”๋ฆฟ์ด ์ดˆ๊ธฐํ™”๋˜๊ณ  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ ์ข…๋ฃŒ๋˜๋Š” ๊ณผ์ •์„ ๊ทœ์ •ํ•ฉ๋‹ˆ๋‹ค.

2. GenericServlet ํด๋ž˜์Šค

  • ์„ค๋ช…: GenericServlet ํด๋ž˜์Šค๋Š” Servlet ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ์ถ”์ƒ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ํ”„๋กœํ† ์ฝœ์— ๋…๋ฆฝ์ ์ด๋ฉฐ, service() ๋ฉ”์„œ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋ฉ”์„œ๋“œ๋ฅผ ๊ธฐ๋ณธ ๊ตฌํ˜„์œผ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์—ญํ• : ์„œ๋ธ”๋ฆฟ์˜ ๊ณตํ†ต์ ์ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ, HTTP ์ด์™ธ์˜ ํ”„๋กœํ† ์ฝœ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํ™•์žฅํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ๋Š” HttpServlet์ด ์ฃผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

3. HttpServlet ํด๋ž˜์Šค

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

4. MyServlet ํด๋ž˜์Šค (์‚ฌ์šฉ์ž ์ •์˜ ์„œ๋ธ”๋ฆฟ)

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

5. ServletRequest ์ธํ„ฐํŽ˜์ด์Šค

  • ์„ค๋ช…: ServletRequest ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ ์ •๋ณด๋ฅผ ์„œ๋ธ”๋ฆฟ์— ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋œ ๋ฐ์ดํ„ฐ, ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ, ํ”„๋กœํ† ์ฝœ ์ •๋ณด ๋“ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์—ญํ• : ์š”์ฒญ ์ •๋ณด๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ์„œ๋ธ”๋ฆฟ์ด ์ ์ ˆํ•œ ์‘๋‹ต์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค. HttpServletRequest๊ฐ€ ์ด๋ฅผ ์ƒ์†ํ•˜์—ฌ HTTP ์š”์ฒญ์— ํŠนํ™”๋œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

6. HttpServletRequest ์ธํ„ฐํŽ˜์ด์Šค

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

7. ServletResponse ์ธํ„ฐํŽ˜์ด์Šค

  • ์„ค๋ช…: ServletResponse ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์„œ๋ธ”๋ฆฟ์ด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ต์„ ์ „์†กํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ์‘๋‹ต์˜ ์ฝ˜ํ…์ธ  ํƒ€์ž… ์„ค์ •, ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ ์ œ๊ณต ๋“ฑ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
  • ์—ญํ• : ์„œ๋ธ”๋ฆฟ์ด ์ƒ์„ฑํ•œ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด HTML, JSON, XML ๋“ฑ์˜ ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๊ณ  ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

8. HttpServletResponse ์ธํ„ฐํŽ˜์ด์Šค

  • ์„ค๋ช…: HttpServletResponse๋Š” ServletResponse๋ฅผ ํ™•์žฅํ•˜์—ฌ HTTP ์‘๋‹ต์— ํŠนํ™”๋œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ์‘๋‹ต ์ฝ”๋“œ ์„ค์ •, ์ฟ ํ‚ค ์ถ”๊ฐ€, ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์ฒ˜๋ฆฌ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์—ญํ• : HTTP ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†กํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์‘๋‹ต ์ƒํƒœ ์ฝ”๋“œ ์„ค์ •(์˜ˆ: 200 OK, 404 Not Found), ๋ฆฌ๋‹ค์ด๋ ‰์…˜, ์ฟ ํ‚ค ๊ด€๋ฆฌ ๋“ฑ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

Servlet ๋ฐฐํฌ (Deployment Descriptor)

Servlet์˜ ๋ฐฐํฌ๋Š” web.xml ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์ •ํ•˜๊ฑฐ๋‚˜, ์–ด๋…ธํ…Œ์ด์…˜์ธ @WebServlet์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„ค์ •๋“ค์€ Servlet์˜ ๋™์ž‘๊ณผ ์ดˆ๊ธฐํ™” ๋ฐฉ์‹์„ ์ •์˜ํ•˜๋Š” ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

1. web.xml ํŒŒ์ผ์˜ ๊ตฌ์กฐ์™€ ์—ญํ• 

web.xml์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐฐํฌ ์„ค์ •์„ ์ •์˜ํ•˜๋Š” XML ํŒŒ์ผ๋กœ, ๊ฐ Servlet์˜ ์ดˆ๊ธฐํ™”์™€ URL ๋งคํ•‘์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์š” ํƒœ๊ทธ๋Š” <servlet>, <servlet-mapping>, <load-on-startup>์ž…๋‹ˆ๋‹ค.

  • servlet ํƒœ๊ทธ:

    • ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค์™€ ๊ทธ ์ด๋ฆ„์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ์ด ์–ด๋–ค ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ• ์ง€ ์ง€์ •ํ•˜์—ฌ ์‹คํ–‰ ์‹œ ๋กœ๋“œํ•  ์„œ๋ธ”๋ฆฟ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    <servlet>
        <description>A simple example Servlet</description>
        <display-name>ExampleServlet</display-name>
        <servlet-name>exampleServlet</servlet-name>
        <servlet-class>com.example.web.ExampleServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    • <servlet-name>: ์„œ๋ธ”๋ฆฟ์˜ ์ด๋ฆ„์œผ๋กœ, <servlet-mapping>์—์„œ ์ด ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ธ”๋ฆฟ์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.
    • <servlet-class>: ์„œ๋ธ”๋ฆฟ์˜ ์‹ค์ œ ํด๋ž˜์Šค ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„๋Š” ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์ฐพ์•„ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • <load-on-startup>:
      • ์ด ์„ค์ •์€ ์„œ๋ธ”๋ฆฟ์ด ์„œ๋ฒ„ ์‹œ์ž‘ ์‹œ์ ์— ๋กœ๋“œ๋ ์ง€ ์—ฌ๋ถ€์™€ ์ˆœ์„œ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. 1๋กœ ์„ค์ •ํ•˜๋ฉด ์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์„œ๋ธ”๋ฆฟ์ด ๋ฐ”๋กœ ๋กœ๋“œ๋˜๊ณ  ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.
  • servlet-mapping ํƒœ๊ทธ:

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

2. @WebServlet ์–ด๋…ธํ…Œ์ด์…˜

  • @WebServlet:

    • web.xml ๋Œ€์‹  ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค์— ์ง์ ‘ ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋…ธํ…Œ์ด์…˜์€ ์ฝ”๋“œ์—์„œ ์„œ๋ธ”๋ฆฟ ๋งคํ•‘๊ณผ ์ดˆ๊ธฐํ™”๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

    • ์˜ˆ์‹œ:

      import jakarta.servlet.annotation.WebServlet;
      import jakarta.servlet.http.HttpServlet;
      import jakarta.servlet.http.HttpServletRequest;
      import jakarta.servlet.http.HttpServletResponse;
      import java.io.IOException;
      
      @WebServlet(name = "exampleServlet", urlPatterns = {"/example", "*.do"})
      public class ExampleServlet extends HttpServlet {
          @Override
          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
              response.setContentType("text/html");
              response.getWriter().println("<h1>Hello from ExampleServlet!</h1>");
          }
      }
    • name: ์„œ๋ธ”๋ฆฟ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

    • urlPatterns: ์„œ๋ธ”๋ฆฟ์ด ์ฒ˜๋ฆฌํ•  URL ํŒจํ„ด์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„ค์ •์„ ํ†ตํ•ด ํŠน์ • URL๋กœ์˜ ์š”์ฒญ์ด ๋“ค์–ด์™”์„ ๋•Œ ์ด ์„œ๋ธ”๋ฆฟ์ด ํ•ด๋‹น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

3. load-on-startup์˜ ์—ญํ• 

  • ์ดˆ๊ธฐํ™” ์‹œ์  ์„ค์ •:

    • <load-on-startup> ํƒœ๊ทธ๋Š” ์„œ๋ธ”๋ฆฟ์ด ์„œ๋ฒ„ ์‹œ์ž‘ ์‹œ ์ฆ‰์‹œ ์ดˆ๊ธฐํ™”๋ ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ์ด ์„ค์ •์ด ์žˆ๋Š” ์„œ๋ธ”๋ฆฟ์€ ์„œ๋ฒ„ ์‹œ์ž‘ ์‹œ ๋ฏธ๋ฆฌ ๋กœ๋“œ๋˜๋ฉฐ, ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ(init())๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์š”์ฒญ ์‹œ ์ดˆ๊ธฐํ™”๋˜๋Š” ์„œ๋ธ”๋ฆฟ๋ณด๋‹ค ๋น ๋ฅธ ์‘๋‹ต์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ˆซ์ž๊ฐ€ ์ž‘์„์ˆ˜๋ก ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์•„ ๋จผ์ € ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.
  • ์‹คํ–‰ ์˜ˆ์‹œ:

    • load-on-startup์ด ์„ค์ •๋œ ์„œ๋ธ”๋ฆฟ์€ ์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ๋ฐ”๋กœ ์‹คํ–‰๋˜์–ด ์„œ๋ธ”๋ฆฟ์ด ์ค€๋น„๋ฉ๋‹ˆ๋‹ค. ์„ค์ •์ด ์—†์œผ๋ฉด ์„œ๋ธ”๋ฆฟ์€ ์ฒซ ์š”์ฒญ์ด ์žˆ์„ ๋•Œ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.

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

  1. ์„œ๋ฒ„ ์‹œ์ž‘: ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„(Tomcat ๋“ฑ)๊ฐ€ ์‹œ์ž‘๋  ๋•Œ web.xml ํŒŒ์ผ์„ ์ฝ๊ณ  ์„œ๋ธ”๋ฆฟ ์„ค์ •์„ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  2. ์„œ๋ธ”๋ฆฟ ์ดˆ๊ธฐํ™”: <load-on-startup>์ด ์„ค์ •๋œ ์„œ๋ธ”๋ฆฟ์€ ์„œ๋ฒ„ ์‹œ์ž‘ ์‹œ ์ฆ‰์‹œ ์ดˆ๊ธฐํ™”๋˜์–ด ์ค€๋น„๋ฉ๋‹ˆ๋‹ค.
  3. ์š”์ฒญ ์ฒ˜๋ฆฌ: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋งคํ•‘๋œ URL๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ํ•ด๋‹น ์„œ๋ธ”๋ฆฟ์ด ์ด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  4. ์‘๋‹ต ๋ฐ˜ํ™˜: ์„œ๋ธ”๋ฆฟ์€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ ํ›„, ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๊ฒฐ๊ณผ๋ฅผ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.

Servlet Life-Cycle (์„œ๋ธ”๋ฆฟ ์ƒ๋ช…์ฃผ๊ธฐ)

Servlet์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋Š” Servlet Container(Tomcat, Jetty ๋“ฑ)์— ์˜ํ•ด ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค. Container๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์•„ ์„œ๋ธ”๋ฆฟ์„ ์ƒ์„ฑ, ์ดˆ๊ธฐํ™”, ์š”์ฒญ ์ฒ˜๋ฆฌ, ์†Œ๋ฉธ๊นŒ์ง€์˜ ๋ชจ๋“  ๊ณผ์ •์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ธ”๋ฆฟ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฃผ์š” ๋‹จ๊ณ„๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค:

1. ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด ์ƒ์„ฑ (Instantiation)

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

2. ์ดˆ๊ธฐํ™” (Initialization) - init() ๋ฉ”์„œ๋“œ

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

3. ์š”์ฒญ ์ฒ˜๋ฆฌ (Request Handling) - service() ๋ฉ”์„œ๋“œ

  • ์š”์ฒญ ์ฒ˜๋ฆฌ ๋‹จ๊ณ„:

    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ๋งˆ๋‹ค ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” service() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๋Š” ํ•ต์‹ฌ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
    • service() ๋ฉ”์„œ๋“œ๋Š” ์š”์ฒญ์˜ ํƒ€์ž…(GET, POST ๋“ฑ)์— ๋”ฐ๋ผ doGet(), doPost(), doPut(), doDelete() ๋“ฑ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ํŠน์ง•:

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

4. ์†Œ๋ฉธ (Destruction) - destroy() ๋ฉ”์„œ๋“œ

  • ์†Œ๋ฉธ ๋‹จ๊ณ„:

    • ์„œ๋ธ”๋ฆฟ์ด ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜, ์„œ๋ฒ„๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” destroy() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์„œ๋ธ”๋ฆฟ์„ ์†Œ๋ฉธ์‹œํ‚ต๋‹ˆ๋‹ค.
    • destroy() ๋ฉ”์„œ๋“œ๋Š” ์„œ๋ธ”๋ฆฟ์ด ์ข…๋ฃŒ๋˜๊ธฐ ์ „ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ•˜๊ฑฐ๋‚˜ ์ข…๋ฃŒ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ํ•ด์ œ, ํŒŒ์ผ ๋‹ซ๊ธฐ ๋“ฑ์˜ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ํŠน์ง•:

    • destroy() ๋ฉ”์„œ๋“œ๋Š” ์„œ๋ธ”๋ฆฟ์˜ ์ƒ๋ช…์ฃผ๊ธฐ ๋™์•ˆ ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœ๋˜๋ฉฐ, ํ˜ธ์ถœ๋œ ํ›„ ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋Š” Garbage Collector์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋ฉ๋‹ˆ๋‹ค.

Servlet Life-Cycle์˜ ํŠน์ง•

  1. ์ƒ์„ฑ ๋ฐ ์ดˆ๊ธฐํ™”๋Š” ํ•œ ๋ฒˆ๋งŒ:

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

    • service() ๋ฉ”์„œ๋“œ๋Š” ์—ฌ๋Ÿฌ ๋ฒˆ ํ˜ธ์ถœ๋˜๋ฉฐ, ์„œ๋ธ”๋ฆฟ์€ ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ๋‹จ์ผ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ตœ์ ํ™”ํ•˜๊ณ  ์‘๋‹ต ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐ ๊ธฐ์—ฌํ•ฉ๋‹ˆ๋‹ค.
  3. ์„œ๋ธ”๋ฆฟ ์†Œ๋ฉธ:

    • ์„œ๋ธ”๋ฆฟ์ด ํ•„์š” ์—†์–ด์ง€๋ฉด destroy() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ์ •๋ฆฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ฐ์ฒด๊ฐ€ ์†Œ๋ฉธ๋ฉ๋‹ˆ๋‹ค.

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

GET ๋ฐฉ์‹

GET ๋ฐฉ์‹์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ, ๋ฐ์ดํ„ฐ๋ฅผ URL ๋’ค์— Query String ํ˜•ํƒœ๋กœ ์ „์†กํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋ณดํ†ต URL์— ? ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

1. GET ๋ฐฉ์‹์˜ ํŠน์ง•

  • ๋ฐ์ดํ„ฐ ์ „์†ก ๋ฐฉ์‹: ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ URL ๋’ค์— ๋ถ™์–ด ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, http://example.com/page?name=John&age=30๊ณผ ๊ฐ™์ด URL์— ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ๋…ธ์ถœ: ๋ฐ์ดํ„ฐ๊ฐ€ URL์— ๊ทธ๋Œ€๋กœ ํ‘œ์‹œ๋˜๋ฏ€๋กœ, ๋ณด์•ˆ์ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์บ์‹ฑ: GET ์š”์ฒญ์€ ๋ธŒ๋ผ์šฐ์ €์— ์˜ํ•ด ์บ์‹ฑ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, URL์ด ๊ทธ๋Œ€๋กœ ๋‚จ์•„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด์ „ ์š”์ฒญ์„ ์‰ฝ๊ฒŒ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. GET ๋ฐฉ์‹์˜ ์žฅ์ 

  • ๊ฐ„ํŽธํ•จ: ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์ „์†กํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, URL์„ ์ง์ ‘ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜, ํ•˜์ดํผ๋งํฌ(<a> ํƒœ๊ทธ)์™€ ๊ฐ™์€ ๋งํฌ๋ฅผ ํ†ตํ•ด ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋น ๋ฅธ ์ „์†ก: ๋ฐ์ดํ„ฐ๊ฐ€ URL์— ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅด๊ฒŒ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์— ์ „์†กํ•˜๋Š” ์†๋„๊ฐ€ ๋น ๋ฅด๊ณ  ๊ฐ„๋‹จํ•œ ์š”์ฒญ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  • URL ๊ณต์œ  ๊ฐ€๋Šฅ: URL์„ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•ด์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜, ๋ถ๋งˆํฌ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. GET ๋ฐฉ์‹์˜ ๋‹จ์ 

  • ๋ฐ์ดํ„ฐ ์–‘ ์ œํ•œ: URL์— ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ์ œํ•œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €๋Š” ์•ฝ 2KB(2048๋ฐ”์ดํŠธ) ์ •๋„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณด์•ˆ ์ทจ์•ฝ: URL์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋…ธ์ถœ๋˜๋ฏ€๋กœ, ๋น„๋ฐ€๋ฒˆํ˜ธ๋‚˜ ๊ฐœ์ธ์ •๋ณด ๊ฐ™์€ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ๋ฐ๋Š” ๋ถ€์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ์ˆ˜์ • ๊ฐ€๋Šฅ์„ฑ: ์‚ฌ์šฉ์ž๊ฐ€ URL์„ ์ˆ˜์ •ํ•˜์—ฌ ์ž˜๋ชป๋œ ์š”์ฒญ์„ ๋ณด๋‚ผ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

HTTP GET ์š”์ฒญ ๊ตฌ์กฐ

  1. HTTP Method (HTTP ๋ฉ”์„œ๋“œ):

    • ์œ„์น˜: ์š”์ฒญ์˜ ์ฒซ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.
    • ์„ค๋ช…: GET์€ ์š”์ฒญ ๋ฉ”์„œ๋“œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์„œ๋ฒ„์—์„œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  2. ์„œ๋ฒ„ ์š”์ฒญ Target (์„œ๋ฒ„ ์š”์ฒญ ํƒ€๊ฒŸ):

    • ์œ„์น˜: GET ๋ฉ”์„œ๋“œ ์˜ค๋ฅธ์ชฝ์— ์œ„์น˜ํ•œ /servlet/com.ktds.controller.HelloServlet.
    • ์„ค๋ช…: ์„œ๋ฒ„์—์„œ ์š”์ฒญํ•  ์ž์›์˜ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” HelloServlet์ด๋ผ๋Š” ์„œ๋ธ”๋ฆฟ์„ ์š”์ฒญํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  3. Parameter (ํŒŒ๋ผ๋ฏธํ„ฐ):

    • ์œ„์น˜: ๊ฒฝ๋กœ ๋’ค์— ?๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ถ€๋ถ„ (?user=java&pw=java).
    • ์„ค๋ช…: ์„œ๋ฒ„๋กœ ์ „๋‹ฌ๋˜๋Š” ์ถ”๊ฐ€์ ์ธ ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. ์ด ์˜ˆ์‹œ์—์„œ๋Š” user์™€ pw๋ผ๋Š” ๋‘ ๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  4. HTTP Version (HTTP ๋ฒ„์ „):

    • ์œ„์น˜: ํŒŒ๋ผ๋ฏธํ„ฐ ๋’ค์— ์œ„์น˜ํ•˜๋ฉฐ, HTTP/1.0.
    • ์„ค๋ช…: ์‚ฌ์šฉ๋˜๋Š” HTTP ํ”„๋กœํ† ์ฝœ์˜ ๋ฒ„์ „์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  5. HTTP Request (HTTP ์š”์ฒญ):

    • ์œ„์น˜: GET /servlet/com.ktds.controller.HelloServlet?user=java&pw=java HTTP/1.0.
    • ์„ค๋ช…: ์ „์ฒด์ ์ธ ์š”์ฒญ ๋ผ์ธ์„ ๊ตฌ์„ฑํ•˜๋ฉฐ, ๋ฉ”์„œ๋“œ, ํƒ€๊ฒŸ, ํŒŒ๋ผ๋ฏธํ„ฐ, HTTP ๋ฒ„์ „์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  6. HTTP Header (HTTP ํ—ค๋”):

    • ์œ„์น˜: ์š”์ฒญ ๋ผ์ธ ์•„๋ž˜์˜ ์—ฌ๋Ÿฌ ์ค„์ด ํ—ค๋”์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
    • ์„ค๋ช…: ์š”์ฒญ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ํ—ค๋”๋Š” ๋ธŒ๋ผ์šฐ์ € ์ •๋ณด, MIME ํƒ€์ž…, ์ธ์ฝ”๋”ฉ, ์–ธ์–ด ๋“ฑ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  7. Browser (๋ธŒ๋ผ์šฐ์ € ์ •๋ณด):

    • ์œ„์น˜: ํ—ค๋” ์ค‘์—์„œ Connection, User-Agent, Host๋กœ ํ‘œ์‹œ๋œ ๋ถ€๋ถ„.
    • ์„ค๋ช…: ํด๋ผ์ด์–ธํŠธ์˜ ๋ธŒ๋ผ์šฐ์ €์™€ ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
      • Connection: Keep-Alive๋Š” ์—ฐ๊ฒฐ์„ ์ง€์†ํ•˜๋„๋ก ์š”์ฒญ.
      • User-Agent๋Š” ๋ธŒ๋ผ์šฐ์ €์™€ ์šด์˜์ฒด์ œ๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.
      • Host๋Š” ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์„œ๋ฒ„์˜ ์ฃผ์†Œ์™€ ํฌํŠธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  8. Accepted MIME Types (์ˆ˜๋ฝ ๊ฐ€๋Šฅํ•œ MIME ์œ ํ˜•):

    • ์œ„์น˜: Accept: image/gif, image/x-xbitmap, image/jpeg, image/png, */*.
    • ์„ค๋ช…: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ˆ˜๋ฝํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ˜ํ…์ธ  ์œ ํ˜•์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  9. Accept-Encoding (์ˆ˜๋ฝ ๊ฐ€๋Šฅํ•œ ์ธ์ฝ”๋”ฉ):

    • ์œ„์น˜: Accept-Encoding: gzip.
    • ์„ค๋ช…: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ˆ˜๋ฝํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์ฝ”๋”ฉ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
  10. Accept-Language (์ˆ˜๋ฝ ๊ฐ€๋Šฅํ•œ ์–ธ์–ด):

    • ์œ„์น˜: Accept-Language: kr.
    • ์„ค๋ช…: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ์–ธ์–ด๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  11. Accept-Charset (์ˆ˜๋ฝ ๊ฐ€๋Šฅํ•œ ๋ฌธ์ž ์„ธํŠธ):

    • ์œ„์น˜: Accept-Charset: iso-8859-1,*,utf-8.
    • ์„ค๋ช…: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ˆ˜๋ฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž ์„ธํŠธ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  12. Blank Line (๋นˆ ์ค„):

    • ์œ„์น˜: ํ—ค๋” ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„๊ณผ ๋ณธ๋ฌธ์„ ๊ตฌ๋ถ„ํ•˜๋Š” ๋นˆ ์ค„์ž…๋‹ˆ๋‹ค. (์ด ๊ฒฝ์šฐ GET ์š”์ฒญ์—๋Š” ๋ณธ๋ฌธ์ด ์—†์Šต๋‹ˆ๋‹ค).

POST ๋ฐฉ์‹

POST ๋ฐฉ์‹์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ, ๋ฐ์ดํ„ฐ๋ฅผ HTTP ์š”์ฒญ์˜ ๋ณธ๋ฌธ(body)์— ๋‹ด์•„ ์ „์†กํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด๋Š” GET ๋ฐฉ์‹๊ณผ๋Š” ๋‹ฌ๋ฆฌ URL์—๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

1. POST ๋ฐฉ์‹์˜ ํŠน์ง•

  • ๋ฐ์ดํ„ฐ ์ „์†ก ๋ฐฉ์‹: ๋ฐ์ดํ„ฐ๊ฐ€ URL๊ณผ ๋ถ„๋ฆฌ๋˜์–ด HTTP ํ—ค๋” ๋’ค์˜ ๋ณธ๋ฌธ(body)์— ์ŠคํŠธ๋ฆผ ํ˜•ํƒœ๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. URL์—๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋ณด์•ˆ์„ฑ: ๋ฐ์ดํ„ฐ๊ฐ€ URL์— ๋…ธ์ถœ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ, GET ๋ฐฉ์‹๋ณด๋‹ค ์ƒ๋Œ€์ ์œผ๋กœ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ์ „์†ก๋Ÿ‰ ์ œํ•œ ์—†์Œ: ์ด๋ก ์ ์œผ๋กœ ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์–‘์— ์ œํ•œ์ด ์—†์–ด, ํฐ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. POST ๋ฐฉ์‹์˜ ์žฅ์ 

  • ๋ฐ์ดํ„ฐ ํฌ๊ธฐ ์ œํ•œ ์—†์Œ: URL์— ์ œํ•œ๋˜์ง€ ์•Š๊ณ , HTTP ์š”์ฒญ ๋ณธ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„ ์ „์†กํ•˜๋ฏ€๋กœ ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋„ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณด์•ˆ์„ฑ ํ–ฅ์ƒ: URL์— ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— URL์„ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ๋…ธ์ถœ์ด ์—†๊ณ , ๋ณด์•ˆ์ ์œผ๋กœ GET ๋ฐฉ์‹๋ณด๋‹ค ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก ๊ฐ€๋Šฅ: ๋น„๋ฐ€๋ฒˆํ˜ธ, ๊ฐœ์ธ ์ •๋ณด ๋“ฑ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

3. POST ๋ฐฉ์‹์˜ ๋‹จ์ 

  • ์ „์†ก ์†๋„: ๋ฐ์ดํ„ฐ๋ฅผ ๋ณธ๋ฌธ์— ๋‹ด์•„ ์ „์†กํ•˜๋ฏ€๋กœ, ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์„ ๊ฒฝ์šฐ GET ๋ฐฉ์‹๋ณด๋‹ค ๋Š๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์บ์‹ฑ ๋ถˆ๊ฐ€: POST ์š”์ฒญ์€ ์บ์‹ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋™์ผํ•œ ์š”์ฒญ์„ ๋ฐ˜๋ณตํ•˜๋ ค๋ฉด ์ƒˆ๋กœ ์ „์†กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • URL ๊ณต์œ  ๋ถˆ๊ฐ€: GET ๋ฐฉ์‹๊ณผ ๋‹ฌ๋ฆฌ URL์— ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋งํฌ๋ฅผ ๊ณต์œ ํ•˜์—ฌ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

HTTP POST ์š”์ฒญ ๊ตฌ์กฐ

์ด๋ฏธ์ง€์—์„œ ์„ค๋ช…ํ•˜๋Š” ๋‚ด์šฉ์€ HTTP POST ์š”์ฒญ์˜ ๊ตฌ์กฐ๋กœ, POST ๋ฐฉ์‹์—์„œ์˜ ์š”์ฒญ ๋ฉ”์‹œ์ง€ ๊ฐ ๋ถ€๋ถ„์„ ๊ตฌ์ฒด์ ์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์š”์†Œ๋ฅผ ๊ทธ๋ฆผ์— ํ‘œ์‹œ๋œ ๋‚ด์šฉ์— ๋งž์ถ”์–ด ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

1. HTTP Method (HTTP ๋ฉ”์„œ๋“œ)

  • ์œ„์น˜: ์š”์ฒญ์˜ ์ฒซ ๋ถ€๋ถ„์— ์œ„์น˜ํ•˜๋ฉฐ, POST๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์„ค๋ช…: POST ๋ฉ”์„œ๋“œ๋Š” ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ณ  ์„œ๋ฒ„์—์„œ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต ๋ฐ์ดํ„ฐ๊ฐ€ URL์— ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๊ณ , ์š”์ฒญ์˜ ๋ณธ๋ฌธ์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

2. ์„œ๋ฒ„ ์š”์ฒญ Target (์„œ๋ฒ„ ์š”์ฒญ ํƒ€๊ฒŸ)

  • ์œ„์น˜: POST ๋ฉ”์„œ๋“œ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” /servlet/com.ktds.controller.HelloServlet.
  • ์„ค๋ช…: ์š”์ฒญํ•˜๋Š” ์ž์›์˜ ๊ฒฝ๋กœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์ด ๊ฒฝ์šฐ์—๋Š” HelloServlet์ด๋ผ๋Š” ์„œ๋ธ”๋ฆฟ์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.

3. HTTP Version (HTTP ๋ฒ„์ „)

  • ์œ„์น˜: ํƒ€๊ฒŸ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” HTTP/1.0.
  • ์„ค๋ช…: ์‚ฌ์šฉ ์ค‘์ธ HTTP ํ”„๋กœํ† ์ฝœ์˜ ๋ฒ„์ „์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

4. HTTP Request (HTTP ์š”์ฒญ)

  • ์œ„์น˜: ์š”์ฒญ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„ ์ „์ฒด, ์ฆ‰ POST /servlet/com.ktds.controller.HelloServlet HTTP/1.0.
  • ์„ค๋ช…: ์ „์ฒด์ ์ธ ์š”์ฒญ ๋ผ์ธ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์š”์ฒญ ๋ฉ”์„œ๋“œ, ํƒ€๊ฒŸ, HTTP ๋ฒ„์ „์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

5. HTTP Header (HTTP ํ—ค๋”)

  • ์œ„์น˜: ์š”์ฒญ ๋ผ์ธ ์•„๋ž˜์˜ ์—ฌ๋Ÿฌ ์ค„์ด ํ—ค๋”์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

  • ์„ค๋ช…: ์š”์ฒญ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ € ์ •๋ณด, MIME ํƒ€์ž…, ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹, ์–ธ์–ด ์„ค์ • ๋“ฑ์„ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

    • Connection: Keep-Alive: ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๋„๋ก ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
    • User-Agent: ๋ธŒ๋ผ์šฐ์ €์™€ ์šด์˜์ฒด์ œ๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค (Mozilla/4.76์ด SunOS์—์„œ ์‹คํ–‰ ์ค‘์ž„).
    • Host: ์„œ๋ฒ„์˜ ํ˜ธ์ŠคํŠธ๋ช…๊ณผ ํฌํŠธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค (localhost:8080).

6. Browser (๋ธŒ๋ผ์šฐ์ € ์ •๋ณด)

  • ์œ„์น˜: Connection, User-Agent, Host์™€ ๊ฐ™์€ ํ—ค๋” ํ•ญ๋ชฉ๋“ค.
  • ์„ค๋ช…: ๋ธŒ๋ผ์šฐ์ € ๋ฐ ํด๋ผ์ด์–ธํŠธ์˜ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค.

7. Accepted MIME Types (์ˆ˜๋ฝ ๊ฐ€๋Šฅํ•œ MIME ์œ ํ˜•)

  • ์œ„์น˜: Accept: image/gif, image/x-xbitmap, image/jpeg, image/png, */*.
  • ์„ค๋ช…: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ˆ˜๋ฝํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ˜ํ…์ธ  ์œ ํ˜•์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

8. Accept-Encoding (์ˆ˜๋ฝ ๊ฐ€๋Šฅํ•œ ์ธ์ฝ”๋”ฉ)

  • ์œ„์น˜: Accept-Encoding: gzip.
  • ์„ค๋ช…: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ˆ˜๋ฝํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์ฝ”๋”ฉ ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

9. Accept-Language (์ˆ˜๋ฝ ๊ฐ€๋Šฅํ•œ ์–ธ์–ด)

  • ์œ„์น˜: Accept-Language: kr.
  • ์„ค๋ช…: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ์–ธ์–ด ์„ค์ •์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

10. Accept-Charset (์ˆ˜๋ฝ ๊ฐ€๋Šฅํ•œ ๋ฌธ์ž ์„ธํŠธ)

  • ์œ„์น˜: Accept-Charset: iso-8859-1,*,utf-8.
  • ์„ค๋ช…: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ˆ˜๋ฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž ์„ธํŠธ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

11. Blank Line (๋นˆ ์ค„)

  • ์œ„์น˜: ํ—ค๋”์™€ ๋ณธ๋ฌธ์„ ๊ตฌ๋ถ„ํ•˜๋Š” ๋นˆ ์ค„์ž…๋‹ˆ๋‹ค.
  • ์„ค๋ช…: ์ด ๋นˆ ์ค„์€ HTTP ์š”์ฒญ ํ—ค๋”์™€ ๋ณธ๋ฌธ์„ ๊ตฌ๋ถ„ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

12. Body (๋ณธ๋ฌธ)

  • ์œ„์น˜: ๋งˆ์ง€๋ง‰์— ์œ„์น˜ํ•˜๋ฉฐ, user=java&pw=java๋กœ ํ‘œ์‹œ๋œ ๋ถ€๋ถ„.
  • ์„ค๋ช…: POST ์š”์ฒญ์—์„œ์˜ ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์ด ์˜ˆ์‹œ์—์„œ๋Š” user์™€ pw๋ผ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋ณธ๋ฌธ์— ํฌํ•จ๋˜์–ด ์„œ๋ฒ„๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

GET๊ณผ POST์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€

  1. GET ๋ฐฉ์‹ ์‚ฌ์šฉ ์‚ฌ๋ก€

    • ์ฃผ์†Œ ์ง์ ‘ ์ž…๋ ฅ: ์‚ฌ์šฉ์ž๊ฐ€ ๋ธŒ๋ผ์šฐ์ € ์ฃผ์†Œ์ฐฝ์— ์ง์ ‘ URL์„ ์ž…๋ ฅํ•˜์—ฌ ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ.
    • ํ•˜์ดํผ๋งํฌ ํด๋ฆญ (<a> ํƒœ๊ทธ): <a href="http://example.com/page?name=John">Click here</a>์ฒ˜๋Ÿผ ๋งํฌ๋ฅผ ํ†ตํ•ด ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•  ๋•Œ ์‚ฌ์šฉ.
    • ํผ ๋ฐ์ดํ„ฐ ์ „์†ก (GET): <form method="get">์„ ์‚ฌ์šฉํ•œ ํผ ์ œ์ถœ ์‹œ.
  2. POST ๋ฐฉ์‹ ์‚ฌ์šฉ ์‚ฌ๋ก€

    • ํผ ๋ฐ์ดํ„ฐ ์ „์†ก (POST): <form method="post">๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํผ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์ถœํ•  ๋•Œ. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋กœ๊ทธ์ธ ์ •๋ณด ์ œ์ถœ, ๋Œ“๊ธ€ ์ž‘์„ฑ ๋“ฑ.
    • ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก: ๋กœ๊ทธ์ธ, ํšŒ์› ๊ฐ€์ž…, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—…๋ฐ์ดํŠธ ๋“ฑ ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ „์†กํ•ด์•ผ ํ•  ๋•Œ.

Servlet์˜ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ๋‹จ๊ณ„๋ณ„๋กœ ์„ค๋ช…๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค:

1. Client (์›น ๋ธŒ๋ผ์šฐ์ €) ์š”์ฒญ:

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›น ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ด ์š”์ฒญ์€ HTTP ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์ „๋‹ฌ๋˜๋ฉฐ, ์›น ์„œ๋ฒ„๊ฐ€ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค.

2. Servlet Container์—์„œ isLoaded? ํ™•์ธ:

  • ์›น ์„œ๋ฒ„๋Š” ์š”์ฒญ์„ Servlet Container๋กœ ์ „๋‹ฌํ•˜๊ณ , Servlet Container๋Š” ํ•ด๋‹น Servlet์ด ์ด๋ฏธ ๋กœ๋“œ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

3. Class Loading (ํด๋ž˜์Šค ๋กœ๋”ฉ):

  • Servlet์ด ๋กœ๋“œ๋˜์ง€ ์•Š์€ ์ƒํƒœ๋ผ๋ฉด, Servlet Container๋Š” ํ•ด๋‹น Servlet์˜ ํด๋ž˜์Šค๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

4. Instance Creating (์ธ์Šคํ„ด์Šค ์ƒ์„ฑ):

  • ํด๋ž˜์Šค๊ฐ€ ๋กœ๋“œ๋œ ํ›„ Servlet Container๋Š” ํ•ด๋‹น ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‹ค์ œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

5. init() ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ:

  • ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด, Servlet Container๋Š” init() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ดˆ๊ธฐํ™” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์€ Servlet์ด ์ฒ˜์Œ ๋กœ๋“œ๋  ๋•Œ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

6. Service Thread (์„œ๋น„์Šค ์Šค๋ ˆ๋“œ):

  • ์ดˆ๊ธฐํ™”๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด, ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์„œ๋น„์Šค ์Šค๋ ˆ๋“œ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด ์Šค๋ ˆ๋“œ๋Š” ์‹ค์ œ๋กœ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

7. Invoker์™€ service() ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ:

  • ์„œ๋น„์Šค ์Šค๋ ˆ๋“œ๋Š” service() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. service() ๋ฉ”์„œ๋“œ๋Š” GET, POST ๋“ฑ์˜ HTTP ์š”์ฒญ์— ๋”ฐ๋ผ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

8. ์‘๋‹ต ๋ฉ”์‹œ์ง€ ์ƒ์„ฑ:

  • service() ๋ฉ”์„œ๋“œ๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ ํ›„, ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ผ ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

9. Client๋กœ ์‘๋‹ต ์ „์†ก:

  • ์ตœ์ข…์ ์œผ๋กœ ์ƒ์„ฑ๋œ ์‘๋‹ต์ด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌ๋˜๋ฉฐ, ํด๋ผ์ด์–ธํŠธ๋Š” ์ด ์‘๋‹ต์„ ํ™”๋ฉด์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์ •๋ฆฌ

  1. ์š”์ฒญ ํ”„๋กœํ† ์ฝœ ํ•ด์„ ํ›„ Web Container์— ์ „๋‹ฌ:

    • ์›น ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ ํ”„๋กœํ† ์ฝœ์„ ํ•ด์„ํ•œ ๋’ค, Web Container๋กœ ์š”์ฒญ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  2. HttpServletRequest์™€ HttpServletResponse ๊ฐ์ฒด ์ƒ์„ฑ:

    • Web Container๋Š” ์š”์ฒญ์„ ๋ฐ›์•„ HttpServletRequest์™€ HttpServletResponse ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ, ์š”์ฒญ ์ •๋ณด์™€ ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  3. service ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ argument๋กœ ์ „๋‹ฌ:

    • service() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, HttpServletRequest์™€ HttpServletResponse ๊ฐ์ฒด๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  4. ์‘๋‹ต ๋‚ด์šฉ ์„ค์ • ํ›„ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „๋‹ฌ:

    • ์ฒ˜๋ฆฌ๋œ ์‘๋‹ต์€ ์›น ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ๋กœ ์ „๋‹ฌ๋˜๋ฉฐ, ํด๋ผ์ด์–ธํŠธ์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‘๋‹ต์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

1. String getParameter(String name)

๊ฐœ์š”

  • ์ •์˜:
    String getParameter(String name)
    • name: ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ด๋ฆ„ (ํผ์˜ input ์š”์†Œ์˜ name ์†์„ฑ).
    • ๋ฐ˜ํ™˜ ๊ฐ’: ํ•ด๋‹น ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ฒซ ๋ฒˆ์งธ ๊ฐ’(String). ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์—†์œผ๋ฉด null์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์„ค๋ช…

  • ๋‹จ์ผ ๊ฐ’์„ ๊ฐ–๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ํผ ์ž…๋ ฅ ํ•„๋“œ๋‚˜ URL ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์˜ ํŠน์ • ํ‚ค์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • GET ๋˜๋Š” POST ๋ฐฉ์‹์œผ๋กœ ์ „์†ก๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์—์„œ ๊ฐ€์ ธ์™€ ์ฒ˜๋ฆฌํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ™์€ ์ด๋ฆ„์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ, ์ฒซ ๋ฒˆ์งธ ๊ฐ’๋งŒ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์˜ˆ์ œ

์˜ˆ๋ฅผ ๋“ค์–ด, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํผ์„ ์ œ์ถœํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค:

<form action="/process" method="GET">
    <input type="text" name="username" value="john_doe">
    <input type="submit" value="Submit">
</form>

์„œ๋ธ”๋ฆฟ์—์„œ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์˜ˆ์ œ:

@WebServlet("/process")
public class ParameterExampleServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        // getParameter()๋กœ 'username' ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์„ ๊ฐ€์ ธ์˜ด
        String username = request.getParameter("username"); // "john_doe" ๋ฐ˜ํ™˜
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<h1>Username: " + username + "</h1>");
    }
}

2. String[] getParameterValues(String name)

๊ฐœ์š”

  • ์ •์˜:
    String[] getParameterValues(String name)
    • name: ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ด๋ฆ„ (ํผ์˜ input ์š”์†Œ์˜ name ์†์„ฑ).
    • ๋ฐ˜ํ™˜ ๊ฐ’: ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๋ชจ๋“  ๊ฐ’์ด ๋‹ด๊ธด ๋ฐฐ์—ด. ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์—†์œผ๋ฉด null์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์„ค๋ช…

  • ๋‹ค์ค‘ ๊ฐ’์„ ๊ฐ–๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฒดํฌ๋ฐ•์Šค, ๋‹ค์ค‘ ์„ ํƒ ํ•„๋“œ ๋“ฑ์—์„œ ๋™์ผํ•œ ์ด๋ฆ„์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐ’์ด ์ „์†ก๋  ๋•Œ ๋ชจ๋“  ๊ฐ’์„ ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ๊ฐ’์ด ๊ฐ™์€ ์ด๋ฆ„์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „์†ก๋  ๋•Œ ๋ชจ๋“  ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์–ด ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์˜ˆ์ œ

๋‹ค์Œ์€ ์—ฌ๋Ÿฌ ์ฒดํฌ๋ฐ•์Šค์—์„œ ์„ ํƒ๋œ ๊ฐ’์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค:

<form action="/process" method="POST">
    <input type="checkbox" name="interest" value="sports"> Sports<br>
    <input type="checkbox" name="interest" value="music"> Music<br>
    <input type="checkbox" name="interest" value="movies"> Movies<br>
    <input type="submit" value="Submit">
</form>

์„œ๋ธ”๋ฆฟ์—์„œ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์˜ˆ์ œ:

@WebServlet("/process")
public class ParameterValuesServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
        // getParameterValues()๋กœ 'interest' ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๋ชจ๋“  ๊ฐ’์„ ๊ฐ€์ ธ์˜ด
        String[] interests = request.getParameterValues("interest");

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        if (interests != null) {
            out.println("<h2>Selected Interests:</h2>");
            for (String interest : interests) {
                out.println("<p>" + interest + "</p>"); // ๊ฐ๊ฐ์˜ ์„ ํƒ๋œ ๊ฐ’ ์ถœ๋ ฅ (e.g., Sports, Music ๋“ฑ)
            }
        } else {
            out.println("<h2>No interests selected.</h2>");
        }
    }
}

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

  • getParameter(String name): ๋‹จ์ผ ๊ฐ’๋งŒ ๊ฐ€์ ธ์˜ด. ๊ฐ™์€ ์ด๋ฆ„์˜ ์—ฌ๋Ÿฌ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์žˆ์„ ๋•Œ ์ฒซ ๋ฒˆ์งธ ๊ฐ’๋งŒ ๋ฐ˜ํ™˜.
  • getParameterValues(String name): ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ์ „๋‹ฌ๋œ ๋ชจ๋“  ๊ฐ’์„ ๋ฐฐ์—ด๋กœ ๊ฐ€์ ธ์˜ด. ์—ฌ๋Ÿฌ ๊ฐ’์˜ ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉ.

์ฃผ์˜์‚ฌํ•ญ

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

Servlet์€ Presentation Layer์™€ Controller ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ค‘์š”ํ•œ ๊ตฌ์„ฑ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ์ด ์—ญํ• ์„ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์„ค๋ช…๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

Servlet์˜ ์—ญํ• 

  1. Presentation Layer (ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต):

    • ์„ค๋ช…: Presentation Layer๋Š” ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๊ณ„์ธต์œผ๋กœ, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์ฃผ๋กœ ํ™”๋ฉด์„ ํ‘œ์‹œํ•˜๊ณ , ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ฐ›์•„ ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
    • Servlet์˜ ์—ญํ• : Servlet์€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์•„ ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ HTML, JSON ๋“ฑ์˜ ํ˜•ํƒœ๋กœ ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ: ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ ํผ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์ œ์ถœํ•˜๋ฉด, Servlet์ด ์ด ์š”์ฒญ์„ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•œ ํ›„, ๋กœ๊ทธ์ธ ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  2. Controller (์ปจํŠธ๋กค๋Ÿฌ):

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

Adapter Pattern ์„ค๋ช…

Adapter Pattern (์–ด๋Œ‘ํ„ฐ ํŒจํ„ด)์€ ์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜๋กœ, ์„œ๋กœ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ง„ ํด๋ž˜์Šค๋“ค์ด ํ•จ๊ป˜ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ธฐ์กด ์ฝ”๋“œ์˜ ์ˆ˜์ • ์—†์ด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜, ์„œ๋กœ ๋‹ค๋ฅธ ํด๋ž˜์Šค ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

Adapter Pattern์˜ ๊ฐœ๋…

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

Adapter Pattern์˜ ๊ตฌ์กฐ

Adapter Pattern์€ ์ฃผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค:

  1. Target (๋ชฉํ‘œ ์ธํ„ฐํŽ˜์ด์Šค):

    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  2. Client (ํด๋ผ์ด์–ธํŠธ):

    • Target ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์–ด๋Œ‘ํ„ฐ์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ์–ด๋Œ‘ํ„ฐ๊ฐ€ ๊ธฐ์กด์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งž์ถฐ์ฃผ๋Š”์ง€ ์ธ์ง€ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.
  3. Adaptee (์ ์‘ ๋Œ€์ƒ, ๊ธฐ์กด ํด๋ž˜์Šค):

    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜์ง€๋งŒ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ธฐ์กด์˜ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ๊ธฐ๋Œ€์™€ ๋งž์ง€ ์•Š์•„์„œ ์ง์ ‘ ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
  4. Adapter (์–ด๋Œ‘ํ„ฐ ํด๋ž˜์Šค):

    • Adaptee์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ Target ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ์–ด๋Œ‘ํ„ฐ๋ฅผ ํ†ตํ•ด Adaptee์˜ ๊ธฐ๋Šฅ์„ ํ˜ธ์ถœํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Adapter Pattern ๋™์ž‘ ์˜ˆ์‹œ

๋‹ค์Œ์€ Adapter Pattern์˜ ๋™์ž‘ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ ์‹œ๋‚˜๋ฆฌ์˜ค:

  • ํด๋ผ์ด์–ธํŠธ๋Š” Target ์ธํ„ฐํŽ˜์ด์Šค์˜ request() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๋˜ Adaptee ํด๋ž˜์Šค๋Š” specificRequest()๋ผ๋Š” ๋ฉ”์„œ๋“œ๋งŒ ์ œ๊ณตํ•˜๊ณ  ์žˆ์–ด, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Adapter Pattern ๊ตฌํ˜„ ์˜ˆ์ œ:

  1. Target ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜:

    // ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค
    interface Target {
        void request();
    }
  2. Adaptee ํด๋ž˜์Šค ์ •์˜:

    // ๊ธฐ์กด ํด๋ž˜์Šค, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ํ˜•ํƒœ
    class Adaptee {
        void specificRequest() {
            System.out.println("Specific request executed.");
        }
    }
  3. Adapter ํด๋ž˜์Šค ๊ตฌํ˜„:

    // ์–ด๋Œ‘ํ„ฐ ํด๋ž˜์Šค, Target ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ Adaptee๋ฅผ ๊ฐ์‹ธ๋Š” ์—ญํ• ์„ ํ•จ
    class Adapter implements Target {
        private Adaptee adaptee;
    
        // Adaptee ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ํ†ตํ•ด ์‚ฌ์šฉ
        public Adapter(Adaptee adaptee) {
            this.adaptee = adaptee;
        }
    
        // ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด์„œ Adaptee์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœ
        @Override
        public void request() {
            // Adaptee์˜ ๊ธฐ๋Šฅ์„ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ˜ธ์ถœ
            adaptee.specificRequest();
        }
    }
  4. ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ ์‚ฌ์šฉ ์˜ˆ์ œ:

    public class AdapterPatternDemo {
        public static void main(String[] args) {
            // ๊ธฐ์กด์˜ Adaptee ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
            Adaptee adaptee = new Adaptee();
            
            // ์–ด๋Œ‘ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด Target ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉ
            Target target = new Adapter(adaptee);
            
            // ํด๋ผ์ด์–ธํŠธ๋Š” Target ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœ
            target.request();  // Output: Specific request executed.
        }
    }

๋™์ž‘ ์„ค๋ช…

  1. ํด๋ผ์ด์–ธํŠธ๋Š” Target ์ธํ„ฐํŽ˜์ด์Šค์˜ request() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  2. Adapter๋Š” Target ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ Adaptee ํด๋ž˜์Šค์˜ specificRequest()๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  3. Adaptee์˜ specificRequest()๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด์„œ, ์‹ค์ œ ๊ธฐ๋Šฅ์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  4. ์ด๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ๋Š” Target ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๊ธฐ์กด ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Adapter Pattern์˜ ์žฅ์ 

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

Adapter Pattern์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€

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

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