[๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ปTA9 ์ธํ„ด 16์ผ์ฐจ] JPA, Springboot ๋™์ž‘์›๋ฆฌ

Goofiยท2023๋…„ 8์›” 2์ผ
0

JPA(Java Persistence API)

  • JPA๋Š” Java Persistence API์ด๋‹ค.
  • JPA๋Š” ORM ๊ธฐ์ˆ ์ด๋‹ค.
  • JPA๋Š” ๋ฐ˜๋ณต์ ์ธ CRUD ์ž‘์—…์„ ์ƒ๋žตํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.
  • JPA๋Š” ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • JPA๋Š” DB์™€ OOP์˜ ๋ถˆ์ผ์น˜์„ฑ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•๋ก ์„ ์ œ๊ณตํ•œ๋‹ค. (DB๋Š” ๊ฐ์ฒด์ €์žฅ ๋ถˆ๊ฐ€๋Šฅ)
  • JPA๋Š” OOP์˜ ๊ด€์ ์—์„œ ๋ชจ๋ธ๋ง์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. (์ƒ์†, ์ฝคํฌ์ง€์…˜, ์—ฐ๊ด€๊ด€๊ณ„)
  • ๋ฐฉ์–ธ ์ฒ˜๋ฆฌ๊ฐ€ ์šฉ์ดํ•˜์—ฌ Migrationํ•˜๊ธฐ ์ข‹์Œ. ์œ ์ง€๋ณด์ˆ˜์—๋„ ์ข‹์Œ.
  • JPA๋Š” ์‰ฝ์ง€๋งŒ ์–ด๋ ต๋‹ค.

JPA๋Š” Java Persistence API์ด๋‹ค.

์˜์†์„ฑ(persistence)๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•œ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰์ด ์ข…๋ฃŒ๋˜๋”๋ผ๋„ ์‚ฌ๋ผ์ง€์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ์˜ ํŠน์„ฑ์„ ์˜๋ฏธํ•œ๋‹ค. ์˜์†์„ฑ์€ ํŒŒ์ผ ์‹œ์Šคํ…œ, ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ˜น์€ ๊ฐ์ฒด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“ฑ์„ ํ™œ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค

ํ”„๋กœํ† ์ฝœ

JPA๋Š” ORM ๊ธฐ์ˆ ์ด๋‹ค.


ํŒŒ๋ž€์ƒ‰์ˆœ์„œ๊ฐ€ ORM

JPA๋Š” ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

์˜์†์„ฑ : ๋ฐ์ดํ„ฐ -> ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅ
์ปจํ…์ŠคํŠธ๋ž€?
๋Œ€์ƒ์— ๋Œ€ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

์ฆ‰, ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ž€ ์ž๋ฐ”๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ selectํ•ด์„œ ๊ฐ€์ ธ์˜ค๋Š” ์ผ๋ จ์˜ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ํ†ตํ•ด์„œ ๋ชจ๋‘ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

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

JPA๋Š” OOP์˜ ๊ด€์ ์—์„œ ๋ชจ๋ธ๋ง์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. (์ƒ์†, ์ฝคํฌ์ง€์…˜, ์—ฐ๊ด€๊ด€๊ณ„)

Springboot ๋™์ž‘์›๋ฆฌ

1. ๋‚ด์žฅ ํ†ฐ์ผ“์„ ๊ฐ€์ง„๋‹ค.

โ—๏ธ๋‚ด์žฅ ํ†ฐ์ผ“์„ ์•Œ๊ธฐ์ „ socket๊ณผ httpํ†ต์‹ ์— ๋Œ€ํ•ด์„œ ์ง‘๊ณ  ๋„˜์–ด๊ฐ€๊ธฐ


socket

์šด์˜์ฒด์ œ์— ๋‚ด์žฅ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.
โ—๏ธํ†ฐ์ผ“์„ ๋”ฐ๋กœ ์„ค์น˜ํ•  ํ•„์š” ์—†์ด ๋ฐ”๋กœ ์‹คํ–‰๊ฐ€๋Šฅํ•˜๋‹ค.

์†Œ์ผ“ ํ†ต์‹ ์ด๋ž€)
B๊ฐ€ A๋ž‘ ํ†ต์‹ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด IP์ฃผ์†Œ์™€ 5000๋ฒˆ ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ ๋„ฃ์–ด์„œ ์—ฐ๊ฒฐ์„ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ, 5000๋ฒˆ ํฌํŠธ๋Š” ์—ฐ๊ฒฐ์˜ ์šฉ๋„์ด๊ณ  ๋‹ค๋ฅธ ํฌํŠธ๋ฒˆํ˜ธ(5001๋ฒˆ)๊ฐ€ ๋งŒ๋“ค์–ด์ ธ์„œ ์—ฐ๊ฒฐ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋˜ 5001๋ฒˆ๊ณผ B๊ฐ€ ์—ฐ๊ฒฐ(ํ†ต์‹ )๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ์ž์›์„ 5001๋ฒˆ์ด ์‚ฌ์šฉํ•œ๋‹ค. ๋•Œ๋ฌธ์— 5000๋ฒˆ์ด ์—ฐ๊ฒฐ์„ ๋ฐ›์„ ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— 5001๋ฒˆ์— ์Šค๋ ˆ๋“œ๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ๊ณ  5000๋ฒˆ์—๋Š” main ์Šค๋ ˆ๋“œ๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค. ๊ทธ๋Ÿฌ๋ฉด
C๊ฐ€ A๋ž‘ ํ†ต์‹ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋˜ 5002๋ฒˆ ํฌํŠธ๋ฒˆํ˜ธ์— ์Šค๋ ˆ๋“œ2๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์–ด ํ†ต์‹ ํ•˜๋ฉด ๋œ๋‹ค.

์ด๊ฒŒ ์†Œ์ผ“ ํ†ต์‹ ์ด๋‹ค. ์†Œ์ผ“ํ†ต์‹ ์„ ์ œ๋Œ€๋กœ ์•Œ๋ ค๋ฉด ์Šค๋ ˆ๋“œ ๊ฐœ๋…์„ ์•Œ์•„์•ผ๋œ๋‹ค.

์žฅ์ )
Socket ํ†ต์‹ ์˜ ์žฅ์ ์€ ์—ฐ๊ฒฐ์ด ๊ณ„์†๋˜์–ด์žˆ๋‹ค.

๋‹จ์ )
์ง€์†์—ฐ๊ฒฐ ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€ํ™”๊ฐ€ ์ปค์„œ ๋Š๋ ค์งˆ ์ˆ˜ ์žˆ๋‹ค.

ํ•ด๊ฒฐ๋ฐฉ๋ฒ•)
http ํ†ต์‹ ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

http

  • http ํ†ต์‹ ์€ ์—ฐ๊ฒฐ์„ ์ง€์†ํ•˜์ง€ ์•Š๊ณ  Stateless ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • http ํ†ต์‹ ์€ ๋‹จ์ˆœํ•˜๊ฒŒ ๋ฌธ์„œ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ํ†ต์‹ ์ด๋‹ค.
  • http๋Š” ์šด์˜์ฒด์ œ๊ฐ€ ๋“ค๊ณ  ์žˆ๋Š” ์†Œ์ผ“์ด๋ผ๋Š” ์–˜๋ฅผ ์ด์šฉํ•ด์„œ ๋งŒ๋“ค์–ด์กŒ๋‹ค.
  • http๊ธฐ๋ฐ˜์€ ์†Œ์ผ“์ด๋‹ค.

  • http ์›น ์„œ๋ฒ„๋Š” ๊ฐ‘์ด๋‹ค. ์„์ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • URL์€ ์ž์›์„ ์š”์ฒญํ•˜๋Š” ์ฃผ์†Œ์ด๋‹ค.
  • http์—์„œ ๊ฐ‘์€ ์„์˜ IP์ฃผ์†Œ๋ฅผ ๋ชจ๋ฅธ๋‹ค. ์„์˜ ์ฃผ์†Œ๋ฅผ ์•Œ๋ ค๋ฉด ์†Œ์ผ“์„ ์จ์•ผ ํ•œ๋‹ค. ์†Œ์ผ“ ํ†ต์‹ ์€ ์—ฐ๊ฒฐ์ด ์ง€์†๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

    ์š”์ฒญ์‹œ๋งˆ๋‹ค ๋ณ€ํ•˜๋Š” ์ž์›(๋™์ )์ด ์•„๋‹ˆ๋ผ ์ •์ ์ด๋‹ค. ์ด๊ฒŒ ์›น์„œ๋ฒ„์ด๋‹ค.

ํ†ฐ์ผ“

์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผ ํ•˜๊ณ  html ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ์•„ํŒŒ์น˜ํ•œํ…Œ ๋Œ๋ ค ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

์›น์„œ๋ฒ„ = ์•„ํŒŒ์น˜
์›น์„œ๋ฒ„๋Š” ํ”ํžˆ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๊ฒŒ ์•„ํŒŒ์น˜๋ผ๋Š” ์›น์„œ๋ฒ„์ด๋‹ค.

์•„ํŒŒ์น˜๋Š” ์ž๋ฐ”์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ž๋ฐ”์ฝ”๋“œ ์š”์ฒญ์‹œ์— ์‘๋‹ตํ•˜์ง€ ๋ชปํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์š”๊ธฐ์— ์•„ํŒŒ์น˜์— ํ†ฐ์ผ“์ด๋ผ๋Š” ์–˜๋ฅผ ๋‹ฌ์•„์ค€๋‹ค. ํ†ฐ์ผ“์ด๋ผ๋Š” ์• ๋ฅผ ๋‹ฌ๋ฉด ์•„ํŒŒ์น˜๊ฐ€ ์ž๊ธฐ๊ฐ€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ์–ด๋–ค ํŒŒ์ผ์— ๋Œ€ํ•œ ์š”์ฒญ์ด ์˜ค๋ฉด ์ œ์–ด๊ถŒ์„ ํ†ฐ์ผ“์— ๋„˜๊ฒจ๋ฒ„๋ฆฐ๋‹ค. ๊ทธ๋ž˜์„œ ํ†ฐ์ผ“์€ .JSPํŒŒ์ผ ์•ˆ์— ์žˆ๋Š” ์ž๋ฐ”์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜๊ณ  ์ปดํŒŒ์ผ์ด ๋๋‚˜๋ฉด ์ปดํŒŒ์ผ์ด ๋๋‚œ ๋ฐ์ดํ„ฐ๋ฅผ .html ํŒŒ์ผ์—๋‹ค๊ฐ€ ๋ฎ์–ด ์“ด๋‹ค.

์ฆ‰, ์•„ํŒŒ์น˜๋Š” ํ•ด๋‹น .htmlํŒŒ์ผ์„ ์‘๋‹ตํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

์›น ๋ธŒ๋ผ์šฐ์ €๋Š” html, js, css ํŒŒ์ผ์„ ์ฝ์–ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. ์ž๊ธฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์—†๋Š” ํ™•์žฅ์ž๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ์žฌ๊ธฐ๋Šฅ์„ ํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด๋‹ค.


2. ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ

Service(HttpServletRequest, HttpServletResponse)๋Š” ํƒ์ผ“์ด ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฐ์ฒด์ด๋‹ค.

์„œ๋ธ”๋ฆฟ(Servlet)์ด๋ž€ ๋™์  ์›น ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฐ” ๊ธฐ๋ฐ˜์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ ์ด๋‹ค. ์„œ๋ธ”๋ฆฟ์€ ์›น ์š”์ฒญ๊ณผ ์‘๋‹ต์˜ ํ๋ฆ„์„ ๊ฐ„๋‹จํ•œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ๋งŒ์œผ๋กœ ์ฒด๊ณ„์ ์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

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

์ •์ ๊ณผ ๋™์  ์›นํŽ˜์ด์ง€ ์ฐจ์ด

์›น ํŽ˜์ด์ง€๋Š” ํฌ๊ฒŒ ์ •์ (Static)๊ณผ ๋™์ (Dyanamic)์œผ๋กœ ๋‚˜๋‰œ๋‹ค. ์ •์ ๊ณผ ๋™์ ์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด๋Š” ์ด๋ฏธ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” ๋ฌธ์„œ๋งŒ์„ ์„œ๋น„์Šคํ•  ๊ฒƒ์ด๋ƒ ์•„๋‹ˆ๋ƒ์˜ ์ฐจ์ด์ด๋‹ค. ์ •์ ์€ ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ๋งŒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๊ณ  ๋™์ ์€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ •๋ณด๋ฅผ ๊ฐ€๊ณต ์ฒ˜๋ฆฌํ•˜์—ฌ ์„œ๋น„์Šคํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋™์ ์ธ ์›น ํŽ˜์ด์ง€๋Š” ์ฃผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„์™€ ์—ฐ๋™ํ•˜์—ฌ ์›น ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค.

์ฐธ๊ณ ๋ธ”๋กœ๊ทธ

URL

Spring์€ ์ง์ ‘์ ์ธ ์ž์›์— ์š”์ฒญ์„ ํ•  ์ˆ˜ ์—†๋‹ค.
Spring์€ ์‹๋ณ„์ž๋ฅผ ํ†ตํ•ด์„œ ์š”์ฒญ์„ ํ•ด์•ผ๋œ๋‹ค.
URL : ์ž์› ์ ‘๊ทผ X
URI : ์‹๋ณ„์ž ์ ‘๊ทผ

URL์ ‘๊ทผ๋ฐฉ์‹์€ Spring์—์„œ๋Š” ๋‹ค ๋ง‰์•˜๋‹ค.

์ฆ‰, ์‹๋ณ„์ž๋ฅผ ํ†ตํ•ด์„œ ์š”์ฒญ์„ ํ•ด์•ผ๋œ๋‹ค. ํŠน์ •ํ•œ ํŒŒ์ผ ์š”์ฒญ์„ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—
์š”์ฒญ ์‹œ์—๋Š” ๋ฌด์กฐ๊ฑด ์ž๋ฐ”๋ฅผ ๊ฑฐ์ณ์•ผ๋œ๋‹ค.

URL ์ฃผ์†Œ ํ˜•ํƒœ

http://naver.com/a.png

URI ์ฃผ์†Œ ํ˜•ํƒœ

http://naver.com/picture/a


20๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์žˆ๊ณ  21๋ฒˆ์งธ ์š”์ฒญ์„ ํ–ˆ์„ ๋•Œ ๋นˆ ์Šค๋ ˆ๋“œ๊ฐ€ ์—†๋‹ค๋ฉด ๋Œ€๊ธฐํ•œ๋‹ค. 1๋ฒˆ ์Šค๋ ˆ๋“œ๊ฐ€ ์‘๋‹ต์„ ํ•˜๊ณ  ์ž‘์—…์ด ๋๋‚˜๋ฉด ์‚ฌ๋ผ์ง€๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ 21๋ฒˆ์งธ ์š”์ฒญ์— ์žฌ์‚ฌ์šฉ๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋นจ๋ผ์ง„๋‹ค.

3. web.xml

  • ServletContext์˜ ์ดˆ๊ธฐ ํŒŒ๋ผ๋ฏธํ„ฐ
  • Session์˜ ์œ ํšจ์‹œ๊ฐ„ ์„ค์ •
  • Servlet/JSP์— ๋Œ€ํ•œ ์ •์˜
  • Servlet/JSP ๋งคํ•‘
  • Mime Type ๋งคํ•‘
  • Welcome File list
  • Error Pages ์ฒ˜๋ฆฌ
  • ๋ฆฌ์Šค๋„ˆ/ํ•„ํ„ฐ ์„ค์ •
  • ๋ณด์•ˆ

์—ฌ๊ธฐ์—์„œ Servlet/JSP ๋งคํ•‘์‹œ(web.xml์— ์ง์ ‘ ๋งคํ•‘ or @WebServlet ์–ด๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉ)์— ๋ชจ๋“  ํด๋ž˜์Šค์— ๋งคํ•‘์„ ์ ์šฉ์‹œํ‚ค๊ธฐ์—๋Š” ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๋ณต์žกํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์— FrontController ํŒจํ„ด์„ ์ด์šฉํ•จ.

ServletContext์˜ ์ดˆ๊ธฐ ํŒŒ๋ผ๋ฏธํ„ฐ

web.xml ์„ ๋ญ๋กœ ๋ณด๋ฉด ๋˜๋ƒ๋ฉด?
๋ฌธ์ง€๊ธฐ๊ฐ€ web.xml์ด๋‹ค.


์ดˆ๊ธฐํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ํ•œ๋ฒˆ ์„ค์ •ํ•˜๋ฉด ์–ด๋””์„œ๋“  ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

Session์˜ ์œ ํšจ์‹œ๊ฐ„ ์„ค์ •

Servlet/JSP์— ๋Œ€ํ•œ ์ •์˜ ๋ฐ ๋งคํ•‘


a๊ฐ€ '๋‹ค'๋ฅผ ๋“ค๊ณ ์˜ค๋ฉด ๋ฌธ์ง€๊ธฐ(web.xml)๋Š” ์„œ์šธ ์šฉ์‚ฐ๊ตฌ๋กœ ๊ฐ€๋ฉด๋œ๋‹ค๊ณ  ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

'๋‹ค'๋Š” ์„œ์šธ ์šฉ์‚ฐ๊ตฌ๋กœ ์ •์˜๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ์ชฝ์— ๋งคํ•‘ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

Mime Type ๋งคํ•‘

b๋Š” ์•„๋ฌด๊ฒƒ๋„ ์•ˆ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฒŒ get๋ฐฉ์‹(select)์ด๋‹ค.
a๊ฐ€ ์Œ€์ด๋ผ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ฌธ์ง€๊ธฐ๊ฐ€ Mime Type์ด ๋ญ์•ผ? ํ•˜๋ฉด ์Œ€์ด์—์š” ํ•˜๋ฉด ์Œ€์ฐฝ๊ณ ๋กœ ๋ณด๋‚ธ๋‹ค. ์Œ€์ฐฝ๊ณ ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์„œ ์šฐ๋ฆฌ๋‚˜๋ผ์—์„œ ์žˆ์„์ง€ ์—†์„์ง€ ํŒ๋‹จํ•˜๊ณ  ๋จน์„ ์ˆ˜ ์žˆ์œผ๋ฉด ๊ฐ€๊ณตํ•œ๋‹ค.

get๋ฐฉ์‹์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค์ง€ ์•Š๋Š”๋‹ค.

Mime Type์„ ์•Œ์•„์•ผํ•œ๋‹ค. ์™œ? ์–ด๋–ค ๋ฌผ๊ฑด์„ ๋“ค๊ณ ์˜ค๋Š”์ง€ ์•Œ์•„์•ผ์ง€ ์Œ€์„ ์–ด๋””๋กœ ๋ณด๋‚ด์•ผ ํ• ์ง€ ์•ˆ๋‹ค.

๊ฒฐ๋ก ) Mime Type์€ ๋‚ด๊ฐ€ ๋“ค๊ณ ์˜ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ญ”์ง€๋ฅผ ์•Œ๋ ค์ฃผ๋Š”๊ฑฐ ๊ฒƒ์ด๋‹ค.

Welcome File list


์•„๋ฌด ์ด์œ ์—†์ด ๋“ค์–ด์˜จ ์• ๋“ค์€ ๊ด‘์žฅ์œผ๋กœ ๋ณด๋‚ด๋ผ๋Š”๊ฒŒ Welcom File list์ด๋‹ค.

FrontController ํŒจํ„ด

์ตœ์ดˆ ์•ž๋‹จ์—์„œ request ์š”์ฒญ์„ ๋ฐ›์•„์„œ ํ•„์š”ํ•œ ํด๋ž˜์Šค์— ๋„˜๊ฒจ์ค€๋‹ค. ์™œ? web.xml์— ๋‹ค ์ •์˜ํ•˜๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ํž˜๋“ฌ.

์ด๋•Œ ์ƒˆ๋กœ์šด ์š”์ฒญ์ด ์ƒ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— request์™€ response๊ฐ€ ์ƒˆ๋กญ๊ฒŒ new๋  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์•„๋ž˜์˜ RequestDispatch๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

.do(ํŠน์ • ์ฃผ์†Œ) ๋“ค์–ด์˜ค๋ฉด FrontController๋กœ ๋ณด๋‚ด๋ผ๋Š” ์•ฝ์†์˜ ์ฝ”๋“œ๋ฅผ ์ง ๋‹ค ์–ด๋””์—? web.xml์— ์จ๋†“๋Š”๋‹ค.

์š”์ฒญํ•œ ์‚ฌ๋žŒ๋“ค์˜ ์ •๋ณด๋“ค์˜ ๋”ฐ๋ผ์„œ response๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค. ํƒ์ผ“์ด ๋งŒ๋“ค์–ด์ค€๋‹ค.

web.xml์— JSP/servlet ๋งคํ•‘์ด ๋„ˆ๋ฌด ๋งŽ์œผ๋ฉด ์ด๋Ÿฐ ํŠน์ • ์ฃผ์†Œ๋ฅผ FrontController๊ฐ€ ์ฒ˜๋ฆฌํ•œ๋‹ค.

RequestDispatcher

ํ•„์š”ํ•œ ํด๋ž˜์Šค ์š”์ฒญ์ด ๋„๋‹ฌํ–ˆ์„ ๋•Œ FrontController์— ๋„์ฐฉํ•œ request์™€ response๋ฅผ ๊ทธ๋Œ€๋กœ ์œ ์ง€์‹œ์ผœ์ค€๋‹ค.
์ด๊ฑฐ๋ฅผ ์ด์šฉํ•ด์•ผ์ง€ ํŽ˜์ด์ง€๊ฐ„ ๋ฐ์ดํ„ฐ ์ด๋™์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

DispatchServlet

FrontController ํŒจํ„ด์„ ์ง์ ‘์งœ๊ฑฐ๋‚˜ RequestDispatcher๋ฅผ ์ง์ ‘๊ตฌํ˜„ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์Šคํ”„๋ง์—๋Š” DispatchServlet์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. DispatchServlet์€ FrontController ํŒจํ„ด + RequestDispatcher์ด๋‹ค.

DispatchServlet์ด ์ž๋™์ƒ์„ฑ๋˜์–ด ์งˆ ๋•Œ ์ˆ˜ ๋งŽ์€ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ(IoC)๋œ๋‹ค. ๋ณดํ†ต ํ•„ํ„ฐ๋“ค์ด๋‹ค. ํ•ด๋‹น ํ•„ํ„ฐ๋“ค์€ ๋‚ด๊ฐ€ ์ง์ ‘ ๋“ฑ๋กํ•  ์ˆ˜๋„ ์žˆ๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•„์š”ํ•œ ํ•„ํ„ฐ๋“ค์€ ์ž๋™ ๋“ฑ๋ก ๋˜์–ด์ง„๋‹ค.

profile
์˜ค๋Š˜๋ณด๋‹จ ๋‚ด์ผ์ด ๊ฐ•ํ•œ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค!!๐Ÿง‘๐Ÿปโ€๐Ÿ’ป

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

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด