2023. 9. 21. 02:28ใ0. TiL ( Today I Learned )
* ์ด๋ฒ ์ฃผํน๊ธฐํ๋ก์ ํธ์์ https๋ก ๋ฐฐํฌํด์ผ ํ๋ ๋ถ๋ถ์ด ์์๋ค.
๋ฐฐํฌํ๊ฒฝ์ ๋ง์ถฐ ์ค์ ์ ํ๋ฉด์ ์๊ฒ ๋ ๊ฒ๊ณผ ์ถ๊ฐ๋ก ๊ณต๋ถํ ๊ฒ๋ค์ ์ค๋์ til์ ๊ธฐ์ฌํด์ผ๊ฒ ๋ค.
Https๋ฅผ ์ ์จ์ผํ ๊น?
HTTPS๋ TLS ์ํธํ๋ฅผ ๊ฐ์ถ HTTP. HTTPS๋ TLS(SSL)๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๋ฐ HTTP ์์ฒญ๊ณผ ์๋ต์ ์ํธํํ๋ฏ๋ก ๋ ์์ ํ๊ณ ๋ณด์์ด ๊ฐํ๋ฉ๋๋ค. HTTPS๋ฅผ ์ฌ์ฉํ๋ ์น ์ฌ์ดํธ์ URL ์์๋ http:// ๋์ https://(์: https://www.cloudflare.com)๊ฐ ์๋ค.
์น ์ฌ์ดํธ์์๋ ์ HTTPS๋ฅผ ์ฌ์ฉํด์ผ ํ ๊น?
1) HTTPS๋ฅผ ์ฌ์ฉํ๋ ์น ์ฌ์ดํธ๋ ์ฌ์ฉ์๊ฐ ๋ ์ ๋ขฐํ ์ ์์ต๋๋ค.
HTTPS๋ฅผ ์ฌ์ฉํ๋ ์น ์ฌ์ดํธ๋ ์ง์ญ ์ํ ์์ ๊ฒ์ฌ๊ด์ผ๋ก๋ถํฐ "ํฉ๊ฒฉ"์ ๋ฐ์์์ ๊ฒ์ํ๋ ์๋น๊ณผ ๊ฐ๋ค.
์ ์ฌ ๊ณ ๊ฐ์ ํฐ ๋ถ์์ฉ ์์ด ํด๋น ์ ์ฒด๋ฅผ ์ด์ฉํ ์ ์๋ค๋ ๊ฒ์ ์ ๋ขฐํ ์ ์๋ค.
์์ฆ ๊ฐ์ ์๋์ HTTP๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ํ ์์ ๊ฒ์ฌ "๋ถํฉ๊ฒฉ" ํ์๋ฅผ ๊ฒ์ํ๋ ๊ฒ๊ณผ ๊ฐ๋ค. ๊ณ ๊ฐ์๊ฒ ๋ญ๊ฐ ์ ์ข์ ์ผ์ด ๋ฐ์ํ์ง ์๋๋ค๋ ๋ณด์ฅ์ด ์๋ค.
HTTPS๋ SSL/TLS ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ํต์ ์ ์ํธํํ๋ฏ๋ก ๊ณต๊ฒฉ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ํ์ทจํ ์ ์๋ค.
๋ํ SSL/TLS๋ ์น ์ฌ์ดํธ ์๋ฒ๊ฐ ์ค์ ์๋ฒ์์ ํ์ธํ๋ฏ๋ก ์ฌ์นญ์ด ๋ฐฉ์ง๋๋ค. ์ด๋ ์ํ ์์ ์ด ์ง๋ณ์ ์๋ฐฉํ๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฌ๋ฌ ์ข ๋ฅ์ ์ฌ์ด๋ฒ ๊ณต๊ฒฉ์ ์ฐจ๋จํ๋ค.
์ผ๋ถ ์ฌ์ฉ์๋ SSL/TLS์ ์ด์ ์ ์ธ์ํ์ง ๋ชปํ ์๋ ์์ง๋ง, ์ต์ ๋ธ๋ผ์ฐ์ ์์๋ ์ด๋ค ๊ฒฝ์ฐ์๋ ์น ์ฌ์ดํธ์ ์ ๋ขฐ์ฑ์ ์ธ์ํ๋๋ก ํ๊ณ ์๋ค.
โถ๏ธ Chrome ๋ฑ์ ๋ธ๋ผ์ฐ์ ์์๋ ๋ชจ๋ HTTP ์น ์ฌ์ดํธ๋ฅผ "์์ ํ์ง ์์"์ผ๋ก ํ์ํ๋ค.
Google์์๋ ์ฌ๋ฌ ํด์ ๊ฑธ์ณ ์ ์ง์ ์ผ๋ก ์กฐ์น๋ฅผ ์ทจํ์ฌ ์น ์ฌ์ดํธ์ HTTPS๋ฅผ ๋์
ํ๋๋ก ํ๋ค.
Google ๋ํ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๋ฐฉ์์์ ํ์ง ์์๋ก HTTPS๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์น ์ฌ์ดํธ์ ๋ณด์ ์์ค์ด ๋์์๋ก ๋ฐฉ๋ฌธ์๊ฐ Google์ด ์ ๊ณตํ ๋งํฌ๋ฅผ ํด๋ฆญํจ์ผ๋ก์จ ์ค์ํ ๊ฐ๋ฅ์ฑ์ด ๋ฎ์์ง๋ค.
2018๋
7์ Chrome 68 ์ถ์์ ํจ๊ป ๋ณดํธ๋์ง ์์ ๋ชจ๋ HTTP ํธ๋ํฝ์ URL ํ์์ค์ '์์ ํ์ง ์์'์ด๋ผ๊ณ ํ์๋๋ค. ์ด ์๋ฆผ์ ์ ํจํ SSL ์ธ์ฆ์๊ฐ ์๋ ๋ชจ๋ ์น ์ฌ์ดํธ์ ํ์๋๋ค. ( *๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ๋ ๊ทธ ๋ค๋ฅผ ๋ฐ๋ฆ )
2) ์ฌ์ฉ์์ ์น ์ฌ์ดํธ ์์ ์ ๋ชจ๋์๊ฒ HTTPS๊ฐ ๋ ์์ ํ๋ค.
HTTPS๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ณธ ์๋ฒ๋ก ์ ์ก๋๋ ๋ฐ์ดํฐ์ ์๋ณธ ์๋ฒ์์ ์์ ๋๋ ๋ฐ์ดํฐ์ ์๋ฐฉํฅ ์ ์ก์ด ๋ชจ๋ ์ํธํ๋ฉ๋๋ค. ํ๋กํ ์ฝ์ ์
์์ ์ธ ๋น์ฌ์๊ฐ ์ ์ก๋๋ ๋ฐ์ดํฐ๋ฅผ ๊ด์ฐฐํ ์ ์๋๋ก ํต์ ์ ์์ ํ๊ฒ ์ ์งํ๋ค. ๋ฐ๋ผ์ ์ฌ์ฉ์๊ฐ ์์์ ์ฌ์ฉ์ ์ด๋ฆ๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅํ ๋ ์ด๋ค ์ ๋ณด๊ฐ ์ ์ก ์ค์ ๋๋๋นํ์ง ์๋๋ค. ์น ์ฌ์ดํธ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฌ์ฉ์์๊ฒ ์ค์ํ ๋ฐ์ดํฐ๋ ๊ฐ์ธ ๋ฐ์ดํฐ(์: ์ํ ๊ณ์ข ์ ๋ณด)๋ฅผ ์ ์กํด์ผ ํ๋ ๊ฒฝ์ฐ, ์ํธํ๋ฅผ ํตํด ํด๋น ๋ฐ์ดํฐ๋ ๋ณดํธ๋ ์ ์๋ค.
3) HTTPS์์๋ ์น ์ฌ์ดํธ๊ฐ ์ธ์ฆ๋๋ค.
Uber๋ Lyft์ ๊ฐ์ ์ฐจ๋ ๊ณต์ ์ฑ์ ์ฌ์ฉ์๋ ์ด์ ์๊ฐ ํฝ์
ํ๋ฌ ์๋ค๊ณ ๋งํ๋ค๊ณ ํด์ ๋ฏ์ ์ฐจ์ ๋ฌด์์ ์ฌ๋ผํ ํ์๊ฐ ์๋ค. ๋์ ์ฑ์ ์ด์ ์์ ์ด๋ฆ๊ณผ ์ธ๋ชจ, ์ด์ ํ๋ ์ฐจ๋์ ์ข
๋ฅ, ์ฐจ๋ ๋ฒํธ ๋ฑ ์ด์ ์์ ๋ํ ์ ๋ณด๊ฐ ํ์๋๋ค. ๊ณต์ ์ฐจ๋์ด ๋ชจ๋ ๋ค๋ฅด๊ณ ์ด์ ์๋ฅผ ํ ๋ฒ๋ ๋ณธ ์ ์ด ์๋๋ผ๋ ์ฌ์ฉ์๋ ์ด๋ฌํ ์ฌํญ์ ํ์ธํด์ ์ฌ๋ฐ๋ฅธ ์ฐจ๋์ ํ์นํ๊ฒ ๋๋์ง ํ์ธํ ์ ์๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ์ฌ์ฉ์๊ฐ ์น ์ฌ์ดํธ๋ฅผ ํ์ํ ๋ ์ค์ ๋ก ํ๋ ์ผ์ ํ ๋ฒ๋ ๋ณธ ์ ์๋ ์ฌ๋์ด ๊ด๋ฆฌํ๋, ์ ์์ง ๋ชปํ๊ณ ๋จผ ๊ณณ์ ์๋ ์ปดํจํฐ์ ์ฐ๊ฒฐํ๋ ๊ฒ์ด๋ค. HTTPS๋ฅผ ํ์ฑํํ๋ SSL ์ธ์ฆ์๋ ์ฐจ๋ ๊ณต์ ์ฑ์ ์ด์ ์ ์ ๋ณด์ ๊ฐ๋ค. ์ด๋ ์ ๋ขฐํ ์ ์๋ ์ ์ผ์๊ฐ ์น ์๋ฒ๊ฐ ์์นญํ๋ ์ค์ฒด์์ ์ธ๋ถ์์ ๊ฒ์ฆํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ด๋ฅผ ํตํด ๊ณต๊ฒฉ์๊ฐ ์น ์ฌ์ดํธ๋ฅผ ์ฌ์นญํ๊ฑฐ๋ ์คํธํ ํ์ฌ ์ฌ์ฉ์๊ฐ ์ค์ ๋ก๋ ๊ฐ์ง ์ฌ์ดํธ์ ์ ์ํ๊ณ ์๋๋ฐ๋ ์๋ํ ์ฌ์ดํธ์ ์ ์ํ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ํ๋ ๊ณต๊ฒฉ์ด ๋ฐฉ์ง๋๋ค. ๋ํ HTTPS ์ธ์ฆ์ ํ์ฌ ์น ์ฌ์ดํธ๊ฐ ํฉ๋ฒ์ ์ผ๋ก ๋ณด์ด๋๋ก ํ๋ ๋ฐ ๋ง์ ๋์์ ์ฃผ๋ฉฐ, ์ด๋ ํ์ฌ์ ๋ํ ์ฌ์ฉ์์ ํ๋์๋ ์ํฅ์ ์ค๋ค.
HTTPS์ ๋ํ์ฌ ์คํด์ ์ง์ค
"์น ์ฌ์ดํธ์์ ์ค์ํ ์ ๋ณด๋ฅผ ์ทจ๊ธํ์ง ์์ผ๋ฏ๋ก HTTPS๊ฐ ํ์ํ์ง ์๋ค"
์๋ฅผ ๋ค์ด, ์ผ๋ถ ์ธํฐ๋ท ์๋น์ค ๊ณต๊ธ์๋ ์ค์ ๋ก HTTP๋ก ์ ๊ณต๋๋ ์น ์ฌ์ดํธ์ ๊ด๊ณ ๋ฅผ ์ฝ์ ํ๋ค. ์ด๋ฌํ ๊ด๊ณ ๋ ์น์ฌ์ดํธ์ ์ฝํ ์ธ ์ ๋ฐฉํฅ์ด ์ผ์นํ๊ฑฐ๋ ์ผ์นํ์ง ์์ ์ ์์ผ๋ฉฐ, ์น์ฌ์ดํธ ์์ต์ ๊ณต์ ํ์ง ์๋๋ค๋ ์ฌ์ค์ ์ ์ณ๋๋๋ผ๋, ์ ์ฌ์ ์ผ๋ก ๊ณต๊ฒฉ์ ์ผ ์ ์๋ค. ์ฌ์ดํธ์ ๋ณด์์ด ํ๋ณด๋๋ฉด ์ด๋ฌํ ์ฝ์ ๊ด๊ณ ๋ ๋ ์ด์ ์คํํ ์ ์๋ค. ์ต์ ์น ๋ธ๋ผ์ฐ์ ์์๋ ์ด์ ์์ ํ์ง ์์ ์ฌ์ดํธ์ ๋ํ์ฌ ๊ธฐ๋ฅ์ ์ ํํฉ๋๋ค. ์น ์ฌ์ดํธ์ ํ์ง์ ํฅ์ํ๋ ์ค์ํ ๊ธฐ๋ฅ์๋ ์ด์ HTTPS๊ฐ ํ์ํ๋ค. ์์น ์ ๋ณด, ํธ์ ์๋ฆผ, ํ๋ก๊ทธ๋ ์๋ธ ์น ์ ํ๋ฆฌ์ผ์ด์ (PWA)์ ์คํํ๋ ๋ฐ ํ์ํ Service Workers๋ ๋ชจ๋ ๊ฐํ๋ ๋ณด์์ ํ์๋ก ํ๋ค.
"ํ์ด์ง ๋ก๋ ์๊ฐ์ ๋๋ ค ์น ์ฌ์ดํธ์ ์ฑ๋ฅ์ ์ ํ์ํค๊ณ ์ถ์ง ์๋ค"
์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ HTTPS๊ฐ ๊ฐ์ ๋์ด ์ํธํ๋ ์ฐ๊ฒฐ์ ์ค์ ํ๋ ๋ฐ ํ์ํ ์ฑ๋ฅ ์ค๋ฒํค๋๋ฅผ ์ค์ผ ์ ์๊ฒ ๋์๋ค.
TLS ์ธ์
์ฌ๊ฐ ๋ฐ TLS ์๋ชป๋ ์์์ ํฌํจํ์ฌ ์ฐ๊ฒฐ ์์ฑ์ ์ด ๋๊ธฐ ์๊ฐ์ ์ค์ด๊ธฐ ์ํด TLS์ ๊ฐ์ ์ฌํญ์ด ๊ตฌํ๋์๋ค.
์ธ์
์ฌ์์์ ์ฌ์ฉํ๋ฉด ์๋ฒ๊ฐ ์ถ๊ฐ ์์ฒญ์ ๋ํด ๋์ผํ ์ธ์
์ ๋ค์ ์์ํ์ฌ ์ฐ๊ฒฐ์ ๋ ์ค๋ ์ ์งํ ์ ์์ต๋๋ค.
์ฐ๊ฒฐ์ ์ ์งํ๋ฉด ํด๋ผ์ด์ธํธ๊ฐ ์บ์ ๋์ง ์์ ์๋ณธ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์๊ตฌํ ๋ ์ฐ๊ฒฐ์ ๋ค์ ํ์ํ๋ ๋ฐ ์์๋๋ ์๊ฐ์ด ์ ์ฝ๋๋ฏ๋ก ์ด RTT๊ฐ 50% ๊ฐ์ํ๋ค.
"HTTPS๋ฅผ ๊ตฌํํ๋ ค๋ฉด ๋น์ฉ์ด ๋๋ฌด ๋ง์ด ๋ ๋ค"
์ด์ ๋ ๋ ์ด์ ๋น์ฉ์ด ๊ฑฑ์ ๋์ง ์์ต๋๋ค. Cloudflare์์๋ ์น ์ฌ์ดํธ์ ๋ฌด๋ฃ๋ก ์ ์ก์ ์ํธํํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
์ถ์ฒ : https://www.cloudflare.com/ko-kr/learning/ssl/why-use-https/#
์๋๋, ํ๋ก์ ํธ์์ https๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๋ณ๊ฒฝํ ๋ถ๋ถ์ด๋ค.
https๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์ฟ ํค๋ฅผ ์์ ํ๊ฒ ์ ์กํ๊ณ ๋ณดํธํ๊ธฐ ์ํด์ ์๋์ ๊ฐ์ ์ค์ ์ด ํ์ํ๋ค.
[๊ธฐ์กด์ฝ๋]
// ์ฌ์ฉ์ ๋ก๊ทธ์ธ API
res.cookie('Authorization', `Bearer${accessToken}`, {httpOnly: true});
res.cookie('refreshToken', refreshToken, {httpOnly: true});
//accessToken ์ฌ๋ฐ๊ธ API
res.cookie('newAccessToken', newAccessToken, {httpOnly: true});
๋ฌธ์ ์ : http์์๋ง ์ฌ์ฉ๋ ์ ์๋๋ก ์ค์ ๋์ด ์์ด์ https ๋ฐฐํฌํ๊ฒฝ์์๋ ๋ก๊ทธ์ธ์ด ๋์ง ์๋๋ค.
( * ํ์ธํ๋ ๋ฐฉ๋ฒ : ํฐ๋ฏธ๋์์ ubuntu๋ก ์ ์ํด ์์ ๋, pm2 log ๋ช ๋ น์ด๋ก ํ์ธ)
[ ํด๊ฒฐ๋ฐฉ๋ฒ]
httpOnly: true,
sameSite: process.env.NODE_ENV === ‘production’ ? ‘none’: ‘lax’, // https ํ๊ฒฝ์์๋ none์ผ๋ก ์ค์
secure: process.env.NODE_ENV === ‘production’ //์ด ์กฐ๊ฑด์ ์ํด์ true ์ผ ๊ฒฝ์ฐ์ '์ฟ ํค๋ HTTPS ์ฐ๊ฒฐ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ง ๋ธ๋ผ์ฐ์ ๋ก ์ ์กํ๋ค.'
์ ์ ๊ฐ์ ์ค์ ์ ์ถ๊ฐ๋ก ํด์ค์ผ ํ๋ค.
[๋ณ๊ฒฝ๋ ์ฝ๋]

// ์ฌ์ฉ์ ๋ก๊ทธ์ธ API
res.cookie('Authorization', `Bearer ${accessToken}`, cookieOptions)
res.cookie('refreshToken', refreshToken, cookieOptions);
//accessToken ์ฌ๋ฐ๊ธ API
res.cookie('newAccessToken', newAccessToken, cookieOptions);

๋ญ ํ๋๋ฐ
๋ฒ์จ ํ๋ก์ ํธ ์ผ์ฃผ์ผ ๋๋ฑ ๊ฐ์ฃ ?
.....
์ด๋ฌ๋ค ๋ ๊ฐ์๋ค ๋จ๋ฉด ํญํด ๋๋ฌ๊ฒ ๋ค..