πŸš€λ‹Ήμ‹ μ΄ μ•Œμ•„μ•Ό ν•  API 보호λ₯Ό μœ„ν•œ 7κ°€μ§€ 방법

λ°œν–‰: (2025λ…„ 12μ›” 24일 μ˜€ν›„ 04:36 GMT+9)
10 min read
원문: Dev.to

Source: Dev.to

λ²ˆμ—­ν•˜λ €λŠ” 전체 ν…μŠ€νŠΈ(λ§ˆν¬λ‹€μš΄ ν˜•μ‹ 포함)λ₯Ό μ œκ³΅ν•΄ μ£Όμ‹œλ©΄, μš”μ²­ν•˜μ‹  λŒ€λ‘œ ν•œκ΅­μ–΄λ‘œ λ²ˆμ—­ν•΄ λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€. μ½”λ“œ 블둝과 URL은 κ·ΈλŒ€λ‘œ μœ μ§€ν•˜κ³ , λ‚˜λ¨Έμ§€ λ‚΄μš©λ§Œ λ²ˆμ—­ν•΄ λ“œλ¦½λ‹ˆλ‹€.

1️⃣ Rate Limiting

λ¬΄μ—‡μΈκ°€μš”? API에 속도 μ œν•œμ„ μ μš©ν•©λ‹ˆλ‹€.
μ–΄λ–»κ²Œ μž‘λ™ν•˜λ‚˜μš”? νŠΉμ • μ‹œκ°„ λ™μ•ˆ μ‚¬μš©μžκ°€ X개의 μš”μ²­λ§Œ ν•  수 μžˆλ„λ‘ μ œν•œν•©λ‹ˆλ‹€.
μ–΄λ–»κ²Œ κ΅¬ν˜„ν•˜λ‚˜μš”? 미듀웨어, NGINX와 같은 ν”„λ‘μ‹œ, λ˜λŠ” IPλ‚˜ 토큰별 μš”μ²­ 수λ₯Ό μ œμ–΄ν•˜λŠ” 라이브러리λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
무엇을 λ°©μ§€ν•˜λ‚˜μš”? 무차별 λŒ€μž… κ³΅κ²©μ΄λ‚˜ μŠ€νŒΈμ„ λ°©μ§€ν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ: μ„œλΉ„μŠ€κ°€ μžˆλ‹€κ³  κ°€μ •ν•˜κ³ , μ‚¬μš©μžκ°€ μ„œλ²„λ₯Ό ν¬ν™”μ‹œν‚€κΈ° μœ„ν•΄ μ§€μ†μ μœΌλ‘œ μš”μ²­μ„ 보낸닀고 상상해 λ³΄μ„Έμš”. Rate Limiting을 κ΅¬ν˜„ν•˜μ§€ μ•ŠμœΌλ©΄, μ‚¬μš©μžκ°€ μ‹œμŠ€ν…œμ˜ λͺ¨λ“  μžμ›μ„ μ†ŒλΉ„ν•˜μ—¬ λ‹€λ₯Έ μ‚¬μš©μžμ—κ²Œ 영ν–₯을 μ£Όκ³  μ„œλΉ„μŠ€ μž₯μ• λ₯Ό μΌμœΌν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

2️⃣ CORS (Cross-Origin Resource Sharing)

λ¬΄μ—‡μΈκ°€μš”? APIλ₯Ό μ‚¬μš©ν•  수 μžˆλŠ” μ‚¬μ΄νŠΈλ₯Ό κ²°μ •ν•˜λŠ” κΆŒν•œ μ‹œμŠ€ν…œμž…λ‹ˆλ‹€.
μ–΄λ–»κ²Œ μž‘λ™ν•˜λ‚˜μš”? β€œμ‹ λ’°ν•  수 μžˆλŠ” λ„λ©”μΈβ€λ§Œ ν—ˆμš©ν•©λ‹ˆλ‹€.
μ–΄λ–»κ²Œ κ΅¬ν˜„ν•˜λ‚˜μš”? μ„œλ²„ λ˜λŠ” Express, Django, .NET 같은 ν”„λ ˆμž„μ›Œν¬μ—μ„œ κ·œμΉ™μ„ μ„€μ •ν•˜μ—¬ ν—ˆμš©λœ 좜처λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.
무엇을 λ°©μ§€ν•˜λ‚˜μš”? μ–΄λŠ μ›Ήμ‚¬μ΄νŠΈμ—μ„œλ“  λˆ„κ΅°κ°€κ°€ λ‹Ήμ‹ μ˜ 데이터λ₯Ό ν›”μΉ˜λ €λŠ” 것을 λ°©μ§€ν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ: λ―Όκ°ν•œ 정보에 μ ‘κ·Όν•  수 μžˆλŠ” μ„œλΉ„μŠ€λ₯Ό κ°€μ§€κ³  있고, λˆ„κ΅¬λ‚˜ μ ‘κ·Όν•΄μ„œλŠ” μ•ˆ λœλ‹€κ³  상상해 λ³΄μ„Έμš”. CORSλ₯Ό μ„€μ •ν•˜λ©΄ 정보λ₯Ό μ ‘κ·Όν•  수 μžˆλŠ” API에 λˆ„κ°€ μ ‘κ·Όν•  수 μžˆλŠ”μ§€ λͺ©λ‘μ„ λ§Œλ“œλŠ” κ²ƒμž…λ‹ˆλ‹€.

3️⃣ SQL 및 NoSQL μΈμ μ…˜

무엇인가? κ³΅κ²©μžκ°€ λ°μ΄ν„°λ² μ΄μŠ€ 쿼리에 μ•…μ„± μ½”λ“œλ₯Ό μ‚½μž…ν•  λ•Œ.
μ–΄λ–»κ²Œ μž‘λ™ν•˜λ‚˜μš”? κ²€μ¦λ˜μ§€ μ•Šμ€ μž…λ ₯을 μ΄μš©ν•΄ 정보λ₯Ό μ‘°μž‘ν•˜κ±°λ‚˜, νƒˆμ·¨ν•˜κ±°λ‚˜, μ‚­μ œν•©λ‹ˆλ‹€.
μ–΄λ–»κ²Œ κ΅¬ν˜„ν•˜λ‚˜μš”? νŒŒλΌλ―Έν„°ν™”λœ 쿼리, ORM, 그리고 항상 μ‚¬μš©μž μž…λ ₯을 κ²€μ¦ν•¨μœΌλ‘œμ¨ κ΅¬ν˜„ν•©λ‹ˆλ‹€.
무엇을 λ°©μ§€ν•˜λ‚˜μš”? 정보 νƒˆμ·¨ 및 λŒ€κ·œλͺ¨ 데이터 μ‚­μ œλ₯Ό λ°©μ§€ν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ: λ„μ„œκ΄€μ—μ„œ 책을 μš”μ²­ν•˜κΈ° μœ„ν•΄ 양식을 μž‘μ„±ν•˜λŠ”λ°, λˆ„κ΅°κ°€κ°€ β€œHarry Potter” λŒ€μ‹  β€œHarry Potter와 μ°½κ³  μ—΄μ‡ λ₯Ό μ£Όμ„Έμš”β€λΌκ³  μ λŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€.

4️⃣ λ°©ν™”λ²½

무엇인가? 쒋은 νŠΈλž˜ν”½κ³Ό λ‚˜μœ νŠΈλž˜ν”½μ„ κ΅¬λΆ„ν•˜λŠ” λ””μ§€ν„Έ μž₯λ²½μž…λ‹ˆλ‹€.
μ–΄λ–»κ²Œ μž‘λ™ν•˜λ‚˜μš”? μš”μ²­μ„ ν•„ν„°λ§ν•˜κ³  μ˜μ‹¬μŠ€λŸ¬μš΄ μš”μ²­μ„ μ°¨λ‹¨ν•©λ‹ˆλ‹€.
μ–΄λ–»κ²Œ κ΅¬ν˜„ν•˜λ‚˜μš”? WAF(μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ°©ν™”λ²½)λ₯Ό μ„€μ •ν•˜κ±°λ‚˜ 인프라(AWS, Azure, GCP)의 λ°©ν™”λ²½ κ·œμΉ™μ„ κ΅¬μ„±ν•©λ‹ˆλ‹€.
무엇을 λ°©μ§€ν•˜λ‚˜μš”? 직접적인 곡격 및 무단 접근을 λ°©μ§€ν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ: 건물 μž…κ΅¬μ˜ 경비와 κ°™μŠ΅λ‹ˆλ‹€: 주민은 ν†΅κ³Όμ‹œν‚€κ³  λ‹€λ₯Έ λͺ¨λ“  μ‚¬λžŒμ€ 접근을 κ±°λΆ€ν•©λ‹ˆλ‹€.

5️⃣ VPNs (Virtual Private Networks)

무엇인가? μ˜¨λΌμΈμ—μ„œ λ‹Ήμ‹ μ˜ 신원을 μˆ¨κΈ°λŠ” μ•ˆμ „ν•˜κ³  μ•”ν˜Έν™”λœ μ—°κ²°.
μ–΄λ–»κ²Œ μž‘λ™ν•˜λ‚˜μš”? νŠΈλž˜ν”½μ„ μ•”ν˜Έν™”λœ 터널을 톡해 μ „λ‹¬ν•˜κ³  IPλ₯Ό λ³€κ²½ν•©λ‹ˆλ‹€.
μ–΄λ–»κ²Œ κ΅¬ν˜„ν•˜λ‚˜μš”? μ—°κ²°λœ μ‚¬λžŒλ§Œ API에 μ ‘κ·Όν•  수 μžˆλ„λ‘ κΈ°μ—… VPN을 μ„€μ •ν•©λ‹ˆλ‹€.
무엇을 λ°©μ§€ν•˜λ‚˜μš”? 곡용 λ„€νŠΈμ›Œν¬μ—μ„œμ˜ 데이터 λ„λ‚œ 및 μœ„μΉ˜ 좔적을 λ°©μ§€ν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ: λ‹Ήμ‹ μ˜ APIκ°€ κΈ°μ—… λ„€νŠΈμ›Œν¬μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯ν•΄μ•Ό ν•œλ‹€κ³  상상해 λ³΄μ„Έμš”. μ§‘μ΄λ‚˜ 곡용 λ„€νŠΈμ›Œν¬μ—μ„œ μ—°κ²°ν•  λ•Œ λ¨Όμ € VPN 연결을 μ„€μ •ν•©λ‹ˆλ‹€. VPN은 μ•”ν˜Έν™”λœ 터널을 μƒμ„±ν•˜μ—¬ λ‹Ήμ‹ μ˜ μž₯μΉ˜κ°€ 사무싀 λ„€νŠΈμ›Œν¬ 내뢀에 μžˆλŠ” κ²ƒμ²˜λŸΌ λ™μž‘ν•˜κ²Œ ν•˜λ©°, 인터넷에 λ…ΈμΆœμ‹œν‚€μ§€ μ•Šκ³  μ•ˆμ „ν•˜κ²Œ API에 μ ‘κ·Όν•  수 있게 ν•©λ‹ˆλ‹€.

6️⃣ CSRF (Cross-Site Request Forgery)

ΒΏQuΓ© es? λ­μΈκ°€μš”? μ‚¬μš©μžλ₯Ό 속여 λͺ¨λ₯΄κ²Œ 행동을 μ‹€ν–‰ν•˜κ²Œ ν•˜λŠ” κ³΅κ²©μž…λ‹ˆλ‹€.
ΒΏCΓ³mo funciona? μ–΄λ–»κ²Œ μž‘λ™ν•˜λ‚˜μš”? κ³΅κ²©μžλŠ” μ‚¬μš©μžμ˜ λΈŒλΌμš°μ €κ°€ μžμ‹ μ˜ μ΄λ¦„μœΌλ‘œ μœ„μ‘°λœ μš”μ²­μ„ 보내도둝 ν•©λ‹ˆλ‹€.
ΒΏCΓ³mo lo implemento? μ–΄λ–»κ²Œ κ΅¬ν˜„ν•˜λ‚˜μš”? CSRF 토큰, 맞좀 헀더 및 μ„œλ²„ μΈ‘ 검증을 μ‚¬μš©ν•©λ‹ˆλ‹€.
ΒΏQuΓ© previene? 무엇을 λ°©μ§€ν•˜λ‚˜μš”? μ‚¬μš©μžμ˜ λ™μ˜ 없이 μ΄μ²΄λ‚˜ λΉ„λ°€λ²ˆν˜Έ λ³€κ²½κ³Ό 같은 무단 행동을 λ°©μ§€ν•©λ‹ˆλ‹€.

Ejemplo: μ˜ˆμ‹œ: λΈŒλΌμš°μ € νƒ­μ—μ„œ 은행 μ‹œμŠ€ν…œμ— λ‘œκ·ΈμΈν•œ μƒνƒœλΌκ³  상상해 λ³΄μ„Έμš”. κ·Έ ν›„ μ•…μ„± νŽ˜μ΄μ§€λ₯Ό λ°©λ¬Έν•˜λ©΄, λˆˆμΉ˜μ±„μ§€ λͺ»ν•œ 사이에 ν™œμ„± μ„Έμ…˜μ„ μ΄μš©ν•΄ λˆμ„ μ΄μ²΄ν•˜λŠ” μš”μ²­μ„ λ³΄λƒ…λ‹ˆλ‹€. APIκ°€ CSRF 토큰을 κ²€μ¦ν•˜μ§€ μ•ŠμœΌλ©΄ μ„œλ²„λŠ” ν•΄λ‹Ή μš”μ²­μ„ 정상적인 κ²ƒμœΌλ‘œ νŒλ‹¨ν•˜κ³ , 당신은 λˆμ„ μžƒκ²Œ λ©λ‹ˆλ‹€.

7️⃣ XSS (Cross-Site Scripting)

무엇인가? μ›Ή νŽ˜μ΄μ§€μ— μ•…μ„± 슀크립트λ₯Ό μ‚½μž…ν•©λ‹ˆλ‹€.
μ–΄λ–»κ²Œ μž‘λ™ν•˜λ‚˜μš”? μ½”λ“œκ°€ μ‚¬μš©μžμ˜ λΈŒλΌμš°μ €μ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€.
μ–΄λ–»κ²Œ κ΅¬ν˜„ν•˜λ‚˜μš”? 동적 μ½˜ν…μΈ λ₯Ό λͺ¨λ‘ μ΄μŠ€μΌ€μ΄ν”„ν•˜κ³  κ²€μ¦ν•˜λ©°, Content‑Security‑Policy (CSP)와 같은 헀더λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
무엇을 λ°©μ§€ν•˜λ‚˜μš”? μΏ ν‚€ λ„λ‚œ, λ―Όκ°ν•œ 데이터 유좜 λ˜λŠ” κ°€μ§œ μ‚¬μ΄νŠΈλ‘œμ˜ λ¦¬λ””λ ‰μ…˜μ„ λ°©μ§€ν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ: μ•…μ˜μ μΈ μ‚¬μš©μžκ°€ 곡개 νŽ˜μ΄μ§€μ— μ½”λ“œλ₯Ό μ‚½μž…ν•©λ‹ˆλ‹€. νŽ˜μ΄μ§€μ— λ“€μ–΄μ˜€λŠ” λͺ¨λ“  λ°©λ¬ΈμžλŠ” 이λ₯Ό μ•Œμ§€ λͺ»ν•œ 채 μ½”λ“œλ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€. 데이터 검증과 CSPλŠ” μ‹ λ’°ν•  수 μ—†λŠ” μ½˜ν…μΈ κ°€ λΈŒλΌμš°μ €μ—μ„œ μ‹€ν–‰λ˜λŠ” 것을 λ°©μ§€ν•©λ‹ˆλ‹€.

πŸ’‘ μš”μ•½

λ‹Ήμ‹ μ˜ APIλŠ” κ·€μ€‘ν•œ 물건이 κ°€λ“ν•œ μ§‘κ³Ό κ°™μŠ΅λ‹ˆλ‹€: 데이터, μ‚¬μš©μž, λΉ„μ¦ˆλ‹ˆμŠ€ ν”„λ‘œμ„ΈμŠ€. 문을 열어두면 μ–Έμ  κ°€ λˆ„κ΅°κ°€ λ“€μ–΄μ˜΅λ‹ˆλ‹€.

  • Rate Limiting – 그넀에 λŒ€ν•œ 접근을 μ œμ–΄ν•©λ‹ˆλ‹€.
  • CORS – νŒŒν‹° μ΄ˆλŒ€ λͺ…단.
  • SQL/NoSQL Injection – 함정이 λ“€μ–΄κ°„ 폼.
  • Firewalls – μž…κ΅¬μ˜ 경비원.
  • VPNs – λΉ„λ°€ ν†΅λ‘œ.
  • CSRF – κ³„μ•½μ„œμ— μœ„μ‘° μ„œλͺ….
  • XSS – μ‹œλ¦¬μ–Ό λ°•μŠ€μ— μˆ¨κ²¨μ§„ λ©”μ‹œμ§€.

πŸ” μ΄λŸ¬ν•œ 쑰치λ₯Ό κ΅¬ν˜„ν•œλ‹€κ³  ν•΄μ„œ APIκ°€ μ™„μ „νžˆ 무적이 λ˜λŠ” 것은 μ•„λ‹ˆμ§€λ§Œ, μ—¬λŸ¬ λ°©μ–΄ 측을 κ°–κ²Œ λ©λ‹ˆλ‹€. ν˜„μ‹€ μƒν™œμ²˜λŸΌ 문만 λ‹«λŠ” κ²ƒμœΌλ‘œλŠ” μΆ©λΆ„ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€: μžλ¬Όμ‡ , 경보, 카메라, 그리고 κ°€λŠ₯ν•˜λ‹€λ©΄ 쒋은 경비견 🐢이 ν•„μš”ν•©λ‹ˆλ‹€.

Back to Blog

κ΄€λ ¨ κΈ€

더 보기 Β»