Skip to content

๐Ÿƒ ๋งŒ๋“ค๋ฉด์„œ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง

Notifications You must be signed in to change notification settings

spring-server/spring-server-yui

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

12 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿƒ Spring ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ

ํ•ด๋‹น ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋Š” ์ž๋ฐ” ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ Next Step์„ ์ฐธ์กฐํ•ด ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

html/css๋Š” ํ•ด๋‹น ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ฐธ์กฐํ–ˆ์Šต๋‹ˆ๋‹ค.




Step1. ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์ „์†ก๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์‹ฑํ•ด ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.

  • ์š”์ฒญ์— ๋งž๋Š” ์ •์  ํŽ˜์ด์ง€๋ฅผ ๋ธŒ๋ผ์šฐ์ €์— ์ „๋‹ฌํ•œ๋‹ค.
  • Http ๋ฉ”์‹œ์ง€ ํŒŒ์‹ฑํ•ด์„œ HttpRequest ๊ฐ์ฒด๋กœ ๋งŒ๋“ค๊ธฐ
  • URI์™€ HTTP ๋ฉ”์†Œ๋“œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋งคํ•‘ํ•œ๋‹ค.
  • ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ํŒจํ„ด์„ ์ ์šฉํ•ด์„œ ์š”์ฒญ ์ฒ˜๋ฆฌ
  • ์š”์ฒญ์— ๋”ฐ๋ฅธ ์‘๋‹ต์„ ๋ธŒ๋ผ์šฐ์ €์— ์ „๋‹ฌํ•ด ์ •์  ํŽ˜์ด์ง€๋ฅผ ํ™”๋ฉด์— ๋„์šด๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด๋ถ€ ์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.



๐Ÿ“ฆ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ

.
โ”œโ”€โ”€ app
โ”‚ย ย  โ””โ”€โ”€ core
โ””โ”€โ”€ framework
    โ”œโ”€โ”€ RequestHandler.java
    โ”œโ”€โ”€ annotation
    โ”œโ”€โ”€ context
    โ”œโ”€โ”€ core
    โ”œโ”€โ”€ http
    โ”œโ”€โ”€ servlet
    โ”œโ”€โ”€ util
    โ”œโ”€โ”€ utils
    โ””โ”€โ”€ view

ํ”„๋กœ์ ํŠธ๋Š” ํฌ๊ฒŒ app, framework ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋‰˜์–ด์ง‘๋‹ˆ๋‹ค. app์ด framework์— ์˜์กดํ•˜๊ณ  framework๋Š” app์— ์˜์กดํ•˜์ง€ ์•Š๋„๋ก ํ•˜์—ฌ ์˜์กด์„ฑ ์‚ฌ์ดํด์„ ์—†์• ๊ณ ์ž ํ–ˆ์Šต๋‹ˆ๋‹ค.




๐Ÿ“ Http ๋ฉ”์‹œ์ง€์˜ start-line, ํ‘œํ˜„ ํ—ค๋”(respresentation header), ๋ฐ”๋””(body)

HTTP ํ”„๋กœํ† ์ฝœ์— ๋งž๊ฒŒ ํด๋ผ์ด์–ธํŠธ์™€ ํ†ต์‹ ํ•˜๋ ค๋ฉด ์š”์ฒญ์˜ HTTP ๋ฉ”์‹œ์ง€๋ฅผ ํ•ด์„ํ•˜๊ณ  ์ด์— ๋Œ€ํ•œ ์‘๋‹ต์„ HTTP ๋ฉ”์‹œ์ง€๋กœ ์ƒ์„ฑํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „์†กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด ๊ณต๋ถ€ํ•œ ์ฃผ์š” ํ‘œํ˜„ ํ—ค๋”๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Content-Length : HTTP ๋ฐ”๋””์˜ ํฌ๊ธฐ์ด๊ณ , ๋‹จ์œ„๋Š” byte์ž…๋‹ˆ๋‹ค.
  • Content-Type : ๋ฆฌ์†Œ์Šค์˜ media type์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. HTTP ์‘๋‹ต์—์„œ Content-Type ํ—ค๋”๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‹ค์ œ ์ปจํ…์ธ  ํƒ€์ž…์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์‘๋‹ต ํ‘œํ˜„ ํ—ค๋”์—์„œ ์ ์ ˆํ•œ Content-Type์„ ์„ค์ •ํ•˜์ง€ ์•Š์•„ ํ™”๋ฉด์— css๊ฐ€ ๋ฐ˜์˜๋˜์ง€ ์•Š๋Š” ์ด์Šˆ๋ฅผ ๊ฒช์—ˆ์Šต๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฆฌ์†Œ์Šค์˜ MediaType์„ ํ•ด์„ํ•˜๊ณ  ์ ์ ˆํ•œ ํ™”๋ฉด์„ ๋„์›Œ์ฃผ๊ธฐ ์œ„ํ•ด์„œ ๋ฐ˜๋“œ์‹œ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Location : ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ(redirect)ํ•  ํŽ˜์ด์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์‘๋‹ต ํ—ค๋”์ž…๋‹ˆ๋‹ค. HTTP ์ƒํƒœ ์ฝ”๋“œ๊ฐ€ 300๋ฒˆ๋Œ€ ์ผ๋•Œ๋งŒ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์‘๋‹ตํ—ค๋”๋Š” ํšŒ์›๊ฐ€์ž… ํผ ์ œ์ถœ ํ›„ POST์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ๋ฅผ ํ•˜๋Š” ์ด์œ ๋Š” ์ƒˆ๋กœ๊ณ ์นจ์œผ๋กœ ์ธํ•œ ์ค‘๋ณต ์ œ์ถœ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.



๐ŸŽฎ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ(Front controller)

DispatcherServlet์„ ์ด์šฉํ•ด ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. DispatcherServlet์—์„œ๋Š” HTTP ํ”„๋กœํ† ์ฝœ๋กœ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผํ•  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

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




๐Ÿƒ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ

@Component ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜ ์Šคํ”„๋ง ์ž๋™ ๋นˆ ๋“ฑ๋ก ๋ฐฉ์‹์ธ Component Scan๊ณผ @Configuration๊ณผ @Bean์„ ํ†ตํ•œ ์ˆ˜๋™ ๋นˆ ๋“ฑ๋ก ๋ฐฉ์‹์„ ๋ฆฌํ”Œ๋ ‰์…˜(Reflection)์„ ํ†ตํ•ด ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฆฌํ”Œ๋ ‰์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

๋ฆฌํ”Œ๋ ‰์…˜์€ ์œ ์—ฐ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์บก์Šํ™” ์œ„๋ฐ˜, ์„ฑ๋Šฅ ์ €ํ•˜, ํƒ€์ž… ์•ˆ์ •์„ฑ ๋ฌธ์ œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌํ”Œ๋ ‰์…˜์€ ๊ผญ ํ•„์š”ํ•œ ๊ณณ์—๋งŒ ์‚ฌ์šฉํ•ด์•ผ ๋ฉ๋‹ˆ๋‹ค.

Step2. ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค.

  • ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„.
  • Session ๋งŒ๋ฃŒ์‹œ๊ฐ„ ๊ด€๋ฆฌ.
  • ํšŒ์› ์ •๋ณด ์ƒ์„ธ๋ณด๊ธฐ
  • ํšŒ์› ์ •๋ณด ์ˆ˜์ •



์ฟ ํ‚ค(Cookie)์™€ ์„ธ์…˜(Session)

์ฟ ํ‚ค

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



์„ธ์…˜

  • ์„ธ์…˜์€ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์„ธ์…˜ ์•„์ด๋””์™€ ํ•จ๊ป˜ ์„œ๋ฒ„์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์„ธ์…˜ ์•„์ด๋””๋ฅผ Set-Cookie ํ—ค๋”์— ๋„ฃ์–ด ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
  • ์„ธ์…˜ ์•„์ด๋””๋งŒ ๋ณด๋‚ด๊ธฐ ๋•Œ๋ฌธ์— ๋„คํŠธ์›Œํฌ ๋ถ€ํ•˜๊ฐ€ ์ปค์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„์— ์ €์žฅ๋˜๋ฏ€๋กœ ํด๋ผ์ด์–ธํŠธ์˜ ์›น๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ ์ €์žฅ๋Ÿ‰์ด ๋งŽ์•„์ ธ ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ์— ๋ถ€๋‹ด์ด ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



Step3. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ต์ฒดํ•œ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด๋ถ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๋˜ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ธ MySQL์— ์ €์žฅํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์ธ๋ฉ”๋ชจ๋ฆฌ ์—์„œ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ต์ฒด(MySQL)
  • JDBC Template ๊ตฌํ˜„
  • prepared statement ์‚ฌ์šฉํ•ด์„œ SQL ์ฃผ์ž… ๋ฐฉ์ง€



๐Ÿ“ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹ ๋ณ€๊ฒฝ

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




๐Ÿ“ ์ฑ…์ž„ ๋ถ„๋ฆฌ ์‹œ ํ…œํ”Œ๋ฆฟ ์ฝœ๋ฐฑ ํŒจํ„ด ์ด์šฉ

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

About

๐Ÿƒ ๋งŒ๋“ค๋ฉด์„œ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published