๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ•Š๏ธ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค

SpringBoot Part 3-1

by hyeon-z 2023. 7. 6.

 

1. ์›น 

WEB์ด๋ž€?

 

World Wide Web์˜ ์ค„์ž„๋ง๋กœ, ์ธํ„ฐ๋„ท์ƒ์—์„œ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ•˜์ดํผํ…์ŠคํŠธ ์‹œ์Šคํ…œ์ด๋‹ค.

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

 

WEB์˜ ๊ตฌ์„ฑ

 

 

URI (Uniform Resource Identifier)

๋ฆฌ์†Œ์Šค๋ฅผ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ํ†ตํ•ฉ๋œ ํ‘œ๊ธฐ๋ฒ•

 

URL (Uniform Resource Locator)๊ณผ URN (Uniform Resource Name)์˜ ๊ฐœ๋…์„ ํฌํ•จํ•œ๋‹ค.

URL์€ ๋ฆฌ์†Œ์Šค์˜ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๊ณ , URN์€ ๋ฆฌ์†Œ์Šค์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•œ๋‹ค. 

 

์˜ˆ์‹œ
http://oasis@www.blog.com:8080/search/1?debug=true&limit=10

URI Scheme: http -> URI ํ”„๋กœํ† ์ฝœ ์ง€์ •

์‚ฌ์šฉ์ž: oasis

ํ˜ธ์ŠคํŠธ๋ช…: www.blog.com -> URI์—์„œ ์ ‘์†ํ•˜๋ ค๋Š” ์„œ๋ฒ„ ์ฃผ์†Œ

ํฌํŠธ๋ฒˆํ˜ธ: 8080

ํŒจ์Šค: /search/1 -> ์„œ๋ฒ„์—์„œ ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค ๊ฒฝ๋กœ

์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ(์ฟผ๋ฆฌ ๋ฌธ์ž์—ด): debug=true&limit=10 -> URI์— ์ถ”๊ฐ€์ ์ธ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ „๋‹ฌ

 

์ƒ๋Œ€๊ฒฝ๋กœ์—์„œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋กœ์˜ ๋ณ€ํ™˜

 

์ƒ๋Œ€๊ฒฝ๋กœ: ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ† ๋ฆฌ์˜ ์œ„์น˜๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹ 

์ ˆ๋Œ€๊ฒฝ๋กœ: ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ† ๋ฆฌ์˜ ์œ„์น˜๋ฅผ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋ถ€ํ„ฐ ์ „์ฒด ๊ฒฝ๋กœ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹

 

๐Ÿ“Œ ์‹œ์ž‘์ ์€ /foo/bar

์ƒ๋Œ€ ๊ฒฝ๋กœ ์ ˆ๋Œ€ ๊ฒฝ๋กœ
hoge /foo/bar/hoge
hoge/fuga /foo/bar/hoge/fuga
./hoge /foo/bar/hoge
../hoge /foo/hoge
../hoge/fuga /foo/hoge/fuga
../../foge /foge

./: ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ

../: ์ƒ์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ

 

URI์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž

 

์•ŒํŒŒ๋ฒณ (๋Œ€์†Œ๋ฌธ์ž): A-Z, a-z
์ˆซ์ž: 0-9
์ผ๋ถ€ ํŠน์ˆ˜๋ฌธ์ž: - (ํ•˜์ดํ”ˆ), _ (๋ฐ‘์ค„), . (๋งˆ์นจํ‘œ), ~ (๋ฌผ๊ฒฐํ‘œ์‹œ)
์˜ˆ์•ฝ ๋ฌธ์ž: ! $ & ' ( ) * + , ; = : @
URI ์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž: %๋ฅผ ์‚ฌ์šฉํ•œ ์ด์Šค์ผ€์ดํ”„ ์‹œํ€€์Šค (%HH ํ˜•์‹)


HTTP (Hypertext Transfer Protocol)

์›น ์ƒ์—์„œ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ

 

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

HTTP๋Š” ๋ณด์•ˆ์„ ์œ„ํ•œ HTTPS๋กœ ํ™•์žฅ๋  ์ˆ˜๋„ ์žˆ๋‹ค.

 

ํด๋ผ์ด์–ธํŠธ(Client): ์›น ๋ธŒ๋ผ์šฐ์ €, ๋ชจ๋ฐ”์ผ ์•ฑ ๋˜๋Š” ๋‹ค๋ฅธ HTTP๋ฅผ ์ง€์›ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ์˜ ์—”๋“œ ์œ ์ € ๊ธฐ๊ธฐ

- URL์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์„ ์„œ๋ฒ„๋กœ ๋ณด๋‚ธ๋‹ค.

- ํ˜ธ์ŠคํŠธ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ HTML๋ฌธ์„œ๋ฅผ ๋ Œ๋”๋ง ํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ค€๋‹ค.

ํ˜ธ์ŠคํŠธ ์„œ๋ฒ„(Host Server): ์›น ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ ๋˜๋Š” ์„œ๋ฒ„

- ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์•„๋“ค์ด๊ณ , ํ•ด๋‹น ์š”์ฒญ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ์‘๋‹ต(ex. HTML)์„ ์ƒ์„ฑํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค.


์š”์ฒญ(Request): ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ˜ธ์ŠคํŠธ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๋Š” ๋™์ž‘

- ๋ณดํ†ต URL์„ ํ†ตํ•ด ๋ชฉ์  ๋ฆฌ์†Œ์Šค๋ฅผ ์ง€์ •ํ•˜๊ณ , HTTP ๋ฉ”์„œ๋“œ(GET, POST, PUT, DELETE ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์˜ ์ข…๋ฅ˜๋ฅผ ์ •์˜ํ•œ๋‹ค.

* ๋ชฉ์  ๋ฆฌ์†Œ์Šค: HTTP์š”์ฒญ์„ ํ†ตํ•ด ์ ‘๊ทผํ•˜๋ ค๋Š” ๋Œ€์ƒ ๋ฆฌ์†Œ์Šค


์‘๋‹ต(Response): ํ˜ธ์ŠคํŠธ ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ด๋Š” ๊ฒฐ๊ณผ

- ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ๋”ฐ๋ผ ์ƒ์„ฑ๋˜๋ฉฐ, HTTP ์ƒํƒœ ์ฝ”๋“œ(200 OK, 404 Not Found ๋“ฑ)์™€ ํ•จ๊ป˜ ์‘๋‹ต ํ—ค๋” ๋ฐ ๋ณธ๋ฌธ ๋ฐ์ดํ„ฐ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

 

HTTP์˜ ์ฃผ์š” ํŠน์ง•

 

- TCP/IP ๊ธฐ๋ฐ˜

- ์š”์ฒญ/์‘๋‹ตํ˜• ํ”„๋กœํ† ์ฝœ

- ๋™๊ธฐํ˜• ํ”„๋กœํ† ์ฝœ -> ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , ํ•ด๋‹น ์š”์ฒญ์ด ์ฒ˜๋ฆฌ๋˜์–ด ์‘๋‹ต์ด ๋„์ฐฉํ•  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•œ๋‹ค.

- Stateless ->  ๊ฐ๊ฐ์˜ ์š”์ฒญ์ด ๋…๋ฆฝ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๊ณ , ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์ด์ „ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

* ์ด์ „ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•: ์ฟ ํ‚ค, ํ† ํฐ

 

 

HTTP Message Format

 

https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages

๋ณดํ†ต Header์™€ Body๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

 

๐Ÿ“ข HTTP ํ—ค๋” ์ข…๋ฅ˜

Request Headers: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ์š”์ฒญ์— ๊ด€ํ•œ ๋ถ€๊ฐ€์ ์ธ ์ •๋ณด ์ „๋‹ฌ

Response Headers: ํŠน์ • ์‘๋‹ต์— ๋Œ€ํ•œ ๋ถ€๊ฐ€์ ์ธ ์ •๋ณด ์ „๋‹ฌ

General Headers: ์š”์ฒญ๊ณผ ์‘๋‹ต ๋ชจ๋‘์— ์ ์šฉ๋˜๋Š” ํ—ค๋”, ์ผ๋ฐ˜์  ๋ฉ”์‹œ์ง€ ์†์„ฑ์— ๊ด€๋ จ๋œ ์ •๋ณด ์ „๋‹ฌ

Representation Headers: ์‘๋‹ต์˜ ํ‘œํ˜„๊ณผ ๊ด€๋ จ๋œ ์ •๋ณด ์ „๋‹ฌ

 

๐Ÿ‘† Request Header

https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages

 

๐Ÿ‘† Response Header

https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages

 

HTTP Method

 

๋ฉ”์„œ๋“œ ์˜๋ฏธ
GET ๋ฆฌ์†Œ์Šค ์ทจ๋“
POST ๋ฆฌ์†Œ์Šค์˜ ์ž‘์„ฑ, ๋ฆฌ์†Œ์Šค ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€, ๊ธฐํƒ€ ์ฒ˜
PUT ๋ฆฌ์†Œ์Šค ๊ฐฑ์‹ , ๋ฆฌ์†Œ์Šค ์ž‘์„ฑ
DELETE ๋ฆฌ์†Œ์Šค ์‚ญ์ œ
HEAD ๋ฆฌ์†Œ์Šค์˜ ํ—ค๋” ์ทจ๋“
OPTIONS ๋ฆฌ์†Œ์Šค๊ฐ€ ์ง€์›ํ•˜๋Š” ๋ฉ”์„œ๋“œ์˜ ์ทจ๋“
TRACE ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ์š”์ฒญ๋œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ํ…Œ์ŠคํŠธ
CONNECT ํ”„๋ก์‹œ ๋™์ž‘์„ ํ†ตํ•ด ํ„ฐ๋„ ์ ‘์† ์„ค์ •

 

HTTP ๋ฉ”์„œ๋“œ์™€ CRUD

 

CRUD๋ช… ์˜๋ฏธ ๋ฉ”์„œ๋“œ
Create ์ž‘์„ฑ POST/PUT
Read ์ฝ๊ธฐ GET
Update ๊ฐฑ์‹  PUT
Delete ์‚ญ์ œ DELETE

HTML (Hypertext Markup Language)

์›น ํŽ˜์ด์ง€๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋งˆํฌ์—… ์–ธ์–ด

 

์›น ํŽ˜์ด์ง€์˜ ๊ตฌ์กฐ, ๋‚ด์šฉ, ์„œ์‹์„ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋ฉฐ, ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” HTML ๋ฌธ์„œ๋ฅผ ํ•ด์„ํ•˜์—ฌ ์›น ํŽ˜์ด์ง€๋ฅผ ํ‘œ์‹œํ•œ๋‹ค.

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


์›น์˜ ๊ธฐ์ˆ ์  ํŠน์ง• 2๊ฐ€์ง€

 

๐Ÿ‘† Hypermedia System (ํ•˜์ดํผ๋ฏธ๋””์–ด ์‹œ์Šคํ…œ)

 

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

- ์ •๋ณด์˜ ๊ตฌ์กฐ์™€ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•˜๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ๋ฆฌ์†Œ์Šค ์‚ฌ์ด๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

 

๐Ÿ‘† Distributed System (๋ถ„์‚ฐ ์‹œ์Šคํ…œ)

 

- ์›น์€ ๋งค์šฐ ํฐ ๊ทœ๋ชจ์˜ ๋„คํŠธ์›Œํฌ์ด๋ฉฐ, ์ˆ˜๋งŽ์€ ์‚ฌ์šฉ์ž์™€ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋™์‹œ์— ์กด์žฌํ•˜๊ณ  ์ƒํ˜ธ์ž‘์šฉํ•œ๋‹ค.

- ์›น์€ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ๊ธฐ์ˆ ๊ณผ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์„œ๋ฒ„ ๊ตฌ์กฐ, ๋„คํŠธ์›Œํฌ ํ†ต์‹  ๋ฐ ๋ถ„์‚ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“ฑ์„ ๊ตฌ์„ฑํ•œ๋‹ค.

-  ์›น์€ ๋งŽ์€ ์ˆ˜์˜ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.


2. Web Application

Web Application Architecture

 

https://litslink.com/blog/web-application-architecture

 

์ „์ฒด ํ๋ฆ„

https://litslink.com/blog/web-application-architecture (firehouse์˜คํƒ€ -> firehose)

 

1. DNS(Domain Name System)

- ๋„๋ฉ”์ธ ์ด๋ฆ„๊ณผ IP ์ฃผ์†Œ ๊ฐ„์˜ ๋งคํ•‘์„ ๋‹ด๋‹นํ•˜๋Š” ์‹œ์Šคํ…œ

- ์‚ฌ์šฉ์ž๊ฐ€ ๋„๋ฉ”์ธ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜๋ฉด DNS๋Š” ํ•ด๋‹น ๋„๋ฉ”์ธ์˜ IP ์ฃผ์†Œ๋ฅผ ์ฐพ์•„์„œ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ํ•ด๋‹น IP ์ฃผ์†Œ๋กœ ์ „๋‹ฌํ•œ๋‹ค.

- ๋„๋ฉ”์ธ ์ด๋ฆ„์„ IP ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ธํ„ฐ๋„ท์—์„œ ํŠน์ • ์„œ๋ฒ„๋ฅผ ์ฐพ๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

2. ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ(Load Balancer)

- ์ฃผ๋กœ ์ˆ˜ํ‰์  ํ™•์žฅ์„ ๋‹ค๋ฃฌ๋‹ค.

- ์—ฌ๋Ÿฌ ๋Œ€์˜ ์„œ๋ฒ„ ์‚ฌ์ด์— ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์„ ๊ท ํ˜• ์žˆ๊ฒŒ ๋ถ„์‚ฐ์‹œํ‚ค๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

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

3. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„(Web App Servers)
- ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ํ•ด๋‹น ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ์ƒ์„ฑํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

- ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์บ์‹œ ์„œ๋ฒ„, ์ž‘์—… ํ ๋“ฑ๊ณผ ๊ฐ™์€ ๋ฐฑ์—”๋“œ ์ธํ”„๋ผ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.

- ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์— ์—ฐ๊ฒฐ๋œ ์ตœ์†Œํ•œ ๋‘ ๊ฐœ์˜ ์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

4. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(Databases)
- ๊ตฌ์„ฑ, ์ถ”๊ฐ€, ๊ฒ€์ƒ‰, ์—…๋ฐ์ดํŠธ, ์‚ญ์ œ ๋ฐ ์—ฐ์‚ฐ ์ˆ˜ํ–‰์„ ์œ„ํ•œ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

- ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋Š” ์ง์ ‘ ์ž‘์—… ์„œ๋ฒ„์™€ ์ƒํ˜ธ์ž‘์šฉํ•œ๋‹ค.

5. ์บ์‹ฑ ์„œ๋น„์Šค(Caching Service)
- ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ๊ณผ ๊ฒ€์ƒ‰์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์ €์žฅ์†Œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

- ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋ฒ„์—์„œ ์ผ๋ถ€ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ, ์ด ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋Š” ์บ์‹œ๋กœ ์ €์žฅ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์ดํ›„์˜ ์š”์ฒญ์€ ๋” ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ๋œ๋‹ค.

- ์ด์ „ ๊ฒฐ๊ณผ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์—ฐ์‚ฐ์„ ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค€๋‹ค. 

 

+) ํ•ด๋‹น ์„œ๋น„์Šค๊ฐ€ ํšจ๊ณผ์ ์ธ ๊ฒฝ์šฐ
- ์—ฐ์‚ฐ์ด ๋А๋ฆฐ ๊ฒฝ์šฐ
- ์—ฐ์‚ฐ์ด ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ๊ฒฝ์šฐ
- ํŠน์ • ์š”์ฒญ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋™์ผํ•œ ๊ฒฝ์šฐ


6a. ์ž‘์—… ํ(Job Queue, ์„ ํƒ ์‚ฌํ•ญ)
- ์ž‘์—…์„ ์ผ์‹œ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ  ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.

- ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋™์ž‘๋œ๋‹ค.

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

 

6b. ์ž‘์—… ์„œ๋ฒ„(Job servers)

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

- ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŠน์ • ์ž‘์—…์„ ๋‹ด๋‹นํ•˜๋ฉฐ, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜์—ฌ ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค.

- ex) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„, ์บ์‹œ ์„œ๋ฒ„, ์™ธ๋ถ€ API ์„œ๋ฒ„


7. ์ „์ฒด ํ…์ŠคํŠธ ๊ฒ€์ƒ‰ ์„œ๋น„์Šค(Full-Text Search Service, ์„ ํƒ ์‚ฌํ•ญ)

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

8. ์„œ๋น„์Šค(Services)
- ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํŠน์ • ์ˆ˜์ค€์— ๋„๋‹ฌํ•˜๋ฉด ๋ณ„๋„์˜ ์•ฑ ํ˜•ํƒœ๋กœ ์„œ๋น„์Šค๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

- ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋‹ค๋ฅธ ์„œ๋น„์Šค ๊ฐ„์— ์ƒํ˜ธ์ž‘์šฉ์ด ์ด๋ฃจ์–ด์ง„๋‹ค.

9c. ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค(Data Warehouse)

 

- ์—ฌ๋Ÿฌ ์†Œ์Šค์—์„œ ์ถ”์ถœํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ฉํ•˜๊ณ  ์ €์žฅํ•˜์—ฌ ๋ถ„์„๊ณผ ์˜์‚ฌ ๊ฒฐ์ •์— ํ™œ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ
- ์ฃผ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ์ธํ…”๋ฆฌ์ „์Šค์™€ ๋ฐ์ดํ„ฐ ๋ถ„์„์— ์‚ฌ์šฉ๋˜๋ฉฐ, ๋Œ€๊ทœ๋ชจ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ •ํ˜•ํ™”ํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ์‰ฝ๊ฒŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•œ๋‹ค.

 

๋Œ€๋ถ€๋ถ„์˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘, ์ €์žฅ ๋ฐ ๋ถ„์„๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ์ž‘์—…์„ ํฌํ•จํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ๊ณผ์ •์€ ์„ธ ๊ฐ€์ง€ ๋‹จ๊ณ„๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

1) ๋ฐ์ดํ„ฐ๋Š” ๋ฐ์ดํ„ฐ์˜ ํก์ˆ˜์™€ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์ŠคํŠธ๋ฆฌ๋ฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” Data "firehose"๋กœ ์ „์†ก๋œ๋‹ค.
2) ๊ฐ€๊ณต๋œ ์›๋ณธ ๋ฐ์ดํ„ฐ์™€ ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ๋Š” ํด๋ผ์šฐ๋“œ ์Šคํ† ๋ฆฌ์ง€๋กœ ์ „์†ก๋œ๋‹ค.
3) ๊ฐ€๊ณต๋œ ๋ฐ์ดํ„ฐ์™€ ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ๋Š” ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค๋กœ ์ „์†ก๋œ๋‹ค.

 

* ๋น„์ฆˆ๋‹ˆ์Šค ์ธํ…”๋ฆฌ์ „์Šค(Business Intelligence, BI): ์กฐ์ง์ด ๋‚ด๋ถ€ ๋ฐ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘, ๋ถ„์„ํ•˜์—ฌ ์˜์‚ฌ ๊ฒฐ์ •์— ๋„์›€์„ ์ฃผ๋Š” ํ”„๋กœ์„ธ์Šค์™€ ๋„๊ตฌ

 

10. Cloud Storage

- ์ธํ„ฐ๋„ท์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ, ๊ด€๋ฆฌ ๋ฐ ๋ฐฑ์—…ํ•˜๋Š” ์„œ๋น„์Šค

- ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž๋Š” ์ธํ„ฐ๋„ท์„ ํ†ตํ•ด ์–ธ์ œ๋“ ์ง€ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ๋‹ค.


11. CDN(Content Delivery Network)
- ์ „ ์„ธ๊ณ„์ ์œผ๋กœ ๋ถ„์‚ฐ๋œ ์„œ๋ฒ„ ๋„คํŠธ์›Œํฌ.

- HTML ํŒŒ์ผ, CSS ํŒŒ์ผ, JavaScript ํŒŒ์ผ ๋ฐ ์ด๋ฏธ์ง€๋ฅผ ์ „์†กํ•œ๋‹ค. (์›๋ž˜๋Š” ์›น์„œ๋ฒ„์—์„œ ์ œ๊ณต)

- ์ „ ์„ธ๊ณ„์— ๋ถ„์‚ฐ๋œ ์—ฌ๋Ÿฌ ์„œ๋ฒ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋Ÿฌํ•œ ์„œ๋ฒ„๋Š” ์ฝ˜ํ…์ธ ์˜ ๋ณต์‚ฌ๋ณธ์„ ์ €์žฅํ•˜๊ณ  ์œ ์ง€ํ•œ๋‹ค.

- CDN์€ ์‚ฌ์šฉ์ž์˜ ์ง€๋ฆฌ์  ์œ„์น˜๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์„œ๋ฒ„์—์„œ ์ฝ˜ํ…์ธ ๋ฅผ ์ œ๊ณตํ•จ์œผ๋กœ์จ ์ง€์—ฐ์„ ์ตœ์†Œํ™”ํ•œ๋‹ค.
- ์›น ์ฝ˜ํ…์ธ ๋ฅผ ์ตœ์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.


3. Servlet

Web Server, Web Application Server

 

๐Ÿ‘† Web Server

https://mossgreen.github.io/Servlet-Containers-and-Spring-Framework/

ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ HTTP ์š”์ฒญ์„ ๋ฐ›์•„๋“ค์ด๊ณ , ํ•ด๋‹น ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ์›น ํŽ˜์ด์ง€, ํŒŒ์ผ, ๋ฐ์ดํ„ฐ ๋“ฑ์„ ์ œ๊ณตํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋‚˜ ์‹œ์Šคํ…œ

 

- ์ธํ„ฐ๋„ท์ƒ์—์„œ ์›น ํŽ˜์ด์ง€๋ฅผ ํ˜ธ์ŠคํŒ… ํ•˜๊ณ , ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.
- HTTP ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์™€ ํ†ต์‹ ํ•˜๋ฉฐ, ์ฃผ๋กœ HTML, CSS, JavaScript, ์ด๋ฏธ์ง€, ๋™์˜์ƒ ๋“ฑ์˜ ์ •์ ์ธ ์›น ์ฝ˜ํ…์ธ ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

๐Ÿ“Œ ๊ธฐ๋Šฅ

1. ์ •์ ์ธ ์ฝ˜ํ…์ธ  ์ œ๊ณต

WAS๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์ž์›์„ ์ œ๊ณตํ•œ๋‹ค.

 

2. ๋™์ ์ธ ์ฝ˜ํ…์ธ  ์ œ๊ณต์„ ์œ„ํ•œ ์š”์ฒญ ์ „๋‹ฌ

ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ(Request)์„ WAS์— ๋ณด๋‚ด๊ณ , WAS๊ฐ€ ์ฒ˜๋ฆฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌ(์‘๋‹ต, Response)ํ•œ๋‹ค.
ํด๋ผ์ด์–ธํŠธ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

๐Ÿ“Œ ์˜ˆ์‹œ

Apache Server, Nginx

 

 

๐Ÿ‘† Web Application Server (WAS)

https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html

DB ์กฐํšŒ๋‚˜ ๋‹ค์–‘ํ•œ ๋กœ์ง ์ฒ˜๋ฆฌ๋ฅผ ์š”๊ตฌํ•˜๋Š” ๋™์ ์ธ ์ฝ˜ํ…์ธ ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ Application Server

 

- ์›น ์ปจํ…Œ์ด๋„ˆ, ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค.

 

๐Ÿ“Œ ๊ธฐ๋Šฅ

1. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ํ™˜๊ฒฝ๊ณผ DB ์ ‘์† ๊ธฐ๋Šฅ ์ œ๊ณต

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์™€ JSP ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํฌํ•จํ•˜์—ฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰์„ ์ง€์›ํ•œ๋‹ค.

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ์˜ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ์™€ HTTP ์š”์ฒญ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•˜๊ณ , JSP ์ปจํ…Œ์ด๋„ˆ๋Š” JSP ํŽ˜์ด์ง€์˜ ์‹คํ–‰๊ณผ ๋™์ ์ธ HTML ์ƒ์„ฑ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.


2. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŠธ๋žœ์žญ์…˜(๋…ผ๋ฆฌ์ ์ธ ์ž‘์—… ๋‹จ์œ„) ๊ด€๋ฆฌ ๊ธฐ๋Šฅ

ํŠธ๋žœ์žญ์…˜์˜ ์‹œ์ž‘, ์ปค๋ฐ‹(ํ™•์ •), ๋กค๋ฐฑ(์ทจ์†Œ)๊ณผ ๊ฐ™์€ ๊ด€๋ฆฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ๊ณผ ์•ˆ์ „์„ฑ์„ ์œ ์ง€๋‹ค


3. ์—…๋ฌด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ˆ˜ํ–‰
๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‹คํ–‰ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๊ณ  ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ์ˆ˜ํ–‰์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์š”์ฒญ์— ๋”ฐ๋ผ ์ด๋ฃจ์–ด์ง„๋‹ค.

 

๐Ÿ“Œ ์˜ˆ์‹œ

Tomcat, Jeus

 

http://setgetweb.com/p/WAS9/ae/was3532.html

Web Server๋ฅผ Client์™€ ์†Œํ†ตํ•˜๋Š” ์•ž๋‹จ์— ๋ฐฐ์น˜ํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ์ •์  ์ฝ˜ํ…์ธ ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. (๋…ธ์ถœ๋˜๋Š” ๋ฐ์ดํ„ฐ)

๊ทธ ๋’ค์— WAS๋ฅผ ๋ฐฐ์น˜ํ•˜์—ฌ DB์™€ ์—ฐ๊ฒฐ๋œ ๋™์  ์ฝ˜ํ…์ธ ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. (๋…ธ์ถœ๋˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ)

=> WAS๊ฐ€ ์‹ค์ œ Web Server๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์›น ์„œ๋ฒ„์™€ ํ˜‘์—…ํ•˜๋ฉฐ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ ์›น ์„œ๋ฒ„ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ, ๋ชจ๋“ˆ ๋“ฑ์„ ํฌํ•จํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

 

Servlet์ด๋ž€?

 

Java ์–ธ์–ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ์„œ๋ฒ„ ์ธก ์ปดํฌ๋„ŒํŠธ

 

https://codeburst.io/understanding-java-servlet-architecture-b74f5ea64bf4

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

 

MVC Pattern in Servlet

 

Model - ๋ชจ๋ธ์€ ์ž๋ฐ” ๊ฐ์ฒด ๋˜๋Š” Pojo๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค.
View - ๋ชจ๋ธ์ด ๋‹ด๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. (JSP)
Controller - ๋ชจ๋ธ๊ณผ ๋ทฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋งค๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ/์š”์ฒญ์„ ๋ฐ›์•„ ๋ชจ๋ธ์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•ด ์ฃผ๊ณ  ๊ทธ์— ๋”ฐ๋ฅธ ๋ทฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค. (Servlet)

 

Servlet์˜ Life Cycle

 

https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html

 

1. Web Server๋Š” ์›น ๋ธŒ๋ผ์šฐ์ € ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ HTTP ์š”์ฒญ์„ ๋ฐ›๋Š”๋‹ค.
2. Web Server๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ(Request)์„ WAS์— ๋ณด๋‚ธ๋‹ค.
3. WAS๋Š” ๊ด€๋ จ๋œ Servlet์„ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฐ๋‹ค.
4. WAS๋Š” web.xml์„ ์ฐธ์กฐํ•˜์—ฌ ํ•ด๋‹น Servlet์— ๋Œ€ํ•œ Thread๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. (Thread Pool ์ด์šฉ)

-> ๋งค ์š”์ฒญ์€ ๋ณ„๊ฐœ์˜ ์Šค๋ ˆ๋“œ์—์„œ ๋™์ž‘ํ•œ๋‹ค. 
5. HttpServletRequest์™€ HttpServletResponse ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ Servlet์— ์ „๋‹ฌํ•œ๋‹ค.
    5-1. Thread๋Š” Servlet์˜ service() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. (๋งค๋ฒˆ ์ƒˆ๋กœ์šด Servlet ๊ฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒƒ X)
    5-2. service() ๋ฉ”์„œ๋“œ๋Š” ์š”์ฒญ์— ๋งž๊ฒŒ doGet() ๋˜๋Š” doPost() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
    - protected doGet(HttpServletRequest request, HttpServletResponse response)
6. doGet() ๋˜๋Š” doPost() ๋ฉ”์„œ๋“œ๋Š” ์ธ์ž์— ๋งž๊ฒŒ ์ƒ์„ฑ๋œ ์ ์ ˆํ•œ ๋™์  ํŽ˜์ด์ง€๋ฅผ Response ๊ฐ์ฒด์— ๋‹ด์•„ WAS์— ์ „๋‹ฌํ•œ๋‹ค.
7. WAS๋Š” Response ๊ฐ์ฒด๋ฅผ HttpResponse ํ˜•ํƒœ๋กœ ๋ฐ”๊พธ์–ด Web Server์— ์ „๋‹ฌํ•œ๋‹ค.
8. ์ƒ์„ฑ๋œ Thread๋ฅผ ์ข…๋ฃŒํ•˜๊ณ , HttpServletRequest์™€ HttpServletResponse ๊ฐ์ฒด๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

SpringBoot์—์„œ Servlet์„ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

 

๐Ÿ‘† web.xml ์‚ฌ์šฉ

 

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <servlet>
        <servlet-name>comingsoon</servlet-name>
        <servlet-class>mysite.server.ComingSoonServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>comingsoon</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

src/main/webapp/ ๋””๋ ‰ํ„ฐ๋ฆฌ์— web.xmlํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜์—ฌ, ํ•„์š”ํ•œ Servlet, Filter, Listener ๋“ฑ์„ ์„ค์ •ํ•œ๋‹ค.

 

๐Ÿ‘† ์–ด๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉ

 

@WebServlet, @WebFilter, @WebListener ๋“ฑ์˜ ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ Servlet, Filter, Listener๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•ด๋‹น ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ Servlet ํด๋ž˜์Šค์— ์ง์ ‘ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

@WebServlet(value = "/*", loadOnStartup = 1)
public class TestServlet extends HttpServlet {
    ....
}

 

๐Ÿ‘†WebApplicationInitializer ์‚ฌ์šฉ

 

public class KdtWebApplicationInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        ServletRegistration.Dynamic servletRegistration = servletContext.addServlet("test", new TestServlet());
        servletRegistration.addMapping("/*");
        servletRegistration.setLoadOnStartup(1);
    }
}

'๐Ÿ•Š๏ธ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

SpringBoot Part2-2  (0) 2023.07.03
SpringBoot Part2-1  (0) 2023.06.27
SpringBoot Part1-5  (0) 2023.06.26
SpringBoot Part1-4  (0) 2023.06.23
SpringBoot Part1-3  (0) 2023.06.22

๋Œ“๊ธ€