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 + ใ€‘ +

+ +ByteByteGoHq%2Fsystem-design-101 | Trendshift + +# 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