AWS ๋ฐฐํฌ A-Z ๋ฐฐํฌ ์—ฌ์ • — ์ฒ˜์Œ ๋ฐฐ์šฐ๋Š” ์‚ฌ๋žŒ์„ ์œ„ํ•œ ์ „์ฒด ์ •๋ฆฌ

2026. 6. 3. 13:13ยท๐Ÿ‘ฉ‍๐Ÿ’ปDeveloper ๐Ÿ’ก

๐Ÿš€ Alpha-Helix ๋ฐฐํฌ ์—ฌ์ • โ€” ์ฒ˜์Œ ๋ฐฐ์šฐ๋Š” ์‚ฌ๋žŒ์„ ์œ„ํ•œ ์ „์ฒด ์ •๋ฆฌ

๋กœ์ปฌ์—์„œ ๋Œ๋˜ ์›น์•ฑ์„ ์ง„์งœ ์ธํ„ฐ๋„ท ์ฃผ์†Œ(https://quant-alphahelix.com) ๋กœ ๋„์šฐ๊ธฐ๊นŒ์ง€.
Docker ยท AWS ยท ๋„๋ฉ”์ธ ยท HTTPS ยท ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ ยท ์ž๋™๋ฐฐํฌ(CI/CD) ๋ฅผ ํ•˜๋‚˜์”ฉ.


๐Ÿ—บ๏ธ ํฐ ๊ทธ๋ฆผ โ€” ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ๊ฒƒ

3๊ฐœ์˜ ํ”„๋กœ๊ทธ๋žจ์ด ํ˜‘๋ ฅํ•˜๋Š” ์›น์„œ๋น„์Šค์˜ˆ์š”:

[๋ธŒ๋ผ์šฐ์ €] โ†’ (์ธํ„ฐ๋„ท) โ†’ [ํ”„๋ก ํŠธ์—”๋“œ(React)] โ†’ [๋ฐฑ์—”๋“œ(Spring Boot)] โ†’ [DB(MySQL)]
                                                      โ†˜ [๋ถ„์„์„œ๋ฒ„(FastAPI, ํŒŒ์ด์ฌ)]

์ด๊ฑธ ๋‚ด ๋…ธํŠธ๋ถ์ด ์•„๋‹ˆ๋ผ 24์‹œ๊ฐ„ ์ผœ์ง„ ์„œ๋ฒ„(AWS EC2) ์— ์˜ฌ๋ ค์„œ, ๋ˆ„๊ตฌ๋‚˜ ์ฃผ์†Œ๋กœ ์ ‘์†ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒŒ "๋ฐฐํฌ"์˜ˆ์š”.


1๏ธโƒฃ Docker โ€” "๋‚ด ์ปดํ“จํ„ฐ์—์„  ๋˜๋Š”๋ฐ?" ๋ฅผ ์—†์• ๋Š” ๋„์‹œ๋ฝ

๋ฌธ์ œ: ํ”„๋กœ๊ทธ๋žจ์€ OSยท๋ฒ„์ „ยท์„ค์ •์ด ์กฐ๊ธˆ๋งŒ ๋‹ฌ๋ผ๋„ ์•ˆ ๋Œ์•„๊ฐ€์š”. ๋‚ด ๋…ธํŠธ๋ถ์—์„  ๋˜๋Š”๋ฐ ์„œ๋ฒ„์—์„  ์•ˆ ๋˜๋Š” ์ผ์ด ํ”ํ•˜์ฃ .

Docker = ํ”„๋กœ๊ทธ๋žจ + ํ•„์š”ํ•œ ํ™˜๊ฒฝ์„ ํ†ต์งธ๋กœ "๋„์‹œ๋ฝ(์ด๋ฏธ์ง€)"์— ๋‹ด๋Š” ๊ธฐ์ˆ . ๊ทธ ๋„์‹œ๋ฝ์€ ์–ด๋””์„œ ์—ด๋“  ๋˜‘๊ฐ™์ด ๋Œ์•„๊ฐ€์š”.

  • ์ด๋ฏธ์ง€(Image) = ๋„์‹œ๋ฝ (๋ ˆ์‹œํ”ผ๋Œ€๋กœ ๋งŒ๋“  ๊ฒฐ๊ณผ๋ฌผ)
  • ์ปจํ…Œ์ด๋„ˆ(Container) = ๊ทธ ๋„์‹œ๋ฝ์„ ์‹ค์ œ๋กœ ๋ฐ์›Œ ๋จน๋Š” ๊ฒƒ(์‹คํ–‰ ์ค‘์ธ ์ƒํƒœ)
  • Dockerfile = ๋„์‹œ๋ฝ ๋งŒ๋“œ๋Š” ๋ ˆ์‹œํ”ผ
  • docker-compose.yml = ์—ฌ๋Ÿฌ ๋„์‹œ๋ฝ(์šฐ๋ฆฌ๋Š” 4๊ฐœ: dbยทbackendยทanalyticsยทfrontend)์„ ํ•œ ๋ฒˆ์— ์ฐจ๋ฆฌ๋Š” ์ƒ์ฐจ๋ฆผํ‘œ

์šฐ๋ฆฌ๊ฐ€ ํ•œ ์ผ: 4๊ฐœ ์„œ๋น„์Šค์˜ Dockerfile + compose ์ž‘์„ฑ โ†’

docker compose up -d --build   # ํ•œ ์ค„๋กœ ์ „์ฒด ์Šคํƒ ๊ธฐ๋™

ํ•œ ๋ฐฉ์— ์ „๋ถ€ ๋œจ๊ฒŒ ๋งŒ๋“ค์—ˆ์–ด์š”. (๋ฐฑ์—”๋“œ ๋„์‹œ๋ฝ ์•ˆ์—” Claude CLI๋„ ๊ฐ™์ด ๋„ฃ์–ด์„œ, BYOK ํ‚ค๋งŒ ์žˆ์œผ๋ฉด AI๊ฐ€ ์ฝ”๋“œ ํŽธ์ง‘๊นŒ์ง€ ํ•จ)

๐Ÿ’ก ๋ฐฐ์šด ์ : Docker๋Š” "ํ•œ ๋ฒˆ ๋งŒ๋“ค๋ฉด ์–ด๋””์„œ๋‚˜ ๋˜‘๊ฐ™์ด"๊ฐ€ ํ•ต์‹ฌ. ๋ฐฐํฌ์˜ ํ™˜๊ฒฝ ์ฐจ์ด ๋ฌธ์ œ๋ฅผ ํ†ต์งธ๋กœ ์—†์• ์ค˜์š”.


2๏ธโƒฃ ๋กœ์ปฌ์—์„œ ๋จผ์ € ๊ฒ€์ฆ โ€” ๊ทธ๋ฆฌ๊ณ  ๋งŒ๋‚œ ๋ฒ„๊ทธ๋“ค

์„œ๋ฒ„์— ์˜ฌ๋ฆฌ๊ธฐ ์ „์— ๋‚ด ๋…ธํŠธ๋ถ์˜ Docker์—์„œ ๋จผ์ € ๋„์›Œ๋ดค์–ด์š”. ์—ฌ๊ธฐ์„œ ์ง„์งœ ๋ฌธ์ œ๋“ค์„ ์žก์•˜์ฃ .

๐Ÿž ๋ฌธ์ œ โ‘ : ๋ฐฑ์—”๋“œ๊ฐ€ DB์— ์—ฐ๊ฒฐ ๋ชป ํ•จ (Access denied for user 'root')

  • ์ฆ์ƒ: ๋ฐฑ์—”๋“œ๊ฐ€ ์ž๊พธ ์žฌ์‹œ์ž‘, DB ์ ‘์† ์‹คํŒจ.
  • ์ถ”์ : ๋ถ„๋ช… ์„ค์ •์—” alpha ์œ ์ €์ธ๋ฐ ๋Ÿฐํƒ€์ž„์€ root๋กœ ์ ‘์†. ํ˜ธ์ŠคํŠธ๋„ db๊ฐ€ ์•„๋‹ˆ๋ผ localhost๋กœ ํ’€๋ฆผ.
  • ์ง„์งœ ์›์ธ(์ค‘์š”!): application-local.properties(๋‚ด ๋กœ์ปฌ ์ „์šฉ ์„ค์ • โ€” ๋กœ์ปฌ DB๋Š” root/๋น„๋ฒˆ, ๊ฒŒ๋‹ค๊ฐ€ ์‹ค์ œ ์ด๋ฉ”์ผ๊นŒ์ง€ ์ ํ˜€์žˆ์Œ)๊ฐ€ Docker ์ด๋ฏธ์ง€ ์•ˆ์— ๊ฐ™์ด ๋“ค์–ด๊ฐ€ ๋ฒ„๋ ค์„œ, ์„œ๋ฒ„์šฉ ์„ค์ •์„ ๋ฎ์–ด์“ฐ๊ณ  ์žˆ์—ˆ์–ด์š”.
  • ํ•ด๊ฒฐ: .dockerignore์— ๊ทธ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•ด ์ด๋ฏธ์ง€์—์„œ ๋ฐฐ์ œ.
  • ๐Ÿ’ก ์ด๊ฑด ๋ณด์•ˆ ๋ฌธ์ œ์ด๊ธฐ๋„ ํ•ด์š”. ๋กœ์ปฌ ๋น„๋ฒˆยท์ด๋ฉ”์ผ์ด ๋ฐฐํฌ๋ฌผ์— ์ƒˆ์–ด ๋“ค์–ด๊ฐ€๋ฉด ์•ˆ ๋˜๋‹ˆ๊นŒ. ํ•œ ๋ฐฉ์— ๊ธฐ๋Šฅ+๋ณด์•ˆ ๋‘˜ ๋‹ค ํ•ด๊ฒฐ.

๐Ÿž ๋ฌธ์ œ โ‘ก: ํšŒ์›๊ฐ€์ž…์ด 500 ์—๋Ÿฌ (CORS)

  • ์›์ธ: "์•„๋ฌด ์ถœ์ฒ˜๋‚˜ ํ—ˆ์šฉ(*)" + "์ฟ ํ‚ค ์ธ์ฆ ํ—ˆ์šฉ"์„ ๋™์‹œ์— ์ผœ๋ฉด ์•ˆ ๋œ๋‹ค๊ณ  ๋ธŒ๋ผ์šฐ์ € ๊ทœ์น™์ด ๋ง‰์•„์š”.
  • ํ•ด๊ฒฐ: *์ผ ๋• allowedOriginPatterns ๋ฐฉ์‹์„ ์“ฐ๋„๋ก ์ฝ”๋“œ ์ˆ˜์ •. (์ฟ ํ‚ค๋Š” SameSite=Lax๋ผ CSRF๋Š” ๋”ฐ๋กœ ๋ฐฉ์–ด๋จ)

๐Ÿ’ก ๋ฐฐ์šด ์ : ๋กœ์ปฌ์—์„œ ๋จผ์ € ๋Œ๋ ค๋ณด๋ฉด ์ด๋Ÿฐ ๋ฒ„๊ทธ๋ฅผ ์„œ๋ฒ„ ์˜ฌ๋ฆฌ๊ธฐ ์ „์— ์žก์„ ์ˆ˜ ์žˆ์–ด์š”. "๋กœ์ปฌ ๊ฒ€์ฆ โ†’ ์„œ๋ฒ„ ๋ฐฐํฌ" ์ˆœ์„œ๊ฐ€ ์ค‘์š”.


3๏ธโƒฃ AWS EC2์— ์˜ฌ๋ฆฌ๊ธฐ โ€” "๋‚จ์˜ ์ปดํ“จํ„ฐ(ํด๋ผ์šฐ๋“œ)"์— ์ ‘์†

EC2 = AWS๊ฐ€ ๋นŒ๋ ค์ฃผ๋Š” 24์‹œ๊ฐ„ ์ผœ์ง„ ์ปดํ“จํ„ฐ(์„œ๋ฒ„).

SSH โ€” ๋‚ด PC์—์„œ ๊ทธ ์„œ๋ฒ„๋กœ ์›๊ฒฉ ์ ‘์†

ssh -i "C:\...\who-a.pem" ec2-user@<์„œ๋ฒ„IP>
  • who-a.pem = ์„œ๋ฒ„ ๋ฌธ ์—ฌ๋Š” ์—ด์‡  ํŒŒ์ผ(์ธ์Šคํ„ด์Šค ๋งŒ๋“ค ๋•Œ ๋ฐ›์Œ)
  • ec2-user = ์„œ๋ฒ„์˜ ๋กœ๊ทธ์ธ ์ด๋ฆ„(Amazon Linux ๊ธฐ๋ณธ๊ฐ’)
  • ์ ‘์†๋˜๋ฉด ํ”„๋กฌํ”„ํŠธ๊ฐ€ [ec2-user@...]$ ๋กœ ๋ฐ”๋€œ = ์ด์ œ๋ถ€ํ„ฐ ๋ช…๋ น์€ "์„œ๋ฒ„ ์•ˆ์—์„œ" ์‹คํ–‰

๐Ÿž ๋งŒ๋‚œ ๊ฒƒ: ์œˆ๋„์šฐ์—์„œ .pem ๊ถŒํ•œ์ด ๋„ˆ๋ฌด ์—ด๋ ค์„œ SSH๊ฐ€ ๊ฑฐ๋ถ€ โ†’ icacls๋กœ "๋‚˜๋งŒ ์ฝ๊ธฐ"๋กœ ์ž ๊ทธ๋‹ˆ ํ•ด๊ฒฐ.

์„œ๋ฒ„์—์„œ ํ•œ ์ผ (์ˆœ์„œ๋Œ€๋กœ)

  1. ์˜› ์„œ๋น„์Šค ์ •์ง€ (ํฌํŠธ 80 ๋น„์šฐ๊ธฐ) + ์Šค์™‘ ๋ฉ”๋ชจ๋ฆฌ (๋นŒ๋“œ ์ค‘ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ๋ฐฉ์ง€)
  2. Docker ์„ค์น˜
  3. ์ฝ”๋“œ ๋ฐ›๊ธฐ (git clone) โ€” ๋น„๊ณต๊ฐœ repo๋ผ GitHub ํ† ํฐ(PAT) ํ•„์š”
  4. .env ๋งŒ๋“ค๊ธฐ โ€” ๋น„๋ฐ€ํ‚ค๋“ค์„ openssl rand๋กœ ์ž๋™ ์ƒ์„ฑ
  5. docker compose up -d --build โ€” ๋„์‹œ๋ฝ 4๊ฐœ ๋นŒ๋“œ+๊ธฐ๋™

๐Ÿž ๋งŒ๋‚œ ๊ฒƒ: compose build requires buildx 0.17+ โ†’ ์„œ๋ฒ„์˜ ๋นŒ๋“œ ๋„๊ตฌ(buildx)๊ฐ€ ๊ตฌ๋ฒ„์ „ โ†’ ์ตœ์‹  buildx ๋ฐ›์•„ ํ•ด๊ฒฐ.

โœ… ๊ฒฐ๊ณผ: http://<์„œ๋ฒ„IP> ๋กœ ์‚ฌ์ดํŠธ๊ฐ€ ๋–ด์–ด์š”!


4๏ธโƒฃ "๋กœ๊ทธ์ธ์ด ์•ˆ ๋ผ!" โ€” HTTP(๋น„๋ณด์•ˆ ์ฃผ์†Œ) ํŠน์œ ์˜ ํ•จ์ • 2๊ฐœ

์‚ฌ์ดํŠธ๋Š” ๋–ด๋Š”๋ฐ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๊ฐ€ ํฌ๋ž˜์‹œ. ์›์ธ์ด http://(๋ณด์•ˆ ์•ˆ ๋œ ์ฃผ์†Œ) ๋ผ์„œ ์ƒ๊ธฐ๋Š” ๊ฒƒ๋“ค์ด์—ˆ์–ด์š”.

๐Ÿž ํ•จ์ • โ‘ : crypto.randomUUID is not a function

  • ์ด ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋Šฅ์€ HTTPS๋‚˜ localhost์—์„œ๋งŒ ์กด์žฌํ•ด์š”. http://๊ณต์ธIP์—์„  ์—†์–ด์„œ ํ˜ธ์ถœ ์ฆ‰์‹œ ํŽ˜์ด์ง€๊ฐ€ ํ„ฐ์ง.
  • ํ•ด๊ฒฐ: ์—†์œผ๋ฉด ๋Œ€์ฒด๋กœ ์ฑ„์›Œ์ฃผ๋Š” ํด๋ฆฌํ•„์„ ์ง„์ž…์ (main.jsx)์— ์ถ”๊ฐ€.

๐Ÿž ํ•จ์ • โ‘ก: Missing required parameter client_id (๊ตฌ๊ธ€)

  • ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ ํ‚ค๊ฐ€ ๋นŒ๋“œ์— ์—†์–ด์„œ, ๊ตฌ๊ธ€ OAuth ์ดˆ๊ธฐํ™”๊ฐ€ ๋ Œ๋” ์ค‘ ํ„ฐ์ง.
  • ํ•ด๊ฒฐ: ํ‚ค ์—†์œผ๋ฉด ํฌ๋ž˜์‹œ๋งŒ ๋ง‰๊ณ (๋”๋ฏธ๊ฐ’) ์†Œ์…œ ๋ฒ„ํŠผ์€ ์ˆจ๊น€ โ†’ ์ด๋ฉ”์ผ ๊ฐ€์ž…๋งŒ ๊น”๋”ํžˆ ๋…ธ์ถœ.

๐Ÿ’ก ๋ฐฐ์šด ์ : "๋กœ์ปฌ(localhost)์—์„  ๋˜๋Š”๋ฐ ๋ฐฐํฌ์—์„  ์•ˆ ๋˜๋Š”" ๊ฑด ๋ณดํ†ต HTTPSยทํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ฐจ์ด ๋•Œ๋ฌธ. ์ด๊ฒŒ ๋ฐฐํฌ์˜ ๋‹จ๊ณจ ํ•จ์ •์ด์—์š”.

โœ… ์—ฌ๊ธฐ๊นŒ์ง€: ์ด๋ฉ”์ผ ํšŒ์›๊ฐ€์ž…ยท๋กœ๊ทธ์ธ ์ •์ƒ ์ž‘๋™!


5๏ธโƒฃ ๋„๋ฉ”์ธ + HTTPS โ€” ์ง„์งœ ์ฃผ์†Œ + ์ž๋ฌผ์‡ ๐Ÿ”’

http://์ˆซ์žIP๋Š” ๋ชป์ƒ๊ธฐ๊ณ , ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ๋„ ์•ˆ ๋ฐ›์•„์ค˜์š”(๊ตฌ๊ธ€์€ https://๋„๋ฉ”์ธ๋งŒ ํ—ˆ์šฉ). ๊ทธ๋ž˜์„œ:

โ‘  Elastic IP โ€” ์„œ๋ฒ„ IP๋ฅผ "์˜๊ตฌ ๊ณ ์ •"

  • EC2์˜ IP๋Š” ์„œ๋ฒ„๋ฅผ ๊ป๋‹ค ์ผœ๋ฉด ๋ฐ”๋€Œ์–ด์š”. ๋„๋ฉ”์ธ์„ ๋ถ™์—ฌ๋„ ์žฌ์‹œ์ž‘ํ•˜๋ฉด ๊นจ์ง.
  • AWS์—์„œ Elastic IP(๊ณ ์ • IP) ๋ฅผ ํ• ๋‹น โ†’ ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐ โ†’ IP๊ฐ€ ์˜๊ตฌ ๊ณ ์ •.

โ‘ก ๋„๋ฉ”์ธ ๊ตฌ๋งค + DNS ์—ฐ๊ฒฐ (Cloudflare)

  • quant-alphahelix.com ๊ตฌ๋งค โ†’ Cloudflare์— ๋“ฑ๋ก
  • DNS A ๋ ˆ์ฝ”๋“œ: ๋„๋ฉ”์ธ โ†’ Elastic IP (์ด๊ฒŒ "์ „ํ™”๋ฒˆํ˜ธ๋ถ€": ๋„๋ฉ”์ธ ์ž…๋ ฅํ•˜๋ฉด ์ด IP๋กœ ๋ณด๋‚ด์ค˜)
  • ํ”„๋ก์‹œ ON(์ฃผํ™ฉ ๊ตฌ๋ฆ„): ํŠธ๋ž˜ํ”ฝ์ด Cloudflare๋ฅผ ๊ฑฐ์ณ๊ฐ โ†’ ๋ณด์•ˆยท์บ์‹ฑยท๋ฌด๋ฃŒ HTTPS ์ œ๊ณต

โ‘ข HTTPS ์ผœ๊ธฐ (Cloudflare Flexible)

  • Cloudflare SSL/TLS ๋ชจ๋“œ๋ฅผ Flexible๋กœ.
  • โ†’ ๋ฐฉ๋ฌธ์žโ†”Cloudflare๋Š” HTTPS(์ž๋ฌผ์‡ ), Cloudflareโ†”์šฐ๋ฆฌ์„œ๋ฒ„๋Š” HTTP. ์„œ๋ฒ„์— ์ธ์ฆ์„œ ์„ค์น˜ 0์œผ๋กœ https ์™„์„ฑ.

๐Ÿ’ก ์šฉ์–ด: DNS = ๋„๋ฉ”์ธโ†”IP ์ „ํ™”๋ฒˆํ˜ธ๋ถ€ ยท SSL/TLS = ํ†ต์‹  ์•”ํ˜ธํ™”(์ž๋ฌผ์‡ ) ยท ํ”„๋ก์‹œ = ์ค‘๊ฐ„์—์„œ ๋Œ€์‹  ๋ฐ›์•„์ฃผ๋Š” ๋ฌธ์ง€๊ธฐ.

โœ… https://quant-alphahelix.com ์œผ๋กœ ์ž๋ฌผ์‡ ๐Ÿ”’ ๋‹ฌ๊ณ  ์ ‘์†!


6๏ธโƒฃ ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ ์ผœ๊ธฐ

์ด์ œ https ๋„๋ฉ”์ธ์ด ์ƒ๊ฒผ์œผ๋‹ˆ ๊ตฌ๊ธ€์ด ๋ฐ›์•„์ค˜์š”.

  1. ๊ตฌ๊ธ€ ํด๋ผ์šฐ๋“œ ์ฝ˜์†” โ†’ OAuth ๋™์˜ ํ™”๋ฉด + OAuth ํด๋ผ์ด์–ธํŠธ ID ๋ฐœ๊ธ‰
  2. ์Šน์ธ๋œ JavaScript ์›๋ณธ์— https://quant-alphahelix.com ๋“ฑ๋ก (โ† "์ด ์ฃผ์†Œ์—์„œ ์˜ค๋Š” ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ๋งŒ ํ—ˆ๋ฝ")
  3. ๋ฐœ๊ธ‰๋œ ํด๋ผ์ด์–ธํŠธ ID(...apps.googleusercontent.com)๋ฅผ ๋นŒ๋“œ์— ์ฃผ์ž…
    • frontend Dockerfile์ด VITE_GOOGLE_CLIENT_ID ๋นŒ๋“œ ์ธ์ž๋ฅผ ๋ฐ›๊ฒŒ ์ˆ˜์ • โ†’ .env์— ํ‚ค ๋„ฃ๊ณ  ์žฌ๋นŒ๋“œ
  4. โ†’ ๊ตฌ๊ธ€ ๋ฒ„ํŠผ์ด ๋‚˜ํƒ€๋‚˜๊ณ , ์ง„์งœ ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ ์ž‘๋™!

๐Ÿ’ก OAuth = "๊ตฌ๊ธ€ํ•œํ…Œ ๋กœ๊ทธ์ธ ๋Œ€์‹  ์‹œํ‚ค๊ณ , ๊ตฌ๊ธ€์ด '์ด ์‚ฌ๋žŒ ๋งž์•„' ํ™•์ธํ•ด์ฃผ๋Š”" ๋ฐฉ์‹. ํ‚ค(client_id)๋กœ ์šฐ๋ฆฌ ์•ฑ์„ ์‹๋ณ„ํ•ด์š”.


7๏ธโƒฃ CI/CD ์ž๋™๋ฐฐํฌ โ€” git push ํ•˜๋‚˜๋ฉด ๋ ๐Ÿค–

๋งค๋ฒˆ ์„œ๋ฒ„ ๋“ค์–ด๊ฐ€์„œ git pull + ๋นŒ๋“œ ํ•˜๋Š” ์†์ž‘์—…์„ ๋กœ๋ด‡์ด ๋Œ€์‹ :

  • CI/CD = ์ฝ”๋“œ ์˜ฌ๋ฆฌ๋ฉด ์ž๋™์œผ๋กœ ๋นŒ๋“œยท๊ฒ€์‚ฌยท๋ฐฐํฌ๊นŒ์ง€ ํ•ด์ฃผ๋Š” ์ปจ๋ฒ ์ด์–ด๋ฒจํŠธ
  • GitHub Actions = GitHub์ด ๊ณต์งœ๋กœ ์ฃผ๋Š” ๊ทธ ๋กœ๋ด‡. .github/workflows/deploy.yml์— "ํ•  ์ผ"์„ ์ ์–ด๋‘ 
  • ์šฐ๋ฆฌ ๋กœ๋ด‡์˜ ์ผ: "flow_finish์— push ๋“ค์–ด์˜ค๋ฉด โ†’ ์ž„์‹œ ์ปดํ“จํ„ฐ๊ฐ€ EC2์— SSH ์ ‘์† โ†’ git pull + docker ์žฌ๋นŒ๋“œ"
  • ํ•„์š”ํ•œ ๊ฒƒ: GitHub Secrets 3๊ฐœ (EC2_HOSTยทEC2_USERยทEC2_SSH_KEY)์— ์„œ๋ฒ„ ์ ‘์†์ •๋ณด ๋“ฑ๋ก

โœ… ์ด์ œ git push ํ•˜๋‚˜๋ฉด ์„œ๋ฒ„๊ฐ€ ์•Œ์•„์„œ ์ตœ์‹ ํ™”๋ผ์š”.


๐Ÿ“š ํ•ต์‹ฌ ์šฉ์–ด ์‚ฌ์ „ (ํ•œ ์ค„ ์ •๋ฆฌ)

์šฉ์–ด ํ•œ ์ค„ ์„ค๋ช…
Docker ํ”„๋กœ๊ทธ๋žจ+ํ™˜๊ฒฝ์„ ๋„์‹œ๋ฝ(์ด๋ฏธ์ง€)์— ๋‹ด์•„ ์–ด๋””์„œ๋‚˜ ๋˜‘๊ฐ™์ด ์‹คํ–‰
์ด๋ฏธ์ง€ / ์ปจํ…Œ์ด๋„ˆ ๋„์‹œ๋ฝ / ๋ฐ์›Œ ๋จน๋Š” ์ค‘(์‹คํ–‰ ์ƒํƒœ)
๋ณผ๋ฅจ(Volume) ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ฃฝ์–ด๋„ ๋ฐ์ดํ„ฐ(DB ๋“ฑ)๋ฅผ ๋ณด์กดํ•˜๋Š” ์ €์žฅ๊ณต๊ฐ„
EC2 AWS๊ฐ€ ๋นŒ๋ ค์ฃผ๋Š” 24์‹œ๊ฐ„ ์„œ๋ฒ„
Elastic IP ์žฌ์‹œ์ž‘ํ•ด๋„ ์•ˆ ๋ฐ”๋€Œ๋Š” ๊ณ ์ • IP
SSH ๋‚ด PC์—์„œ ์„œ๋ฒ„๋กœ ์›๊ฒฉ ์ ‘์†(์—ด์‡ =.pem)
DNS / A๋ ˆ์ฝ”๋“œ ๋„๋ฉ”์ธโ†”IP ์ „ํ™”๋ฒˆํ˜ธ๋ถ€
HTTPS / SSL ํ†ต์‹  ์•”ํ˜ธํ™”(๋ธŒ๋ผ์šฐ์ € ์ž๋ฌผ์‡ ๐Ÿ”’)
ํ”„๋ก์‹œ(Cloudflare) ํŠธ๋ž˜ํ”ฝ์„ ์ค‘๊ฐ„์—์„œ ๋ฐ›์•„ ๋ณด์•ˆยทHTTPSยท์บ์‹ฑ ์ œ๊ณต
OAuth ๊ตฌ๊ธ€/๊นƒํ—™ ๊ฐ™์€ ์™ธ๋ถ€ ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•˜๋Š” ๋ฐฉ์‹
PAT GitHub ๋น„๊ณต๊ฐœ ์ ‘๊ทผ์šฉ ํ† ํฐ(๋น„๋ฒˆ ๋Œ€์šฉ)
CI/CD pushํ•˜๋ฉด ์ž๋™ ๋นŒ๋“œยท๋ฐฐํฌํ•ด์ฃผ๋Š” ์ž๋™ํ™”
๋ฒ„์Šคํ„ฐ๋ธ”(t3) ํ‰์†Œ ์ €์ „๋ ฅ, ์ž ๊น๋งŒ ๊ณ ์„ฑ๋Šฅ. ์˜ค๋ž˜ ๋ฌด๊ฑฐ์šฐ๋ฉด ๋А๋ ค์ง(ํฌ๋ ˆ๋”ง ์†Œ์ง„)

๐ŸŽฏ ํ•œ ์ค„ ํšŒ๊ณ 

์ฒ˜์Œ์—” "๋กœ์ปฌ์—์„œ ๋˜๋Š” ๊ฑธ ๊ทธ๋ƒฅ ์˜ฌ๋ฆฌ๋ฉด ๋˜๊ฒ ์ง€" ์˜€์ง€๋งŒ, ์‹ค์ œ๋ก 
ํ™˜๊ฒฝ ์ฐจ์ด(Docker) โ†’ ์‹œํฌ๋ฆฟ ๋ˆ„์ถœ(.dockerignore) โ†’ HTTP ํ•จ์ •(cryptoยทOAuth) โ†’ ๊ณ ์ •IPยท๋„๋ฉ”์ธยทHTTPS โ†’ ์™ธ๋ถ€๋กœ๊ทธ์ธ โ†’ ์ž๋™ํ™”
์ˆœ์„œ๋กœ ํ•˜๋‚˜์”ฉ ํ’€์–ด์•ผ ํ–ˆ์–ด์š”. ๊ฐ ๋‹จ๊ณ„๋Š” "์™œ ํ•„์š”ํ•œ๊ฐ€"๋ฅผ ์•Œ๋ฉด ์•ˆ ๋ฌด์„œ์›Œ์š”. ๋ง‰ํžˆ๋Š” ์—๋Ÿฌ๋Š” ๋Œ€๋ถ€๋ถ„ ๋กœ๊ทธ ํ•œ ์ค„์— ๋‹ต์ด ์žˆ๊ณ ์š”.

์ด์ œ ์šฐ๋ฆฌ ์„œ๋น„์Šค๋Š” ์ง„์งœ ์ธํ„ฐ๋„ท์— ์‚ด์•„์žˆ์Šต๋‹ˆ๋‹ค. ๐ŸŒโœจ

'๐Ÿ‘ฉโ€๐Ÿ’ปDeveloper ๐Ÿ’ก' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์•Œ๋žŒ ์‹œ์Šคํ…œ ์„ค๊ณ„  (0) 2026.06.20
ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ ์„ค๊ณ„  (0) 2026.06.20
ah/backend  (0) 2026.06.02
ํ”„๋กœ์ ํŠธ2 ์žฌ๋Šฅ ๋ฐ ํ”„๋ฆฌ๋žœ์„œ ๋งค์นญ ํ”Œ๋žซํผ ๊ธฐํš๋ถ€ํ„ฐ ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ  (0) 2026.03.08
ํ˜„์‹ค์ ์œผ๋กœ ์ด์ง ๊ฐ€๋Šฅํ•ด.  (0) 2026.02.02
'๐Ÿ‘ฉ‍๐Ÿ’ปDeveloper ๐Ÿ’ก' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ์•Œ๋žŒ ์‹œ์Šคํ…œ ์„ค๊ณ„
  • ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ ์„ค๊ณ„
  • ah/backend
  • ํ”„๋กœ์ ํŠธ2 ์žฌ๋Šฅ ๋ฐ ํ”„๋ฆฌ๋žœ์„œ ๋งค์นญ ํ”Œ๋žซํผ ๊ธฐํš๋ถ€ํ„ฐ ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ
fulfilling_enjoyable yeona๐Ÿถ๐Ÿฆซ
fulfilling_enjoyable yeona๐Ÿถ๐Ÿฆซ
Quantitative Research Engineer & Quantitative Strategist | Multimodal Alpha (Price/News/On-chain) | Regime-aware, Cost-included Backtests | Remote-first ์—ฐ๋ฆฌ์˜ ๋‚œ ๋จธ๋‹ˆ๐Ÿ’ฐ๊ฐ€ ์ข‹์•„๐Ÿ’™๐Ÿฅณ ์ถฉ๋งŒํ•˜๊ฒŒ ๊ทธ๋ฆฌ๊ณ  ์ฆ๊ฒ๊ฒŒ ๐Ÿถ ๐Ÿฆซ ๐Ÿ’›
  • Elina Yeon Lee
    Product & AI Engineer
    AboutMe ๋ชฉํ‘œ GitHub _yeonlee___ Elina_Eden
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๐Ÿค ๐Ÿ˜Ž ์•ˆ๋…•โ˜ƒ๏ธ๐Ÿ’ž (125)
      • ๐Ÿ’™ ๐Ÿค Diary๐Ÿฐ ๐ŸŽ€ ๐Ÿงธ (37)
        • ๐Ÿ—ฝ๋ฏธ๊ตญ DS & CS ๋ฐ•์‚ฌ ์ด๋ฏผ๐Ÿ‹ (26)
        • ๐Ÿ›ซ์—ฌํ–‰ ์ด์•ผ๊ธฐ (1)
        • ๐Ÿ“’์˜ค๋Š˜ ์ด์•ผ๊ธฐ๐Ÿ’’๐Ÿซง๐ŸŒค๏ธ (6)
        • ๐Ÿฐโ˜˜๏ธ๐Ÿป‍โ„๏ธ๊ฐ•์•„์ง€ ์œก์•„ (0)
      • ๐ŸฌActuary๐Ÿคธ‍โ™€๏ธโœจ (1)
      • ๐Ÿ‘ฉ‍๐Ÿ’ปDeveloper ๐Ÿ’ก (65)
        • โš’๏ธ์‚ฝ์งˆ ๊ธฐ๋ก๊ธฐ๐Ÿ“[TIL] (6)
        • ๐Ÿ–ผ๏ธFront-end๐ŸŽจ (3)
        • ๐Ÿ’พBack-end๐Ÿ•Š๏ธ (29)
        • ๐Ÿคน‍โ™€๏ธAlgorithm & Coding Test๐Ÿ’ƒ (9)
        • ๐Ÿ—ปData๐Ÿ”๏ธ (1)
        • ๐Ÿ“Project๐Ÿ• (9)
      • ๐Ÿ’ฐ๊ฒฝ์ œ์  ์ž์œ  ๋‹ฌ์„ฑโœŒ๏ธ๐ŸคŸ (9)
        • ๐Ÿ“ŠQuant๐Ÿ“ˆ๐Ÿ‘ (5)
        • ๐Ÿฐ๐Ÿ›’๐Ÿฅ‡ (1)
        • ๐Ÿ’Ž ํˆฌ์ž ์‹ค์ „ ๊ฒฝํ—˜ โ˜บ๏ธ (1)
        • ๐Ÿ… Bitcoin 15๊ฐœ ๋ชจ์œผ๊ธฐ : 2040๋…„ 200์–ต+ (0)
        • ๐ŸŒŽ๋ฏธ๊ตญ ์‹œ์žฅ๐Ÿฆ (0)
      • ๐ŸŒค๏ธCloud๐ŸŒค๏ธโ˜๏ธ (2)
        • AWS (1)
        • Kubernetes (0)
        • Google Cloud Professional (0)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • git
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ์‹œ์นด๊ณ 
    ๋ฏธ๊ตญ๋น„์ž
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    ์‹œ์นด๊ณ ๋Œ€ํ•™๊ต
    CS
    ๋ฏธ๊ตญ์œ ํ•™
    AWS
    ๊ฐ€์„ํ•™๊ธฐ
    Java
    ์‹œ์นด๊ณ ๋Œ€
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.5
fulfilling_enjoyable yeona๐Ÿถ๐Ÿฆซ
AWS ๋ฐฐํฌ A-Z ๋ฐฐํฌ ์—ฌ์ • — ์ฒ˜์Œ ๋ฐฐ์šฐ๋Š” ์‚ฌ๋žŒ์„ ์œ„ํ•œ ์ „์ฒด ์ •๋ฆฌ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”