API Server
Request Lifecycle
Server Extension์ ์น ์๋ฒ๋ฅผ ์์ฑ ๋ฐ ํ์ฅํ๋๋ฐ ์ฐ์
๋๋ค. ์๋ฒ ์์ฑ ์ต์
์ ํตํด ์ ์ด ํ ์ ์์ต๋๋ค.
HTTP
HTTP Extension์ HTTP ํ๋กํ ์ฝ์ ์ง์ํ๋๋ก ์น ์๋ฒ๋ฅผ ์์ฑํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋ฉ๋๋ค.
HTTP/2
HTTP/2 Extension์ HTTP/2 ํ๋กํ ์ฝ์ ์ง์ํ๋๋ก ์น ์๋ฒ๋ฅผ ์์ฑํฉ๋๋ค.
TLS
TLS Extension์ HTTPS ์์ฒญ์ ์ฒ๋ฆฌ ํ ์ ์๋๋ก ์น ์๋ฒ๋ฅผ ์์ฑํฉ๋๋ค.
์๋ํฌ์ธํธ๋ก์ ๋ผ์ฐํ
์ /ํ์ ๋ฏธ๋ค์จ์ด๋ค์ด ์คํ๋ฉ๋๋ค. ์๋ฒ ์์ฑ ์ต์
์ ํตํด ์ ์ด ํ ์ ์์ต๋๋ค.
A. Before Middleware
์๋ํฌ์ธํธ๋ก์ ๋ผ์ฐํ
์ ์ ์ํ๋๋ ๋ฏธ๋ค์จ์ด์
๋๋ค.
Static
Static Middleware๋ ์ต์ด๋ก ์ํ๋๋ ๋ฏธ๋ค์จ์ด์
๋๋ค. ํ์ฑํ์ API Gateway ์๋น์ค ๋
ธ๋์ ํน์ ๋๋ ํ ๋ฆฌ์์ ์ ์
ํ์ผ๋ค์ ์๋นํฉ๋๋ค.
Body Parser
Body Parser๋ application/json, application/x-www-form-url-encoded, multipart/form-data Content Type ์์ฒญ์ ๋ฐ๋๋ฅผ JavaScript ๊ฐ์ฒด๋ก ํด์ํฉ๋๋ค.
Cookie Parser
Cookie Parser๋ Cookie ํค๋๋ฅผ JavaScript ๊ฐ์ฒด๋ก ํด์ํ๊ณ ๊ฒ์ฆํฉ๋๋ค.
CORS
CORS ๋ฏธ๋ค์จ์ด๋ ๊ต์ฐจ ์ถ์ฒ ์์ ๊ณต์ ์ ๋ํ ์ ๊ทผ ์ ์ด ์ ์ฑ
์ ๋ฐ๋ผ Preflight ์์ฒญ์ ์๋ตํฉ๋๋ค.
Helmet
Helmet ๋ฏธ๋ค์จ์ด๋ ์๋ฒ์ CSP, HSTS ๋ฑ ๊ธฐ์ด์ ์ธ ๋ณด์ ์์๋ฅผ ์ถ๊ฐํฉ๋๋ค.
B. Context Factory
์๋ํฌ์ธํธ๋ก์ ๋ผ์ฐํ
์ง์ ์ Context Factory ๋ฏธ๋ค์จ์ด๋ฅผ ํตํด ์์ฒญ ์ปจํ
์คํธ๋ฅผ ์์ฑํ๊ฒ ๋ฉ๋๋ค. Context๋ API Handler์ ์ ๋ฌ๋๋ ์ธ์ฆ, Locale, Language, TimeZone ๋ฑ์ ์ ๋ณด๋ฅผ ํฌํจํ ๊ฐ์ฒด์
๋๋ค.
Locale
Locale ์ปจํ
์คํธ๋ ์์ฒญ ํค๋๋ก๋ถํฐ Locale, Language, TimeZone ๋ฑ์ ์ ๋ณด๋ฅผ ์ถ์ถํฉ๋๋ค.
Auth
์ธ์ฆ ์ปจํ
์คํธ๋ฅผ ํ์ฑํํ๊ธฐ ์ํด์๋ ์์ฒญ์ผ๋ก๋ถํฐ ์๋ฒ ์์ฑ ์ต์
์ ํตํด ์ธ์ฆ ์ ๋ณด๋ฅผ ์์ฑํ๋ ํจ์๋ฅผ ๊ตฌํํด์ผํฉ๋๋ค. ์๋ฅผ ๋ค์ด Bearer ํ ํฐ์ ํผ์ด ๋ชจ๋์ ํตํด ํตํด ํ์ฑํด idToken์ ํ๋ํ๊ฑฐ๋, ๋ณ๋์ ์ธ์ฆ ์๋ฒ์ ์ ๋ฌํด ์ํ๋ ๋ฐฉ์๋๋ก ํด์ ํ ์ ์์ต๋๋ค.
C. After Middleware
์๋ํฌ์ธํธ๋ก์์์ ์๋ต ํ์ ์ํ๋๋ ๋ฏธ๋ค์จ์ด์
๋๋ค.
Error
Error ๋ฏธ๋ค์จ์ด๋ ๋ถ์ฐ ์๋น์ค์ ์๋ฌ๋ฅผ ํ์
ํ๊ณ HTTP ์ํ ์ฝ๋๋ฅผ ์ค์ ํ๋ฉฐ ํ์คํ๋ ์๋ฌ ํฌ๋งท์ ์๋ต์ ์์ฑํฉ๋๋ค.
ETag
ETag ๋ฏธ๋ค์จ์ด๋ GET, HEAD ์์ฒญ ๋ฐ ์๋ต(200 OK)์์ If-None-Match ๋ฐ ETag ํค๋๋ฅผ ํ์ฉํด API ํด๋ผ์ด์ธํธ์ ์ฑ๋ฅ์ ๋ํ๋๋ค.
Header
Header ๋ฏธ๋ค์จ์ด๋ Header Context์ ๊ฐ์ด ํ ๋น๋ ๊ฒฝ์ฐ ์๋ต ํค๋๋ฅผ ์
๋ฐ์ดํธํฉ๋๋ค.
์์ฒญ์ด ์ ์ฒ๋ฆฌ ๋ฏธ๋ค์จ์ด, ์ปจํ
์คํธ ๋ฏธ๋ค์จ์ด๋ฅผ ํต๊ณผ ํ ํ์ ๋์ ์ผ๋ก ์์ฑ๋ ์๋ํฌ์ธํธ๋ก ๋ผ์ฐํ
๋ฉ๋๋ค. API ํธ๋ค๋ฌ๋ฅผ ํต๊ณผ ํ ํ ํ์ฒ๋ฆฌ ๋ฏธ๋ค์จ์ด๋ฅผ ์ง๋ ์์ฒญ์ด ์๋ฃ๋ฉ๋๋ค.
A. Dynamic Handler
๋์ ํธ๋ค๋ฌ๋ Gateway์ ์์ฑ๋ ๋ธ๋์น์ ๋ฐ๋ผ ์์ฒญ์ ๋ธ๋์น ํธ๋ค๋ฌ๋ก ํ๋ก์ํฉ๋๋ค.
B. Branch Handler
๋ธ๋์น ํธ๋ค๋ฌ๋ Gateway์ ์์ฑ๋ ํด๋น ๋ธ๋์น์ ํ๊ทธ์ ๋ฐ๋ผ ์์ฒญ์ ๋ฒ์ ํธ๋ค๋ฌ๋ก ํ๋ก์ํฉ๋๋ค.
C. Version Handler
๋ฒ์ ํธ๋ค๋ฌ๋ Gateway API ์คํค๋ง์ ๋ฐ๋ผ ์ปค๋ฅํฐ ๋ฐ ํ๋กํ ์ฝ ํ๋ฌ๊ทธ์ธ์ ์กฐํฉํด ์์ฑํ ํธ๋ค๋ฌ๋ก ์์ฒญ์ ํ๋ก์ํฉ๋๋ค.