๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์‹œ๋„/Code-States

[D+66] Web Architectures

by ๐Ÿ‡๋ฐ•๋ด‰๋ด‰๐Ÿ‡ 2020. 12. 23.

 

 

D+66

-  Web Architectures -

(Web Service,

Keywords about Web Service Architecture,

HTTP, AJAX, )

 


 

 

Web Service Architecture

 

์›น ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๋Š” ํฌ๊ฒŒ ํด๋ผ์ด์–ธํŠธ, ์„œ๋ฒ„, DB๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

 

์šฐ๋ฆฌ๋Š” ํด๋ผ์ด์–ธํŠธ, ์„œ๋ฒ„ DB๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์•Œ์•„๋ณด๊ธฐ ์ „

๊ฐ์ž๊ฐ€ ํ•˜๋Š” ์—ญํ• ์— ๋Œ€ํ•ด ์ „๋ฐ˜์ ์œผ๋กœ ์ดํ•ดํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

 

๋จผ์ €, ํด๋ผ์ด์–ธํŠธ๋Š” ์œ ์ €์™€ ์ƒํ˜ธ์ž‘์šฉ์„ ๋‹ด๋‹นํ•˜๋Š” ๊ณณ์œผ๋กœ

์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญ์„ ํ•˜๋Š” ์ฃผ์ฒด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ์œ ์ €๊ฐ€ ์š”๊ตฌํ•œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ด ๋‹ต๋ณ€์„ ์ฃผ๋Š” ๊ณณ์œผ๋กœ

๋ฆฌ์†Œ์Šค ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๊ณณ์œผ๋กœ ์ž์›์„ ์ œ๊ณตํ•ด ์ฃผ๋Š” ์ฃผ์ฒด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋งˆ์ง€๋ง‰์œผ๋กœ DB๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณณ์œผ๋กœ ์ผ์ข…์˜ ์ €์žฅ์†Œ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

 

์˜ค๋Š˜ ์šฐ๋ฆฌ๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์™€์˜ ๊ด€๊ณ„๋ฅผ ์•Œ์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ด€๋ จ ํ‚ค์›Œ๋“œ๋“ค์— ๋Œ€ํ•ด ์•Œ์•„์•ผ๋งŒ ํ•œ๋‹ค.

 

 


Keywords about Web Service Architecture

 

 

Browser

๋ธŒ๋ผ์šฐ์ €๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•œ ์ž๋ฃŒ๋ฅผ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๊ฐ€์ ธ์™€ ์šฐ๋ฆฌ๊ฐ€ ์‰ฝ๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด์ด๋‹ค.

 

์ปดํ“จํ„ฐ๋Š” 2์ง„์ˆ˜ ๋งŒ์„ ์•Œ์•„๋“ฃ์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ํ™ˆํŽ˜์ด์ง€๋ฅผ ์ œ์ž‘ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ๋Š” 2์ง„์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ž˜ ์ž‘๋™๋˜๋Š” ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€

๋ฐ”๋กœ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์„œ๋ฒ„๋กœ ๋ณด๋‚ผ ๋•Œ ์„œ๋ฒ„์—์„œ ์•Œ์•„๋“ค์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋ฉฐ,

๋˜ ๊ทธ์— ๋”ฐ๋ฅธ ์‘๋‹ต ๊ฐ’์„ ์šฐ๋ฆฌ๊ฐ€ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

Server

์„œ๋ฒ„๋Š” ์ž์›์„ ์ œ๊ณตํ•ด์ฃผ๋Š” ์ฃผ์ฒด๋กœ ์‰ฌ์šด ์˜ˆ๋ฅผ ๋“ค์ž๋ฉด ์ปคํ”ผ ์ฃผ๋ฌธ์„ ๋ฐ›๋Š” ์ ์›์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

 

์†๋‹˜์ด ์ ์›์—๊ฒŒ ์ปคํ”ผ๋ฅผ ์ฃผ๋ฌธํ•˜๋ฉด ์ฃผ๋ฌธ์„ ๋ฐ›์€ ์ ์›์€ ์ปคํ”ผ ์›๋‘๋ฅผ ๊ฐ€์ ธ์™€์„œ ์ฃผ๋ฌธ๋ฐ›์€ ์ปคํ”ผ๋ฅผ ์ œ์ž‘ํ•œ ํ›„์— ๋‹ค์‹œ ์†๋‹˜์—๊ฒŒ ๊ฑด๋„ฌ ๊ฒƒ์ด๋‹ค.

 

์ด์ฒ˜๋Ÿผ ์„œ๋ฒ„๋„ ํด๋ผ์ด์–ธํŠธ์—์„œ ์š”์ฒญ์„ ํ•˜๋ฉด ์š”์ฒญ์„ ๋ฐ›์€ ์„œ๋ฒ„๋Š”

DB์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ์ฐพ์€ ๋’ค์— ๋‹ค์‹œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋Œ๋ ค์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๊ฒŒ ๋œ๋‹ค.

 

API

์œ„์— ์„ค๋ช…์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์ฃผ๋ฌธ์„ ํ†ตํ•ด ๊ฐ’์„ ์ฃผ๊ฒŒ ๋˜๋Š”๋ฐ

์ด๋•Œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š” ๋ฆฌ์†Œ์Šค๋“ค์„ ์ž˜ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ด ์ฃผ๊ฒŒ ๋˜๋Š”๋ฐ

์ด๊ฒƒ์ด ๋ฐ”๋กœ API์ด๋‹ค.

 

๋งˆ์น˜ ์ปคํ”ผ์ ์›์ด ์†๋‹˜์—๊ฒŒ ์›ํ™œํ•œ ์ฃผ๋ฌธ์„ ์œ„ํ•ด ๋ฉ”๋‰ดํŒ์„ ์ œ๊ณตํ•ด ์ฃผ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฒƒ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 


HTTP (HyperText Transfer Protocol)

• ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ๊ธฐ๋ณธ ํ”„๋กœํ† ์ฝœ ( ํ”„๋กœํ† ์ฝœ - ๊ทœ์•ฝ, ๊ทœ์น™ )

 

• ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ํ†ต์‹ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹

 

 

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

• ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์—๋Š” ํ•ญ์ƒ ์š”์ฒญ๊ณผ ์‘๋‹ต์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

 

• ๋งŒ์•ฝ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ–ˆ์„ ์‹œ์—๋Š” ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ ์‘๋‹ต์œผ๋กœ ๋Œ๋ ค์ค€๋‹ค.

 

• ๋งŒ์•ฝ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›ํ•˜๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ์—†์„ ๊ฒฝ์šฐ์—๋Š” ์—†๋‹ค๋Š” ์‘๋‹ต์„ ๋ณด๋‚ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

• ๋ฐ›์€ ์š”์ฒญ์€ ๋ฌด์‹œํ•  ์ˆ˜ ์—†๋‹ค. (์—๋Ÿฌ ๋ฐœ์ƒ)

 

๊ตฌ์„ฑ

• ๊ฐ๊ฐ์˜ ์‘๋‹ต๊ณผ ์š”์ฒญ์€ header์™€ body๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

 

์†์„ฑ

stateless

http์˜ ๊ฐ ์š”์ฒญ์€ ๋ชจ๋‘ ๋…๋ฆฝ์ ์ด๋‹ค.

๋‚ด๊ฐ€ ๋งŒ์•ฝ ๋ฌด์–ธ๊ฐ€๋ฅผ ์š”์ฒญํ–ˆ์„ ๊ฒฝ์šฐ ์„œ๋ฒ„๋Š” ํ•ด๋‹น ์š”์ฒญ์— ๋Œ€ํ•œ ๊ฐ’๋งŒ ์‘๋‹ตํ•  ๋ฟ

๋‚ด๊ฐ€ ์ด์ „์— ํ–ˆ๋˜ ์š”์ฒญ์„ ๊ทผ๊ฑฐ ์‚ผ์•„ ๋‹ค๋ฅธ ์‘๋‹ต์„ ์ œ์‹œํ•  ์ˆ˜ ์—†๋‹ค.

 

connectionless

ํ•œ ๋ฒˆ์˜ ์š”์ฒญ์€ ํ•œ ๋ฒˆ์˜ ์‘๋‹ต์„ ํ•œ ์ดํ›„์—๋Š” ์—ฐ๊ฒฐ์ด ๋Š๊ฒจ์„œ ๋” ์ด์ƒ ์‘๋‹ต์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์—†๋‹ค.

 

๋ฉ”์„œ๋“œ

get - ์„œ๋ฒ„์— ์ž์›์„ ์š”์ฒญ

 

post - ์„œ๋ฒ„์— ์ž์›์„ ์ƒ์„ฑ

 

put - ์„œ๋ฒ„์— ์ž์›์„ ์ˆ˜์ •

 

delete - ์„œ๋ฒ„์˜ ์ž์›์„ ์ œ๊ฑฐ

 

 


AJAX (Asynchronous Javascript And XML)

AJAX๋Š” ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ,

์ด๋•Œ์— ์š”์ฒญ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ™”๋ฉด ์ „ํ™˜(ํŽ˜์ด์ง€ ๊นœ๋นก์ž„)์„ ํ†ตํ•ด์„œ ์›นํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ์ „ํ™˜ํ•ด ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ

๋ฐ”๊พธ๊ณ ์ž ํ•˜๋Š” ๋ถ€๋ถ„๋งŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๋”์„ ํ™œ์šฉํ•ด ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.

 

 


fetch

• fetch๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ž์›์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜

 

 

fetch ๋ง๊ณ ๋Š” ์—†๋Š” ๊ฒƒ์ธ๊ฐ€?

๊ฐ„๋‹จํ•˜๊ฒŒ ๋‹ต์„ ๋จผ์ € ๋งํ•˜์ž๋ฉด ์•„๋‹ˆ๋‹ค.

 

์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ž์›์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์€ fetch ๋ง๊ณ ๋„ ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ์žˆ์œผ๋ฉฐ,

์‹ฌ์ง€์–ด fetch๋Š” ๊ฐ€์žฅ ๋‚˜์ค‘์— ๋“ฑ์žฅํ•œ ์ด์œ ์ด๋‹ค.

 

๊ฐ„๋‹จํ•˜๊ฒŒ ๋ช‡ ๊ฐ€์ง€๋ฅผ ์‚ดํŽด๋ณด์ž๋ฉด

 

 

XHR๊ณผ jQuery๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ž์›์„ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ณต์žกํ•จ์„ ๋Š๋ผ๊ฒŒ ๋œ ๊ฐœ๋ฐœ์ž๋“ค์€

XHR๊ณผ jQuery์ฒ˜๋Ÿผ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฉด์„œ ์ข€ ๋” ๊ฐ•๋ ฅํ•˜๊ณ  ์œ ์—ฐํ•œ ์กฐ์ž‘์ด ๊ฐ€๋Šฅํ•œ

fetch๋ฅผ ๋“ฑ์žฅ์‹œํ‚ค๊ฒŒ ํ•œ ๊ฒƒ์ด๋‹ค.

 

fetch ์ดํ•ดํ•˜๊ธฐ

fetch('http://52.78.213.9:3000/messages') // fetch์•ˆ์— url์„ ๋ฐ›๋Š”๋‹ค.
	.then(function(response) { // url์—์„œ response๋ฅผ ์ผ๋‹จ ๋ฐ›๋Š”๋‹ค.
    	return response.json(); // response๋ฅผ jsonํ™” ์‹œํ‚จ๋‹ค.
    })
    .then(function(json) {
    
    // json ํ˜•ํƒœ๋กœ ์ „๋‹ฌ๋ฐ›์€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ์˜ ์‘๋‹ต
    
    });

fetch์˜ ์‚ฌ์šฉ๋ฒ•์€ ๋จผ์ € fetch๋ฅผ ํ†ตํ•ด url์„ ๋ฐ›์€ ๋‹ค์Œ,

url์—์„œ response๋ฅผ ๋ฐ›์•„์˜จ ๋‹ค์Œ response๋ฅผ jsonํ™” ์‹œ์ผœ์ค€๋‹ค.

 

jsonํ™” ์‹œ์ผœ์ค€ ๋‹ค์Œ์— ๋‚ด๊ฐ€ ๋ถ€๋ถ„์ ์œผ๋กœ ๋ฐ”๊พธ๊ณ ์ž ํ–ˆ๋˜ ๋ถ€๋ถ„์„ 

ํ•จ์ˆ˜ํ•œ์— ์ ์ ˆํžˆ ๋„ฃ์–ด์ฃผ๋ฉด ์™„์„ฑ์ด๋‹ค.

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€