diff --git a/translations/README-kr.md b/translations/README-kr.md new file mode 100644 index 0000000..782c1fa --- /dev/null +++ b/translations/README-kr.md @@ -0,0 +1,1739 @@ +
+ ++ ใ + + ๐จ๐ปโ๐ป YouTube + | + + ๐ฎ Newsletter + ใ +
+ + + +# System Design 101 + +์๊ฐ ์๋ฃ์ ๊ฐ๋จํ ์ฉ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ณต์กํ ์์คํ ์ ์ค๋ช ํฉ๋๋ค. + +์์คํ ๋์์ธ ๋ฉด์ ์ ์ค๋น ์ค์ด๊ฑฐ๋ ๋จ์ํ ์์คํ ์ด ํ๋ฉด ์๋์์ ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํดํ๊ณ ์ถ์ผ์ ๋ถ์ด๋ผ๋ฉด ์ด ๋ฆฌํฌ์งํ ๋ฆฌ๊ฐ ๋์์ด ๋๊ธธ ๋ฐ๋๋๋ค. + +# ๋ชฉ์ฐจ + + + +- [Communication protocols](#communication-protocols) + - [REST API vs GraphQL](#rest-api-vs-graphql) + - [gRPC๋ ์ด๋ป๊ฒ ์๋ํ๋์?](#grpc๋-์ด๋ป๊ฒ-์๋ํ๋์) + - [webhook์ด๋ ๋ฌด์์ธ๊ฐ์?](#webhook์ด๋-๋ฌด์์ธ๊ฐ์) + - [API ์ฑ๋ฅ์ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ธ๊ฐ์?](#api-์ฑ๋ฅ์-๊ฐ์ ํ๋-๋ฐฉ๋ฒ์-๋ฌด์์ธ๊ฐ์) + - [HTTP 1.0 -\> HTTP 1.1 -\> HTTP 2.0 -\> HTTP 3.0 (QUIC)](#http-10---http-11---http-20---http-30-quic) + - [SOAP vs REST vs GraphQL vs RPC](#soap-vs-rest-vs-graphql-vs-rpc) + - [Code First vs API First](#code-first-vs-api-first) + - [HTTP status codes](#http-status-codes) + - [API gateway๋ ๋ฌด์์ ํ๋์?](#api-gateway๋-๋ฌด์์-ํ๋์) + - [ํจ๊ณผ์ ์ด๊ณ ์์ ํ API๋ฅผ ์ค๊ณํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์?](#ํจ๊ณผ์ ์ด๊ณ -์์ ํ-api๋ฅผ-์ค๊ณํ๋ ค๋ฉด-์ด๋ป๊ฒ-ํด์ผ-ํ ๊น์) + - [TCP/IP encapsulation](#tcpip-encapsulation) + - [์ Nginx๋ฅผ "reverse" ํ๋ก์๋ผ๊ณ ๋ถ๋ฅด๋์?](#์-nginx๋ฅผ-reverse-ํ๋ก์๋ผ๊ณ -๋ถ๋ฅด๋์) + - [์ผ๋ฐ์ ์ธ ๋ก๋ ๋ฐธ๋ฐ์ฑ ์๊ณ ๋ฆฌ์ฆ์ ๋ฌด์์ธ๊ฐ์?](#์ผ๋ฐ์ ์ธ-๋ก๋-๋ฐธ๋ฐ์ฑ-์๊ณ ๋ฆฌ์ฆ์-๋ฌด์์ธ๊ฐ์) + - [URL, URI, URN - ์ฐจ์ด๋ฅผ ์๊ณ ์๋์?](#url-uri-urn---์ฐจ์ด๋ฅผ-์๊ณ -์๋์) +- [CI/CD](#cicd) + - [์ฌ์ด ์ฉ์ด๋ก ์ค๋ช ํ๋ CI/CD ํ์ดํ๋ผ์ธ](#์ฌ์ด-์ฉ์ด๋ก-์ค๋ช ํ๋-cicd-ํ์ดํ๋ผ์ธ) + - [๋ทํ๋ฆญ์ค ๊ธฐ์ ์คํ (CI/CD Pipeline)](#๋ทํ๋ฆญ์ค-๊ธฐ์ ์คํ-cicd-pipeline) +- [์ํคํ ์ฒ ํจํด](#์ํคํ ์ฒ-ํจํด) + - [MVC, MVP, MVVM, MVVM-C, VIPER](#mvc-mvp-mvvm-mvvm-c-and-viper) + - [๋ชจ๋ ๊ฐ๋ฐ์๊ฐ ์์์ผ ํ 18๊ฐ์ง ํต์ฌ ๋์์ธ ํจํด](#๋ชจ๋ -๊ฐ๋ฐ์๊ฐ-์์์ผ-ํ -18๊ฐ์ง-ํต์ฌ-๋์์ธ-ํจํด) +- [๋ฐ์ดํฐ๋ฒ ์ด์ค](#๋ฐ์ดํฐ๋ฒ ์ด์ค) + - [ํด๋ผ์ฐ๋ ์๋น์ค์ ๋ค์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ดํ ์นํธ์ํธ](#ํด๋ผ์ฐ๋-์๋น์ค์-๋ค์ํ-๋ฐ์ดํฐ๋ฒ ์ด์ค์-๊ดํ-์นํธ์ํธ) + - [๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ฐํํ๋ 8๊ฐ์ง ๋ฐ์ดํฐ ๊ตฌ์กฐ](#๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ-๊ฐํํ๋-8๊ฐ์ง-๋ฐ์ดํฐ-๊ตฌ์กฐ) + - [๋ฐ์ดํฐ๋ฒ ์ด์ค์์ SQL ๋ฌธ์ ์ด๋ป๊ฒ ์คํ๋๋์?](#๋ฐ์ดํฐ๋ฒ ์ด์ค์์-SQL-๋ฌธ์-์ด๋ป๊ฒ-์คํ๋๋์) + - [CAP ์ ๋ฆฌ](#cap-์ ๋ฆฌ) + - [๋ฉ๋ชจ๋ฆฌ ๋ฐ ์คํ ๋ฆฌ์ง์ ์ข ๋ฅ](#๋ฉ๋ชจ๋ฆฌ-๋ฐ-์คํ ๋ฆฌ์ง์-์ข ๋ฅ) + - [SQL ์ฟผ๋ฆฌ ์๊ฐํ](#SQL-์ฟผ๋ฆฌ-์๊ฐํ) + - [SQL ์ธ์ด](#sql-์ธ์ด) +- [์บ์](#์บ์) + - [๋ฐ์ดํฐ๋ ์ด๋์๋ ์บ์๋ฉ๋๋ค](#๋ฐ์ดํฐ๋-์ด๋์๋-์บ์๋ฉ๋๋ค) + - [Redis๋ ์ ๋น ๋ฅธ๊ฐ์?](#redis๋-์-๋น ๋ฅธ๊ฐ์) + - [Redis๋ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์?](#redis๋-์ด๋ป๊ฒ-์ฌ์ฉํ๋์) + - [์ฃผ์ ์บ์ฑ ์ ๋ต](#์ฃผ์-์บ์ฑ-์ ๋ต) +- [๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ](#๋ง์ดํฌ๋ก์๋น์ค-์ํคํ ์ฒ) + - [์ผ๋ฐ์ ์ธ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ๋ ์ด๋ค ๋ชจ์ต์ผ๊น์?](#์ผ๋ฐ์ ์ธ-๋ง์ดํฌ๋ก์๋น์ค-์ํคํ ์ฒ๋-์ด๋ค-๋ชจ์ต์ผ๊น์) + - [๋ง์ดํฌ๋ก์๋น์ค ๋ชจ๋ฒ ์ฌ๋ก](#๋ง์ดํฌ๋ก์๋น์ค-๋ชจ๋ฒ์ฌ๋ก) + - [๋ง์ดํฌ๋ก์๋น์ค์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ธฐ์ ์คํ์ ๋ฌด์์ธ๊ฐ์?](#๋ง์ดํฌ๋ก์๋น์ค์-์ผ๋ฐ์ ์ผ๋ก-์ฌ์ฉํ๋-๊ธฐ์ -์คํ์-๋ฌด์์ธ๊ฐ์) + - [์นดํ์นด๊ฐ ๋น ๋ฅธ ์ด์ ](#์นดํ์นด๊ฐ-๋น ๋ฅธ-์ด์ ) +- [๊ฒฐ์ ์์คํ ](#๊ฒฐ์ -์์คํ ) + - [๊ฒฐ์ ์์คํ ์ ์ด๋ป๊ฒ ๋ฐฐ์ฐ๋์?](#๊ฒฐ์ -์์คํ ์-์ด๋ป๊ฒ-๋ฐฐ์ฐ๋์) + - [์ ์ฉ์นด๋๋ฅผ "์ํ์์ ๊ฐ์ฅ ์์ต์ฑ์ด ๋์ ์ํ"์ด๋ผ๊ณ ๋ถ๋ฅด๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์? ๋น์/๋ง์คํฐ์นด๋๋ ์ด๋ป๊ฒ ์์ต์ ์ฐฝ์ถํ๋์?](#์ ์ฉ์นด๋๋ฅผ-์ํ์์-๊ฐ์ฅ-์์ต์ฑ์ด-๋์-์ํ์ด๋ผ๊ณ -๋ถ๋ฅด๋-์ด์ ๋-๋ฌด์์ธ๊ฐ์-๋น์๋ง์คํฐ์นด๋๋-์ด๋ป๊ฒ-์์ต์-์ฐฝ์ถํ๋์) + - [์์ ์์ ์ฐ๋ฆฌ๊ฐ ์ ์ฉ์นด๋๋ฅผ ๊ธ์ ๋, VISA๋ ์ด๋ป๊ฒ ์๋ํ๋์?](#์์ ์์-์ฐ๋ฆฌ๊ฐ-์ ์ฉ์นด๋๋ฅผ-๊ธ์-๋-visa๋-์ด๋ป๊ฒ-์๋ํ๋์) + - [์ธ๊ณ์ ๊ฒฐ์ ์์คํ ์๋ฆฌ์ฆ(1๋ถ): ์ธ๋์ ํตํฉ ๊ฒฐ์ ์ธํฐํ์ด์ค(UPI)](#์ธ๊ณ์-๊ฒฐ์ -์์คํ -์๋ฆฌ์ฆ1๋ถ-์ธ๋์-ํตํฉ-๊ฒฐ์ -์ธํฐํ์ด์คupi) +- [DevOps](#devops) + - [DevOps vs SRE vs Platform Engineering ๋ฌด์์ด ๋ค๋ฅธ๊ฐ์?](#devops-vs-sre-vs-platform-engineering-๋ฌด์์ด-๋ค๋ฅธ๊ฐ์) + - [k8s(Kubernetes)๋ ๋ฌด์์ธ๊ฐ์?](#k8skubernetes๋-๋ฌด์์ธ๊ฐ์) + - [Docker vs Kubernetes. ์ด๋ค๊ฒ์ ์ฌ์ฉํด์ผ ํ๋์?](#docker-vs-kubernetes-์ด๋ค๊ฒ์-์ฌ์ฉํด์ผ-ํ๋์) + - [Docker๋ ์ด๋ป๊ฒ ์๋ํ๋์?](#docker๋-์ด๋ป๊ฒ-์๋ํ๋์) +- [GIT](#git) + - [Git Commands ์๋ ๋ฐฉ์](#git-commands-์๋-๋ฐฉ์) + - [Git์ ์ด๋ป๊ฒ ์๋ํ๋์?](#git์-์ด๋ป๊ฒ-์๋ํ๋์) + - [Git merge vs Git rebase](#git-merge-vs-git-rebase) +- [ํด๋ผ์ฐ๋ ์๋น์ค](#ํด๋ผ์ฐ๋-์๋น์ค) + - [๋ค์ํ ํด๋ผ์ฐ๋ ์๋น์ค์ ๋ํ ์ ์ฉํ ์นํธ์ํธ(2023๋ ํ)](#๋ค์ํ-ํด๋ผ์ฐ๋-์๋น์ค์-๋ํ-์ ์ฉํ-์นํธ์ํธ2023๋ ํ) + - [cloud native๋ ๋ฌด์์ธ๊ฐ์?](#cloud-native๋-๋ฌด์์ธ๊ฐ์) +- [๊ฐ๋ฐ์ ์์ฐ์ฑ ๋๊ตฌ](#๊ฐ๋ฐ์-์์ฐ์ฑ-๋๊ตฌ) + - [JSON ํ์ผ ์๊ฐํ](#json-ํ์ผ-์๊ฐํ) + - [์ฝ๋๋ฅผ ์ํคํ ์ฒ ๋ค์ด์ด๊ทธ๋จ์ผ๋ก ์๋ ๋ณํ](#์ฝ๋๋ฅผ-์ํคํ ์ฒ-๋ค์ด์ด๊ทธ๋จ์ผ๋ก-์๋-๋ณํ) +- [๋ฆฌ๋ ์ค](#๋ฆฌ๋ ์ค) + - [๋ฆฌ๋ ์ค ํ์ผ ์์คํ ์ค๋ช ](#๋ฆฌ๋ ์ค-ํ์ผ-์์คํ -์ค๋ช ) + - [๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ 18๊ฐ์ง ๋ฆฌ๋ ์ค ์ปค๋งจ๋ ์์๋ณด๊ธฐ](#๊ฐ์ฅ-๋ง์ด-์ฌ์ฉ๋๋-18๊ฐ์ง-๋ฆฌ๋ ์ค-์ปค๋งจ๋-์์๋ณด๊ธฐ) +- [๋ณด์](#๋ณด์) + - [HTTPS๋ ์ด๋ป๊ฒ ์๋ํ๋์?](#https๋-์ด๋ป๊ฒ-์๋ํ๋์) + - [๊ฐ๋จํ ์ฉ์ด๋ก ์ค๋ช ํ๋ Oauth 2.0](#๊ฐ๋จํ-์ฉ์ด๋ก-์ค๋ช ํ๋-oauth-20) + - [์ธ์ฆ ๋ฉ์ปค๋์ฆ์ 4๊ฐ์ง ์ฃผ์ ํํ](#์ธ์ฆ-๋ฉ์ปค๋์ฆ์-4๊ฐ์ง-์ฃผ์-ํํ) + - [Session, cookie, JWT, token, SSO, OAuth 2.0 - ๊ทธ๊ฒ ๋ญ๊ฐ์?](#session-cookie-jwt-token-sso-oauth-20---๊ทธ๊ฒ-๋ญ๊ฐ์) + - [๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋น๋ฐ๋ฒํธ๋ฅผ ์์ ํ๊ฒ ์ ์ฅํ๋ ๋ฐฉ๋ฒ๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ธ๊ฐ์?](#๋ฐ์ดํฐ๋ฒ ์ด์ค์-๋น๋ฐ๋ฒํธ๋ฅผ-์์ ํ๊ฒ-์ ์ฅํ๋-๋ฐฉ๋ฒ๊ณผ-๋น๋ฐ๋ฒํธ๋ฅผ-ํ์ธํ๋-๋ฐฉ๋ฒ์-๋ฌด์์ธ๊ฐ์) + - [10์ธ ์ด๋ฆฐ์ด์๊ฒ JSON Web Token(JWT) ์ค๋ช ํ๊ธฐ](#10์ธ-์ด๋ฆฐ์ด์๊ฒ-json-web-tokenjwt-์ค๋ช ํ๊ธฐ) + - [Google authenticator(๋๋ ๋ค๋ฅธ ์ ํ์ 2 factor authenticator)๋ ์ด๋ป๊ฒ ์๋ํ๋์?](#google-authenticator๋๋-๋ค๋ฅธ-์ ํ์-2-factor-authenticator๋-์ด๋ป๊ฒ-์๋ํ๋์) +- [์ค์ ์ฌ๋ก ์ฐ๊ตฌ](#์ค์ -์ฌ๋ก-์ฐ๊ตฌ) + - [๋ทํ๋ฆญ์ค ๊ธฐ์ ์คํ](#๋ทํ๋ฆญ์ค-๊ธฐ์ -์คํ) + - [ํธ์ํฐ ์ํคํ ์ฒ 2022](#ํธ์ํฐ-์ํคํ ์ฒ-2022) + - [์ง๋ 15๋ ๊ฐ ์์ด๋น์ค๋น ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์ ์งํ ๊ณผ์ ](#์ง๋-15๋ ๊ฐ-์์ด๋น์ค๋น-๋ง์ดํฌ๋ก์๋น์ค-์ํคํ ์ฒ์-์งํ-๊ณผ์ ) + - [๋ชจ๋ ธ๋ ํฌ vs ๋ง์ดํฌ๋ก๋ ํฌ](#๋ชจ๋ ธ๋ ํฌ-vs-๋ง์ดํฌ๋ก๋ ํฌ) + - [์คํ ์ค๋ฒํ๋ก ์น์ฌ์ดํธ๋ฅผ ์ด๋ป๊ฒ ๋์์ธํ ๊ฑด๊ฐ์?](#์คํ-์ค๋ฒํ๋ก-์น์ฌ์ดํธ๋ฅผ-์ด๋ป๊ฒ-๋์์ธํ -๊ฑด๊ฐ์) + - [์๋ง์กด ํ๋ผ์ ๋น๋์ค ๋ชจ๋ํฐ๋ง์ด ์๋ฒ๋ฆฌ์ค์์ ๋ชจ๋๋ฆฌ์์ผ๋ก ์ ํ๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์? ์ด๋ป๊ฒ 90%์ ๋น์ฉ์ ์ ๊ฐํ ์ ์์๊น์?](#์๋ง์กด-ํ๋ผ์-๋น๋์ค-๋ชจ๋ํฐ๋ง์ด-์๋ฒ๋ฆฌ์ค์์-๋ชจ๋๋ฆฌ์์ผ๋ก-์ ํ๋-์ด์ ๋-๋ฌด์์ธ๊ฐ์-์ด๋ป๊ฒ-90์-๋น์ฉ์-์ ๊ฐํ -์-์์๊น์) + - [๋์ฆ๋ ํซ์คํ๋ ์ด๋ป๊ฒ ํ ๋๋จผํธ ๊ธฐ๊ฐ ๋์ 50์ต ๊ฐ์ ์ด๋ชจํฐ์ฝ์ ํ๋ํ ์ ์์๋์?](#๋์ฆ๋-ํซ์คํ๋-์ด๋ป๊ฒ-ํ ๋๋จผํธ-๊ธฐ๊ฐ-๋์-50์ต-๊ฐ์-์ด๋ชจํฐ์ฝ์-ํ๋ํ -์-์์๋์) + - [Discord๊ฐ ์์กฐ ๊ฐ์ ๋ฉ์์ง๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ](#discord๊ฐ-์์กฐ-๊ฐ์-๋ฉ์์ง๋ฅผ-์ ์ฅํ๋-๋ฐฉ๋ฒ) + - [๋์์ ๋ผ์ด๋ธ ์คํธ๋ฆฌ๋ฐ์ YouTube, TikTok ๋ผ์ด๋ธ, Twitch์์ ์ด๋ป๊ฒ ์๋ํ๋์?](#๋์์-๋ผ์ด๋ธ-์คํธ๋ฆฌ๋ฐ์-youtube-tiktok-๋ผ์ด๋ธ-twitch์์-์ด๋ป๊ฒ-์๋ํ๋์) + + + +## Communication protocols + +์ํคํ ์ฒ ์คํ์ผ์ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค(API)์ ์ฌ๋ฌ ๊ตฌ์ฑ ์์๊ฐ ์๋ก ์ํธ ์์ฉํ๋ ๋ฐฉ์์ ์ ์ํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก API๋ฅผ ์ค๊ณํ๊ณ ๊ตฌ์ถํ๋ ํ์ค ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํจ์ผ๋ก์จ ํจ์จ์ฑ, ์์ ์ฑ, ๋ค๋ฅธ ์์คํ ๊ณผ์ ์ฌ์ด ํตํฉ์ ๋ณด์ฅํฉ๋๋ค. ๋ค์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์คํ์ผ์ ๋๋ค. + ++ +
+ +- SOAP:ย + + ์ฑ์ํ๊ณ , ํฌ๊ด์ ์ด๊ณ , XML ๊ธฐ๋ฐ + + ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ฅ ์ ํฉ + +- RESTful:ย + + ์ธ๊ธฐ์๊ณ , ๊ตฌํํ๊ธฐ ์ฝ๊ณ , HTTP methodsย + + ์น ์๋น์ค์ ์ด์์ ย + +- GraphQL:ย + + ์ฟผ๋ฆฌ ์ธ์ด, ํน์ ๋ฐ์ดํฐ ์์ฒญย + + ๋คํธ์ํฌ ์ค๋ฒํค๋ ๊ฐ์, ๋น ๋ฅธ ์๋ต + +- gRPC:ย + + Modern, high-performance, Protocol Buffersย + + ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์ ์ ํฉ + +- WebSocket:ย + + ์ค์๊ฐ, ์๋ฐฉํฅ, ์ง์์ ์ธ ์ฐ๊ฒฐ + + ์ง์ฐ ์๊ฐ์ด ์งง์ ๋ฐ์ดํฐ์ ์ ํฉ + +- Webhook:ย + + ์ด๋ฒคํธ ๊ธฐ๋ฐ, HTTP ์ฝ๋ฐฑ, ๋น๋๊ธฐ์ย + + ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ์์คํ ์ ์๋ฆผ + + +### REST API vs GraphQL + +API ์ค๊ณ์ ์์ด์ REST์ GraphQL์ ๊ณ ์ ์ ์ฅ๋จ์ ์ด ์์ต๋๋ค. + +์๋ ๋ค์ด์ด๊ทธ๋จ์ REST์ GraphQL์ ๊ฐ๋ตํ๊ฒ ๋น๊ตํ ๊ฒ์ ๋๋ค. + ++ +
+ +REST + +- CRUD ์์ ์ GET, POST, PUT, DELETE์ ๊ฐ์ ํ์ค HTTP ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. +- ์๋ก ๋ค๋ฅธ ์๋น์ค/์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ ๊ฐ๋จํ๊ณ ๊ท ์ผํ ์ธํฐํ์ด์ค๊ฐ ํ์ํ ๋ ํจ๊ณผ์ ์ ๋๋ค. +- ์บ์ฑ ์ ๋ต์ ๊ตฌํ์ด ๊ฐ๋จํฉ๋๋ค. +- ๋จ์ ์ผ๋ก ๋ณ๋์ ์๋ํฌ์ธํธ์์ ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ธฐ ์ํด ์ฌ๋ฌ ๋ฒ์ ์๋ณต์ด ํ์ํ ์ ์์ต๋๋ค. + +GraphQL + +- ํด๋ผ์ด์ธํธ๊ฐ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ํํ๊ฒ ์ฟผ๋ฆฌํ ์ ์๋ ๋จ์ผ ์๋ํฌ์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. +- ํด๋ผ์ด์ธํธ๊ฐ ์ค์ฒฉ ์ฟผ๋ฆฌ์ ํ์ํ ์ ํํ ํ๋๋ฅผ ์ง์ ํ๋ฉด ์๋ฒ๋ ํด๋น ํ๋๋ง ํฌํจํ ์ต์ ํ๋ ํ์ด๋ก๋๋ฅผ ๋ฐํํฉ๋๋ค. +- ๋ฐ์ดํฐ ์์ ์ ์ํ ๋ฎคํ ์ด์ ๊ณผ ์ค์๊ฐ ์๋ฆผ์ ์ํ ๊ตฌ๋ ์ ์ง์ํฉ๋๋ค. +- ์ฌ๋ฌ ์์ค์ ๋ฐ์ดํฐ๋ฅผ ์์งํ๋๋ฐ ์ ํฉํ๋ฉฐ ๋น ๋ฅด๊ฒ ์งํํ๋ ํ๋ก ํธ์๋ ์๊ตฌ์ฌํญ์ ์ ๋ง์ต๋๋ค. +- ํ์ง๋ง ๋ณต์ก์ฑ์ ํด๋ผ์ด์ธํธ ์ธก์ผ๋ก ์ ๊ฐํ๋ฉฐ, ์ ๋๋ก ๋ณดํธํ์ง ์์ผ๋ฉด ์ ์์ ์ธ ์ฟผ๋ฆฌ๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค. +- ์บ์ฑ ์ ๋ต์ REST๋ณด๋ค ๋ ๋ณต์กํ ์ ์์ต๋๋ค. + +์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ฐ๋ฐํ์ ๊ตฌ์ฒด์ ์ธ ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ REST์ GraphQL ์ค ์ ํฉํ ๊ฒ์ ์ ํํด์ผ ํฉ๋๋ค. GraphQL์ ๋ณต์กํ๊ฑฐ๋ ์์ฃผ ๋ณ๊ฒฝ๋๋ ํ๋ก ํธ์๋ ์๊ตฌ์ฌํญ์ ์ ํฉํ๋ฉฐ, REST๋ ๋จ์ํ๊ณ ์ผ๊ด๋ ๊ณ์ฝ์ด ์ ํธ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํฉ๋๋ค. + +๋ API ๋ฐฉ์ ๋ชจ๋ ์์ด์์ ์๋๋๋ค. ์ฌ๋ฐ๋ฅธ ์คํ์ผ์ ์ ํํ๋ ค๋ฉด ์๊ตฌ ์ฌํญ๊ณผ ์ฅ๋จ์ ์ ์ ์คํ๊ฒ ๊ฒํ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. REST์ GraphQL์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ ธ์ถํ๊ณ ์ต์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ๋ํ๋ ๋ฐ ์ ํจํ ์ต์ ์ ๋๋ค. + + +### gRPC๋ ์ด๋ป๊ฒ ์๋ํ๋์? + +RPC(Remote Procedure Call)๋ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์์ ์๋น์ค๊ฐ ์๋ก ๋ค๋ฅธ ์๋ฒ์ ๋ฐฐํฌ๋ ๋ ์๊ฒฉ ์๋น์ค ๊ฐ์ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ๋๋ฌธ์ "**remote**"๋ผ๊ณ ๋ถ๋ฆฝ๋๋ค. ์ฌ์ฉ์ ์ ์ฅ์์๋ ๋ก์ปฌ ํจ์ ํธ์ถ์ฒ๋ผ ์๋ํฉ๋๋ค. + +์๋ ๋ค์ด์ด๊ทธ๋จ์ **gRPC**์ ์ ์ฒด ๋ฐ์ดํฐ ํ๋ก์ฐ๋ฅผ ๋ณด์ฌ์ค๋๋ค. + ++ +
+ +1๋จ๊ณ: ํด๋ผ์ด์ธํธ์์ REST ํธ์ถ์ ์ํํฉ๋๋ค. request body๋ ์ผ๋ฐ์ ์ผ๋ก JSON ํฌ๋งท์ ๋๋ค. + +2-4๋จ๊ณ: ์ฃผ๋ฌธ ์๋น์ค(gRPC ํด๋ผ์ด์ธํธ)๊ฐ REST ํธ์ถ์ ์์ ํ์ฌ ๋ณํํ ํ ๊ฒฐ์ ์๋น์ค์ RPC ํธ์ถ์ ํฉ๋๋ค. gRPC๋ **client stub**์ ๋ฐ์ด๋๋ฆฌ๋ก ์ธ์ฝ๋ฉํ์ฌ ๋ก์ฐ๋ ๋ฒจ ์ ์ก ๊ณ์ธต์ผ๋ก ๋ณด๋ ๋๋ค. + +5๋จ๊ณ: gRPC๊ฐ HTTP2๋ฅผ ํตํด ํจํท์ ์ ์กํฉ๋๋ค. ๋ฐ์ด๋๋ฆฌ ์ธ์ฝ๋ฉ๊ณผ ๋คํธ์ํฌ ์ต์ ํ๋ก ์ธํด gRPC๋ JSON๋ณด๋ค 5๋ฐฐ ๋น ๋ฅด๋ค๊ณ ํฉ๋๋ค. + +6-8๋จ๊ณ: ๊ฒฐ์ ์๋น์ค(gRPC ์๋ฒ)๊ฐ ๋คํธ์ํฌ์์ ํจํท์ ์์ ํ๊ณ , ์ด๋ฅผ ๋์ฝ๋ฉํ ํ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ํธ์ถํฉ๋๋ค. + +9-11๋จ๊ณ: ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๊ณ ์ธ์ฝ๋ฉํ์ฌ ์ ์ก ๊ณ์ธต์ผ๋ก ์ ์กํฉ๋๋ค. + +12-14๋จ๊ณ: ์ฃผ๋ฌธ ์๋น์ค๊ฐ ํจํท์ ์์ ํ์ฌ ๋์ฝ๋ฉํ ํ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด๋ ๋๋ค. + +### webhook์ด๋ ๋ฌด์์ธ๊ฐ์? + +์๋ ๋ค์ด์ด๊ทธ๋จ์ ํด๋ง๊ณผ ์นํ ์ ๋น๊ตํ ๊ฒ์ ๋๋ค. + ++ +
+ +์ ์์๊ฑฐ๋ ์น์ฌ์ดํธ๋ฅผ ์ด์ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ API ๊ฒ์ดํธ์จ์ด๋ฅผ ํตํด ์ฃผ๋ฌธ ์๋น์ค๋ก ์ฃผ๋ฌธ์ ๋ณด๋ด๋ฉด, ์ฃผ๋ฌธ ์๋น์ค๋ ๊ฒฐ์ ํธ๋์ญ์ ์ ์ํด ๊ฒฐ์ ์๋น์ค๋ก ์ด๋ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ๊ฒฐ์ ์๋น์ค๋ ์ธ๋ถ ๊ฒฐ์ ์๋น์ค ๊ณต๊ธ์ ์ฒด(PSP)์ ํต์ ํ์ฌ ํธ๋์ญ์ ์ ์๋ฃํฉ๋๋ค. + +์ธ๋ถ PSP์์ ํต์ ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์๋ ๋ ๊ฐ์ง๊ฐ ์์ต๋๋ค. + +**1. ์ ํด๋ง Short polling**ย + +๊ฒฐ์ ์์ฒญ์ PSP์ ์ ์กํ ํ ๊ฒฐ์ ์๋น์ค์์ PSP์ ๊ฒฐ์ ์ํ๋ฅผ ๊ณ์ ๋ฌป์ต๋๋ค. ๋ช ๋ฒ์ ๋ผ์ด๋๊ฐ ๋๋๋ฉด PSP๋ ๋ง์นจ๋ด ์ํ๋ฅผ ๋ฐํํฉ๋๋ค.ย + +์ ํด๋ง์๋ ๋ ๊ฐ์ง ๋จ์ ์ด ์์ต๋๋ค. +- ์ํ๋ฅผ ์ง์์ ์ผ๋ก ํด๋งํ๋ ค๋ฉด ๊ฒฐ์ ์๋น์ค์ ๋ฆฌ์์ค๊ฐ ํ์ํฉ๋๋ค. +- ์ธ๋ถ ์๋น์ค๊ฐ ๊ฒฐ์ ์๋น์ค์ ์ง์ ํต์ ํ๋ฏ๋ก ๋ณด์ ์ทจ์ฝ์ ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. + +**2. ์นํ Webhook**ย + +์ธ๋ถ ์๋น์ค์ ์นํ ์ ๋ฑ๋กํ ์ ์์ต๋๋ค. ์ฆ, ์์ฒญ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ ๋ ํน์ URL๋ก ๋ค์ ํธ์ถํ๋ผ๋ ์๋ฏธ์ ๋๋ค. PSP๊ฐ ์ฒ๋ฆฌ๋ฅผ ์๋ฃํ๋ฉด HTTP ์์ฒญ์ ํธ์ถํ์ฌ ๊ฒฐ์ ์ํ๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค. + +์ด๋ฌํ ๋ฐฉ์์ผ๋ก ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ด ๋ฐ๋๊ณ ๊ฒฐ์ ์๋น์ค๋ ๋ ์ด์ ๊ฒฐ์ ์ํ๋ฅผ ํด๋งํ๊ธฐ ์ํด ๋ฆฌ์์ค๋ฅผ ๋ญ๋นํ ํ์๊ฐ ์์ต๋๋ค. + +PSP๊ฐ ๋ค์ ์๋ตํ์ง ์์ผ๋ฉด ์ด๋ป๊ฒ ํ๋์? ๋งค ์๊ฐ ๊ฒฐ์ ์ํ๋ฅผ ํ์ธํ๋๋ก ํ์ฐ์คํคํ ์์ ์ ์ค์ ํ ์ ์์ต๋๋ค. + +์นํ ์ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ HTTP ์์ฒญ์ ๋ณด๋ด๊ธฐ ๋๋ฌธ์ ๋ฆฌ๋ฒ์ค API ๋๋ ํธ์ API๋ผ๊ณ ๋ ๋ถ๋ฆฝ๋๋ค. ์นํ ์ ์ฌ์ฉํ ๋๋ ๋ค์ ์ธ ๊ฐ์ง ์ฌํญ์ ์ฃผ์ํด์ผ ํฉ๋๋ค. + +1. ์ธ๋ถ ์๋น์ค๊ฐ ํธ์ถํ ์ ์๋ ์ ์ ํ API๋ฅผ ์ค๊ณํด์ผ ํฉ๋๋ค. +2. ๋ณด์์ ์ํด API ๊ฒ์ดํธ์จ์ด์ ์ ์ ํ ๊ท์น์ ์ค์ ํด์ผ ํฉ๋๋ค. +3. ์ธ๋ถ ์๋น์ค์ ์ฌ๋ฐ๋ฅธ URL์ ๋ฑ๋กํด์ผ ํฉ๋๋ค. + +### API ์ฑ๋ฅ์ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ธ๊ฐ์? + +์๋ ๋ค์ด์ด๊ทธ๋จ์ API ์ฑ๋ฅ์ ๊ฐ์ ํ๋ 5๊ฐ์ง ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. + ++ +
+ +Pagination + +์ด๋ ๊ฒฐ๊ณผ์ ํฌ๊ธฐ๊ฐ ํด ๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ ์ต์ ํ ๋ฐฉ๋ฒ์ ๋๋ค. ์๋น์ค ์๋ต์ฑ์ ๊ฐ์ ํ๊ธฐ ์ํด ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์ธํธ๋ก ๋ค์ ์คํธ๋ฆฌ๋ฐํฉ๋๋ค. + +Asynchronous Logging + +๋๊ธฐ์ ๋ก๊น ์ ๋ชจ๋ ํธ์ถ์ ๋ํด ๋์คํฌ๋ฅผ ์ฒ๋ฆฌํ๋ฏ๋ก ์์คํ ์๋๊ฐ ๋๋ ค์ง ์ ์์ต๋๋ค. ๋น๋๊ธฐ ๋ก๊น ์ ๋ก๊ทธ๋ฅผ ๋ฝํ๋ฆฌ(lock-free) ๋ฒํผ๋ก ๋จผ์ ์ ์กํ ํ ์ฆ์ ๋ฐํํฉ๋๋ค. ๋ก๊ทธ๋ ์ฃผ๊ธฐ์ ์ผ๋ก ๋์คํฌ์ ํ๋ฌ์๋ฉ๋๋ค. ๋ฐ๋ผ์ I/O ์ค๋ฒํค๋๊ฐ ํฌ๊ฒ ์ค์ด๋ญ๋๋ค. + +Caching + +์์ฃผ ์ก์ธ์คํ๋ ๋ฐ์ดํฐ๋ฅผ ์บ์์ ์ ์ฅํ ์ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ง์ ๋ฐฉ๋ฌธํ๋ ๋์ ์บ์๋ฅผ ๋จผ์ ์ฟผ๋ฆฌํ ์ ์์ต๋๋ค. ์บ์์ ๋ฏธ์ค๊ฐ ์๋ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฟผ๋ฆฌํ ์ ์์ต๋๋ค. Redis์ ๊ฐ์ ์บ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ฏ๋ก ๋ฐ์ดํฐ ์ก์ธ์ค๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ณด๋ค ํจ์ฌ ๋น ๋ฆ ๋๋ค. + +Payload Compression + +์์ฒญ๊ณผ ์๋ต์ gzip ๋ฑ์ ์ฌ์ฉํ์ฌ ์์ถํ ์ ์์ผ๋ฏ๋ก ์ ์ก๋๋ ๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ ํจ์ฌ ์์์ง๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ ๋ก๋์ ๋ค์ด๋ก๋ ์๋๊ฐ ๋นจ๋ผ์ง๋๋ค. + +Connection Pool + +๋ฆฌ์์ค์ ์ก์ธ์คํ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์์ต๋๋ค. ๋ซํ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์ ์ ์ด๋ฉด ์๋นํ ์ค๋ฒํค๋๊ฐ ์ถ๊ฐ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์คํ ์ปค๋ฅ์ ํ์ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํด์ผ ํฉ๋๋ค. ์ปค๋ฅ์ ํ์ ์ปค๋ฅ์ ๋ผ์ดํ์ฌ์ดํด์ ๊ด๋ฆฌํ๋ ์ญํ ์ ํฉ๋๋ค. + +### HTTP 1.0 -> HTTP 1.1 -> HTTP 2.0 -> HTTP 3.0 (QUIC) + +๊ฐ ์ธ๋์ HTTP๋ ์ด๋ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋์? + +์๋ ๋ค์ด์ด๊ทธ๋จ์ ์ฃผ์ ํน์ง์ ๋ณด์ฌ์ค๋๋ค. + ++ +
+ +- HTTP 1.0์ 1996๋ ์ ์์ฑ๋์ด ์์ ํ ๋ฌธ์ํ๋์์ต๋๋ค. ๋์ผํ ์๋ฒ์ ๋ํ ๋ชจ๋ ์์ฒญ์๋ ๋ณ๋์ TCP ์ฐ๊ฒฐ์ด ํ์ํฉ๋๋ค. + +- HTTP 1.1์ 1997๋ ์ ๋ฐํ๋์์ต๋๋ค. TCP ์ปค๋ฅ์ ์ ์ฌ์ฌ์ฉ(persistent connection)์ ์ํด ์ด์ด๋ ์ ์์ง๋ง, HOL(head-of-line) ์ฐจ๋จ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง๋ ๋ชปํฉ๋๋ค. + + HOL ์ฐจ๋จ - ๋ธ๋ผ์ฐ์ ์์ ํ์ฉํ๋ ๋ณ๋ ฌ ์์ฒญ์ ์๋ฅผ ๋ชจ๋ ์ฌ์ฉํ๋ฉด ํ์ ์์ฒญ์ ์ด์ ์์ฒญ์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค. + +- HTTP 2.0์ 2015๋ ์ ๋ฐํ๋์์ต๋๋ค. ์ด๋ ์์ฒญ ๋ค์คํ๋ฅผ ํตํด HOL ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ฌ ์์ฉ ๊ณ์ธต์์ HOL ์ฐจ๋จ์ ์ ๊ฑฐํ์ง๋ง, ์ ์ก(TCP) ๊ณ์ธต์๋ ์ฌ์ ํ HOL์ด ์กด์ฌํฉ๋๋ค. + + ๋ค์ด์ด๊ทธ๋จ์์ ๋ณผ ์ ์๋ฏ์ด HTTP 2.0์ ๋์ผํ TCP ์ปค๋ฅ์ ์ ์๋ก ๋ค๋ฅธ HTTP ๊ตํ์ ๋ค์คํํ ์ ์๋ ์ถ์ํ ๊ฐ๋ ์ธ HTTP "stream"์ ๋์ ํ์ต๋๋ค. ๊ฐ ์คํธ๋ฆผ์ ์์๋๋ก ์ ์กํ ํ์๋ ์์ต๋๋ค. + +- HTTP 3.0 ์ด์์ 2020๋ ์ ๋ฐํ๋์์ต๋๋ค. HTTP 2.0์ ํ์ ๋ฒ์ ์ผ๋ก ์ ์๋์์ต๋๋ค. ๊ธฐ๋ณธ ํธ๋์คํฌํธ ํ๋กํ ์ฝ๋ก TCP ๋์ QUIC์ ์ฌ์ฉํ๋ฏ๋ก ์ ์ก ๊ณ์ธต์์ HOL ์ฐจ๋จ์ด ์ ๊ฑฐ๋ฉ๋๋ค. + +QUIC์ UDP๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ์ด๋ ์ ์ก ๊ณ์ธต์์ ์คํธ๋ฆผ์ ํผ์คํธ ํด๋์ค ์ํฐ์ฆ์ผ๋ก ์๊ฐํฉ๋๋ค. QUIC ์คํธ๋ฆผ์ ๋์ผํ QUIC ์ปค๋ฅ์ ์ ๊ณต์ ํ๋ฏ๋ก ์ ์คํธ๋ฆผ์ ์์ฑํ๊ธฐ ์ํด ์ถ๊ฐ์ ์ธ ํธ๋์ ฐ์ดํฌ๋ ์ฌ๋ก์ฐ ์คํํธ๊ฐ ํ์ํ์ง ์์ผ๋ฉฐ, ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ํ ์คํธ๋ฆผ์ ์ํฅ์ ๋ฏธ์น๋ ํจํท ์์ค์ด ๋ค๋ฅธ ์คํธ๋ฆผ์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ก ๋ ๋ฆฝ์ ์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค. + +### SOAP vs REST vs GraphQL vs RPC + +์๋ ๋ค์ด์ด๊ทธ๋จ์ API ํ์๋ผ์ธ๊ณผ API ์คํ์ผ์ ๋น๊ตํ ๊ฒ์ ๋๋ค. + +์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ค์ํ API ์ํคํ ์ฒ ์คํ์ผ์ด ์ถ์๋ฉ๋๋ค. ๊ฐ ์คํ์ผ์๋ ๋ฐ์ดํฐ ๊ตํ์ ํ์คํํ๋ ๊ณ ์ ํ ํจํด์ด ์์ต๋๋ค. + +๋ค์ด์ด๊ทธ๋จ์์ ๊ฐ ์คํ์ผ์ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. + ++ +
+ + +### Code First vs API First + +์๋ ๋ค์ด์ด๊ทธ๋จ์ ์ฝ๋ ํผ์คํธ ๊ฐ๋ฐ๊ณผ API ํผ์คํธ ๊ฐ๋ฐ์ ์ฐจ์ด์ ์ ๋ณด์ฌ์ค๋๋ค. API ํผ์คํธ ์ค๊ณ๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์? + ++ +
+ + +- ๋ง์ดํฌ๋ก์๋น์ค๋ ์์คํ ๋ณต์ก์ฑ์ ์ฆ๊ฐ์ํค๋ฉฐ, ์์คํ ์ ๋ค์ํ ๊ธฐ๋ฅ์ ๋ด๋นํ๋ ๋ณ๋์ ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ์ํคํ ์ฒ๋ ์ ๋ฌด์ ๋์ปคํ๋ง๊ณผ ๋ถ๋ฆฌ๋ฅผ ์ฉ์ดํ๊ฒ ํ์ง๋ง ์๋น์ค ๊ฐ์ ๋ค์ํ ์ปค๋ฎค๋์ผ์ด์ ์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. + +์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ ์ ์์คํ ์ ๋ณต์ก์ฑ์ ๊ณ ๋ คํ๊ณ ์๋น์ค์ ๋ฒ์๋ฅผ ์ ์คํ๊ฒ ์ ์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. + +- ๊ธฐ๋ฅ์กฐ์ง์ ๋์ผํ ์ธ์ด๋ก ์์ฌ์ํตํด์ผ ํ๋ฉฐ, ๋ชฉ์ ์กฐ์ง์ ์์ฒด ์ปดํฌ๋ํธ์ ์๋น์ค์๋ง ์ฑ ์์ด ์์ต๋๋ค. API ์ค๊ณ๋ฅผ ํตํด ์กฐ์ง์ด ๋์ผํ ์ธ์ด๋ก ์์ฌ์ํตํ๋ ๊ฒ์ด ์ข์ต๋๋ค. + +์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ ์ ์์ฒญ๊ณผ ์๋ต์ ๋ชจ์๋ก ์์ฑํ์ฌ API ์ค๊ณ๋ฅผ ๊ฒ์ฆํ ์ ์์ต๋๋ค. + +- ์ํํธ์จ์ด ํ์ง๊ณผ ๊ฐ๋ฐ์ ์์ฐ์ฑ์ด ํฅ์๋ฉ๋๋ค. ํ๋ก์ ํธ๊ฐ ์์๋ ๋ ๋๋ถ๋ถ์ ๋ถํ์ค์ฑ์ ์ ๊ฑฐํ๊ธฐ ๋๋ฌธ์ ์ ๋ฐ์ ์ธ ๊ฐ๋ฐ ํ๋ก์ธ์ค๊ฐ ๋ ์ํํด์ง๊ณ ์ํํธ์จ์ด ํ์ง์ด ํฌ๊ฒ ํฅ์๋ฉ๋๋ค. + +๊ฐ๋ฐ์๋ ๊ฐ์์ค๋ฌ์ด ๋ณ๊ฒฝ ์ฌํญ์ ๋ ผ์ํ๋ ๋์ ๊ธฐ๋ฅ ๊ฐ๋ฐ์ ์ง์คํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด ํ๋ก์ธ์ค์ ๋ง์กฑํฉ๋๋ค. + +ํ๋ก์ ํธ ๋ผ์ดํ์ฌ์ดํด์ด ๋๋ ๋ฌด๋ ต์ ์ํ๋ผ์ด์ฆ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ญ๋๋ค. + +API๋ฅผ ๋จผ์ ์ค๊ณํ๊ธฐ ๋๋ฌธ์ ์ฝ๋๊ฐ ๊ฐ๋ฐ๋๋ ๋์ ํ ์คํธ๋ฅผ ์ค๊ณํ ์ ์์ต๋๋ค. ์ด๋ค ๋ฉด์์๋ API ํผ์คํธ ๊ฐ๋ฐ ๋ฐฉ์์ ์ฌ์ฉํ ๋ TDD(Test Driven Design)๋ฅผ ์ ์ฉํ๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค. + +### HTTP status codes + ++ +
+ + +HTTP์ ์๋ต ์ฝ๋๋ 5๊ฐ์ง ์นดํ ๊ณ ๋ฆฌ๋ก ๋๋์ด์ง๋๋ค. + +Informational (100-199) +Success (200-299) +Redirection (300-399) +Client Error (400-499) +Server Error (500-599) + +### API gateway๋ ๋ฌด์์ ํ๋์? + +์๋ ๋ค์ด์ด๊ทธ๋จ์ ์์ธํ ๋ด์ฉ์ ๋ณด์ฌ์ค๋๋ค. + ++ +
+ +1๋จ๊ณ - ํด๋ผ์ด์ธํธ๊ฐ API ๊ฒ์ดํธ์จ์ด์ HTTP ์์ฒญ์ ๋ณด๋ ๋๋ค. + +2๋จ๊ณ - API ๊ฒ์ดํธ์จ์ด๊ฐ HTTP ์์ฒญ์ ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ํ์ฑํ๊ณ ์ ํจ์ฑ์ ๊ฒ์ฌํฉ๋๋ค. + +3๋จ๊ณ - API ๊ฒ์ดํธ์จ์ด๊ฐ allow-list/deny-list ๊ฒ์ฌ๋ฅผ ์ํํฉ๋๋ค. + +4๋จ๊ณ - API ๊ฒ์ดํธ์จ์ด๊ฐ ์ธ์ฆ๊ณผ ์ธ๊ฐ๋ฅผ ์ํด ID ๊ณต๊ธ์์ ํต์ ํฉ๋๋ค. + +5๋จ๊ณ - ์์ฒญ์ ๋ ์ดํธ ๋ฆฌ๋ฏธํธ ๊ท์น์ ์ ์ฉํฉ๋๋ค. ํ๋๋ฅผ ์ด๊ณผํ๋ฉด ์์ฒญ์ ๊ฑฐ๋ถํฉ๋๋ค. + +6,7๋จ๊ณ - ์์ฒญ์ด ๊ธฐ๋ณธ ๊ฒ์ฌ๋ฅผ ํต๊ณผํ์ผ๋ฏ๋ก ์ด์ API ๊ฒ์ดํธ์จ์ด๊ฐ path ๋งค์นญ์ ํตํด ๋ผ์ฐํ ํ ๊ด๋ จ ์๋น์ค๋ฅผ ์ฐพ์ต๋๋ค. + +8๋จ๊ณ - API ๊ฒ์ดํธ์จ์ด๊ฐ ์์ฒญ์ ์ ์ ํ ํ๋กํ ์ฝ๋ก ๋ณํํ์ฌ ๋ฐฑ์๋ ๋ง์ดํฌ๋ก์๋น์ค๋ก ์ ์กํฉ๋๋ค. + +9-12๋จ๊ณ: API ๊ฒ์ดํธ์จ์ด๋ ์ค๋ฅ๋ฅผ ์ ์ ํ๊ฒ ์ฒ๋ฆฌํ๊ณ , ๋ณต๊ตฌํ๋๋ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ ์ฅ์ ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.(circuit break) ๋ํ ๋ก๊น ๊ณผ ๋ชจ๋ํฐ๋ง์ ์ํด ELK(Elastic-Logstash-Kibana) ์คํ์ ํ์ฉํ ์ ์์ต๋๋ค. ๋๋๋ก API ๊ฒ์ดํธ์จ์ด์ ๋ฐ์ดํฐ๋ฅผ ์บ์ํ๊ธฐ๋ ํฉ๋๋ค. + +### ํจ๊ณผ์ ์ด๊ณ ์์ ํ API๋ฅผ ์ค๊ณํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์? + +์๋ ๋ค์ด์ด๊ทธ๋จ์ ์ผํ ์นดํธ ์์์ ํจ๊ป ์ผ๋ฐ์ ์ธ API ์ค๊ณ๋ฅผ ๋ณด์ฌ์ค๋๋ค. + ++ +
+ + +API ์ค๊ณ๋ ๋จ์ํ URL path ์ค๊ณ๊ฐ ์๋๋ผ๋ ์ ์ ์ ์ํ์ธ์. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ ์ ํ ๋ฆฌ์์ค ์ด๋ฆ, ์๋ณ์, path ํจํด์ ์ ํํด์ผ ํฉ๋๋ค. ์ ์ ํ HTTP ํค๋ ํ๋๋ฅผ ์ค๊ณํ๊ฑฐ๋ API ๊ฒ์ดํธ์จ์ด ๋ด์์ ํจ๊ณผ์ ์ธ ๋ ์ดํธ ๋ฆฌ๋ฏธํธ ๊ท์น์ ์ค๊ณํ๋ ๊ฒ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ค์ํฉ๋๋ค. + +### TCP/IP encapsulation + +๋ฐ์ดํฐ๋ ๋คํธ์ํฌ๋ฅผ ํตํด ์ด๋ป๊ฒ ์ ์ก๋๋์? OSI ๋ชจ๋ธ์ ๋ง์ ๊ณ์ธต์ด ํ์ํ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์? + +์๋ ๋ค์ด์ด๊ทธ๋จ์ ๋คํธ์ํฌ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋ ์ด๋ป๊ฒ ์บก์ํ๋๊ณ ์บก์ํ๊ฐ ํด์ ๋๋์ง ๋ณด์ฌ์ค๋๋ค. + ++ +
+ +1๋จ๊ณ: ๋๋ฐ์ด์ค A๊ฐ ๋คํธ์ํฌ์์ HTTP ํ๋กํ ์ฝ์ ํตํด ์ฅ์น B๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋, ๋จผ์ ์์ฉ ๊ณ์ธต์์ HTTP ํค๋๊ฐ ์ถ๊ฐ๋ฉ๋๋ค. + +2๋จ๊ณ: ๊ทธ๋ฐ ๋ค์ TCP ํน์ UDP ํค๋๊ฐ ๋ฐ์ดํฐ์ ์ถ๊ฐ๋ฉ๋๋ค. ์ด ํค๋๋ ์ ์ก ๊ณ์ธต์์ TCP ์ธ๊ทธ๋จผํธ๋ก ์บก์ํ๋ฉ๋๋ค. ํค๋์๋ ์ถ๋ฐ์ง ํฌํธ, ๋์ฐฉ์ง ํฌํธ, ์ํ์ค ๋๋ฒ๊ฐ ํฌํจ๋ฉ๋๋ค. + +3๋จ๊ณ: ๊ทธ๋ฐ ๋ค์ ์ธ๊ทธ๋จผํธ๋ ๋คํธ์ํฌ ๊ณ์ธต์์ IP ํค๋๋ก ์บก์ํ๋ฉ๋๋ค. IP ํค๋์๋ ์ถ๋ฐ์ง/๋์ฐฉ์ง IP ์ฃผ์๊ฐ ํฌํจ๋ฉ๋๋ค. + +4๋จ๊ณ: ๋ฐ์ดํฐ ๋งํฌ ๊ณ์ธต์์ IP ๋ฐ์ดํฐ๊ทธ๋จ์ ์ถ๋ฐ์ง/๋์ฐฉ์ง MAC ์ฃผ์์ ํจ๊ป MAC ํค๋๊ฐ ์ถ๊ฐ๋ฉ๋๋ค. + +5๋จ๊ณ: ์บก์ํ๋ ํ๋ ์์ด ๋ฌผ๋ฆฌ ๊ณ์ธต์ผ๋ก ์ ์ก๋๊ณ ๋คํธ์ํฌ๋ฅผ ํตํด 2์ง์ ๋นํธ๋ก ์ ์ก๋ฉ๋๋ค. + +6-10๋จ๊ณ: ๋๋ฐ์ด์ค B๊ฐ ๋คํธ์ํฌ์์ ๋นํธ๋ฅผ ์์ ํ๋ฉด ์บก์ํ ํ๋ก์ธ์ค์ ์ญ์ฒ๋ฆฌ์ธ ์บก์ํ ํด์ ํ๋ก์ธ์ค๋ฅผ ์ํํฉ๋๋ค. ํค๋๊ฐ ํ ์ธต์ฉ ์ ๊ฑฐ๋๊ณ ๊ฒฐ๊ตญ ๋๋ฐ์ด์ค B๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์๊ฒ ๋ฉ๋๋ค. + +๋คํธ์ํฌ ๋ชจ๋ธ์ ๊ณ์ธต์ด ํ์ํ ์ด์ ๋ ๊ฐ ๊ณ์ธต์ด ๊ณ ์ ํ ์ฑ ์์ ์ง์คํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ฐ ๊ณ์ธต์ ์ฒ๋ฆฌ ์ง์นจ์ ํค๋์ ์์กดํ ์ ์์ผ๋ฉฐ ๋ง์ง๋ง ๊ณ์ธต์ ๋ฐ์ดํฐ์ ์๋ฏธ๋ฅผ ์ ํ์๊ฐ ์์ต๋๋ค. + +### ์ Nginx๋ฅผ "reverse" ํ๋ก์๋ผ๊ณ ๋ถ๋ฅด๋์? + +์๋ ๋ค์ด์ด๊ทธ๋จ์ ๐๐จ๐ซ๐ฐ๐๐ซ๐ ๐ฉ๐ซ๐จ๐ฑ๐ฒ ์ ๐ซ๐๐ฏ๐๐ซ๐ฌ๐ ๐ฉ๐ซ๐จ๐ฑ๐ฒ ์ ์ฐจ์ด์ ์ ๋ณด์ฌ์ค๋๋ค. + ++ +
+ +ํฌ์๋ ํ๋ก์๋ ์ฌ์ฉ์ ๋๋ฐ์ด์ค์ ์ธํฐ๋ท ์ฌ์ด์ ์๋ ์๋ฒ์ ๋๋ค. + +ํฌ์๋ ํ๋ก์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ ์ฉ๋๋ก ์ฌ์ฉ๋ฉ๋๋ค. + +1. ํด๋ผ์ด์ธํธ ๋ณดํธ +2. ๋ธ๋ผ์ฐ์ง ์ ์ฝ ์ฐํํ๊ธฐ +3. ํน์ ์ฝํ ์ธ ์ ๋ํ ์ก์ธ์ค ์ฐจ๋จ + +๋ฆฌ๋ฒ์ค ํ๋ก์๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์๋ฝํ์ฌ ์น ์๋ฒ๋ก ์์ฒญ์ ์ ๋ฌํ ํ ํ๋ก์ ์๋ฒ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ ๊ฒ์ฒ๋ผ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์ธํธ์ ๋ฐํํ๋ ์๋ฒ์ ๋๋ค. + +๋ฆฌ๋ฒ์ค ํ๋ก์๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ์ ์ฉํฉ๋๋ค. + +1. ์๋ฒ ๋ณดํธ +2. ๋ก๋ ๋ฐธ๋ฐ์ฑ +3. ์ ์ ์ฝํ ์ธ ์บ์ฑ +4. SSL ํต์ ์ํธํ ๋ฐ ๋ณตํธํ + +### ์ผ๋ฐ์ ์ธ ๋ก๋ ๋ฐธ๋ฐ์ฑ ์๊ณ ๋ฆฌ์ฆ์ ๋ฌด์์ธ๊ฐ์? + +์๋ ๋ค์ด์ด๊ทธ๋จ์ 6๊ฐ์ง ์ผ๋ฐ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ๋ณด์ฌ์ค๋๋ค. + ++ +
+ +- ์ ์ ์๊ณ ๋ฆฌ์ฆ + +1. Round robin + + ํด๋ผ์ด์ธํธ ์์ฒญ์ ์์ฐจ์ ์ผ๋ก ๋ค๋ฅธ ์๋น์ค ์ธ์คํด์ค๋ก ์ ์ก๋ฉ๋๋ค. ์๋น์ค๋ ์ผ๋ฐ์ ์ผ๋ก ์คํ ์ดํธ๋ฆฌ์ค(๊ณผ๊ฑฐ ์ฒ๋ฆฌ ๋ด์ฉ์ ๊ธฐ์ตํ์ง ์๋ ์๋น์ค)์ฌ์ผ ํฉ๋๋ค. + +3. Sticky round-robin + + ์ด๋ ๋ผ์ด๋ ๋ก๋น ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ ํ ๊ฒ์ ๋๋ค. ์จ๋ฆฌ์ค์ ์ฒซ ๋ฒ์งธ ์์ฒญ์ด ์๋น์ค A๋ก ์ ๋ฌ๋๋ฉด ๋ค์ ์์ฒญ๋ ์๋น์ค A๋ก ์ ๋ฌ๋ฉ๋๋ค. + +4. Weighted round-robin + + ๊ด๋ฆฌ์๋ ๊ฐ ์๋น์ค์ ๋ํ ๊ฐ์ค์น๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ๊ฐ์ค์น๊ฐ ๋์ ์๋น์ค๋ ๋ค๋ฅธ ์๋น์ค๋ณด๋ค ๋ ๋ง์ ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค. + +6. Hash + + ์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ค์ด์ค๋ ์์ฒญ์ IP ๋๋ URL์ ํด์ ํจ์๋ฅผ ์ ์ฉํฉ๋๋ค. ์์ฒญ์ ํด์ ํจ์ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ๊ด๋ จ ์ธ์คํด์ค๋ก ๋ผ์ฐํ ๋ฉ๋๋ค. + +- ๋์ ์๊ณ ๋ฆฌ์ฆ + +5. Least connections + + ๋์ ์ฐ๊ฒฐ์ด ๊ฐ์ฅ ์ ์ ์๋น์ค ์ธ์คํด์ค๋ก ์ ์์ฒญ์ด ์ ์ก๋ฉ๋๋ค. + +7. Least response time + + ์ ์์ฒญ์ ์๋ต ์๊ฐ์ด ๊ฐ์ฅ ๋น ๋ฅธ ์๋น์ค ์ธ์คํด์ค๋ก ์ ์ก๋ฉ๋๋ค. + +### URL, URI, URN - ์ฐจ์ด๋ฅผ-์๊ณ -์๋์? + +์๋ ๋ค์ด์ด๊ทธ๋จ์ URL, URI, URN์ ๋น๊ต๋ฅผ ๋ณด์ฌ์ค๋๋ค. + ++ +
+ +- URI + +URI์ Uniform Resource Identifier์ ์ฝ์์ ๋๋ค. ์น์์ ๋ ผ๋ฆฌ์ ๋๋ ๋ฌผ๋ฆฌ์ ๋ฆฌ์์ค๋ฅผ ์๋ณํฉ๋๋ค. URL๊ณผ URN์ URI์ ํ์ ์ ํ์ ๋๋ค. URL์ ๋ฆฌ์์ค๋ฅผ ์ฐพ๊ณ URN์ ๋ฆฌ์์ค์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค. + +URI๋ ๋ค์๊ณผ ๊ฐ์ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. +scheme:[//authority]path[?query][#fragment] + +- URL + +URL์ Uniform Resource Locator์ ์ฝ์๋ก, HTTP์ ํต์ฌ ๊ฐ๋ ์ ๋๋ค. ์น์์ ๊ณ ์ ํ ๋ฆฌ์์ค์ ์ฃผ์์ ๋๋ค. FTP์ JDBC์ ๊ฐ์ ๋ค๋ฅธ ํ๋กํ ์ฝ๊ณผ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค. + +- URN + +URN์ Uniform Resource Name์ ์ฝ์๋ก, urn ์คํค๋ง๋ฅผ ์ฌ์ฉํฉ๋๋ค. URN์ ๋ฆฌ์์ค๋ฅผ ์ฐพ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ค์ด์ด๊ทธ๋จ์ ์ ์๋ ๊ฐ๋จํ ์๋ ๋ค์์คํ์ด์ค์ ๋ค์์คํ์ด์ค ํน์ ๋ฌธ์์ด๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. + +์ด ์ฃผ์ ์ ๋ํด ๋ ์์ธํ ์์๋ณด๋ ค๋ฉด [W3Cโs clarification](https://www.w3.org/TR/uri-clarification/)์ ์ถ์ฒํฉ๋๋ค. + +## CI/CD + +### ์ฌ์ด ์ฉ์ด๋ก ์ค๋ช ํ๋ CI/CD ํ์ดํ๋ผ์ธ + ++ +
+ +์น์ 1 - CI/CD๊ฐ ํฌํจ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ์๋ช ์ฃผ๊ธฐ + +์ํํธ์จ์ด ๊ฐ๋ฐ ์๋ช ์ฃผ๊ธฐ(SDLC)๋ ๊ฐ๋ฐ, ํ ์คํธ, ๋ฐฐํฌ, ์ ์ง๋ณด์ ๋ฑ ๋ช ๊ฐ์ง ์ฃผ์ ๋จ๊ณ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. CI/CD๋ ์ด๋ฌํ ๋จ๊ณ๋ฅผ ์๋ํํ๊ณ ํตํฉํ์ฌ ๋ ๋น ๋ฅด๊ณ ์์ ์ ์ธ ๋ฆด๋ฆฌ์ค๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. + +์ฝ๋๊ฐ git ๋ฆฌํฌ์งํ ๋ฆฌ์ ํธ์๋๋ฉด ์๋ํ๋ ๋น๋, ํ ์คํธ ํ๋ก์ธ์ค๊ฐ ์์๋ฉ๋๋ค. ์ฝ๋์ ์ ํจ์ฑ์ ๊ฒ์ฌํ๊ธฐ ์ํด ์๋ํฌ์๋(e2e) ํ ์คํธ ์ผ์ด์ค๊ฐ ์คํ๋ฉ๋๋ค. ํ ์คํธ๋ฅผ ํต๊ณผํ๋ฉด ์ฝ๋๋ฅผ ์คํ ์ด์ง/ํ๋ก๋์ ํ๊ฒฝ์ ์๋์ผ๋ก ๋ฐฐํฌํ ์ ์์ต๋๋ค. ์ด์๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ์ฝ๋๋ ๋ฒ๊ทธ ์์ ์ ์ํด ๊ฐ๋ฐ ๋จ๊ณ๋ก ๋ค์ ๋ณด๋ด์ง๋๋ค. ์ด๋ฌํ ์๋ํ๋ ๊ฐ๋ฐ์์๊ฒ ์ ์ํ ํผ๋๋ฐฑ์ ์ ๊ณตํ๊ณ ํ๋ก๋์ ํ๊ฒฝ์์ ๋ฐ์ํ๋ ๋ฒ๊ทธ ์ํ์ ์ค์ฌ์ค๋๋ค. + +์น์ 2 - CI์ CD์ ์ฐจ์ด์ + +Continuous Integration(CI)์ ๋น๋, ํ ์คํธ, ๋ณํฉ ํ๋ก์ธ์ค๋ฅผ ์๋ํํฉ๋๋ค. ์ฝ๋๊ฐ ์ปค๋ฐ๋ ๋๋ง๋ค ํ ์คํธ๋ฅผ ์คํํ์ฌ ํตํฉ ์ด์๋ฅผ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋ ์ปค๋ฐ์ ์์ฃผ ํ๊ณ ํผ๋๋ฐฑ์ ๋น ๋ฅด๊ฒ ๋ฐ์ ์ ์์ต๋๋ค. + +Continuous Delivery(CD)๋ ์ธํ๋ผ ๋ณ๊ฒฝ, ๋ฐฐํฌ์ ๊ฐ์ ๋ฆด๋ฆฌ์ค ํ๋ก์ธ์ค๋ฅผ ์๋ํํฉ๋๋ค. ์๋ํ๋ ์ํฌํ๋ก๋ฅผ ํตํด ์ธ์ ๋ ์ง ์ํํธ์จ์ด๋ฅผ ์์ ์ ์ผ๋ก ๋ฆด๋ฆฌ์คํ ์ ์์ต๋๋ค. ๋ํ CD๋ ํ๋ก๋์ ๋ฐฐํฌ ์ ์ ํ์ํ ๋ฉ๋ด์ผ ํ ์คํธ์ ์น์ธ ๋จ๊ณ๋ฅผ ์๋ํํ ์๋ ์์ต๋๋ค. + +์น์ 3 - CI/CD ํ์ดํ๋ผ์ธ + +์ผ๋ฐ์ ์ธ CI/CD ํ์ดํ๋ผ์ธ์ ๋ค์๊ณผ ๊ฐ์ด ์ฐ๊ฒฐ๋ ์ฌ๋ฌ ๋จ๊ณ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. +- ๊ฐ๋ฐ์๊ฐ ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์์ค ์ปจํธ๋กค์ ์ปค๋ฐํฉ๋๋ค. +- CI ์๋ฒ๊ฐ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์งํ๊ณ ๋น๋๋ฅผ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค. +- ์ฝ๋๊ฐ ์ปดํ์ผ๋๊ณ ํ ์คํธ๋ฉ๋๋ค(๋จ์ ํ ์คํธ, ํตํฉ ํ ์คํธ). +- ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ๋ฐ์์๊ฒ ๋ณด๊ณ ํฉ๋๋ค. +- ์ฑ๊ณตํ๋ฉด ์ํฐํฉํธ๊ฐ ์คํ ์ด์ง ํ๊ฒฝ์ ๋ฐฐํฌ๋ฉ๋๋ค. +- ๋ฆด๋ฆฌ์ค ์ ์ ์คํ ์ด์ง ํ๊ฒฝ์์ ์ถ๊ฐ ํ ์คํธ๋ฅผ ์ํํ ์ ์์ต๋๋ค. +- CD ์์คํ ์ด ์น์ธ๋ ๋ณ๊ฒฝ ์ฌํญ์ ํ๋ก๋์ ์ ๋ฐฐํฌํฉ๋๋ค. + +### ๋ทํ๋ฆญ์ค ๊ธฐ์ ์คํ (CI/CD Pipeline) + ++ +
+ +ํ๋๋: ๋ทํ๋ฆญ์ค ์์ง๋์ด๋ง์ ํ๋๋์๋ JIRA๋ฅผ, ๋ฌธ์ํ์๋ Confluence๋ฅผ ์ฌ์ฉํฉ๋๋ค. + +์ฝ๋ฉ: Java๋ ๋ฐฑ์๋ ์๋น์ค๋ฅผ ์ํ ๊ธฐ๋ณธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด๋ฉฐ, ๋ค๋ฅธ ์ธ์ด๋ ์ ์ฆ์ผ์ด์ค์ ๋ฐ๋ผ ์ฌ์ฉ๋ฉ๋๋ค. + +๋น๋: Gradle์ ์ฃผ๋ก ๋น๋์ ์ฌ์ฉ๋๋ฉฐ, Gradle ํ๋ฌ๊ทธ์ธ์ ๋ค์ํ ์ ์ค์ผ์ด์ค๋ฅผ ์ง์ํ๊ธฐ ์ํด ๋ง๋ค์ด์ก์ต๋๋ค. + +ํจํค์ง: ํจํค์ง ๋ฐ ์์กด์ฑ์ ๋ฆด๋ฆฌ์ค๋ฅผ ์ํด ์๋ง์กด ๋จธ์ ์ด๋ฏธ์ง(AMI)์ ํจํค์ง๋ฉ๋๋ค. + +ํ ์คํ : ํ ์คํธ๋ ์นด์ค์ค ํด(์์คํ ์ ์์์น ๋ชปํ ์ฅ์ ๋ ํธ๋ํฝ์ ๋ฐ์์์ผ ์์คํ ์ ์์ ์ฑ์ ํ ์คํธํ๋ ๋๊ตฌ)์ ๊ตฌ์ถํ๋ ๋ฐ ์ค์ ์ ๋๋ ํ๋ก๋์ ๋ฌธํ๋ฅผ ๊ฐ์กฐํฉ๋๋ค. + +๋ฐฐํฌ: ๋ทํ๋ฆญ์ค๋ ์นด๋๋ฆฌ ๋กค์์ ๋ฐฐํฌ์ ์์ฒด ๊ตฌ์ถํ Spinnaker๋ฅผ ์ฌ์ฉํฉ๋๋ค. + +๋ชจ๋ํฐ๋ง: ๋ชจ๋ํฐ๋ง ์งํ๋ Atlas์์ ์ค์ ์ง์ค์์ผ๋ก ๊ด๋ฆฌ๋๋ฉฐ, ์ด์ ์งํ๋ฅผ ๊ฐ์งํ๋ ๋ฐ Kayenta๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. + +์ธ์๋ํธ ๋ฆฌํฌํธ: ์ฐ์ ์์์ ๋ฐ๋ผ ์ธ์๋ํธ๊ฐ ๋ฐ์ก๋๋ฉฐ, ์ฌ๊ณ ์ฒ๋ฆฌ๋ฅผ ์ํด PagerDuty๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. + +## ์ํคํ ์ฒ ํจํด + +### MVC, MVP, MVVM, MVVM-C, VIPER +์ด๋ฌํ ์ํคํ ์ฒ ํจํด์ iOS, Android ํ๋ซํผ์์ ์ฑ ๊ฐ๋ฐ ์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ ํจํด์ ๋๋ค. ๊ฐ๋ฐ์๋ค์ ์ด์ ํจํด์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด ์ด๋ฌํ ํจํด์ ๋์ ํ์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ ๋ค๋ฅผ๊น์? + ++ +
+ +- ๊ฐ์ฅ ์ค๋๋ ํจํด์ธ MVC๋ ๊ฑฐ์ 50๋ ์ ์ผ๋ก ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ๋๋ค. +- ๋ชจ๋ ํจํด์๋ ์ฝํ ์ธ ๋ฅผ ํ์ํ๊ณ ์ฌ์ฉ์ ์ ๋ ฅ์ ์์ ํ๋ view(V)๊ฐ ์์ต๋๋ค. +- ๋๋ถ๋ถ์ ํจํด์๋ ๋น์ฆ๋์ค ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ model(M)์ด ํฌํจ๋ฉ๋๋ค. +- Controller, presenter, view-model์ ๋ทฐ์ ๋ชจ๋ธ(VIPER ํจํด์ entity) ์ฌ์ด๋ฅผ ๋งค๊ฐํ๋ ๋ณํ๊ธฐ์ ๋๋ค. + +### ๋ชจ๋ ๊ฐ๋ฐ์๊ฐ ์์์ผ ํ 18๊ฐ์ง ํต์ฌ ๋์์ธ ํจํด + +ํจํด์ ์ผ๋ฐ์ ์ธ ์ค๊ณ ๋ฌธ์ ์ ๋ํ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์๋ฃจ์ ์ผ๋ก, ๋ณด๋ค ์ํํ๊ณ ํจ์จ์ ์ธ ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ํจํด์ ๋ ๋์ ์ํํธ์จ์ด ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํ ์ค๊ณ๋(blueprint) ์ญํ ์ ํฉ๋๋ค. ๋ค์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ํจํด ์ค ์ผ๋ถ์ ๋๋ค. + ++ +
+ +- Abstract Factory: Family Creator - ๊ด๋ จ ํญ๋ชฉ ๊ทธ๋ฃน์ ๋ง๋ญ๋๋ค. +- Builder: Lego Master - ์์ฑ ๋ฐ ๋ชจ์์ ๋ถ๋ฆฌํ์ฌ ๊ฐ์ฒด๋ฅผ ๋จ๊ณ๋ณ๋ก ๋น๋ํฉ๋๋ค. +- Prototype: Clone Maker - ์์ ํ ์ค๋น๋ ์์ ์ ๋ณต์ฌ๋ณธ์ ์์ฑํฉ๋๋ค. +- Singleton: One and Only - ์ธ์คํด์ค๊ฐ ํ๋๋ฟ์ธ ํน๋ณํ ํด๋์ค์ ๋๋ค. +- Adapter: Universal Plug - ์๋ก ๋ค๋ฅธ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง ๊ฒ๋ค์ ์ฐ๊ฒฐํฉ๋๋ค. +- Bridge: Function Connector - ๊ฐ์ฒด์ ๊ตฌํ๊ณผ ํ๋์ ์ฐ๊ฒฐํฉ๋๋ค. +- Composite: Tree Builder - ๋จ์ํ ๋ถ๋ถ๊ณผ ๋ณต์กํ ๋ถ๋ถ์ผ๋ก ์ด๋ฃจ์ด์ง ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํ์ฑํฉ๋๋ค. +- Decorator: Customizer - ๊ฐ์ฒด์ ํต์ฌ์ ์์ํ์ง ์๊ณ ๊ธฐ๋ฅ์ ์ถ๊ฐํฉ๋๋ค. +- Facade: One-Stop-Shop - ์ ์ฒด ์์คํ ์ ๋จ์ผํ๊ณ ๊ฐ๋จํ ์ธํฐํ์ด์ค๋ก ๋ํ๋ ๋๋ค. +- Flyweight: Space Saver - ์๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํญ๋ชฉ์ ํจ์จ์ ์ผ๋ก ๊ณต์ ํฉ๋๋ค. +- Proxy: Stand-In Actor - ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๋ํํ์ฌ ์ก์ธ์ค ๋๋ ์์ ์ ์ ์ดํฉ๋๋ค. +- Chain of Responsibility: Request Relay - ์์ฒญ์ ์ฒ๋ฆฌํ ๋๊น์ง ๊ฐ์ฒด ์ฒด์ธ์ ํตํด ์ ๋ฌํฉ๋๋ค. +- Command: Task Wrapper - ์์ฒญ์ ๊ฐ์ฒด๋ก ๋ณํํ์ฌ ์์ ์ค๋น๋ฅผ ๊ฐ์ถ๊ฒ ํฉ๋๋ค. +- Iterator: Collection Explorer - ์ปฌ๋ ์ ์์์ ํ๋์ฉ ์ก์ธ์คํฉ๋๋ค. +- Mediator: Communication Hub - ์๋ก ๋ค๋ฅธ ํด๋์ค ๊ฐ์ ์ธํฐ๋์ ์ ๊ฐ์ํํฉ๋๋ค. +- Memento: Time Capsule - ๊ฐ์ฒด์ ์ํ๋ฅผ ์บก์ฒํ๊ณ ๋ณต์ํฉ๋๋ค. +- Observer: News Broadcaster - ๋ค๋ฅธ ๊ฐ์ฒด์ ๋ณ๊ฒฝ์ ๋ํด ํด๋์ค์๊ฒ ์๋ฆฝ๋๋ค. +- Visitor: Skillful Guest - ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ์๋ก์ด ์์ ์ ์ถ๊ฐํฉ๋๋ค. + +## ๋ฐ์ดํฐ๋ฒ ์ด์ค + +### ํด๋ผ์ฐ๋ ์๋น์ค์ ๋ค์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ดํ ์นํธ์ํธ + ++ +
+ +ํ๋ก์ ํธ์ ์ ํฉํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ํํ๋ ๊ฒ์ ๋ณต์กํ ์์ ์ ๋๋ค. ๊ฐ๊ธฐ ๋ค๋ฅธ ์ ์ฆ์ผ์ด์ค์ ์ ํฉํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ต์ ์ด ๋ง์ผ๋ฉด ์์ฌ ๊ฒฐ์ ์ ๋ํ ํผ๋ก๋๊ฐ ๋น ๋ฅด๊ฒ ๋์์ง ์ ์์ต๋๋ค. + +์ด ์นํธ์ํธ๊ฐ ํ๋ก์ ํธ์ ์๊ตฌ์ฌํญ์ ๋ง๋ ์ฌ๋ฐ๋ฅธ ์๋น์ค๋ฅผ ์ฐพ์๋ด๊ณ ์ ์ฌ์ ์ธ ํจ์ ์ ํผํ๋ ๋ฐ ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. + +์ฐธ๊ณ : ๊ตฌ๊ธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฆ์ผ์ด์ค์ ๋ํ ๋ฌธ์๊ฐ ์ ํ๋์ด ์์ต๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ ์๋ฃ๋ฅผ ์ต๋ํ ๊ฒํ ํ๊ณ ์ต์ ์ ์ต์ ์ ์ ์ํ์ง๋ง, ์ผ๋ถ ํญ๋ชฉ์ ๋ ์ ํํ ์ ๋ณด๊ฐ ํ์ํ ์ ์์ต๋๋ค. + +### ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ฐํํ๋ 8๊ฐ์ง ๋ฐ์ดํฐ ๊ตฌ์กฐ + +์ ๋ต์ ์ ์ฆ์ผ์ด์ค์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ๋ฐ์ดํฐ๋ ๋ฉ๋ชจ๋ฆฌ๋ ๋์คํฌ์ ์ธ๋ฑ์ค ๋ ์ ์์ต๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ์ดํฐ ํฌ๋งท๋ ๋๋ฒ, ์คํธ๋ง, ์ง๋ฆฌ์ ์ขํ ๋ฑ ๋ค์ํฉ๋๋ค. ์์คํ ์ด ์ฐ๊ธฐ ์ค์ฌ์ผ ์๋, ์ฝ๊ธฐ ์ค์ฌ์ผ ์๋ ์์ต๋๋ค. ์ด๋ฌํ ๋ชจ๋ ์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค ํฌ๋งท ์ ํ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. + ++ +
+ +๋ค์์ ๋ฐ์ดํฐ ์ธ๋ฑ์ฑ์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๋ช ๊ฐ์ง ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋๋ค. + +- Skiplist: ์ผ๋ฐ์ ์ธ ์ธ๋ฉ๋ชจ๋ฆฌ ์ธ๋ฑ์ค ํ์ ์ผ๋ก, Redis์์ ์ฌ์ฉ. +- Hash index: Map ๋ฐ์ดํฐ ๊ตฌ์กฐ(๋๋ Collection)์ ๋งค์ฐ ์ผ๋ฐ์ ์ธ ๊ตฌํ. +- SSTable: ๋์คํฌ์ ์ด๋ฎคํฐ๋ธ Map ๊ตฌํ +- LSM tree: Skiplist + SSTable. ๋์ ์ฐ๊ธฐ ์ฒ๋ฆฌ๋. +- B-tree: ๋์คํฌ ๊ธฐ๋ฐ ์๋ฃจ์ . ์ผ๊ด๋ ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฑ๋ฅ. +- Inverted index: ๋ํ๋จผํธ ์ธ๋ฑ์ฑ์ ์ฌ์ฉ. ๋ฃจ์ฌ์์ ์ฌ์ฉ. +- Suffix tree: ์คํธ๋ง ํจํด ๊ฒ์. +- R-tree: ๊ฐ์ฅ ๊ฐ๊น์ด ์ด์ ์ฐพ๊ธฐ์ ๊ฐ์ ๋ค์ฐจ์ ๊ฒ์. + +### ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ SQL ๋ฌธ์ ์ด๋ป๊ฒ ์คํ๋๋์? + +์๋ ๋ค์ด์ด๊ทธ๋จ์ ๊ทธ ๊ณผ์ ์ ๋ณด์ฌ์ค๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง๋ค ์ํคํ ์ฒ๊ฐ ๋ค๋ฅด์ง๋ง ์ด ๋ค์ด์ด๊ทธ๋จ์ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ์ค๊ณ๋ฅผ ๋ณด์ฌ์ค๋๋ค. + ++ +
+ + +1๋จ๊ณ - SQL ๋ฌธ์ ์ ์ก ๊ณ์ธต ํ๋กํ ์ฝ(์: TCP)์ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ ์ก๋ฉ๋๋ค. + +2๋จ๊ณ - SQL ๋ฌธ์ command parser๋ก ์ ์ก๋์ด ๊ตฌ๋ฌธ ๋ฐ ์๋ฏธ ๋ถ์์ ๊ฑฐ์น ํ ์ฟผ๋ฆฌ ํธ๋ฆฌ๊ฐ ์์ฑ๋ฉ๋๋ค. + +3๋จ๊ณ - ์ฟผ๋ฆฌ ํธ๋ฆฌ๊ฐ optimizer๋ก ์ ์ก๋ฉ๋๋ค. optimizer๊ฐ ์คํ ๊ณํ์ ์์ฑํฉ๋๋ค. + +4๋จ๊ณ - ์คํ ๊ณํ์ด executor์๊ฒ ์ ์ก๋ฉ๋๋ค. executor๋ ์ต์คํ์ ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํฉ๋๋ค. + +5๋จ๊ณ - Access methods๋ ์คํ์ ํ์ํ ๋ฐ์ดํฐ ํ์นญ ๋ก์ง์ ์ ๊ณตํ์ฌ ์คํ ๋ฆฌ์ง ์์ง์์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํฉ๋๋ค. + +6๋จ๊ณ - Access methods๋ SQL ๋ฌธ์ ์ฝ๊ธฐ ์ ์ฉ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ์ฟผ๋ฆฌ๊ฐ ์ฝ๊ธฐ ์ ์ฉ์ธ ๊ฒฝ์ฐ(SELECT ๋ฌธ), ์ฟผ๋ฆฌ๋ ์ถ๊ฐ ์ฒ๋ฆฌ๋ฅผ ์ํด buffer manager์๊ฒ ์ ๋ฌ๋ฉ๋๋ค. buffer manager๋ ์บ์ ๋๋ ๋ฐ์ดํฐ ํ์ผ์์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ต๋๋ค. + +7๋จ๊ณ - UPDATE ํน์ INSERT ๋ฌธ์ธ ๊ฒฝ์ฐ, ์ถ๊ฐ ์ฒ๋ฆฌ๋ฅผ ์ํด transaction manager์๊ฒ ์ ๋ฌํฉ๋๋ค. + +8๋จ๊ณ - ํธ๋์ญ์ ์ด ์งํ๋๋ ๋์ ๋ฐ์ดํฐ๋ ์ ๊ฒจ ์์ต๋๋ค. ์ด๋ lock manager์ ์ํด ๋ณด์ฅ๋ฉ๋๋ค. ๋ํ ํธ๋์ญ์ ์ ACID ํ๋กํผํฐ๋ ๋ณด์ฅํฉ๋๋ค. + +### CAP ์ ๋ฆฌ + +CAP ์ ๋ฆฌ๋ ์ปดํจํฐ ๊ณผํ์์ ๊ฐ์ฅ ์ ๋ช ํ ์ฉ์ด ์ค ํ๋์ด์ง๋ง ๊ฐ๋ฐ์๋ง๋ค ์ดํดํ๋ ๋ฐ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค. ์ด ์ฉ์ด๊ฐ ๋ฌด์์ด๋ฉฐ ์ ํผ๋์ค๋ฌ์ธ ์ ์๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค. + ++ +
+ +CAP ์ ๋ฆฌ์ ๋ฐ๋ฅด๋ฉด ๋ถ์ฐ ์์คํ ์ ์ด ์ธ ๊ฐ์ง ๋ณด์ฅ ์ค ๋ ๊ฐ์ง ์ด์์ ๋์์ ์ ๊ณตํ ์ ์์ต๋๋ค. + +**Consistency**: ์ผ๊ด์ฑ์ด๋ ๋ชจ๋ ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ ๋ ธ๋์ ์ฐ๊ฒฐํ๋ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๋์์ ๋ณผ ์ ์๋ค๋ ์๋ฏธ์ ๋๋ค. + +**Availability**: ๊ฐ์ฉ์ฑ์ด๋ ์ผ๋ถ ๋ ธ๋๊ฐ ๋ค์ด๋๋๋ผ๋ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ ๋ชจ๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ต์ ๋ฐ๋๋ค๋ ์๋ฏธ์ ๋๋ค. + +**Partition Tolerance**: ํํฐ์ ์ ๋ ๋ ธ๋ ๊ฐ์ ํต์ ๋จ์ ์ ๋ํ๋ ๋๋ค. ํํฐ์ ๋๋ ๋์ค๋ ์์คํ ์ด ๋คํธ์ํฌ ํํฐ์ ์๋ ๋ถ๊ตฌํ๊ณ ๊ณ์ ์๋ํ ์ ์๋ ๋ฅ๋ ฅ์ ์๋ฏธํฉ๋๋ค. + +"์ ์ค ๋" ๊ณต์์ ์ ์ฉํ ์ ์์ง๋ง **์ด๋ฌํ ๋จ์ํ๋ ์คํด์ ์์ง๊ฐ ์์ต๋๋ค**. + +1. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ํํ๋ ๊ฒ์ ์ฝ์ง ์์ต๋๋ค. CAP ์ ๋ฆฌ๋ง์ผ๋ก ์ ํ์ ์ ๋นํํ๋ ๊ฒ์ ์ถฉ๋ถํ์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํ์ฌ์์ ๋จ์ํ AP ์์คํ ์ด๋ผ๋ ์ด์ ๋ง์ผ๋ก ์ฑํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํด Cassandra๋ฅผ ์ ํํ์ง๋ ์์ต๋๋ค. ์ฑํ ๋ฉ์์ง๋ฅผ ์ ์ฅํ๋ ๋ฐ ์์ด Cassandra๋ฅผ ๋ฐ๋์งํ ์ต์ ์ผ๋ก ๋ง๋๋ ์ข์ ํน์ฑ ๋ชฉ๋ก์ด ์์ต๋๋ค. ๋ ๊น์ด ํ๊ณ ๋ค ํ์๊ฐ ์์ต๋๋ค. + +2. "CAP๋ ๋์์ธ ๊ณต๊ฐ์ ๊ทนํ ์ผ๋ถ๋ถ, ์ฆ ํํฐ์ ์ด ์์ ๋ ์๋ฒฝํ ๊ฐ์ฉ์ฑ๊ณผ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ ๊ฒฝ์ฐ๋ ๋๋ญ ๋๋ค." ๋ ผ๋ฌธ์์ ์ธ์ฉ: CAP Twelve Years Later: How the "Rules" Have Changed. + +3. ์ด ์ ๋ฆฌ๋ ์ฝ 100%์ ๊ฐ์ฉ์ฑ๊ณผ ์ผ๊ด์ฑ์ ์๋ฏธํฉ๋๋ค. ๋ณด๋ค ํ์ค์ ์ธ ๋ ผ์๋ ๋คํธ์ํฌ ํํฐ์ ์ด ์์ ๋ ์ง์ฐ ์๊ฐ๊ณผ ์ผ๊ด์ฑ ๊ฐ์ ์ ์ถฉ์์ ๋๋ค. ์์ธํ ๋ด์ฉ์ PACELC ์ ๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ธ์. + +**CAP์ ๋ฆฌ๊ฐ ์ค์ ๋ก ์ ์ฉํ๊ฐ์?** + +์ ์ถฉ์์ ๋ ผ์ํ ์ ์๋ค๋ ์ ์์ ์ฌ์ ํ ์ ์ฉํ๋ค๊ณ ์๊ฐํ์ง๋ง, ์ด๋ ์ผ๋ถ๋ถ์ผ ๋ฟ์ ๋๋ค. ์ฌ๋ฐ๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ํํ๋ ค๋ฉด ๋ ๊น์ด ํ๊ณ ๋ค์ด์ผ ํฉ๋๋ค. + +### ๋ฉ๋ชจ๋ฆฌ ๋ฐ ์คํ ๋ฆฌ์ง์ ์ข ๋ฅ + ++ +
+ + +### SQL ์ฟผ๋ฆฌ ์๊ฐํ + ++ +
+ +SQL ๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์์ ๋ค์๊ณผ ๊ฐ์ ์ฌ๋ฌ ๋จ๊ณ๋ก ์คํ๋ฉ๋๋ค. + +- SQL๋ฌธ ํ์ฑ๊ณผ ์ ํจ์ฑ ๊ฒ์ฌ +- SQL์ ๊ด๊ณ๋์(relational algebra) ๊ฐ์ ๋ด๋ถ ํํ์ผ๋ก ๋ณํ +- ๋ด๋ถ ํํ์ ์ต์ ํํ๊ณ ์ธ๋ฑ์ค ์ ๋ณด๋ฅผ ํ์ฉํ๋ ์คํ ๊ณํ ์์ฑ +- ๊ณํ ์คํ ๋ฐ ๊ฒฐ๊ณผ ๋ฐํ + +SQL ์คํ์ ๋งค์ฐ ๋ณต์กํ๋ฉฐ ๋ค์๊ณผ ๊ฐ์ ๋ง์ ๊ณ ๋ ค ์ฌํญ์ ํฌํจํฉ๋๋ค. + +- ์ธ๋ฑ์ค ๋ฐ ์บ์ ์ฌ์ฉ +- ํ ์ด๋ธ ์กฐ์ธ ์์ +- ๋์์ฑ ์ ์ด +- ํธ๋์ญ์ ๊ด๋ฆฌ + +### SQL ์ธ์ด + +1986๋ , SQL(Structured Query Language)์ด ํ์ค์ด ๋์์ต๋๋ค. ๊ทธ ํ 40๋ ๋์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์ธ์ด๊ฐ ๋์์ต๋๋ค. ์ต์ ํ์ค(ANSI SQL 2016)์ ์ฝ๋ ๋ฐ๋ ๋ง์ ์๊ฐ์ด ์์๋ ์ ์์ต๋๋ค. ์ด๋ป๊ฒ ๋ฐฐ์ธ ์ ์์๊น์? + ++ +
+ +SQL ์ธ์ด์๋ 5๊ฐ์ง ๊ตฌ์ฑ ์์๊ฐ ์์ต๋๋ค. + +- DDL: ๋ฐ์ดํฐ ์ ์ ์ธ์ด. ์: CREATE, ALTER, DROP +- DQL: ๋ฐ์ดํฐ ์ฟผ๋ฆฌ ์ธ์ด. ์: SELECT +- DML: ๋ฐ์ดํฐ ์กฐ์ ์ธ์ด. ์: INSERT, UPDATE, DELETE +- DCL: ๋ฐ์ดํฐ ์ ์ด ์ธ์ด. ์: GRANT, REVOKE +- TCL: ํธ๋์ญ์ ์ ์ด ์ธ์ด. ์: COMMIT, ROLLBACK + +๋ฐฑ์๋ ์์ง๋์ด์ ๊ฒฝ์ฐ ๋๋ถ๋ถ์ ์์์ผ ํ ์๋ ์์ต๋๋ค. ๋ฐ์ดํฐ ๋ถ์๊ฐ๋ผ๋ฉด DQL์ ์ ์ดํดํด์ผ ํ ์๋ ์์ต๋๋ค. ์์ ์๊ฒ ๊ฐ์ฅ ๊ด๋ จ์ฑ์ด ๋์ ์ฃผ์ ๋ฅผ ์ ํํ์ธ์. + +## ์บ์ + +### ๋ฐ์ดํฐ๋ ์ด๋์๋ ์บ์๋ฉ๋๋ค + +์ด ๋ค์ด์ด๊ทธ๋จ์ ์ผ๋ฐ์ ์ธ ์ํคํ ์ฒ์์ ๋ฐ์ดํฐ๋ฅผ ์บ์ํ๋ ์์น๋ฅผ ๋ณด์ฌ์ค๋๋ค. + ++ +
+ + +ํ๋ก์ฐ๋ฅผ ๋ฐ๋ผ **์ฌ๋ฌ ๋ ์ด์ด** ๊ฐ ์์ต๋๋ค. + +1. Client apps: HTTP ์๋ต์ ๋ธ๋ผ์ฐ์ ์ ์ํด ์บ์๋ ์ ์์ต๋๋ค. HTTP๋ฅผ ํตํด ์ฒ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ฉด HTTP ํค๋์ ๋ง๋ฃ ์ ์ฑ ๊ณผ ํจ๊ป ๋ฐํ๋๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์์ฒญํ๋ฉด ํด๋ผ์ด์ธํธ ์ฑ์ด ๋จผ์ ๋ธ๋ผ์ฐ์ ์บ์์์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋ ค๊ณ ์๋ํฉ๋๋ค. +2. CDN: CDN์ ์ ์ ์น ๋ฆฌ์์ค๋ฅผ ์บ์ํฉ๋๋ค. ํด๋ผ์ด์ธํธ๋ ๊ทผ์ฒ์ CDN ๋ ธ๋์์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ์ ์์ต๋๋ค. +3. Load Balancer: ๋ก๋ ๋ฐธ๋ฐ์๋ ๋ฆฌ์์ค๋ ์บ์ํ ์ ์์ต๋๋ค. +4. Messaging infra: ๋ฉ์์ง ๋ธ๋ก์ปค๊ฐ ๋จผ์ ๋์คํฌ์ ๋ฉ์์ง๋ฅผ ์ ์ฅํ ๋ค์, ์ปจ์๋จธ๋ ์์ ์ ์๋์ ๋ง์ถฐ ๋ฉ์์ง๋ฅผ ๊ฒ์ํฉ๋๋ค. ๋ฆฌํ ์ ์ ์ฑ ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ ์ผ์ ๊ธฐ๊ฐ ๋์ ์นดํ์นด ํด๋ฌ์คํฐ์ ์บ์๋ฉ๋๋ค. +5. Services: ์๋น์ค์๋ ์ฌ๋ฌ๊ฐ์ ์บ์ ๊ณ์ธต์ด ์์ต๋๋ค. CPU ์บ์์ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์บ์์์ ๊ฒ์์ ์๋ํฉ๋๋ค. ๋๋ก๋ ์๋น์ค๊ฐ ๋์คํฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์ธ์ปจ๋ ๋ ๋ฒจ ์บ์๊ฐ ์์ ์ ์์ต๋๋ค. +6. Distributed Cache: Redis์ ๊ฐ์ ๋ถ์ฐ ์บ์๋ ์ฌ๋ฌ ์๋น์ค์ ๋ํ key-value ์์ ๋ฉ๋ชจ๋ฆฌ์ ๋ณด๊ดํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ณด๋ค ํจ์ฌ ๋ฐ์ด๋ ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฑ๋ฅ์ ์ ๊ณตํฉ๋๋ค. +7. Full-text Search: ๋ํ๋จผํธ ๊ฒ์์ด๋ ๋ก๊ทธ ๊ฒ์์ ์ํด Elastic Search์ ๊ฐ์ ํํ ์คํธ ๊ฒ์์ ์ฌ์ฉํด์ผ ํ ๋๊ฐ ์์ต๋๋ค. ๋ฐ์ดํฐ ์ฌ๋ณธ๋ ๊ฒ์ ์์ง์์ ์ธ๋ฑ์ค๋ฉ๋๋ค. +8. Database: ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์์๋ ๋ค์ํ ๋ ๋ฒจ์ ์บ์๊ฐ ์์ต๋๋ค. +- WAL(Write-ahead Log): ๋ฐ์ดํฐ๋ B ํธ๋ฆฌ ์ธ๋ฑ์ค๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ ์ ๋จผ์ WAL์ ๊ธฐ๋ก๋ฉ๋๋ค. +- Bufferpool: ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์บ์ํ๊ธฐ ์ํด ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋๋ค. +- Materialized View: ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฏธ๋ฆฌ ๊ณ์ฐํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ์ ์ฅํ์ฌ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค. +- Transaction log: ๋ชจ๋ ํธ๋์ญ์ ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๋ฐ์ดํธ๋ฅผ ๊ธฐ๋กํฉ๋๋ค. +- Replication Log: ๋ฐ์ดํฐ๋ฒ ์ด์ค ํด๋ฌ์คํฐ์ ๋ณต์ ์ํ๋ฅผ ๊ธฐ๋กํ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. + +### Redis๋ ์ ๋น ๋ฅธ๊ฐ์? + +์๋ ๋ค์ด์ด๊ทธ๋จ๊ณผ ๊ฐ์ด 3๊ฐ์ง ์ฃผ์ ์ด์ ๊ฐ ์์ต๋๋ค. + ++ +
+ + +1. Redis๋ RAM ๊ธฐ๋ฐ ๋ฐ์ดํฐ ์คํ ๋ฆฌ์ง์ ๋๋ค. RAM ์ก์ธ์ค๋ ์์์ ๋์คํฌ ์ก์ธ์ค๋ณด๋ค ์ต์ 1000๋ฐฐ ์ด์ ๋น ๋ฆ ๋๋ค. +2. Redis๋ ์คํ ํจ์จ์ฑ์ ์ํด IO ๋ฉํฐํ๋ ์ฑ๊ณผ ์ฑ๊ธ ์ค๋ ๋ ์ต์คํ์ ๋ฃจํ๋ฅผ ํ์ฉํฉ๋๋ค. +3. Redis๋ ๋ช ๊ฐ์ง ํจ์จ์ ์ธ ๋ก์ฐ ๋ ๋ฒจ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ํ์ฉํฉ๋๋ค. + +์ง๋ฌธ: ๋ ๋ค๋ฅธ ์ธ๊ธฐ ์๋ ์ธ๋ฉ๋ชจ๋ฆฌ ์คํ ๋ฆฌ์ง๋ Memcached์ ๋๋ค. Redis์ Memcached์ ์ฐจ์ด์ ์ ์๊ณ ์๋์? + +์ด ๋ค์ด์ด๊ทธ๋จ์ ์คํ์ผ์ด ์ด์ ๊ฒ์๋ฌผ๊ณผ ๋ค๋ฅด๋ค๋ ๊ฒ์ ๋์น์ฑ์ จ์ ๊ฒ์ ๋๋ค. ์ด๋ ์ชฝ์ ์ ํธํ์๋์ง ์๋ ค์ฃผ์ธ์. + +### Redis๋ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์? + ++ +
+ + +Redis์๋ ๋จ์ํ ์บ์ฑ ์ด์์ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. + +Redis๋ ๋ค์ด์ด๊ทธ๋จ์ ํ์๋ ๊ฒ์ฒ๋ผ ๋ค์ํ ์๋๋ฆฌ์ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. + +- Session + + Redis๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ์๋น์ค ๊ฐ์ ์ฌ์ฉ์ ์ธ์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ์ ์์ต๋๋ค. + +- Cache + + ํนํ ํซ์คํ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ Redis๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ ํ์ด์ง๋ฅผ ์บ์ํ ์ ์์ต๋๋ค. + +- Distributed lock + + Redis ์คํธ๋ง์ ์ฌ์ฉํ์ฌ ๋ถ์ฐ ์๋น์ค ๊ฐ์ lock์ ํ๋ํ ์ ์์ต๋๋ค. + +- Counter + + ์ข์์ ์, ์กฐํ์๋ฅผ ๊ณ์ฐํ ์ ์์ต๋๋ค. + +- Rate limiter + + ํน์ ์ฌ์ฉ์ IP์ ๋ํด rate limiter๋ฅผ ์ ์ฉํ ์ ์์ต๋๋ค. + +- Global ID generator + + ๊ธ๋ก๋ฒ ID์ Redis Int๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. + +- Shopping cart + + Redis ํด์๋ฅผ ์ฌ์ฉํ์ฌ ์ฅ๋ฐ๊ตฌ๋์ key-value ์์ ๋ํ๋ผ ์ ์์ต๋๋ค. + +- Calculate user retention + + ๋นํธ๋งต์ ์ฌ์ฉํ์ฌ ๋งค์ผ ๋ก๊ทธ์ธํ๋ ์ฌ์ฉ์๋ฅผ ํ์ํ๊ณ ์ฌ์ฉ์ ๋ฆฌํ ์ ์ ๊ณ์ฐํ ์ ์์ต๋๋ค. + +- Message queue + + ๋ฉ์์ง ํ์ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. + +- Ranking + + ZSet์ ์ฌ์ฉํ์ฌ ์ํฐํด์ ์ ๋ ฌํ ์ ์์ต๋๋ค. + +### ์ฃผ์ ์บ์ฑ ์ ๋ต + +๋๊ท๋ชจ ์์คํ ์ ์ค๊ณํ ๋๋ ์ผ๋ฐ์ ์ผ๋ก ์บ์ฑ์ ์ ์คํ๊ฒ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. +๋ค์์ ์์ฃผ ํ์ฉ๋๋ 5๊ฐ์ง ์บ์ฑ ์ ๋ต์ ๋๋ค. + ++ +
+ + + +## ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ + +### ์ผ๋ฐ์ ์ธ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ๋ ์ด๋ค ๋ชจ์ต์ผ๊น์? + ++ +
+ + +์๋ ๋ค์ด์ด๊ทธ๋จ์ ์ผ๋ฐ์ ์ธ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ๋ฅผ ๋ณด์ฌ์ค๋๋ค. + +- Load Balancer: ์ด๋ ๊ฒ ํ๋ฉด ๋ค์ด์ค๋ ํธ๋ํฝ์ด ์ฌ๋ฌ ๋ฐฑ์๋ ์๋น์ค์ ๋ถ์ฐ๋ฉ๋๋ค. +- CDN (Content Delivery Network): CDN์ ๋ ๋น ๋ฅธ ์ ์ก์ ์ํด ์ ์ ์ฝํ ์ธ ๋ฅผ ๋ณด๊ดํ๋ ์ง๋ฆฌ์ ์ผ๋ก ๋ถ์ฐ๋ ์๋ฒ ๊ทธ๋ฃน์ ๋๋ค. ํด๋ผ์ด์ธํธ๋ ๋จผ์ CDN์์ ์ฝํ ์ธ ๋ฅผ ์ฐพ์ ๋ค์ ๋ฐฑ์๋ ์๋น์ค๋ก ์ด๋ํฉ๋๋ค. +- API Gateway: ์์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ๊ด๋ จ ์๋น์ค๋ก ๋ผ์ฐํ ํฉ๋๋ค. ID ๊ณต๊ธ์์ ํต์ ํ๊ณ ์๋น์ค๋ฅผ ๊ฒ์ํฉ๋๋ค. +- Identity Provider: ์ฌ์ฉ์์ ๋ํ ์ธ์ฆ๊ณผ ์ธ๊ฐ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. +- Service Registry & Discovery: ์ด ์ปดํฌ๋ํธ์์ ๋ง์ดํฌ๋ก์๋น์ค ๋ฑ๋ก ๋ฐ ๊ฒ์์ด ์ด๋ฃจ์ด์ง๊ณ , API ๊ฒ์ดํธ์จ์ด๋ ์ด ์ปดํฌ๋ํธ์์ ํต์ ํ ๊ด๋ จ ์๋น์ค๋ฅผ ์ฐพ์ต๋๋ค. +- Management: ์ด ์ปดํฌ๋ํธ๋ ์๋น์ค ๋ชจ๋ํฐ๋ง์ ๋ด๋นํฉ๋๋ค. +- Microservices: ๋ง์ดํฌ๋ก์๋น์ค๋ ์๋ก ๋ค๋ฅธ ๋๋ฉ์ธ์์ ์ค๊ณ ๋ฐ ๋ฐฐํฌ๋ฉ๋๋ค. ๊ฐ ๋๋ฉ์ธ์๋ ์์ฒด ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์์ต๋๋ค. API ๊ฒ์ดํธ์จ์ด๋ REST API ๋๋ ๊ธฐํ ํ๋กํ ์ฝ์ ํตํด ๋ง์ดํฌ๋ก์๋น์ค์ ํต์ ํ๊ณ , ๋์ผํ ๋๋ฉ์ธ ๋ด์ ๋ง์ดํฌ๋ก์๋น์ค๋ RPC(Remote Procedure Call)๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก ํต์ ํฉ๋๋ค. + +๋ง์ดํฌ๋ก์๋น์ค์ ์ด์ + +- ๋น ๋ฅด๊ฒ ์ค๊ณ, ๋ฐฐํฌํ๊ณ ์ํ์ ์ผ๋ก ํ์ฅํ ์ ์์ต๋๋ค. +- ๊ฐ ๋๋ฉ์ธ์ ์ ๋ด ํ์์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค. +- ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ฐ ๋๋ฉ์ธ์์ ๋น์ฆ๋์ค ์๊ตฌ ์ฌํญ์ ์ปค์คํฐ๋ง์ด์ฆํ๊ณ ๋ ๋์ ์ง์์ ์ ๊ณตํ ์ ์์ต๋๋ค. + +### ๋ง์ดํฌ๋ก์๋น์ค ๋ชจ๋ฒ์ฌ๋ก + +์ฌ์ง ํ ์ฅ์ด ์ฒ ๋ง๋ ๋ง๋ณด๋ค ๋ซ์ต๋๋ค. ๋ค์์ ๋ง์ดํฌ๋ก์๋น์ค ๊ฐ๋ฐ์ ์ํ 9๊ฐ์ง ๋ชจ๋ฒ ์ฌ๋ก์ ๋๋ค. + ++ +
+ + +๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ๊ฐ๋ฐํ ๋๋ ๋ค์๊ณผ ๊ฐ์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ผ์ผ ํฉ๋๋ค. + +1. ๊ฐ ๋ง์ดํฌ๋ก์๋น์ค๋ง๋ค ๋ณ๋์ ๋ฐ์ดํฐ ์คํ ๋ฆฌ์ง ์ฌ์ฉ +2. ์ฝ๋์ ์์ฑ๋๋ฅผ ๋น์ทํ ์์ค์ผ๋ก ์ ์ง +3. ๊ฐ ๋ง์ดํฌ๋ก์๋น์ค๋ง๋ค ๋ณ๋๋ก ๋น๋ +4. ๊ฐ ๋ง์ดํฌ๋ก์๋น์ค์ ๋จ์ผ ์ฑ ์ ํ ๋น +5. ์ปจํ ์ด๋์ ๋ฐฐํฌ +6. ์คํ ์ดํธ๋ฆฌ์ค ์๋น์ค ์ค๊ณ +7. ๋๋ฉ์ธ ๋๋ฆฌ๋ธ ์ค๊ณ ๋์ +8. ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋ ์ค๊ณ +9. ๋ง์ดํฌ๋ก์๋น์ค ์ค์ผ์คํธ๋ ์ด์ + +### ๋ง์ดํฌ๋ก์๋น์ค์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ธฐ์ ์คํ์ ๋ฌด์์ธ๊ฐ์ + +์๋์์ ๊ฐ๋ฐ ๋จ๊ณ์ ํ๋ก๋์ ๋จ๊ณ์ ๋ง์ดํฌ๋ก์๋น์ค ๊ธฐ์ ์คํ์ ๋ณด์ฌ์ฃผ๋ ๋ค์ด์ด๊ทธ๋จ์ ํ์ธํ ์ ์์ต๋๋ค. + ++ +
+ + +โถ๏ธ ๐๐ซ๐-๐๐ซ๐จ๐๐ฎ๐๐ญ๐ข๐จ๐ง + +- Define API - ์ด๋ ๊ฒ ํ๋ฉด ํ๋ก ํธ์๋์ ๋ฐฑ์๋ ๊ฐ์ ๊ณ์ฝ์ด ์ฑ๋ฆฝ๋ฉ๋๋ค. ์ด๋ฅผ ์ํด Postman, OpenAPI๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. +- Development - ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ Node.js๋ react๊ฐ, ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ ์๋ฐ/ํ์ด์ฌ/go๊ฐ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค. ๋ํ API ์ ์์ ๋ฐ๋ผ API ๊ฒ์ดํธ์จ์ด์ ๊ตฌ์ฑ์ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค. +- Continuous Integration - ์๋ํ๋ ํ ์คํธ๋ฅผ ์ํด JUnit๊ณผ Jenkins๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฝ๋๋ ๋์ปค ์ด๋ฏธ์ง๋ก ํจํค์ง๋์ด ๋ง์ดํฌ๋ก์๋น์ค๋ก ๋ฐฐํฌ๋ฉ๋๋ค. + +โถ๏ธ ๐๐ซ๐จ๐๐ฎ๐๐ญ๐ข๐จ๐ง + +- ๋ก๋ ๋ฐธ๋ฐ์์๋ NGinx๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ ํ๋ฉ๋๋ค. Cloudflare๋ CDN(Content Delivery Network)์ ์ ๊ณตํฉ๋๋ค. +- API Gateway - ๊ฒ์ดํธ์จ์ด์๋ ์คํ๋ง ๋ถํธ๋ฅผ ์ฌ์ฉํ๊ณ , ์๋น์ค ๊ฒ์์๋ ์ ๋ ์นด/์ฃผํคํผ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. +- ๋ง์ดํฌ๋ก์๋น์ค๋ ํด๋ผ์ฐ๋์ ๋ฐฐํฌ๋ฉ๋๋ค. AWS, Microsoft Azure, Google GCP ์ค์์ ์ ํํ ์ ์์ต๋๋ค. +Cache and Full-text Search - Redis๋ key-value ์์ ์บ์ฑํ๊ธฐ ์ํ ์ผ๋ฐ์ ์ธ ์ ํ์ ๋๋ค. ํํ ์คํธ ๊ฒ์์๋ Elasticsearch๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. +- Communications - ์๋น์ค๊ฐ ์๋ก ํต์ ํ๊ธฐ ์ํด์๋ ๋ฉ์์ง ์ธํ๋ผ๋ก ์นดํ์นด ํน์ RPC๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. +- Persistence - ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ MySQL ๋๋ PostgreSQL์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๊ฐ์ฒด ์คํ ๋ฆฌ์ง์๋ Amazon S3์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ์ํ ๊ฒฝ์ฐ wide-column ์คํ ๋ฆฌ์ง๋ก Cassandra๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. +- Management & Monitoring - ์๋ง์ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ผ๋ฐ์ ์ธ ์ด์ ๋๊ตฌ๋ก Prometheus, Elastic Stack, Kubernetes๊ฐ ์์ต๋๋ค. + +### ์นดํ์นด๊ฐ ๋น ๋ฅธ ์ด์ + +์นดํ์นด ์ฑ๋ฅ์ ๊ธฐ์ฌํ ๋ง์ ๋์์ธ ๊ฒฐ์ ์ด ์์ต๋๋ค. ์ด ๊ธ์์๋ ๋ ๊ฐ์ง์ ์ด์ ์ ๋ง์ถ๊ฒ ์ต๋๋ค. ์ด ๋ ๊ฐ์ง๊ฐ ๊ฐ์ฅ ํฐ ๋น์ค์ ์ฐจ์งํ๋ค๊ณ ์๊ฐํฉ๋๋ค. + ++ +
+ +1. ์ฒซ ๋ฒ์งธ๋ ์นดํ์นด๊ฐ ์์ฐจ์ I/O์ ์์กดํ๋ค๋ ์ ์ ๋๋ค. +2. ์นดํ์นด์ ์ฑ๋ฅ ์ด์ ์ ์ ๊ณตํ๋ ๋ ๋ฒ์งธ ์ค๊ณ ์ ํ์ ํจ์จ์ฑ์ ์ด์ ์ ๋ง์ถ ์ ๋ก ์นดํผ ์์น์ ๋๋ค. + +์ด ๋ค์ด์ด๊ทธ๋จ์ ํ๋ก๋์์ ์ปจ์๋จธ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์ ์ก๋๋ ๋ฐฉ์๊ณผ ์ ๋ก ์นดํผ์ ์๋ฏธ๋ฅผ ์ค๋ช ํฉ๋๋ค. + +- 1.1 - 1.3๋จ๊ณ: ํ๋ก๋์๊ฐ ๋์คํฌ์ ๋ฐ์ดํฐ ์ฐ๊ธฐ +- 2๋จ๊ณ: ์ปจ์๋จธ๊ฐ ์ ๋ก ์นดํผ ์์ด ๋ฐ์ดํฐ ์ฝ๊ธฐ + +2.1 ๋ฐ์ดํฐ๊ฐ ๋์คํฌ์์ OS ์บ์๋ก ๋ก๋๋ฉ๋๋ค. + +2.2 ๋ฐ์ดํฐ๊ฐ OS ์บ์์์ ์นดํ์นด ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๋ณต์ฌ๋ฉ๋๋ค. + +2.3 ์นดํ์นด ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐ์ดํฐ๋ฅผ ์์ผ ๋ฒํผ์ ๋ณต์ฌํฉ๋๋ค. + +2.4 ๋ฐ์ดํฐ๊ฐ ์์ผ ๋ฒํผ์์ ๋คํธ์ํฌ ์นด๋๋ก ๋ณต์ฌ๋ฉ๋๋ค. + +2.5 ๋คํธ์ํฌ ์นด๋๊ฐ ์ปจ์๋จธ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์กํฉ๋๋ค. + + +- 3๋จ๊ณ: ์ปจ์๋จธ๋ ์ ๋ก ์นดํผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. + +3.1: ๋ฐ์ดํฐ๊ฐ ๋์คํฌ์์ OS ์บ์๋ก ๋ก๋๋ฉ๋๋ค. +3.2 OS ์บ์๋ sendfile() ์ปค๋งจ๋๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋คํธ์ํฌ ์นด๋์ ์ง์ ๋ณต์ฌํฉ๋๋ค. +3.3 ๋คํธ์ํฌ ์นด๋๊ฐ ์ปจ์๋จธ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์กํฉ๋๋ค. + +์ ๋ก ์นดํผ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ์ ์ปค๋ ์ปจํ ์คํธ ์ฌ์ด์ ์ฌ๋ฌ ๋ฐ์ดํฐ ๋ณต์ฌ๋ณธ์ ์ ์ฅํ๋ ์์ปท์ ๋๋ค. + +## ๊ฒฐ์ ์์คํ + +### ๊ฒฐ์ ์์คํ ์ ์ด๋ป๊ฒ ๋ฐฐ์ฐ๋์? + ++ +
+ +### ์ ์ฉ์นด๋๋ฅผ "์ํ์์ ๊ฐ์ฅ ์์ต์ฑ์ด ๋์ ์ํ"์ด๋ผ๊ณ ๋ถ๋ฅด๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์? ๋น์/๋ง์คํฐ์นด๋๋ ์ด๋ป๊ฒ ์์ต์ ์ฐฝ์ถํ๋์? + +์๋ ๋ค์ด์ด๊ทธ๋จ์ ์ ์ฉ์นด๋ ๊ฒฐ์ ํ๋ก์ฐ์ ์ด์ฝ๋ ธ๋ฏน์ค๋ฅผ ๋ณด์ฌ์ค๋๋ค. + ++ +
+ +1.์นด๋ ์์ ์๊ฐ ์ ํ์ ๊ตฌ๋งคํ๊ธฐ ์ํด ํ๋งค์์๊ฒ 100๋ฌ๋ฌ๋ฅผ ์ง๋ถํฉ๋๋ค. + +2.ํ๋งค์๋ ํ๋งค๋์ด ๋ง์ ์ ์ฉ์นด๋๋ฅผ ์ฌ์ฉํ์ฌ ์ด์ต์ ์ป๊ณ ๊ฒฐ์ ์๋น์ค ์ ๊ณต์ ๋ํด ๋ฐ๊ธ์ฌ์ ์นด๋ ๋คํธ์ํฌ์ ๋ณด์์ ํด์ผ ํฉ๋๋ค. ๋งค์ ์ํ์ ํ๋งค์์ "merchant discount fee"๋ผ๊ณ ํ๋ ์์๋ฃ๋ฅผ ์ค์ ํฉ๋๋ค. + +3 - 4. ๋งค์ ์ํ์ ๊ตํ ์์๋ฃ๋ก $0.25๋ฅผ ์์ ํ๊ณ , $1.75๋ ํ์ ์์๋ฃ๋ก ๋ฐ๊ธ ์ํ์ ์ง๋ถํฉ๋๋ค. merchant discount fee๋ก ํ์ ์์๋ฃ๋ฅผ ์ถฉ๋นํด์ผ ํฉ๋๋ค. + + ๊ฐ ๋ฐ๊ธ ์ํ์ด ๊ฐ ๊ฐ๋งน์ ๊ณผ ์์๋ฃ๋ฅผ ํ์ํ๋ ๊ฒ์ด ํจ์จ์ ์ด์ง ์๊ธฐ ๋๋ฌธ์ ๊ตํ ์์๋ฃ๋ ์นด๋ ๋คํธ์ํฌ์์ ์ค์ ํฉ๋๋ค. + +5.์นด๋ ๋คํธ์ํฌ๋ ๊ฐ ์ํ๊ณผ network assessments and fees๋ฅผ ์ค์ ํ๊ณ , ์ํ์ ๋งค๋ฌ ์นด๋ ๋คํธ์ํฌ์ ์๋น์ค ๋น์ฉ์ ์ง๋ถํฉ๋๋ค. ์๋ฅผ ๋ค์ด, VISA๋ ์ค์์ดํํ ๋๋ง๋ค 0.11%์ ํ๊ฐ ์์๋ฃ์ $0.0195์ ์ฌ์ฉ ์์๋ฃ๋ฅผ ๋ถ๊ณผํฉ๋๋ค. + +6.์นด๋ ์์ ์๋ ๋ฐ๊ธ ์ํ์ ์๋น์ค ๋น์ฉ์ ์ง๋ถํฉ๋๋ค. + +์ ๋ฐ๊ธ ์ํ์ด ๋ณด์์ ๋ฐ์์ผ ํ๋์? + +- ์นด๋ ์์ ์ฃผ๊ฐ ๋ฐ๊ธ์ฌ์ ๋๊ธ์ ์ง๋ถํ์ง ์๋๋ผ๋ ๋ฐ๊ธ์ฌ๋ ํ๋งค์์๊ฒ ๋๊ธ์ ์ง๋ถํฉ๋๋ค. +- ์นด๋ ์์ง์๊ฐ ๋ฐ๊ธ์ฌ์ ๋๊ธ์ ์ง๋ถํ๊ธฐ ์ ์ ๋ฐ๊ธ์ฌ๊ฐ ํ๋งค์์๊ฒ ๋๊ธ์ ๋จผ์ ์ง๋ถํฉ๋๋ค. +- ๋ฐ๊ธ์ฌ๋ ๊ณ ๊ฐ ๊ณ์ข ๊ด๋ฆฌ, ๋ช ์ธ์ ์ ๊ณต, ์ฌ๊ธฐ ํ์ง, ์ํ ๊ด๋ฆฌ, ์ฒญ์ฐ ๋ฐ ๊ฒฐ์ ๋ฑ ๊ธฐํ ์ด์ ๋น์ฉ์ด ๋ฐ์ํฉ๋๋ค. + +### ์์ ์์ ์ฐ๋ฆฌ๊ฐ ์ ์ฉ์นด๋๋ฅผ ๊ธ์ ๋, VISA๋ ์ด๋ป๊ฒ ์๋ํ๋์? + ++ +
+ + +๋น์, ๋ง์คํฐ์นด๋, ์๋ฉ๋ฆฌ์นธ ์ต์คํ๋ ์ค๋ ์๊ธ ์ฒญ์ฐ ๋ฐ ์ ์ฐ์ ์ํ ์นด๋ ๋คํธ์ํฌ ์ญํ ์ ํฉ๋๋ค. ์นด๋ ๋งค์ ์ํ๊ณผ ์นด๋ ๋ฐ๊ธ ์ํ์ ์๋ก ๋ค๋ฅผ ์ ์์ผ๋ฉฐ, ์ค์ ๋ก๋ ์ข ์ข ๋ค๋ฆ ๋๋ค. ์ํ์ด ์ค๊ฐ์ ์์ด ํ๋์ฉ ๊ฑฐ๋๋ฅผ ์ ์ฐํ๋ค๋ฉด, ๊ฐ ์ํ์ ๋ค๋ฅธ ๋ชจ๋ ์ํ๊ณผ ๊ฑฐ๋๋ฅผ ์ ์ฐํด์ผ ํฉ๋๋ค. ์ด๋ ๋งค์ฐ ๋นํจ์จ์ ์ ๋๋ค. + +์ ๋ค์ด์ด๊ทธ๋จ์ ์ ์ฉ ์นด๋ ๊ฒฐ์ ํ๋ก์ธ์ค์์ VISA์ ์ญํ ์ ๋ณด์ฌ์ค๋๋ค. ๋ ๊ฐ์ง ํ๋ก์ฐ๊ฐ ๊ด๋ จ๋์ด ์์ต๋๋ค. ์น์ธ ํ๋ฆ์ ๊ณ ๊ฐ์ด ์ ์ฉ์นด๋๋ฅผ ์ค์์ดํํ ๋ ๋ฐ์ํฉ๋๋ค. ์บก์ฒ์ ์ ์ฐ ํ๋ก์ฐ๋ ์์ ์ด ํ๋ฃจ๊ฐ ๋๋ ๋ ๋ฐ์ํฉ๋๋ค. + +- ๊ฑฐ๋ ์น์ธ ํ๋ก์ฐAuthorization Flow + +0๋จ๊ณ: ์นด๋ ๋ฐ๊ธ ์ํ์ด ๊ณ ๊ฐ์๊ฒ ์ ์ฉ์นด๋๋ฅผ ๋ฐ๊ธํฉ๋๋ค. + +1๋จ๊ณ: ์นด๋ ์์ ์๊ฐ ์ ํ์ ๊ตฌ๋งคํ๊ธฐ ์ํด ์์ ์ POS(Point of Sale) ๋จ๋ง๊ธฐ์์ ์ ์ฉ์นด๋๋ฅผ ์ค์์ดํํฉ๋๋ค. + +2๋จ๊ณ: POS ๋จ๋ง๊ธฐ๋ POS ๋จ๋ง๊ธฐ๋ฅผ ์ ๊ณตํ ๋งค์ ์ํ์ผ๋ก ๊ฑฐ๋๋ฅผ ์ ์กํฉ๋๋ค. + +3, 4๋จ๊ณ: ๋งค์ ์ํ์ ๊ฑฐ๋๋ฅผ ์นด๋ ๋คํธ์ํฌ๋ก ์ ์กํ๋ฉฐ, ์ด๋ฅผ ์นด๋ ์คํด์ด๋ผ๊ณ ๋ ํฉ๋๋ค. ์นด๋ ๋คํธ์ํฌ๋ ์น์ธ์ ์ํด ๋ฐ๊ธ ์ํ์ผ๋ก ๊ฑฐ๋๋ฅผ ์ ์กํฉ๋๋ค. + +4.1, 4.2, 4.3๋จ๊ณ: ํธ๋์ญ์ ์ด ์น์ธ๋๋ฉด ๋ฐ๊ธ ์ํ์ ์๊ธ์ ๋๊ฒฐํฉ๋๋ค. ์น์ธ ๋๋ ๊ฑฐ๋ถ๊ฐ ๋งค์ ์ํ์ ๋ค์ ์ ์ก๋๊ณ POS ๋จ๋ง๊ธฐ๋ก๋ ์ ์ก๋ฉ๋๋ค. + +- ์บก์ฒ์ ์ ์ฐ ํ๋ก์ฐCapture and Settlement Flow + +1, 2๋จ๊ณ: ํ๋งค์๋ ํ๋ฃจ๊ฐ ๋๋ ๋ ๋์ ๋ฐ์ผ๋ ค๊ณ POS ๋จ๋ง๊ธฐ์์ '๋งค์ '์ ๋๋ฆ ๋๋ค. ํธ๋์ญ์ ์ ๋งค์ ์ํ์๊ฒ ์ผ๊ด์ ์ผ๋ก ์ ์ก๋ฉ๋๋ค. ๋งค์ ์ํ์ ํธ๋์ญ์ ์ด ํฌํจ๋ ๋ฐฐ์น ํ์ผ์ ์นด๋ ๋คํธ์ํฌ๋ก ์ ์กํฉ๋๋ค. + +3๋จ๊ณ: ์นด๋ ๋คํธ์ํฌ๋ ์ฌ๋ฌ ๋งค์ ์ํ์ผ๋ก๋ถํฐ ์์งํ ๊ฑฐ๋์ ๋ํด ์ ์ฐ์ ์ํํ๊ณ ์ ์ฐ ํ์ผ์ ์ฌ๋ฌ ๋ฐ๊ธ ์ํ์ผ๋ก ์ ์กํฉ๋๋ค. + +4๋จ๊ณ: ๋ฐ๊ธ ์ํ์ ์ ์ฐ ํ์ผ์ ์ ํ์ฑ์ ํ์ธํ๊ณ ๊ด๋ จ ๋งค์ ์ํ์ผ๋ก ์๊ธ์ ์ด์ฒดํฉ๋๋ค. + +5๋จ๊ณ: ๊ทธ๋ฌ๋ฉด ๋งค์ ์ํ์ด ํ๋งค์์ ์ํ์ผ๋ก ์ก๊ธํฉ๋๋ค. + +4๋จ๊ณ: ์นด๋ ๋คํธ์ํฌ๋ ์๋ก ๋ค๋ฅธ ์นด๋ ๋ฐ๊ธ ์ํ์ ๊ฑฐ๋๋ฅผ ์ ์ฐํฉ๋๋ค. ์ ์ฐ์ ์ํธ ์์ ๊ฑฐ๋๋ฅผ ๊ฒฐ์ฐํ๋ ๊ณผ์ ์ผ๋ก, ์ด ๊ฑฐ๋ ์๋ฅผ ์ค์ ๋๋ค. + +์ด ๊ณผ์ ์์ ์นด๋ ๋คํธ์ํฌ๋ ๊ฐ ์ํ๊ณผ ๋ํํด์ผ ํ๋ ๋ถ๋ด์ ๋ ์๊ณ ๊ทธ ๋๊ฐ๋ก ์๋น์ค ์์๋ฃ๋ฅผ ๋ฐ์ต๋๋ค. + +### ์ธ๊ณ์ ๊ฒฐ์ ์์คํ ์๋ฆฌ์ฆ(1๋ถ): ์ธ๋์ ํตํฉ ๊ฒฐ์ ์ธํฐํ์ด์ค(UPI) + + +UPI๋ ๋ฌด์์ธ๊ฐ์? UPI๋ ์ธ๋ ๊ตญ๋ฆฝ๊ฒฐ์ ๊ณต์ฌ์์ ๊ฐ๋ฐํ ์ค์๊ฐ ์ฆ์ ๊ฒฐ์ ์์คํ ์ ๋๋ค. + +ํ์ฌ ์ธ๋์์ ๋์งํธ ์๋งค ๊ฑฐ๋์ 60%๋ฅผ ์ฐจ์งํ๊ณ ์์ต๋๋ค. + +UPI = ๊ฒฐ์ ๋งํฌ์ ์ธ์ด + ์ํธ ์ด์ฉ ๊ฐ๋ฅํ ๊ฒฐ์ ํ์ค + + ++ +
+ + +## DevOps + +### DevOps vs SRE vs Platform Engineering ๋ฌด์์ด ๋ค๋ฅธ๊ฐ์? + +๋ฐ๋ธ์ต์ค, SRE, ํ๋ซํผ ์์ง๋์ด๋ง์ ๊ฐ๋ ์ ์๋ก ๋ค๋ฅธ ์๊ธฐ์ ๋ฑ์ฅํ์ฌ ๋ค์ํ ๊ฐ์ธ๊ณผ ์กฐ์ง์ ์ํด ๋ฐ์ ํด ์์ต๋๋ค. + ++ +
+ +๋ฐ๋ธ์ต์ค๋ผ๋ ๊ฐ๋ ์ 2009๋ ์ ์์ผ ์ปจํผ๋ฐ์ค์์ Patrick Debois์ Andrew Shafer์ ์ํด ์๊ฐ๋์์ต๋๋ค. ์ด๋ค์ ์ ์ฒด ์ํํธ์จ์ด ๊ฐ๋ฐ ๋ผ์ดํ์ฌ์ดํด์ ๋ํ ๊ณต๋ ์ฑ ์๊ณผ ํ์ ๋ฌธํ๋ฅผ ์ฅ๋ คํจ์ผ๋ก์จ ์ํํธ์จ์ด ๊ฐ๋ฐ๊ณผ ์ด์ ๊ฐ์ ๊ฐ๊ทน์ ์ขํ๊ณ ์ ํ์ต๋๋ค. + +SRE(Site Reliability Engineering)๋ 2000๋ ๋ ์ด๋ฐ ๊ตฌ๊ธ์์ ๋๊ท๋ชจ ๋ณต์กํ ์์คํ ๊ด๋ฆฌ์ ์ด์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ์ฒ๋์์ต๋๋ค. ๊ตฌ๊ธ์ ์๋น์ค์ ์์ ์ฑ๊ณผ ํจ์จ์ฑ์ ๋์ด๊ธฐ ์ํด Borg ํด๋ฌ์คํฐ ๊ด๋ฆฌ ์์คํ , Monarch ๋ชจ๋ํฐ๋ง ์์คํ ๊ณผ ๊ฐ์ SRE ์ค์ต ๋ฐ ๋๊ตฌ๋ฅผ ๊ฐ๋ฐํ์ต๋๋ค. + +ํ๋ซํผ ์์ง๋์ด๋ง์ SRE ์์ง๋์ด๋ง์ ๊ธฐ๋ฐ์ผ๋ก ํ ์ต๊ทผ ๊ฐ๋ ์ ๋๋ค. ํ๋ซํผ ์์ง๋์ด๋ง์ ์ ํํ ๊ธฐ์์ ๋ช ํํ์ง ์์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก ์ ํ ๊ฐ๋ฐ์ ์ํ ํฌ๊ด์ ์ธ ํ๋ซํผ์ ์ ๊ณตํ๊ณ ์ ์ฒด ์ฌ์ ๊ด์ ์ ์ง์ํ๋ ๋ฐ ์ด์ ์ ๋ DevOps์ SRE ๊ดํ์ ํ์ฅ์ผ๋ก ์ดํด๋ฉ๋๋ค. + +์ด๋ฌํ ๊ฐ๋ ์ด ์๋ก ๋ค๋ฅธ ์๊ธฐ์ ๋ฑ์ฅํ๋ค๋ ์ ์ ์ฃผ๋ชฉํ ํ์๊ฐ ์์ต๋๋ค. ์ด ๊ฐ๋ ๋ค์ ๋ชจ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ๋ฐ ์ด์ ์ ๋ฐ์ ๊ฑธ์ณ ์ง์์ ์ธ ํ์ , ์๋ํ, ํจ์จ์ฑ ๊ฐ์ ์ด๋ผ๋ ๊ณตํต ๋ชฉํ๋ฅผ ๋ฐํ์ผ๋ก ํฉ๋๋ค. + +### k8s(Kubernetes)๋ ๋ฌด์์ธ๊ฐ์? + +K8s๋ ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ ์์คํ ์ ๋๋ค. ์ปจํ ์ด๋ ๋ฐฐํฌ ๋ฐ ๊ด๋ฆฌ์ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ์์คํ ์ ์ค๊ณ๋ ๊ตฌ๊ธ์ ๋ด๋ถ ์์คํ ์ธ Borg์ ์ํฅ์ ๋ง์ด ๋ฐ์์ต๋๋ค. + ++ +
+ +k8s ํด๋ฌ์คํฐ๋ ์ปจํ ์ด๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ๋ ธ๋๋ผ๊ณ ํ๋ ์ผ๋ จ์ ์์ปค ๋จธ์ ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๋ชจ๋ ํด๋ฌ์คํฐ์๋ ํ๋ ์ด์์ ์์ปค ๋ ธ๋๊ฐ ์์ต๋๋ค. + +์์ปค ๋ ธ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ํฌ๋ก๋์ ์ปดํฌ๋ํธ์ธ ํ๋๋ฅผ ํธ์คํ ํฉ๋๋ค. ์ปจํธ๋กค ํ๋ ์ธ์ ํด๋ฌ์คํฐ์ ์์ปค ๋ ธ๋์ ํ๋๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ํ๋ก๋์ ํ๊ฒฝ์์ ์ปจํธ๋กค ํ๋ ์ธ์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ๋ฌ ๋์ ์ปดํจํฐ์์ ์คํ๋๋ฉฐ, ํด๋ฌ์คํฐ๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ๋ฌ ๋ ธ๋๋ฅผ ์คํํ์ฌ ๋ด๊ฒฐํจ์ฑ(tolerance)๊ณผ ๊ณ ๊ฐ์ฉ์ฑ์ ์ ๊ณตํฉ๋๋ค. + +- Control Plane ์ปดํฌ๋ํธ + +1. API Server + + API ์๋ฒ๋ k8s ํด๋ฌ์คํฐ์ ๋ชจ๋ ์ปดํฌ๋ํธ์ ํต์ ํฉ๋๋ค. ํ๋์ ๋ํ ๋ชจ๋ ์์ ์ API ์๋ฒ์ ํต์ ํ์ฌ ์คํ๋ฉ๋๋ค. + +2. Scheduler + + ์ค์ผ์ค๋ฌ๋ ํ๋ ์ํฌ๋ก๋๋ฅผ ๊ฐ์ํ๊ณ ์๋ก ์์ฑ๋ ํ๋์ ๋ก๋๋ฅผ ํ ๋นํฉ๋๋ค. + +3. Controller Manager + + ์ปจํธ๋กค๋ฌ ๋งค๋์ ๋ ๋ ธ๋ ์ปจํธ๋กค๋ฌ, ์ก ์ปจํธ๋กค๋ฌ, ์๋ํฌ์ธํธ์ฌ๋ผ์ด์ค ์ปจํธ๋กค๋ฌ, ์๋น์ค ์ด์นด์ดํธ ์ปจํธ๋กค๋ฌ๋ฅผ ํฌํจํ ์ปจํธ๋กค๋ฌ๋ฅผ ์คํํฉ๋๋ค. + +4. Etcd + + etcd๋ ๋ชจ๋ ํด๋ฌ์คํฐ ๋ฐ์ดํฐ์ ๋ํ ์ฟ ๋ฒ๋คํฐ์ค์ ๋ฐฑ์ ์คํ ๋ฆฌ์ง๋ก ์ฌ์ฉ๋๋ key-value ์คํ ๋ฆฌ์ง์ ๋๋ค. + +- Nodes + +1. Pod + + ํ๋๋ ์ปจํ ์ด๋ ๊ทธ๋ฃน์ผ๋ก, k8s๊ฐ ๊ด๋ฆฌํ๋ ๊ฐ์ฅ ์์ ๋จ์์ ๋๋ค. ํ๋์๋ ํ๋ ๋ด์ ๋ชจ๋ ์ปจํ ์ด๋์ ๋จ์ผ IP ์ฃผ์๊ฐ ์ ์ฉ๋ฉ๋๋ค. + +2. Kubelet + + ํด๋ฌ์คํฐ์ ๊ฐ ๋ ธ๋์์ ์คํ๋๋ ์์ด์ ํธ์ ๋๋ค. ์ปจํ ์ด๋๊ฐ ํ๋์์ ์คํ๋๋๋ก ๋ณด์ฅํฉ๋๋ค. + +3. Kube Proxy + + Kube-proxy๋ ํด๋ฌ์คํฐ์ ๊ฐ ๋ ธ๋์์ ์คํ๋๋ ๋คํธ์ํฌ ํ๋ก์์ ๋๋ค. ์๋น์ค์์ ๋ ธ๋๋ก ๋ค์ด์ค๋ ํธ๋ํฝ์ ๋ผ์ฐํ ํฉ๋๋ค. ์์ ์์ฒญ์ ์ฌ๋ฐ๋ฅธ ์ปจํ ์ด๋๋ก ์ ๋ฌํฉ๋๋ค. + +### Docker vs Kubernetes ์ด๋ค๊ฒ์ ์ฌ์ฉํด์ผ ํ๋์? + ++ +
+ + +๋์ปคDocker๋ ๋ฌด์์ธ๊ฐ์? + +๋์ปค๋ ๊ฒฉ๋ฆฌ๋ ์ปจํ ์ด๋์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํจํค์ง, ๋ฐฐํฌ ๋ฐ ์คํํ ์ ์๋ ์คํ ์์ค ํ๋ซํผ์ ๋๋ค. ์ปจํ ์ด๋ํ์ ์ค์ ์ ๋์ด ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ทธ ์ข ์์ฑ์ ์บก์ํํ๋ ๊ฒฝ๋ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค. + +Kubernetes๋ ๋ฌด์์ธ๊ฐ์? + +K8s๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ Kubernetes๋ ์คํ ์์ค ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ ํ๋ซํผ์ ๋๋ค. ๋ ธ๋ ํด๋ฌ์คํฐ ์ ๋ฐ์์ ์ปจํ ์ด๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌ, ์ค์ผ์ผ๋ง, ๊ด๋ฆฌ๋ฅผ ์๋ํํ๊ธฐ ์ํ ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. + +๋ ๊ฐ์ง๊ฐ ์๋ก ์ด๋ป๊ฒ ๋ค๋ฅธ๊ฐ์? + +Docker: ๋์ปค๋ ๋จ์ผ ์ด์ ์ฒด์ ํธ์คํธ์ ๊ฐ๋ณ ์ปจํ ์ด๋ ์์ค์์ ์๋ํฉ๋๋ค. + +๊ฐ ํธ์คํธ๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํด์ผ ํ๋ฉฐ ์ฌ๋ฌ ๊ด๋ จ ์ปจํ ์ด๋์ ๋ํ ๋คํธ์ํฌ, ๋ณด์ ์ ์ฑ , ์คํ ๋ฆฌ์ง๋ฅผ ์ค์ ํ๋ ๊ฒ์ ๋ณต์กํ ์ ์์ต๋๋ค. + +Kubernetes: ์ฟ ๋ฒ๋คํฐ์ค๋ ํด๋ฌ์คํฐ ๋ ๋ฒจ์์ ์๋ํฉ๋๋ค. ์ฌ๋ฌ ํธ์คํธ์ ๊ฑธ์ณ ์ฌ๋ฌ ์ปจํ ์ด๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ด๋ฆฌํ๋ฉฐ, ๋ก๋ ๋ฐธ๋ฐ์ฑ, ์ค์ผ์ผ๋ง, ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ๋ ์ํ ๋ณด์ฅ๊ณผ ๊ฐ์ ์์ ์ ๋ํ ์๋ํ๋ฅผ ์ ๊ณตํฉ๋๋ค. + +๊ฐ๋จํ ๋งํด, ๋์ปค๋ ์ปจํ ์ด๋ํ ๋ฐ ๊ฐ๋ณ ํธ์คํธ์์ ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ๋ฐ ์ค์ ์ ๋๋ ๋ฐ๋ฉด, ์ฟ ๋ฒ๋คํฐ์ค๋ ํธ์คํธ ํด๋ฌ์คํฐ ์ ์ฒด์์ ์ปจํ ์ด๋๋ฅผ ๋๊ท๋ชจ๋ก ๊ด๋ฆฌํ๊ณ ์กฐ์ ํ๋ ๋ฐ ํนํ๋์ด ์์ต๋๋ค. + +### Docker๋ ์ด๋ป๊ฒ ์๋ํ๋์? + +์๋ ๋ค์ด์ด๊ทธ๋จ์ ๋์ปค์ ์ํคํ ์ฒ์ "docker build", "docker pull", "docker run" ์ ์คํํ ๋ ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ณด์ฌ์ค๋๋ค. + ++ +
+ +๋์ปค ์ํคํ ์ฒ์๋ 3๊ฐ์ง ์ปดํฌ๋ํธ๊ฐ ์์ต๋๋ค. + +- Docker client + + ๋์ปค ํด๋ผ์ด์ธํธ๊ฐ ๋์ปค ๋ฐ๋ชฌ๊ณผ ํต์ ํฉ๋๋ค. + +- Docker host + + ๋์ปค ๋ฐ๋ชฌ์ ๋์ปค API ์์ฒญ์ ์์ ํ๊ณ ์ด๋ฏธ์ง, ์ปจํ ์ด๋, ๋คํธ์ํฌ, ๋ณผ๋ฅจ ๊ฐ์ ๋์ปค ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. + +- Docker registry + + ๋์ปค ๋ ์ง์คํธ๋ฆฌ๋ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํฉ๋๋ค. ๋์ปค Hub๋ ๋๊ตฌ๋ ์ฌ์ฉํ ์ ์๋ ๊ณต์ฉ ๋ ์ง์คํธ๋ฆฌ์ ๋๋ค. + +"docker run" ์ปค๋งจ๋๋ฅผ ์๋ก ๋ค์ด ๋ณด๊ฒ ์ต๋๋ค. + + 1. ๋์ปค๋ ๋ ์ง์คํธ๋ฆฌ์์ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ต๋๋ค. + 1. ๋์ปค๊ฐ ์ ์ปจํ ์ด๋๋ฅผ ์์ฑํฉ๋๋ค. + 1. ๋์ปค๋ ์ปจํ ์ด๋์ ์ฝ๊ธฐ-์ฐ๊ธฐ ํ์ผ์์คํ ์ ํ ๋นํฉ๋๋ค. + 1. ๋์ปค๋ ์ปจํ ์ด๋๋ฅผ ๋ํดํธ ๋คํธ์ํฌ์ ์ฐ๊ฒฐํ๊ธฐ ์ํด ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ฅผ ์์ฑํฉ๋๋ค. + 1. ๋์ปค๊ฐ ์ปจํ ์ด๋๋ฅผ ์์ํฉ๋๋ค. + +## GIT + +### Git Commands ์๋ ๋ฐฉ์ + +์ฐ์ ์ฝ๋๊ฐ ์ด๋์ ์ ์ฅ๋์ด ์๋์ง ํ์ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฝ๋๊ฐ ์ ์ฅ๋๋ ์์น๋ Github๊ณผ ๊ฐ์ ๋ฆฌ๋ชจํธ ์๋ฒ์ ๋ก์ปฌ ์ปดํจํฐ ๋ ๊ณณ ๋ฟ์ด๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค. ํ์ง๋ง ์ด๋ ์ ํํ์ง ์์ต๋๋ค. Git์ ์ปดํจํฐ์ 3๊ฐ์ ๋ก์ปฌ ์ ์ฅ์๋ฅผ ์ ์งํ๋ฏ๋ก ์ฝ๋๊ฐ ๋ค ๊ณณ์์ ๋ฐ๊ฒฌ๋ ์ ์์ต๋๋ค. + ++ +
+ + +- Working directory: ํ์ผ์ ํธ์งํ๋ ์์น +- Staging area: ๋ค์ ์ปค๋ฐ์ ์ํด ํ์ผ์ด ์ ์ฅ๋๋ ์์ ์์น +- Local repository: ์ปค๋ฐ๋ ์ฝ๋๊ฐ ํฌํจ๋๋ ๋ก์ปฌ ์ ์ฅ์ +- Remote repository: ์ฝ๋๋ฅผ ์ ์ฅํ๋ ๋ฆฌ๋ชจํธ ์๋ฒ + +๋๋ถ๋ถ์ Git ๋ช ๋ น์ ์ฃผ๋ก ์ด ๋ค ์์น ์ฌ์ด์์ ํ์ผ์ ์ด๋ํฉ๋๋ค. + +### Git์ ์ด๋ป๊ฒ ์๋ํ๋์? + +์๋ ๋ค์ด์ด๊ทธ๋จ์ Git ์ํฌํ๋ก์ฐ๋ฅผ ๋ณด์ฌ์ค๋๋ค. + ++ +
+ + +Git์ ๋ถ์ฐ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ ๋๋ค. + +๋ชจ๋ ๊ฐ๋ฐ์๋ ๋ฉ์ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ก์ปฌ ๋ณต์ฌ๋ณธ์ ์ ์ง ๊ด๋ฆฌํ๊ณ ๋ก์ปฌ ๋ณต์ฌ๋ณธ์์ ํธ์ง ๋ฐ ์ปค๋ฐํฉ๋๋ค. + +์์ ์ด ๋ฆฌ๋ชจํธ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ํธ์์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ์ปค๋ฐ์ด ๋งค์ฐ ๋น ๋ฆ ๋๋ค. + +๋ฆฌ๋ชจํธ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ถฉ๋์ด ๋ฐ์ํ๋ฉด ๋ก์ปฌ ๋ฆฌํฌ์งํ ๋ฆฌ์์ ํ์ผ์ ๋ณต๊ตฌํ ์ ์์ต๋๋ค. + +### Git merge vs Git rebase + +์ด๋ค ์ ์ด ๋ค๋ฅธ๊ฐ์? + ++ +
+ + +ํ Git ๋ธ๋์น์์ ๋ค๋ฅธ ๋ธ๋์น๋ก **merge changes** ํ ๋ git merge ๋๋ git rebase๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ ๋ค์ด์ด๊ทธ๋จ์ ๋ ์ปค๋งจ๋์ ์๋ ๋ฐฉ์์ ๋ณด์ฌ์ค๋๋ค. + +**Git merge** + +์ด ์์ ์ ๋ฉ์ธ ๋ธ๋์น์ ์ ์ปค๋ฐ G'๋ฅผ ์์ฑํฉ๋๋ค. G'๋ ๋ฉ์ธ ๋ธ๋์น์ ํผ์ฒ ๋ธ๋์น์ ํ์คํ ๋ฆฌ๋ฅผ ๋ชจ๋ ์ฐ๊ฒฐํฉ๋๋ค. + +Git ๋ณํฉ์ **non-destructive**์ ๋๋ค. ๋ฉ์ธ ๋ธ๋์น๋ ํผ์ฒ ๋ธ๋์น ๋ชจ๋ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค. + +**Git rebase** + +Git ๋ฆฌ๋ฒ ์ด์ค๋ ํผ์ฒ ๋ธ๋์น ํ์คํ ๋ฆฌ๋ฅผ ๋ฉ์ธ ๋ธ๋์น์ ํค๋๋ก ๊ฐ์ ธ์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ํผ์ฒ ๋ธ๋์น์ ๊ฐ ์ปค๋ฐ์ ๋ํด ์ ์ปค๋ฐ E', F', G' ๊ฐ ์์ฑ๋ฉ๋๋ค. + +๋ฆฌ๋ฒ ์ด์ค์ ์ฅ์ ์ ์ ํ์ ์ธ **commit history**๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค. + +"git ๋ฆฌ๋ฒ ์ด์ค ํฉ๊ธ๋ฅ "์ ๋ฐ๋ฅด์ง ์์ผ๋ฉด ๋ฆฌ๋ฒ ์ด์ค๊ฐ ์ํํ ์ ์์ต๋๋ค. + +**git ๋ฆฌ๋ฒ ์ด์ค ํฉ๊ธ๋ฅ ** + +ํผ๋ธ๋ ๋ธ๋์น์์๋ ์ ๋ ์ฌ์ฉํ์ง ๋ง์ธ์! + +## ํด๋ผ์ฐ๋ ์๋น์ค + +### ๋ค์ํ ํด๋ผ์ฐ๋ ์๋น์ค์ ๋ํ ์ ์ฉํ ์นํธ์ํธ(2023๋ ํ) + ++ +
+ + +### cloud native๋ ๋ฌด์์ธ๊ฐ์? + +์๋ ๋ค์ด์ด๊ทธ๋จ์ 1980๋ ๋ ์ดํ ์ํคํ ์ฒ์ ํ๋ก์ธ์ค์ ์งํ๋ฅผ ๋ณด์ฌ์ค๋๋ค. + ++ +
+ +์กฐ์ง์ ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ํผ๋ธ๋ฆญ, ํ๋ผ์ด๋น, ํ์ด๋ธ๋ฆฌ๋ ํด๋ผ์ฐ๋์์ ํ์ฅ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ํ๊ณ ์คํํ ์ ์์ต๋๋ค. + +์ด๋ฌํ ์ ํ๋ฆฌ์ผ์ด์ ์ ํด๋ผ์ฐ๋ ๊ธฐ๋ฅ์ ํ์ฉํ๋๋ก ์ค๊ณ๋์ด ์์ด, ๋ก๋ฉ์ด ํ๋ ฅ์ ์ด๊ณ ์ฝ๊ฒ ํ์ฅํ ์ ์์ต๋๋ค. + +ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ์๋ 4๊ฐ์ง ์ธก๋ฉด์ด ์์ต๋๋ค. + +1. Development process + + ์ํฐํด์์ ์ ์์ผ, ๋ฐ๋ธ์ต์ค๋ก ๋ฐ์ ํด ์์ต๋๋ค. + +2. Application Architecture + + ์ํคํ ์ฒ๊ฐ ๋ชจ๋๋ฆฌ์ ์๋น์ค์์ ๋ง์ดํฌ๋ก์๋น์ค๋ก ๋ฐ๋์์ต๋๋ค. ๊ฐ ์๋น์ค๋ ํด๋ผ์ฐ๋ ์ปจํ ์ด๋์ ์ ํ๋ ๋ฆฌ์์ค์ ๋ง๊ฒ ์๊ท๋ชจ๋ก ์กฐ์ ๋๋๋ก ์ค๊ณ๋์์ต๋๋ค. + +3. Deployment & packaging + + ์์ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฌผ๋ฆฌ์ ์๋ฒ์ ๋ฐฐํฌ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ค๊ฐ 2000๋ ๊ฒฝ์๋ ์ง์ฐ ์๊ฐ์ ๋ฏผ๊ฐํ์ง ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณดํต ๊ฐ์ ์๋ฒ์ ๋ฐฐํฌ๋์์ต๋๋ค. ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ ๋์ปค ์ด๋ฏธ์ง๋ก ํจํค์ง๋์ด ์ปจํ ์ด๋์ ๋ฐฐํฌ๋ฉ๋๋ค. + +4. Application infrastructure + + ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฒด ํธ์คํ ์๋ฒ ๋์ ํด๋ผ์ฐ๋ ์ธํ๋ผ์ ๋๊ท๋ชจ๋ก ๋ฐฐํฌ๋ฉ๋๋ค. + +## ๊ฐ๋ฐ์ ์์ฐ์ฑ ๋๊ตฌ + +### JSON ํ์ผ ์๊ฐํ + +์ค์ฒฉ๋ JSON ํ์ผ์ ์ฝ๊ธฐ ์ด๋ ต์ต๋๋ค. + +JSON ํ์ผ์์ ๊ทธ๋ํ ๋ค์ด์ด๊ทธ๋จ์ ์์ฑํ๊ณ ์ฝ๊ฒ ์ฝ์ ์ ์๋๋ก **JsonCrack**์ ์ ๊ณตํฉ๋๋ค. + +๋ํ ์์ฑ๋ ๋ค์ด์ด๊ทธ๋จ์ ์ด๋ฏธ์ง๋ก ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค. + ++ +
+ + +### ์ฝ๋๋ฅผ ์ํคํ ์ฒ ๋ค์ด์ด๊ทธ๋จ์ผ๋ก ์๋ ๋ณํ + ++ +
+ + +์ด๋ค ๊ธฐ๋ฅ์ด ์๋์? + +- Python ์ฝ๋๋ก ํด๋ผ์ฐ๋ ์์คํ ์ํคํ ์ฒ๋ฅผ ๊ทธ๋ฆฝ๋๋ค. +- ๋ค์ด์ด๊ทธ๋จ์ ์ฃผํผํฐ ๋ ธํธ๋ถ์์ ๋ฐ๋ก ๋ ๋๋งํ ์ ์์ต๋๋ค. +- ๋์์ธ ๋๊ตฌ๊ฐ ํ์ํ์ง ์์ต๋๋ค. +- ๋ค์ ํ๋ก๋ฐ์ด๋๋ฅผ ์ง์ํฉ๋๋ค: AWS, Azure, GCP, Kubernetes, ์๋ฆฌ๋ฐ๋ฐ ํด๋ผ์ฐ๋, ์ค๋ผํด ํด๋ผ์ฐ๋ ๋ฑ. + +[Github repo](https://github.com/mingrammer/diagrams) + +## ๋ฆฌ๋ ์ค + +### ๋ฆฌ๋ ์ค ํ์ผ ์์คํ ์ค๋ช + ++ +
+ +์์ ์๋ Linux ํ์ผ ์์คํ ์ด ๊ฐ์ธ์ด ์ํ๋ ๊ณณ์ ์ง์ ์ง๋ ๋ฌด์ง์ํ ๋ง์๊ณผ ๋น์ทํ์ต๋๋ค. ํ์ง๋ง 1994๋ , ๋ฆฌ๋ ์ค ํ์ผ ์์คํ ์ ์ง์๋ฅผ ๋ถ์ฌํ๊ธฐ ์ํด ํ์ผ์์คํ ๊ณ์ธต๊ตฌ์กฐ ํ์ค(FHS:Filesystem Hierarchy Standard)์ด ๋์ ๋์์ต๋๋ค. + +์ํํธ์จ์ด๋ FHS์ ๊ฐ์ ํ์ค์ ๊ตฌํํจ์ผ๋ก์จ ๋ค์ํ Linux ๋ฐฐํฌํ์์ ์ผ๊ด๋ ๋ ์ด์์์ ๋ณด์ฅํ ์ ์์ต๋๋ค. ํ์ง๋ง ๋ชจ๋ Linux ๋ฐฐํฌํ์ด ์ด ํ์ค์ ์๊ฒฉํ๊ฒ ์ค์ํ๋ ๊ฒ์ ์๋๋๋ค. ์์ฒด ๊ณ ์ ์๋ฆฌ๋จผํธ๋ฅผ ํตํฉํ๊ฑฐ๋ ํน์ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. +์ด ํ์ค์ ๋ฅ์ํด์ง๋ ค๋ฉด ๋จผ์ ์ดํด๋ณด๋ ๊ฒ๋ถํฐ ์์ํ ์ ์์ต๋๋ค. ํ์์ ์ํด์๋ "cd", ๋๋ ํ ๋ฆฌ ๋ด์ฉ์ ๋์ดํ๋ ค๋ฉด "ls"์ ๊ฐ์ ์ปค๋งจ๋๋ฅผ ํ์ฉํ์ธ์. ํ์ผ ์์คํ ์ ๋ฃจํธ(/)์์ ์์ํ๋ ํธ๋ฆฌ๋ผ๊ณ ์์ํด ๋ณด์ธ์. ์๊ฐ์ด ์ง๋๋ฉด ์ต์ํด์ ธ์ ์๋ จ๋ Linux ๊ด๋ฆฌ์๋ก ๊ฑฐ๋ญ๋ ์ ์์ ๊ฒ์ ๋๋ค. + +### ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ 18๊ฐ์ง ๋ฆฌ๋ ์ค ์ปค๋งจ๋ ์์๋ณด๊ธฐ + +Linux ์ปค๋งจ๋๋ ์ด์ ์ฒด์ ์ ์ํธ ์์ฉํ๊ธฐ ์ํ ์ธ์คํฐ๋ญ์ ์ ๋๋ค. ํ์ผ, ๋๋ ํ ๋ฆฌ, ์์คํ ํ๋ก์ธ์ค, ๊ธฐํ ์์คํ ์ ์ฌ๋ฌ ์ธก๋ฉด์ ๊ด๋ฆฌํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. Linux ๊ธฐ๋ฐ ์์คํ ์ ํจ์จ์ ์ด๊ณ ํจ๊ณผ์ ์ผ๋ก ํ์ํ๊ณ ์ ์ง ๊ด๋ฆฌํ๋ ค๋ฉด ์ด๋ฌํ ์ปค๋งจ๋์ ์ต์ํด์ ธ์ผ ํฉ๋๋ค. + +์๋ ๋ค์ด์ด๊ทธ๋จ์ ์์ฃผ ์ฌ์ฉ๋๋ Linux ์ปค๋งจ๋์ ๋๋ค. + ++ +
+ + +- ls - ํ์ผ๊ณผ ๋๋ ํ ๋ฆฌ ๋ชฉ๋ก +- cd - ํ์ฌ ๋๋ ํ ๋ฆฌ ๋ณ๊ฒฝ +- mkdir - ์๋ก์ด ๋๋ ํ ๋ฆฌ ์์ฑ +- rm - ํ์ผ ๋๋ ๋๋ ํ ๋ฆฌ ์ ๊ฑฐ +- cp - ํ์ผ ๋๋ ๋๋ ํ ๋ฆฌ ๋ณต์ฌ +- mv - ํ์ผ ๋๋ ๋๋ ํ ๋ฆฌ ์ด๋ฆ๋ณ๊ฒฝ ํน์ ์ด๋ +- chmod - ํ์ผ ๋๋ ๋๋ ํ ๋ฆฌ ๊ถํ ๊ด๋ฆฌ +- grep - ํ์ผ์์ ํจํด ๊ฒ์ +- find - ํ์ผ๊ณผ ๋๋ ํ ๋ฆฌ ๊ฒ์ +- tar - tarball ์์นด์ด๋ธ ํ์ผ ์กฐ์ +- vi - ํ ์คํธ ์๋ํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ผ ํธ์ง +- cat - ํ์ผ์ ์ฝํ ์ธ ํ์ +- top - ํ๋ก์ธ์ค ๋ฆฌ์์ค ์ฌ์ฉ๋ ํ์ +- ps - ํ๋ก์ธ์ ์ ๋ณด ํ์ +- kill - ์ ํธ๋ฅผ ์ ์กํ์ฌ ํ๋ก์ธ์ค ์ข ๋ฃ +- du - ํ์ผ ์ฉ๋ ์ฌ์ฉ๋ ์ถ์ +- ifconfig - ๋คํธ์ํฌ ์ธํฐํ์ด์ค ์ค์ +- ping - ํธ์คํธ ๊ฐ ๋คํธ์ํฌ ์ปค๋ฅ์ ํ ์คํธ + +## ๋ณด์ + +### HTTPS๋ ์ด๋ป๊ฒ ์๋ํ๋์? + +Hypertext Transfer Protocol Secure(HTTPS)๋ Hypertext Transfer Protocol(HTTP)์ ํ์ฅ์ ๋๋ค. HTTPS๋ Transport Layer Security(TLS)๋ฅผ ์ฌ์ฉํ์ฌ ์ํธํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์กํฉ๋๋ค. ์จ๋ผ์ธ์์ ๋ฐ์ดํฐ๋ฅผ ํ์ทจ๋นํ๋ฉด ํ์ทจ์๊ฐ ์ป๋ ๊ฒ์ ๋ฐ์ด๋๋ฆฌ ์ฝ๋๋ฟ์ ๋๋ค. + ++ +
+ + +๋ฐ์ดํฐ๋ ์ด๋ป๊ฒ ์ํธํ๋๊ณ ๋ณตํธํ๋๋์? + +1๋จ๊ณ - ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )์ ์๋ฒ๊ฐ TCP ์ปค๋ฅ์ ์ ์ค์ ํฉ๋๋ค. + +2๋จ๊ณ - ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ "client hello"๋ฅผ ๋ณด๋ ๋๋ค. ์ด ๋ฉ์์ง์๋ ํ์ํ ์ํธํ ์๊ณ ๋ฆฌ์ฆ(cipher suites) ์ธํธ์ ์ง์ํ ์ ์๋ ์ต์ TLS ๋ฒ์ ์ด ํฌํจ๋ฉ๋๋ค. ์๋ฒ๋ "server hello"๋ก ์๋ตํ์ฌ ๋ธ๋ผ์ฐ์ ๊ฐ ํด๋น ์๊ณ ๋ฆฌ์ฆ๊ณผ TLS ๋ฒ์ ์ ์ง์ํ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ์ ์ ์์ต๋๋ค. + +๊ทธ๋ฌ๋ฉด ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ SSL ์ธ์ฆ์๋ฅผ ๋ณด๋ ๋๋ค. ์ธ์ฆ์์๋ ๊ณต๊ฐ ํค, ํธ์คํธ ์ด๋ฆ, ๋ง๋ฃ ๋ ์ง ๋ฑ์ด ํฌํจ๋ฉ๋๋ค. ํด๋ผ์ด์ธํธ๋ ์ธ์ฆ์์ ์ ํจ์ฑ์ ๊ฒ์ฌํฉ๋๋ค. + +3๋จ๊ณ - SSL ์ธ์ฆ์์ ์ ํจ์ฑ์ ๊ฒ์ฌํ ํ ํด๋ผ์ด์ธํธ๋ ์ธ์ ํค๋ฅผ ์์ฑํ๊ณ ๊ณต๊ฐ ํค๋ฅผ ์ฌ์ฉํ์ฌ ์ํธํํฉ๋๋ค. ์๋ฒ๋ ์ํธํ๋ ์ธ์ ํค๋ฅผ ์์ ํ๊ณ ๊ฐ์ธ ํค๋ก ์ํธ๋ฅผ ํด๋ ํฉ๋๋ค. + +4๋จ๊ณ - ์ด์ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ๋ชจ๋ ๋์ผํ ์ธ์ ํค(๋์นญ ์ํธํ)๋ฅผ ๋ณด์ ํ๋ฏ๋ก ์ํธํ๋ ๋ฐ์ดํฐ๋ ์์ ํ ์๋ฐฉํฅ ์ฑ๋๋ก ์ ์ก๋ฉ๋๋ค. + +๋ฐ์ดํฐ ์ ์ก ์ค์ HTTPS๊ฐ ๋์นญ ์ํธํ๋ก ์ ํ๋๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์? ๋ ๊ฐ์ง ์ฃผ์ ์ด์ ๊ฐ ์์ต๋๋ค. + +1. ๋ณด์: ๋น๋์นญ ์ํธํ๋ ํ ๋ฐฉํฅ์ผ๋ก๋ง ์งํ๋ฉ๋๋ค. ์ฆ, ์๋ฒ๊ฐ ์ํธํ๋ ๋ฐ์ดํฐ๋ฅผ ํด๋ผ์ด์ธํธ๋ก ๋ค์ ๋ณด๋ด๋ ค๊ณ ํ๋ฉด ๋๊ตฌ๋ ๊ณต๊ฐ ํค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํด๋ ํ ์ ์์ต๋๋ค. + +2. ์๋ฒ ๋ฆฌ์์ค: ๋น๋์นญ ์ํธํ๋ ์๋นํ ์ํ์ ์ค๋ฒํค๋๋ฅผ ์ถ๊ฐํฉ๋๋ค. ๊ธด ์ธ์ ์ ๋ฐ์ดํฐ ์ ์ก์๋ ์ ํฉํ์ง ์์ต๋๋ค. + +### ๊ฐ๋จํ ์ฉ์ด๋ก ์ค๋ช ํ๋ Oauth 2.0 + +OAuth 2.0์ ๊ฐ๋ ฅํ๊ณ ์์ ํ ํ๋ ์์ํฌ๋ก, ์ฌ๋ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฏผ๊ฐํ ์๊ฒฉ ์ฆ๋ช ์ ๊ณต์ ํ์ง ์๊ณ ๋ ์ฌ์ฉ์๋ฅผ ๋์ ํ์ฌ ์๋ก ์์ ํ๊ฒ ์ํธ ์์ฉํ ์ ์๊ฒ ํด์ค๋๋ค. + ++ +
+ +OAuth์ ์ฐธ์ฌํ๋ ๊ฐ์ฒด๋ ์ฌ์ฉ์, ์๋ฒ, ID ๊ณต๊ธ์(Identity Provider, IDP)์ ๋๋ค. + +OAuth ํ ํฐ์ ๋ฌด์์ ํ ์ ์๋์? + +OAuth๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ ๋ฐ ๊ถํ์ ๋ํ๋ด๋ OAuth ํ ํฐ์ ๋ฐ๊ฒ ๋ฉ๋๋ค. ์ด ํ ํฐ์ ๋ช ๊ฐ์ง ์ค์ํ ์์ ์ ์ํํ ์ ์์ต๋๋ค. + +Single Sign-On(SSO): OAuth ํ ํฐ์ ์ฌ์ฉํ๋ฉด ํ ๋ฒ์ ๋ก๊ทธ์ธ์ผ๋ก ์ฌ๋ฌ ์๋น์ค๋ ์ฑ์ ๋ก๊ทธ์ธํ ์ ์์ด ๋์ฑ ์ฝ๊ณ ์์ ํ๊ฒ ์ํํ ์ ์์ต๋๋ค. + +Authorization Across Systems: ์์คํ ๊ฐ ์ธ์ฆ: OAuth ํ ํฐ์ ์ฌ์ฉํ๋ฉด ๋ค์ํ ์์คํ ์์ ์ธ์ฆ ๋๋ ์ก์ธ์ค ๊ถํ์ ๊ณต์ ํ ์ ์์ผ๋ฏ๋ก ๋ชจ๋ ์์คํ ์์ ๋ณ๋๋ก ๋ก๊ทธ์ธํ ํ์๊ฐ ์์ต๋๋ค. + +Accessing User Profile: OAuth ํ ํฐ์ด ์๋ ์ฑ์ ์ฌ์ฉ์๊ฐ ํ์ฉํ ์ฌ์ฉ์ ํ๋กํ์ ํน์ ๋ถ๋ถ์ ์ก์ธ์คํ ์ ์์ง๋ง ๋ชจ๋ ๋ถ๋ถ์ ๋ณผ ์๋ ์์ต๋๋ค. + +OAuth 2.0์ ์ฌ์ฉ์์ ์ฌ์ฉ์์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ๋ณดํธํ๋ ๋์์ ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์๋น์ค์์ ์ํํ๊ณ ๋ฒ๊ฑฐ๋ก์ ์๋ ์จ๋ผ์ธ ๊ฒฝํ์ ์ ๊ณตํ๋ ๋ฐ ์ค์ ์ ๋๊ณ ์์ต๋๋ค. + +### ์ธ์ฆ ๋ฉ์ปค๋์ฆ์ 4๊ฐ์ง ์ฃผ์ ํํ + ++ +
+ +1. SSH Keys: + + ์ํธํ ํค๋ ์๊ฒฉ ์์คํ ๋ฐ ์๋ฒ์ ์์ ํ๊ฒ ์ก์ธ์คํ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. + +1. OAuth Tokens: + + ์จ๋ํํฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์ ๋ฐ์ดํฐ์ ๋ํ ์ ํ๋ ์ก์ธ์ค๋ฅผ ์ ๊ณตํ๋ ํ ํฐ์ ๋๋ค. + +1. SSL Certificates: + + ๋์งํธ ์ธ์ฆ์๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ์์ ํ ์ํธํ๋ ํต์ ์ ๋ณด์ฅํฉ๋๋ค. + +1. Credentials: + + ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ ๋ค์ํ ์์คํ ๊ณผ ์๋น์ค์ ๋ํ ์ก์ธ์ค ๊ถํ์ ํ์ธํ๊ณ ๋ถ์ฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. + +### Session, cookie, JWT, token, SSO, OAuth 2.0 - ๊ทธ๊ฒ ๋ญ๊ฐ์? + +์ด ์ฝ๊ด์ ๋ชจ๋ ์ฌ์ฉ์ ์ ์ ๊ด๋ฆฌ์ ๊ด๋ จ์ด ์์ต๋๋ค. ์น์ฌ์ดํธ์ ๋ก๊ทธ์ธํ ๋ ์ฌ์ฉ์๋ ์์ ์ด ๋๊ตฌ์ธ์ง๋ฅผ ์ ์ธํฉ๋๋ค(์๋ณ). ์ฌ์ฉ์์ ์ ์์ ํ์ธํ๊ณ (์ธ์ฆ) ํ์ํ ๊ถํ์ ๋ถ์ฌํฉ๋๋ค(์ธ๊ฐ). ๊ณผ๊ฑฐ์ ๋ง์ ์๋ฃจ์ ์ด ์ ์๋์๊ณ ๊ทธ ๋ชฉ๋ก์ ๊ณ์ ๋์ด๋๊ณ ์์ต๋๋ค. + ++ +
+ +๊ฐ๋จํ ๊ฒ๋ถํฐ ๋ณต์กํ ๊ฒ๊น์ง, ์ฌ์ฉ์ ์ ์ ๊ด๋ฆฌ์ ๋ํ ์ ์ ์ดํด๋ฅผ ์ ๋ฆฌํด ๋ณด์์ต๋๋ค. + +- WWW-์ธ์ฆ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค. ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉ์ ์ด๋ฆ๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋ผ๋ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค. ๋ก๊ทธ์ธ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ ์ดํ ์ ์๊ธฐ ๋๋ฌธ์ ์ค๋๋ ์๋ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. + +- ๋ก๊ทธ์ธ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๋ณด๋ค ์ธ๋ฐํ๊ฒ ์ ์ดํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ธ์ ์ฟ ํค์ ๋๋ค. ์๋ฒ๋ ์ธ์ ์ ์ฅ์๋ฅผ ์ ์งํ๊ณ ๋ธ๋ผ์ฐ์ ๋ ์ธ์ ์ ID๋ฅผ ์ ์งํฉ๋๋ค. ์ฟ ํค๋ ์ผ๋ฐ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ์์๋ง ์๋ํ๋ฉฐ ๋ชจ๋ฐ์ผ ์ฑ์๋ ์ ํฉํ์ง ์์ต๋๋ค. + +- ํธํ์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ ํฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ํ ํฐ์ ์๋ฒ๋ก ์ ์กํ๋ฉด ์๋ฒ๊ฐ ํ ํฐ์ ์ ํจ์ฑ์ ๊ฒ์ฌํฉ๋๋ค. ๋จ์ ์ ํ ํฐ์ ์ํธํํ๊ณ ํด๋ ํด์ผ ํ๋ฏ๋ก ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆด ์ ์๋ค๋ ๊ฒ์ ๋๋ค. + +- JWT๋ ํ ํฐ์ ๋ํ๋ด๋ ํ์ค ๋ฐฉ์์ ๋๋ค. ์ด ์ ๋ณด๋ ๋์งํธ ์๋ช ์ด ๋์ด ์๊ธฐ ๋๋ฌธ์ ๊ฒ์ฆ๋๊ณ ์ ๋ขฐํ ์ ์์ต๋๋ค. JWT์๋ ์๋ช ์ด ํฌํจ๋์ด ์์ผ๋ฏ๋ก ์๋ฒ ์ธก์ ์ธ์ ์ ๋ณด๋ฅผ ์ ์ฅํ ํ์๊ฐ ์์ต๋๋ค. + +- SSO( Single Sign-On)์ ์ฌ์ฉํ๋ฉด ํ ๋ฒ๋ง ๋ก๊ทธ์จํ์ฌ ์ฌ๋ฌ ์น์ฌ์ดํธ์ ๋ก๊ทธ์ธํ ์ ์์ต๋๋ค. CAS( Central Authentication Service)๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ดํธ ๊ฐ ์ ๋ณด๋ฅผ ์ ์ง ๊ด๋ฆฌํฉ๋๋ค. + +- OAuth 2.0์ ์ฌ์ฉํ๋ฉด ํ ์น์ฌ์ดํธ๊ฐ ๋ค๋ฅธ ์น์ฌ์ดํธ์์ ๋ด ์ ๋ณด์ ์ก์ธ์คํ ์ ์๋๋ก ์ธ์ฆํ ์ ์์ต๋๋ค. + +### ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋น๋ฐ๋ฒํธ๋ฅผ ์์ ํ๊ฒ ์ ์ฅํ๋ ๋ฐฉ๋ฒ๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ธ๊ฐ์? + ++ +
+ + +**ํ์ง ๋ง์์ผ ํ ๊ฒ๋ค** + +- ๋น๋ฐ๋ฒํธ๋ฅผ ์ผ๋ฐ ํ ์คํธ๋ก ์ ์ฅํ๋ ๊ฒ์ ๋ด๋ถ ์ก์ธ์ค ๊ถํ์ด ์๋ ๋ชจ๋ ์ฌ๋์ด ๋ณผ ์ ์์ผ๋ฏ๋ก ์ข์ ์๊ฐ์ด ์๋๋๋ค. + +- ๋น๋ฐ๋ฒํธ ํด์๋ฅผ ์ง์ ์ ์ฅํ๋ ๊ฒ์ ๋ ์ธ๋ณด์ฐ ํ ์ด๋ธ๊ณผ ๊ฐ์ ์ฌ์ ๊ณ์ฐ ๊ณต๊ฒฉ์ ์ทจ์ฝํ๊ธฐ ๋๋ฌธ์ ์ถฉ๋ถํ์ง ์์ต๋๋ค. + +- ์ฌ์ ๊ณ์ฐ ๊ณต๊ฒฉ์ ์ํํ๊ธฐ ์ํด ๋น๋ฐ๋ฒํธ๋ฅผ ์ํธ ์ฒ๋ฆฌํฉ๋๋ค. + +**salt๋ ๋ฌด์์ธ๊ฐ์?** + +OWASP ๊ฐ์ด๋๋ผ์ธ์ ๋ฐ๋ฅด๋ฉด "์ํธ๋ ํด์ฑ ํ๋ก์ธ์ค์ ์ผ๋ถ๋ก ๊ฐ ๋น๋ฐ๋ฒํธ์ ์ถ๊ฐ๋๋ ๊ณ ์ ํ๊ณ ๋ฌด์์๋ก ์์ฑ๋๋ ๋ฌธ์์ด"์ ๋๋ค. + +**๋น๋ฐ๋ฒํธ์ salt๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ธ๊ฐ์?** + +1. ํด์ ๊ฒฐ๊ณผ๋ ๊ฐ ๋น๋ฐ๋ฒํธ๋ง๋ค ๊ณ ์ ํฉ๋๋ค. +1. ๋น๋ฐ๋ฒํธ๋ ๋ค์ ํฌ๋งท์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ ์ ์์ต๋๋ค. ํด์(password + salt). + +**๋น๋ฐ๋ฒํธ๋ ์ด๋ป๊ฒ ํ์ธํ๋์?** + +๋น๋ฐ๋ฒํธ์ ์ ํจ์ฑ์ ๊ฒ์ฌํ๋ ค๋ฉด ๋ค์ ๊ณผ์ ์ ๊ฑฐ์น ์ ์์ต๋๋ค. + +1. ํด๋ผ์ด์ธํธ์์ ํจ์ค์๋๋ฅผ ์ ๋ ฅํฉ๋๋ค. +1. ์์คํ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํด๋น salt๋ฅผ ๊ฐ์ ธ์ต๋๋ค. +1. ์์คํ ์ด ๋น๋ฐ๋ฒํธ์ salt๋ฅผ ์ถ๊ฐํ๊ณ ํด์๋ก ๋ง๋ญ๋๋ค. ํด์๋ ๊ฐ์ H1์ด๋ผ๊ณ ๋ถ๋ฅด๊ฒ ์ต๋๋ค. +1. ์์คํ ์ H1๊ณผ H2๋ฅผ ๋น๊ตํ๋๋ฐ, ์ฌ๊ธฐ์ H2๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ํด์์ ๋๋ค. ๋์ด ๊ฐ์ผ๋ฉด ๋น๋ฐ๋ฒํธ๊ฐ ์ ํจํ ๊ฒ์ ๋๋ค. + +### 10์ธ ์ด๋ฆฐ์ด์๊ฒ JSON Web Token(JWT) ์ค๋ช ํ๊ธฐ + ++ +
+ +JWT๋ผ๋ ํน๋ณํ ์์๊ฐ ์๋ค๊ณ ์์ํด ๋ณด์ธ์. ์ด ์์ ์์๋ ํค๋, ํ์ด๋ก๋, ์๋ช ์ธ ๋ถ๋ถ์ด ์์ต๋๋ค. + +ํค๋๋ ์์ ์ธ๋ถ์ ๋ผ๋ฒจ๊ณผ ๊ฐ์ ์ญํ ์ ํฉ๋๋ค. ํค๋๋ ์์์ ํ์ ๊ณผ ๋ณด์ ๋ฐฉ๋ฒ์ ์๋ ค์ค๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ค๊ดํธ { }์ ์ฝ๋ก : ์ ์ฌ์ฉํ์ฌ ์ ๋ณด๋ฅผ ์ ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ธ JSON์ด๋ผ๋ ํฌ๋งท์ผ๋ก ์์ฑ๋ฉ๋๋ค. + +ํ์ด๋ก๋๋ ์ ์กํ๋ ค๋ ์ค์ ๋ฉ์์ง ๋๋ ์ ๋ณด์ ๊ฐ์ต๋๋ค. ์ด๋ฆ, ๋์ด ๋๋ ๊ณต์ ํ๊ณ ์ ํ๋ ๊ธฐํ ๋ฐ์ดํฐ๊ฐ ๋ ์ ์์ต๋๋ค. ๋ํ JSON ํฌ๋งท์ผ๋ก ์์ฑ๋์ด ์ดํดํ๊ธฐ ์ฝ๊ณ ์์ ํ๊ธฐ ์ฝ์ต๋๋ค. +์๋ช ์ JWT๋ฅผ ์์ ํ๊ฒ ๋ณดํธํ๋ ์ญํ ์ ํฉ๋๋ค. ์๋ช ์ ๋ฐ์ ์๋ง ๋ง๋๋ ๋ฐฉ๋ฒ์ ์๊ณ ์๋ ํน๋ณํ ๋์ฅ๊ณผ ๊ฐ์ต๋๋ค. ์๋ช ์ ๋น๋ฐ๋ฒํธ์ ๊ฐ์ ์ํฌ๋ฆฟ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋ฉ๋๋ค. ์ด ์๋ช ์ ์๋ฌด๋ ๋ฐ์ ์ ๋ชจ๋ฅด๊ฒ JWT์ ๋ด์ฉ์ ๋ณ๊ฒฝํ ์ ์๋๋ก ํฉ๋๋ค. + +JWT๋ฅผ ์๋ฒ๋ก ๋ณด๋ด๋ ค๋ฉด ํค๋, ํ์ด๋ก๋, ์๋ช ์ ์์ ์์ ๋ฃ๊ณ ์๋ฒ๋ก ์ ์กํฉ๋๋ค. ์๋ฒ๋ ํค๋์ ํ์ด๋ก๋๋ฅผ ์ฝ๊ฒ ์ฝ๊ณ ์ฌ์ฉ์๊ฐ ๋๊ตฌ์ธ์ง, ๋ฌด์์ ํ๋ ค๋์ง ์ดํดํ ์ ์์ต๋๋ค. + +### Google authenticator(๋๋ ๋ค๋ฅธ ์ ํ์ 2 factor authenticator)๋ ์ด๋ป๊ฒ ์๋ํ๋์? + +2๋จ๊ณ ์ธ์ฆ์ด ํ์ฑํ๋ ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ผ๋ก ๊ตฌ๊ธ ์ธ์ฆ์๊ฐ ๊ณ์ ๋ก๊ทธ์ธ์ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ป๊ฒ ๋ณด์์ ๋ณด์ฅํ๋์? + +๊ตฌ๊ธ ์ธ์ฆ๊ธฐ๋ 2๋จ๊ณ ์ธ์ฆ ์๋น์ค๋ฅผ ๊ตฌํํ๋ ์ํํธ์จ์ด ๊ธฐ๋ฐ ์ธ์ฆ๊ธฐ์ ๋๋ค. ์๋ ๋ค์ด์ด๊ทธ๋จ์์ ์์ธํ ๋ด์ฉ์ ํ์ธํ ์ ์์ต๋๋ค. + ++ +
+ + +๋ ์คํ ์ด์ง๊ฐ ์์ต๋๋ค. + +- ์คํ ์ด์ง 1 - ์ฌ์ฉ์๊ฐ ๊ตฌ๊ธ 2๋จ๊ณ ์ธ์ฆ์ ํ์ฑํํฉ๋๋ค. +- ์คํ ์ด์ง 2 - ์ฌ์ฉ์๋ ๋ก๊ทธ์ธ ๋ฑ์ ์ธ์ฆ๊ธฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค. + +์ด ์คํ ์ด์ง๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. + +**์คํ ์ด์ง1** + +1,2 ๋จ๊ณ: Bob์ด ์น ํ์ด์ง๋ฅผ ์ด์ด 2๋จ๊ณ ์ธ์ฆ์ ํ์ฑํํฉ๋๋ค. ํ๋ก ํธ์๋์์ ์ํฌ๋ฆฟ ํค๋ฅผ ์์ฒญํฉ๋๋ค. ์ธ์ฆ ์๋น์ค์์ Bob์ ์ํฌ๋ฆฟ ํค๋ฅผ ์์ฑํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํฉ๋๋ค. + +3 ๋จ๊ณ: ์ธ์ฆ ์๋น์ค๋ ํ๋ก ํธ์๋์ URI๋ฅผ ๋ฐํํฉ๋๋ค. URI๋ ํค ๋ฐ๊ธ์, ์ฌ์ฉ์ ์ด๋ฆ, ์ํฌ๋ฆฟ ํค๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. URI๋ ์น ํ์ด์ง์ QR ์ฝ๋ ํํ๋ก ํ์๋ฉ๋๋ค. + +4 ๋จ๊ณ: ๊ทธ๋ฐ ๋ค์ Bob์ ๊ตฌ๊ธ ์ธ์ฆ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋ QR ์ฝ๋๋ฅผ ์ค์บํฉ๋๋ค. ์ํฌ๋ฆฟ ํค๋ ์ธ์ฆ๊ธฐ์ ์ ์ฅ๋ฉ๋๋ค. + +**์คํ ์ด์ง2** + +1, 2 ๋จ๊ณ: ๋ฐฅ์ ๊ตฌ๊ธ 2๋จ๊ณ ์ธ์ฆ์ผ๋ก ์น์ฌ์ดํธ์ ๋ก๊ทธ์ธํ๋ ค๊ณ ํฉ๋๋ค. ์ด๋ฅผ ์ํด์๋ ๋น๋ฐ๋ฒํธ๊ฐ ํ์ํฉ๋๋ค. ๊ตฌ๊ธ ์ธ์ฆ๊ธฐ๋ 30์ด๋ง๋ค TOTP(Time-based One Time Password) ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ 6์๋ฆฌ ๋น๋ฐ๋ฒํธ๋ฅผ ์์ฑํฉ๋๋ค. ๋ฐฅ์ ์ด ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ฉํ์ฌ ์น์ฌ์ดํธ์ ๋ค์ด๊ฐ๋๋ค. + +3, 4 ๋จ๊ณ: ํ๋ก ํธ์๋๋ ์ธ์ฆ์ ์ํด ๋ฐฅ์ด ์ ๋ ฅํ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ฐฑ์๋๋ก ์ ์กํฉ๋๋ค. ์ธ์ฆ ์๋น์ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํฌ๋ฆฟ ํค๋ฅผ ์ฝ๊ณ ํด๋ผ์ด์ธํธ์ ๋์ผํ TOTP ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ 6์๋ฆฌ ๋น๋ฐ๋ฒํธ๋ฅผ ์์ฑํฉ๋๋ค. + +5 ๋จ๊ณ: ์ธ์ฆ ์๋น์ค๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ์์ ์์ฑํ ๋ ๊ฐ์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋น๊ตํ๊ณ ๋น๊ต ๊ฒฐ๊ณผ๋ฅผ ํ๋ก ํธ์๋์ ๋ฐํํฉ๋๋ค. Bob์ ๋ ๋น๋ฐ๋ฒํธ๊ฐ ์ผ์นํ๋ ๊ฒฝ์ฐ์๋ง ๋ก๊ทธ์ธ ํ๋ก์ธ์ค๋ฅผ ์งํํ ์ ์์ต๋๋ค. + +์ด ์ธ์ฆ ๋ฉ์ปค๋์ฆ์ ์์ ํ๊ฐ์? + +- ๋ค๋ฅธ ์ฌ๋์ด ์ํฌ๋ฆฟ ํค๋ฅผ ํ๋ํ ์ ์๋์? + + ์ํฌ๋ฆฟ ํค๊ฐ HTTPS๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ก๋๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ์ธ์ฆ๊ธฐ ํด๋ผ์ด์ธํธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋น๋ฐ ํค๋ฅผ ์ ์ฅํ๋ฉฐ, ๋น๋ฐ ํค๊ฐ ์ํธํ๋์ด ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค. + +- ํด์ปค๊ฐ 6์๋ฆฌ ๋น๋ฐ๋ฒํธ๋ฅผ ์ถ์ธกํ ์ ์๋์? + + ์๋์. ๋น๋ฐ๋ฒํธ๋ 6์๋ฆฌ๋ก ๊ตฌ์ฑ๋๋ฏ๋ก ์์ฑ๋ ๋น๋ฐ๋ฒํธ์ ์กฐํฉ ๊ฐ๋ฅ ์๋ 100๋ง ๊ฐ์ ๋๋ค. ๊ฒ๋ค๊ฐ ๋น๋ฐ๋ฒํธ๋ 30์ด๋ง๋ค ๋ณ๊ฒฝ๋ฉ๋๋ค. ํด์ปค๊ฐ 30์ด ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ์์๋ด๋ ค๋ฉด ์ด๋น 30,000๊ฐ์ ์กฐํฉ์ ์ ๋ ฅํด์ผ ํฉ๋๋ค. + + +## ์ค์ ์ฌ๋ก ์ฐ๊ตฌ + +### ๋ทํ๋ฆญ์ค ๊ธฐ์ ์คํ + +์ด ๊ฒ์๋ฌผ์ ์ฌ๋ฌ ๋ทํ๋ฆญ์ค ์์ง๋์ด๋ง ๋ธ๋ก๊ทธ์ ์คํ์์ค ํ๋ก์ ํธ์ ์ฐ๊ตฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋์์ต๋๋ค. ๋ถ์ ํํ ๋ด์ฉ์ ๋ฐ๊ฒฌํ๋ฉด ์ธ์ ๋ ์ง ์๋ ค์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. + ++ +
+ +**Mobile and web**: ๋ทํ๋ฆญ์ค๋ ๋ค์ดํฐ๋ธ ๋ชจ๋ฐ์ผ ์ฑ์ ๊ตฌ์ถํ๊ธฐ ์ํด Swift์ Kotlin์ ์ฑํํ์ต๋๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ React๋ฅผ ์ฌ์ฉํฉ๋๋ค. + +**Frontend/server communication**: ๋ทํ๋ฆญ์ค๋ GraphQL์ ์ฌ์ฉํฉ๋๋ค. + +**Backend services**: ๋ทํ๋ฆญ์ค๋ ZUUL, ์ ๋ ์นด, ์คํ๋ง ๋ถํธ ํ๋ ์์ํฌ ๋ฐ ๊ธฐํ ๊ธฐ์ ์ ์ฌ์ฉํฉ๋๋ค. + +**Databases**: ๋ทํ๋ฆญ์ค๋ EV ์บ์, ์นด์ฐ๋๋ผ, ์ฝํฌ๋ก์นDB ๋ฐ ๊ธฐํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ์ฉํฉ๋๋ค. + +**Messaging/streaming**: ๋ทํ๋ฆญ์ค๋ ๋ฉ์์ง๊ณผ ์คํธ๋ฆฌ๋ฐ์ ์ํด ์ํ์น ์นดํ์นด์ ํํฌ(Fink)๋ฅผ ์ฌ์ฉํฉ๋๋ค. + +**Video storage**: ๋ทํ๋ฆญ์ค๋ ๋น๋์ค ์คํ ๋ฆฌ์ง๋ก S3์ Open Connect๋ฅผ ์ฌ์ฉํฉ๋๋ค. + +**Data processing**: ๋ทํ๋ฆญ์ค๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํด Flink์ Spark๋ฅผ ํ์ฉํ๊ณ , ์ด๋ฅผ Tableau๋ฅผ ์ฌ์ฉํ์ฌ ์๊ฐํํฉ๋๋ค. ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค ์ ๋ณด๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ๋ Redshift๋ฅผ ์ฌ์ฉํฉ๋๋ค. + +**CI/CD**: ๋ทํ๋ฆญ์ค๋ CI/CD ํ๋ก์ธ์ค๋ฅผ ์ํด JIRA, Confluence, PagerDuty, Jenkins, Gradle, Chaos Monkey, Spinnaker, Atlas ๋ฑ ๋ค์ํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. + +### ํธ์ํฐ ์ํคํ ์ฒ 2022 + +์, ์ด๊ฒ์ด ์ค์ ํธ์ํฐ ์ํคํ ์ฒ์ ๋๋ค. ์๋ก ๋จธ์คํฌ๊ฐ ๊ฒ์ํ๊ณ ๊ฐ๋ ์ฑ์ ๋์ด๊ธฐ ์ํด ๋ค์ ๊ทธ๋ฆฐ ๊ฒ์ ๋๋ค. + ++ +
+ + +### ์ง๋ 15๋ ๊ฐ ์์ด๋น์ค๋น ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์ ์งํ ๊ณผ์ + +์์ด๋น์ค๋น์ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ๋ ํฌ๊ฒ 3๊ฐ์ง ์คํ ์ด์ง๋ฅผ ๊ฑฐ์ณค์ต๋๋ค. + ++ +
+ + +๋ชจ๋๋ฆฌ์ค (2008 - 2017) + +์์ด๋น์ค๋น๋ ํธ์คํธ์ ๊ฒ์คํธ๋ฅผ ์ํ ๋จ์ํ ๋ง์ผํ๋ ์ด์ค์์ ์์๋์์ต๋๋ค. ์ด๋ ๋ชจ๋๋ฆฌ์ค๋ผ๊ณ ํ๋ Ruby on Rails ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๊ตฌ์ถ๋์์ต๋๋ค. + +์ฑ๋ฆฐ์ง๋ ๋ฌด์์ธ๊ฐ์? + +- ํผ๋์ค๋ฌ์ด ํ ์ค๋์ญ + ์ค๋์ญ ์๋ ์ฝ๋ +- ๋๋ฆฐ ๊ฐ๋ฐ + +๋ง์ดํฌ๋ก์๋น์ค (2017 - 2020) + +๋ง์ดํฌ๋ก์๋น์ค๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์ ํต์ฌ ์๋น์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค: + +- Data fetching service +- Business logic data service +- Write workflow service +- UI aggregation service +- ๊ฐ ์๋น์ค์๋ ํ๋์ ์ ๋ด ํ ๋๊ธฐ + +์ฑ๋ฆฐ์ง๋ ๋ฌด์์ธ๊ฐ์? + +์๋ฐฑ ๊ฐ์ ์๋น์ค์ ์ข ์์ฑ์ ์ฌ๋์ด ๊ด๋ฆฌํ๊ธฐ ์ด๋ ค์ ์ต๋๋ค. + +๋ง์ดํฌ๋ก + ๋งคํฌ๋ก์๋น์ค (2020 - ํ์ฌ) + +์์ด๋น์ค๋น๋ ํ์ฌ ์ด๋ฅผ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค. ๋ง์ดํฌ๋ก ๋ฐ ๋งคํฌ๋ก์๋น์ค ํ์ด๋ธ๋ฆฌ๋ ๋ชจ๋ธ์ API ํตํฉ์ ์ค์ ์ ๋ก๋๋ค. + +### ๋ชจ๋ ธ๋ ํฌ vs ๋ง์ดํฌ๋ก๋ ํฌ + +์ด๋ค ๊ฒ์ด ๊ฐ์ฅ ์ข์๊น์? ํ์ฌ๋ง๋ค ๋ค๋ฅธ ์ต์ ์ ์ ํํ๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์? + ++ +
+ + +๋ชจ๋ ธ๋ ํฌ๋ ์๋ก์ด ๊ฒ์ด ์๋๋๋ค. Linux์ Windows ๋ชจ๋ ๋ชจ๋ ธ๋ ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ง๋ค์ด์ก์ต๋๋ค. ํ์ฅ์ฑ๊ณผ ๋น๋ ์๋๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด ๊ตฌ๊ธ์ ๋ด๋ถ ์ ์ฉ ํด์ฒด์ธ์ ๊ฐ๋ฐํ์ฌ ๋ ๋น ๋ฅด๊ฒ ํ์ฅํ๊ณ ์๊ฒฉํ ์ฝ๋ฉ ํ์ง ํ์ค์ ์ ์ฉํ์ฌ ์ผ๊ด์ฑ์ ์ ์งํ์ต๋๋ค. + +์๋ง์กด๊ณผ ๋ทํ๋ฆญ์ค๋ ๋ง์ดํฌ๋ก์๋น์ค ์ฒ ํ์ ์ฃผ์ ํ๋ณด๋์ฌ์ ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์์ฐ์ค๋ฝ๊ฒ ์๋น์ค ์ฝ๋๋ฅผ ๋ณ๋์ ๋ฆฌํฌ์งํ ๋ฆฌ๋ก ๋ถ๋ฆฌํฉ๋๋ค. ํ์ฅ ์๋๋ ๋น ๋ฅด์ง๋ง ๋์ค์ ๊ฑฐ๋ฒ๋์ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. + +๋ชจ๋ ธ๋ ํฌ ๋ด์์ ๊ฐ ์๋น์ค๋ ํ๋์ ํด๋์ด๋ฉฐ, ๋ชจ๋ ํด๋์๋ ๋น๋ ๊ตฌ์ฑ ๋ฐ ์์ ์ ๊ถํ ์ ์ด๊ฐ ์์ต๋๋ค. ๋ชจ๋ ์๋น์ค ๊ตฌ์ฑ์์ ์์ ์ ํด๋์ ๋ํ ์ฑ ์์ด ์์ต๋๋ค. + +๋ฐ๋ฉด ๋ง์ดํฌ๋ก๋ ํฌ์์๋ ๊ฐ ์๋น์ค๊ฐ ํด๋น ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ด๋นํ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ์ ์ฒด ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ํ ๋น๋ ๊ตฌ์ฑ๊ณผ ๊ถํ์ด ์ค์ ๋ฉ๋๋ค. + +๋ชจ๋ ธ๋ ํฌ์์๋ ๋น์ฆ๋์ค์ ๊ด๊ณ์์ด ์ ์ฒด ์ฝ๋๋ฒ ์ด์ค์์ ์ข ์์ฑ์ด ๊ณต์ ๋๋ฏ๋ก ๋ฒ์ ์ ๊ทธ๋ ์ด๋๊ฐ ์์ ๋ ๋ชจ๋ ์ฝ๋๋ฒ ์ด์ค๊ฐ ํด๋น ๋ฒ์ ์ ์ ๊ทธ๋ ์ด๋ํฉ๋๋ค. + +๋ง์ดํฌ๋ก๋ ํฌ์์๋ ๊ฐ ๋ฆฌํฌ์งํ ๋ฆฌ ๋ด์์ ์ข ์์ฑ์ ์ ์ดํฉ๋๋ค. ๊ธฐ์ ์ ์์ฒด ์ผ์ ์ ๋ฐ๋ผ ๋ฒ์ ์ ์ ๊ทธ๋ ์ด๋ํ ์๊ธฐ๋ฅผ ์ ํํ ์ ์์ต๋๋ค. + +๋ชจ๋ ธ๋ ํฌ์๋ ์ฒดํฌ์ธ์ ๋ํ ํ์ค์ด ์์ต๋๋ค. ๊ตฌ๊ธ์ ์ฝ๋ ๊ฒํ ํ๋ก์ธ์ค๋ ๋์ ๊ธฐ์ค์ ์ค์ ํ๋ ๊ฒ์ผ๋ก ์ ๋ช ํ๋ฉฐ, ๋น์ฆ๋์ค์ ๊ด๊ณ์์ด ๋ชจ๋ ธ๋ ํฌ์ ์ผ๊ด๋ ํ์ง ํ์ค์ ๋ณด์ฅํฉ๋๋ค. + +๋ง์ดํฌ๋ก๋ ํฌ๋ ์์ฒด ํ์ค์ ์ค์ ํ๊ฑฐ๋ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ํตํฉํ์ฌ ๊ณต์ ํ์ค์ ์ฑํํ ์ ์์ต๋๋ค. ๋น์ฆ๋์ค์ ๋ง๊ฒ ๋ ๋น ๋ฅด๊ฒ ํ์ฅํ ์ ์์ง๋ง ์ฝ๋ ํ์ง์ด ์ฝ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค. +๊ตฌ๊ธ ์์ง๋์ด๋ Bazel์, Meta๋ Buck์ ๋ง๋ค์์ต๋๋ค. ๊ทธ ์ธ์๋ Nx, Lerna ๋ฑ ๋ค์ํ ์คํ ์์ค ๋๊ตฌ๊ฐ ์์ต๋๋ค. + +์๋ ์ ๊ฑธ์ณ ๋ง์ดํฌ๋ก๋ ํฌ๋ Java์ฉ Maven๊ณผ Gradle, NodeJS์ฉ NPM, C/C++์ฉ CMake ๋ฑ ๋ ๋ง์ ๋๊ตฌ๋ฅผ ์ง์ํ๊ฒ ๋์์ต๋๋ค. + +### ์คํ ์ค๋ฒํ๋ก ์น์ฌ์ดํธ๋ฅผ ์ด๋ป๊ฒ ๋์์ธํ ๊ฑด๊ฐ์? + +๋ต๋ณ์ด ์จํ๋ ๋ฏธ์ค ์๋ฒ์ ๋ชจ๋๋ฆฌ์ค(๋ค์ ์ด๋ฏธ์ง ํ๋จ)๋ผ๋ฉด ๋ฉด์ ์์ ๋จ์ด์ง ๊ฐ๋ฅ์ฑ์ด ๋์ง๋ง, ์ค์ ๋ก๋ ๊ทธ๋ ๊ฒ ๊ตฌ์ถ๋์ด ์์ต๋๋ค! + ++ +
+ + +**์ฌ๋๋ค์ด ์๊ฐํ๋ ๋์์ธ** + +๋ฉด์ ๊ด์ ์๋ง๋ ์ฌ์ง์ ์๋จ ๋ถ๋ถ๊ณผ ๊ฐ์ ๊ฒ์ ๊ธฐ๋ํ๊ณ ์์ ๊ฒ์ ๋๋ค. + +- ๋ง์ดํฌ๋ก์๋น์ค๋ ์์คํ ์ ์์ ์ปดํฌ๋ํธ๋ก ๋ถํดํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. +- ๊ฐ ์๋น์ค์๋ ์์ฒด ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์์ต๋๋ค. ์บ์๋ฅผ ๋ง์ด ์ฌ์ฉํ์ธ์. +- ์๋น์ค๊ฐ ์ค๋ฉ๋ฉ๋๋ค. +- ์๋น์ค๋ ๋ฉ์์ง ํ๋ฅผ ํตํด ๋น๋๊ธฐ์ ์ผ๋ก ์๋ก ํต์ ํฉ๋๋ค. +- ์ด ์๋น์ค๋ ์ด๋ฒคํธ ์์ฑ๊ณผ CQRS๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ๋ฉ๋๋ค. +- ์ต์ข ์ ํฉ์ฑ, CAP ์ ๋ฆฌ ๋ฑ๊ณผ ๊ฐ์ ๋ถ์ฐ ์์คํ ์ ๋ํ ์ง์์ ๋ฝ๋ด ๋ณด์ธ์. + +**์ค์ ๋ด์ฉ** + +์คํ ์ค๋ฒํ๋ก๋ ๋จ 9๋์ ์จํ๋ ๋ฏธ์ค ์น ์๋ฒ๋ก ๋ชจ๋ ํธ๋ํฝ์ ์ฒ๋ฆฌํ๋ฉฐ, ์ด ์๋ฒ๋ ๋ชจ๋๋ฆฌ์ค๋ก ์ด์๋ฉ๋๋ค! ์์ฒด ์๋ฒ๋ฅผ ๋ณด์ ํ๊ณ ์์ผ๋ฉฐ ํด๋ผ์ฐ๋์์ ์คํ๋์ง ์์ต๋๋ค. + +์ด๋ ์ค๋๋ ์ ์ผ๋ฐ์ ์ธ ๋ฏฟ์๊ณผ๋ ์๋ฐ๋๋ ๊ฒ์ ๋๋ค. + +### ์๋ง์กด ํ๋ผ์ ๋น๋์ค ๋ชจ๋ํฐ๋ง์ด ์๋ฒ๋ฆฌ์ค์์ ๋ชจ๋๋ฆฌ์์ผ๋ก ์ ํ๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์? ์ด๋ป๊ฒ 90%์ ๋น์ฉ์ ์ ๊ฐํ ์ ์์๊น์? + +์๋ ๋ค์ด์ด๊ทธ๋จ์ ๋ง์ด๊ทธ๋ ์ด์ ์ ๊ณผ ํ์ ์ํคํ ์ฒ๋ฅผ ๋น๊ตํ ๊ฒ์ ๋๋ค. + ++ +
+ + +์๋ง์กด ํ๋ผ์ ๋น๋์ค ๋ชจ๋ํฐ๋ง ์๋น์ค๋ ๋ฌด์์ธ๊ฐ์? + +ํ๋ผ์ ๋น๋์ค ์๋น์ค๋ ์์ฒ ๊ฐ์ ๋ผ์ด๋ธ ์คํธ๋ฆผ์ ํ์ง์ ๋ชจ๋ํฐ๋งํด์ผ ํฉ๋๋ค. ๋ชจ๋ํฐ๋ง ๋๊ตฌ๋ ์ค์๊ฐ์ผ๋ก ์คํธ๋ฆผ์ ์๋์ผ๋ก ๋ถ์ํ๊ณ ๋ธ๋ก ์์, ๋์์ ์ ์ง, ๋๊ธฐํ ๋ฌธ์ ์ ๊ฐ์ ํ์ง ๋ฌธ์ ๋ฅผ ์๋ณํฉ๋๋ค. ์ด๋ ๊ณ ๊ฐ ๋ง์กฑ์ ์ํ ์ค์ํ ํ๋ก์ธ์ค์ ๋๋ค. + +๋ฏธ๋์ด ์ปจ๋ฒํฐ, ๊ฒฐํจ ๊ฒ์ถ๊ธฐ, ์ค์๊ฐ ์๋ฆผ์ 3๋จ๊ณ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. + +- ๊ธฐ์กด ์ํคํ ์ฒ์ ๋ฌธ์ ์ ์ ๋ฌด์์ธ๊ฐ์? + + ์ด์ ์ํคํ ์ฒ๋ ์๋ง์กด ๋๋ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ ์๋น์ค๋ฅผ ๋น ๋ฅด๊ฒ ๊ตฌ์ถํ๋ ๋ฐ๋ ์ข์์ต๋๋ค. ํ์ง๋ง ๋๊ท๋ชจ๋ก ์ํคํ ์ฒ๋ฅผ ์คํํ ๋๋ ๋น์ฉ ํจ์จ์ ์ด์ง ์์์ต๋๋ค. ๋ค์์ ๊ฐ์ฅ ๋น์ฉ์ด ๋ง์ด ๋๋ ๋ ๊ฐ์ง ์์ ์ ๋๋ค. + +1. ์ค์ผ์คํธ๋ ์ด์ ์ํฌํ๋ก - AWS ์คํ ํจ์๋ ์ํ ์ ํ๋ณ๋ก ์ฌ์ฉ์์๊ฒ ์๊ธ์ ๋ถ๊ณผํ๊ณ , ์ค์ผ์คํธ๋ ์ด์ ์ ๋งค์ด๋ง๋ค ์ฌ๋ฌ ์ํ ์ ํ์ ์ํํฉ๋๋ค. + +2. ๋ถ์ฐ๋ ์ปดํฌ๋ํธ ๊ฐ์ ๋ฐ์ดํฐ ์ ๋ฌ - ์ธํฐ๋ฏธ๋์ดํธ ๋ฐ์ดํฐ๋ ๋ค์ ์คํ ์ด์ง์ ๋ค์ด๋ก๋๋ฅผ ์ํด ์๋ง์กด S3์ ์ ์ฅ๋ฉ๋๋ค. ๋ณผ๋ฅจ์ด ํฌ๋ฉด ๋ค์ด๋ก๋ ๋น์ฉ์ด ๋ง์ด ๋ค ์ ์์ต๋๋ค. + +- ๋ชจ๋๋ฆฌ์ ์ํคํ ์ฒ๋ก 90% ๋น์ฉ ์ ๊ฐ + + ๋ชจ๋๋ฆฌ์ ์ํคํ ์ฒ๋ ๋น์ฉ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ค๊ณ๋์์ต๋๋ค. ์ฌ์ ํ 3๊ฐ์ ์ปดํฌ๋ํธ๊ฐ ์์ง๋ง ๋ฏธ๋์ด ์ปจ๋ฒํฐ์ ๊ฒฐํจ ๊ฐ์ง๊ธฐ๊ฐ ๋์ผํ ํ๋ก์ธ์ค์ ๋ฐฐํฌ๋์ด ๋คํธ์ํฌ๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ๋ฌ ๋น์ฉ์ ์ ๊ฐํ ์ ์์ต๋๋ค. ๋๋๊ฒ๋ ์ด๋ฌํ ๋ฐฐํฌ ์ํคํ ์ฒ ๋ณ๊ฒฝ ๋ฐฉ์์ 90%์ ๋น์ฉ ์ ๊ฐ ํจ๊ณผ๋ฅผ ๊ฐ์ ธ์์ต๋๋ค! + +๋ง์ดํฌ๋ก์๋น์ค๊ฐ ๊ธฐ์ ์ ๊ณ์์ ์ ํ์ฒ๋ผ ๋ฒ์ง๊ณ ์๋ ๋งํผ ์ด ์ฌ๋ก๋ ํฅ๋ฏธ๋กญ๊ณ ๋ ํนํ ์ฌ๋ก ์ฐ๊ตฌ์ ๋๋ค. ์ํคํ ์ฒ์ ์งํ์ ๋ํด ๋ ๋ง์ ๋ ผ์๋ฅผ ํ๊ณ ์ฅ๋จ์ ์ ๋ํด ๋ ์์งํ ํ ๋ก ์ ํ๊ณ ์๋ค๋ ๊ฒ์ ์ข์ ์ผ์ ๋๋ค. ์ปดํฌ๋ํธ๋ฅผ ๋ถ์ฐํ ๋ง์ดํฌ๋ก์๋น์ค๋ก ๋ถํดํ๋ ๋ฐ์๋ ๋น์ฉ์ด ๋ฐ์ํฉ๋๋ค. + +- ์ด์ ๋ํด ์๋ง์กด์ ๋ฆฌ๋๋ค์ ์ด๋ค ๋ฐ์์ ๋ณด์์๊น์? + + ์๋ง์กด CTO Werner Vogels: "**์งํ ๊ฐ๋ฅํ ์ํํธ์จ์ด ์์คํ **์ ๊ตฌ์ถํ๋ ๊ฒ์ ์ ๋ต์ด์ง ์ข ๊ต๊ฐ ์๋๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฆฐ ๋ง์์ผ๋ก ์ํคํ ์ฒ๋ฅผ ์ฌ๊ฒํ ํ๋ ๊ฒ์ ํ์์ ๋๋ค." + +Ex Amazon VP Sustainability Adrian Cockcroft: "ํ๋ผ์ ๋น๋์ค ํ์ ์ ๊ฐ **์๋ฒ๋ฆฌ์ค ํผ์คํธ**๋ผ๊ณ ๋ถ๋ฅด๋ ๊ธธ์ ๋ฐ๋์ต๋๋ค. ์ ๋ **์๋ฒ๋ฆฌ์ค ์จ๋ฆฌ**๋ฅผ ์นํธํ์ง ์์ต๋๋ค.". + +### ๋์ฆ๋ ํซ์คํ๋ ์ด๋ป๊ฒ ํ ๋๋จผํธ ๊ธฐ๊ฐ ๋์ 50์ต ๊ฐ์ ์ด๋ชจํฐ์ฝ์ ํ๋ํ ์ ์์๋์? + ++ +
+ + +1. ํด๋ผ์ด์ธํธ๋ ํ์ค HTTP ์์ฒญ์ ํตํด ์ด๋ชจํฐ์ฝ์ ์ ์กํฉ๋๋ค. ๊ณ ๋ญ ์๋น์ค๋ ์ผ๋ฐ์ ์ธ ์น ์๋ฒ๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค. ๊ณ ๋ญ์ ์ ํํ ์ด์ ๋ ๋์์ฑ์ ์ ์ง์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ณ ๋ญ์ ์ค๋ ๋๋ ๊ฐ๋ณ์ต๋๋ค. + +2. ์ฐ๊ธฐ ๋ณผ๋ฅจ์ด ๋งค์ฐ ๋๊ธฐ ๋๋ฌธ์ ์นดํ์นด(๋ฉ์์ง ํ)๊ฐ ๋ฒํผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. + +3. ์ด๋ชจํฐ์ฝ ๋ฐ์ดํฐ๋ Spark๋ผ๋ ์คํธ๋ฆฌ๋ฐ ์ฒ๋ฆฌ ์๋น์ค์ ์ํด ์ด๊ทธ๋ฆฌ๊ฒ์ดํธ๋ฉ๋๋ค. ์ด ์๋น์ค๋ 2์ด๋ง๋ค ๋ฐ์ดํฐ๋ฅผ ์ด๊ทธ๋ฆฌ๊ฒ์ดํธํ๋ฉฐ, ๊ทธ ์ฃผ๊ธฐ๋ ์ค์ ํ ์ ์์ต๋๋ค. ๊ฐ๊ฒฉ์ ๋ฐ๋ผ ์ฅ๋จ์ ์ด ์์ต๋๋ค. ๊ฐ๊ฒฉ์ด ์งง์์๋ก ๋ค๋ฅธ ํด๋ผ์ด์ธํธ์ ์ด๋ชจํฐ์ฝ์ด ๋ ๋นจ๋ฆฌ ์ ๋ฌ๋์ง๋ง ๋ ๋ง์ ์ปดํจํ ๋ฆฌ์์ค๊ฐ ํ์ํ๋ค๋ ์๋ฏธ๋ ๋ฉ๋๋ค. + +4. ์ด๊ทธ๋ฆฌ๊ฒ์ดํธ๋ ๋ฐ์ดํฐ๋ ๋ ๋ค๋ฅธ ์นดํ์นด์ ๊ธฐ๋ก๋ฉ๋๋ค. + +5. PubSub ์ปจ์๋จธ๋ ์นดํ์นด์์ ์ด๊ทธ๋ฆฌ๊ฒ์ดํธ๋ ์ด๋ชจํฐ์ฝ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค. + +6. ์ด๋ชจํฐ์ฝ์ PubSub ์ธํ๋ผ๋ฅผ ํตํด ๋ค๋ฅธ ํด๋ผ์ด์ธํธ์๊ฒ ์ค์๊ฐ์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค. PubSub ์ธํ๋ผ๋ ํฅ๋ฏธ๋กญ์ต๋๋ค. ํซ์คํ๋ ๋ค์๊ณผ ๊ฐ์ ํ๋กํ ์ฝ์ ๊ณ ๋ คํ์ต๋๋ค. Socketio, NATS, MQTT, gRPC๋ฅผ ๊ฒํ ํ ๊ฒฐ๊ณผ MQTT๋ก ๊ฒฐ์ ํ์ต๋๋ค. + +์ด๋น ๋ฐฑ๋ง ๊ฐ์ '์ข์์'๋ฅผ ์คํธ๋ฆฌ๋ฐํ๋ LinkedIn์์๋ ๋น์ทํ ๋์์ธ์ ์ฑํํ๊ณ ์์ต๋๋ค. + +### Discord๊ฐ ์์กฐ ๊ฐ์ ๋ฉ์์ง๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ + +์๋ ๋ค์ด์ด๊ทธ๋จ์ Discord์์ ๋ฉ์์ง ์คํ ๋ฆฌ์ง์ ์งํ ๊ณผ์ ์ ๋ณด์ฌ์ค๋๋ค: + ++ +
+ + +MongoDB โก๏ธ Cassandra โก๏ธ ScyllaDB + +2015๋ , ๋์ค์ฝ๋์ ์ฒซ ๋ฒ์งธ ๋ฒ์ ์ ๋จ์ผ MongoDB ๋ ํ๋ฆฌ์นด ์์ ๊ตฌ์ถ๋์์ต๋๋ค. 2015๋ 11์๊ฒฝ, MongoDB์ 1์ต ๊ฐ์ ๋ฉ์์ง๊ฐ ์ ์ฅ๋์ RAM์ด ๋ ์ด์ ๋ฐ์ดํฐ์ ์์ธ์ ์ ์ฅํ ์ ์๊ฒ ๋์์ต๋๋ค. ์ง์ฐ ์๊ฐ์ ์์ธกํ ์ ์๊ฒ ๋์์ต๋๋ค. ๋ฉ์์ง ์ ์ฅ์๋ฅผ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ฎ๊ฒจ์ผ ํ๊ณ , ์นด์ฐ๋๋ผ๊ฐ ์ ํ๋์์ต๋๋ค. + +2017๋ , ๋์ค์ฝ๋์๋ 12๊ฐ์ ์นด์ฐ๋๋ผ ๋ ธ๋๊ฐ ์์๊ณ ์์ญ์ต ๊ฐ์ ๋ฉ์์ง๊ฐ ์ ์ฅ๋์ด ์์์ต๋๋ค. + +2022๋ ์ด์๋ 177๊ฐ์ ๋ ธ๋์ ์์กฐ ๊ฐ์ ๋ฉ์์ง๊ฐ ์์์ต๋๋ค. ์ด ์์ ์์๋ ์ง์ฐ ์๊ฐ์ ์์ธกํ ์ ์์๊ณ ์ ์ง๋ณด์ ์ด์ ๋น์ฉ์ด ๋๋ฌด ๋ง์ด ๋ค์์ต๋๋ค. + +์ฌ๊ธฐ์๋ ๋ช ๊ฐ์ง ์ด์ ๊ฐ ์์ต๋๋ค. + +- ์นด์ฐ๋๋ผ๋ ๋ด๋ถ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ LSM ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฝ๊ธฐ๋ ์ฐ๊ธฐ๋ณด๋ค ๋น์ฉ์ด ๋ ๋ง์ด ๋ญ๋๋ค. ์๋ฐฑ ๋ช ์ ์ฌ์ฉ์๊ฐ ์๋ ์๋ฒ์์ ๋์ ์ฝ๊ธฐ๊ฐ ๋ง์ด ๋ฐ์ํ์ฌ ํซ์คํ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. +- SSTable์ ์์ถํ๋ ๋ฑ ํด๋ฌ์คํฐ๋ฅผ ์ ์ง ๊ด๋ฆฌํ๋ฉด ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. +- ๊ฐ๋น์ง ์ปฌ๋ ์ ์ผ์ ์ค์ง๋ก ์ธํด ์ง์ฐ ์๊ฐ์ด ํฌ๊ฒ ์ฆ๊ฐํฉ๋๋ค. + +ScyllaDB๋ C++๋ก ์์ฑ๋ ์นด์ฐ๋๋ผ ํธํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๋ค. ๋์ค์ฝ๋๋ ๋ชจ๋๋ฆฌ์ API, Rust๋ก ์์ฑ๋ ๋ฐ์ดํฐ ์๋น์ค, ScyllaDB ๊ธฐ๋ฐ ์คํ ๋ฆฌ์ง๋ฅผ ๊ฐ์ถ๋๋ก ์ํคํ ์ฒ๋ฅผ ์ฌ์ค๊ณํ์ต๋๋ค. + +ScyllaDB์ p99 ์ฝ๊ธฐ ์ง์ฐ ์๊ฐ์ 15ms์ธ ๋ฐ๋ฉด ์นด์ฐ๋๋ผ๋ 40-125ms์ ๋๋ค. p99 ์ฐ๊ธฐ ์ง์ฐ ์๊ฐ์ 5ms์ธ๋ฐ ๋ฐํด ์นด์ฐ๋๋ผ๋ 5-70ms์ ๋๋ค. + +### ๋์์ ๋ผ์ด๋ธ ์คํธ๋ฆฌ๋ฐ์ YouTube, TikTok ๋ผ์ด๋ธ, Twitch์์ ์ด๋ป๊ฒ ์๋ํ๋์? + +๋ผ์ด๋ธ ์คํธ๋ฆฌ๋ฐ์ ๋น๋์ค ์ฝํ ์ธ ๊ฐ ์ธํฐ๋ท์ ํตํด ์ค์๊ฐ์ผ๋ก ์ ์ก๋๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ๋ช ์ด์ ์ง์ฐ ์๊ฐ๋ง ๋ฐ์ํ๋ค๋ ์ ์์ ์ผ๋ฐ ์คํธ๋ฆฌ๋ฐ๊ณผ ๋ค๋ฆ ๋๋ค. + +์๋ ๋ค์ด์ด๊ทธ๋จ์ ์ด๋ฌํ ์์ ์ ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํด ์ค์ ๋ก ๋ฌด์จ ์ผ์ด ๋ฐ์ํ๋์ง ์ค๋ช ํฉ๋๋ค. + ++ +
+ + +1๋จ๊ณ: ๋ก์ฐ ๋น๋์ค ๋ฐ์ดํฐ๋ ๋ง์ดํฌ์ ์นด๋ฉ๋ผ๋ก ์บก์ฒ๋ฉ๋๋ค. ๋ฐ์ดํฐ๋ ์๋ฒ ์ธก์ผ๋ก ์ ์ก๋ฉ๋๋ค. + +2๋จ๊ณ: ๋์์ ๋ฐ์ดํฐ๋ ์์ถํ๊ณ ์ธ์ฝ๋ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์์ถ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐฐ๊ฒฝ๊ณผ ๊ธฐํ ๋น๋์ค ์์๋ฅผ ๋ถ๋ฆฌํฉ๋๋ค. ์์ถ ํ ๋์์์ H.264์ ๊ฐ์ ํ์ค์ผ๋ก ์ธ์ฝ๋ฉ๋ฉ๋๋ค. ์ด ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ฉด ๋์์ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ํจ์ฌ ์์์ง๋๋ค. + +3๋จ๊ณ: ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํฐ๋ ๋ณดํต ๋ช ์ด ๊ธธ์ด์ ์์ ์ธ๊ทธ๋จผํธ๋ก ๋๋๊ธฐ ๋๋ฌธ์ ๋ค์ด๋ก๋๋ ์คํธ๋ฆฌ๋ฐ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ํจ์ฌ ์งง์ต๋๋ค. + +4๋จ๊ณ: ์ธ๊ทธ๋จผํธํ๋ ๋ฐ์ดํฐ๋ ์คํธ๋ฆฌ๋ฐ ์๋ฒ๋ก ์ ์ก๋ฉ๋๋ค. ์คํธ๋ฆฌ๋ฐ ์๋ฒ๋ ๋ค์ํ ๋๋ฐ์ด์ค์ ๋คํธ์ํฌ ์กฐ๊ฑด์ ์ง์ํด์ผ ํฉ๋๋ค. ์ด๋ฅผ 'Adaptive Bitrate Streaming'์ด๋ผ๊ณ ํฉ๋๋ค. ์ฆ, 2๋จ๊ณ์ 3๋จ๊ณ์์ ์๋ก ๋ค๋ฅธ ๋นํธ๋ ์ดํธ๋ก ์ฌ๋ฌ ๊ฐ์ ํ์ผ์ ์์ฑํด์ผ ํฉ๋๋ค. + +5๋จ๊ณ: ๋ผ์ด๋ธ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ๋ CDN(Content Delivery Network)์ด ์ง์ํ๋ ์ฃ์ง ์๋ฒ๋ก ํธ์๋๋ฉฐ, ์๋ฐฑ๋ง ๋ช ์ ์์ฒญ์๊ฐ ๊ฐ๊น์ด ์ฃ์ง ์๋ฒ์์ ๋์์์ ์์ฒญํ ์ ์์ต๋๋ค. CDN์ ๋ฐ์ดํฐ ์ ์ก ์ง์ฐ ์๊ฐ์ ํฌ๊ฒ ์ค์ฌ์ค๋๋ค. + +6๋จ๊ณ: ์์ฒญ์์ ๋๋ฐ์ด์ค๋ ๋์์ ๋ฐ์ดํฐ๋ฅผ ๋์ฝ๋ฉ ๋ฐ ์์ถ ํด์ ํ๊ณ ๋์์ ํ๋ ์ด์ด์์ ๋์์์ ์ฌ์ํฉ๋๋ค. + +7, 8๋จ๊ณ: ๋์์์ ๋ค์ ๋ณด๊ธฐ ์ํด ์ ์ฅํด์ผ ํ๋ ๊ฒฝ์ฐ ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํฐ๋ ์คํ ๋ฆฌ์ง ์๋ฒ๋ก ์ ์ก๋๋ฉฐ, ์์ฒญ์๋ ๋์ค์ ๋ค์ ๋ณด๊ธฐ๋ฅผ ์์ฒญํ ์ ์์ต๋๋ค. + +๋ผ์ด๋ธ ์คํธ๋ฆฌ๋ฐ์ ์ํ ํ์ค ํ๋กํ ์ฝ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. + +- RTMP (Real-Time Messaging Protocol): ์๋๋ Macromedia์์ ํ๋์ ํ๋ ์ด์ด์ ์๋ฒ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ํด ๊ฐ๋ฐํ์ต๋๋ค. ์ง๊ธ์ ์ธํฐ๋ท์ ํตํ ๋น๋์ค ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ์ ์ฌ์ฉ๋ฉ๋๋ค. Skype์ ๊ฐ์ ํ์ ํ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์ฐ ์๊ฐ์ ์ค์ด๊ธฐ ์ํด RTC(Real-Time Communication) ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ค๋ ์ ์ ์ ์ํ์ธ์. +- HLS (HTTP Live Streaming): H.264 ๋๋ H.265 ์ธ์ฝ๋ฉ์ด ํ์ํฉ๋๋ค. Apple ์ฅ์น๋ HLS ํฌ๋งท๋ง ํ์ฉํฉ๋๋ค. +- DASH (Dynamic Adaptive Streaming over HTTP): DASH๋ Apple ์ฅ์น๋ฅผ ์ง์ํ์ง ์์ต๋๋ค. +- HLS์ DASH๋ ๋ชจ๋ ์ด๋ํฐ๋ธ ๋นํธ๋ ์ดํธ ์คํธ๋ฆฌ๋ฐ์ ์ง์ํฉ๋๋ค. + +## License + +This work is licensed under CC BY-NC-ND 4.0