Server Ip Ranges

Kotlin library for cloud IP identification and restriction

Nov 2023

Server Ip Ranges

TL;DR

  • ν΄λΌμš°λ“œ 제곡자(AWS, GCP, Azure λ“±)의 IP λŒ€μ—­μ„ μ‹λ³„ν•˜κ³  μ ‘κ·Ό μ œν•œμ— ν™œμš©ν•  수 μžˆλŠ” Kotlin λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€.
  • 곡개 API μ–΄λ·°μ§• λ°©μ§€λ₯Ό μœ„ν•΄ ν΄λΌμš°λ“œ λŒ€μ—­ 기반 차단이 ν•„μš”ν–ˆλ˜ κ²½ν—˜μ„ λ°”νƒ•μœΌλ‘œ, μ΅œμ‹ ν™”λœ IP λŒ€μ—­ 반영과 검증 μ„±λŠ₯ μ΅œμ ν™”λ₯Ό λͺ©ν‘œλ‘œ μ„€κ³„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  • IP λŒ€μ—­ μˆ˜μ§‘Β·μ €μž₯ νŒŒμ΄ν”„λΌμΈκ³Ό λ©”λͺ¨λ¦¬ λ‚΄ 검증 μ—”μ§„μœΌλ‘œ κ΅¬μ„±λ˜λ©°, Spring Boot λ“± κΈ°μ‘΄ JVM μ„œλΉ„μŠ€μ— 라이브러리 ν˜•νƒœλ‘œ κ°„νŽΈνžˆ 톡합할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 사내 μ„œλΉ„μŠ€ λ„μž… κ²½ν—˜μ„ ν† λŒ€λ‘œ μ˜€ν”ˆ μ†ŒμŠ€λ‘œ κ³΅κ°œν•˜μ˜€μŠ΅λ‹ˆλ‹€.


기획

λ°°κ²½

이 ν”„λ‘œμ νŠΈλŠ” μ‚¬λ‚΄μ—μ„œ μš΄μ˜ν•˜λ˜ 곡개 API μ„œλΉ„μŠ€μ˜ μ–΄λ·°μ§• λ°©μ§€λ₯Ό μœ„ν•΄ κ΅¬μΆ•ν–ˆλ˜ IP 차단 μ‹œμŠ€ν…œμ„ λͺ¨νƒœλ‘œ μ‹œμž‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

ν•΄λ‹Ή μ„œλΉ„μŠ€λŠ” μ£Όμš” 포털 검색 결과에 빌트인 ν˜•νƒœλ‘œ μ œκ³΅λ˜μ–΄ 데이터 쑰회λ₯Ό μ œκ³΅ν•΄μ£ΌλŠ” μ„œλΉ„μŠ€λ‘œ, 일간 30만 건 μ΄μƒμ˜ νŠΈλž˜ν”½μ„ μ²˜λ¦¬ν•˜κ³  μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

λˆ„κ΅¬λ‚˜ μ ‘κ·Ό κ°€λŠ₯ν•œ 곡개 μ„œλΉ„μŠ€μ˜ νŠΉμ„± 상, λ§€ν¬λ‘œμ™€ μŠ€ν¬λž˜ν•‘ λ“±μ˜ λ‹€μ–‘ν•œ 방식을 λ™μ›ν•œ λŒ€κ·œλͺ¨ μ–΄λ·°μ§• νŠΈλž˜ν”½μ€ ν”Όν•  수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μ„œλΉ„μŠ€ μ§€ν‘œ μ™œκ³‘μ„ λ„˜μ–΄ μ„œλΉ„μŠ€μ™€ μ—°κ²°λœ μ½”μ–΄ μ„œλΉ„μŠ€μ—λ„ 영ν–₯을 μ£Όμ—ˆκΈ°μ— 운영 μ•ˆμ •μ„±μ— 큰 μœ„ν˜‘μ΄ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μ΄ˆκΈ°μ—λŠ” IP별 Rate Limiting을 λ„μž…ν•˜μ—¬ λŒ€μ‘ν–ˆμœΌλ‚˜ ν΄λΌμš°λ“œ ν™˜κ²½μ˜ μœ λ™ IPλ₯Ό μ΄μš©ν•œ IP λ‘œν…Œμ΄μ…˜μ—λŠ” λŒ€μ‘ν•  수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€. κ²°κ΅­ ν΄λΌμš°λ“œ 우회 곡격의 μ›μ²œ 차단을 μœ„ν•΄ ν΄λΌμš°λ“œ λŒ€μ—­ 자체λ₯Ό 선별할 수 μžˆλŠ” μˆ˜λ‹¨μ„ κ°œλ°œν•΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€.


λͺ©ν‘œ

1. μ΅œμ‹ ν™”λœ IP λŒ€μ—­ 제곡

ν΄λΌμš°λ“œ μ œκ³΅μžλŠ” λ„€νŠΈμ›Œν¬μ™€ μ„œλΉ„μŠ€ 상황에 따라 μˆ˜μ‹œλ‘œ IP λŒ€μ—­μ„ λ³€κ²½ν•©λ‹ˆλ‹€. 였늘 IP λŒ€μ—­μ„ λͺ¨λ‘ μ°¨λ‹¨ν–ˆλ‹€ ν•˜λ”λΌλ„, 내일이면 μƒˆλ‘œμš΄ λŒ€μ—­μ—μ„œ μ–΄λ·°μ§• 곡격을 받을 수 μžˆμŠ΅λ‹ˆλ‹€.

변칙적인 μ–΄λ·°μ§•μ˜ μ›μ²œ 차단을 μœ„ν•΄μ„œλŠ” ν΄λΌμš°λ“œ 제곡자의 IP λŒ€μ—­ μ—…λ°μ΄νŠΈλ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ λ°˜μ˜ν•  수 μžˆμ–΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€.


2. CPU / λ©”λͺ¨λ¦¬ μ„±λŠ₯ μ΅œμ ν™”

ν΄λΌμš°λ“œ μ œκ³΅μžλŠ” μ „ 세계에 걸쳐 μˆ˜λ§Žμ€ 인프라λ₯Ό μš΄μ˜ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 맀번 이 λͺ¨λ“  μ„œλ²„μ˜ μˆ˜λ§Žμ€ IP λŒ€μ—­μ„ μ „λΆ€ 가져와 λ©”λͺ¨λ¦¬μ— μ μž¬ν•œλ‹€λ©΄ 그것 자체둜 μ„œλ²„μ— 큰 λΆ€ν•˜κ°€ λ©λ‹ˆλ‹€.

λ˜ν•œ, 검증할 IPκ°€ λ“€μ–΄μ˜¬ λ•Œλ§ˆλ‹€ λͺ¨λ“  후보ꡰ에 일일히 λŒ€μž…ν•œλ‹€λ©΄ 높은 νŠΈλž˜ν”½μ„ μ²˜λ¦¬ν•˜λŠ” ν™˜κ²½μ—μ„œ 높은 λ ˆμ΄ν„΄μ‹œλ₯Ό μ˜ˆμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μœ„ λ¬Έμ œλ“€μ„ ν•΄κ²°ν•˜κΈ° μœ„ν•˜μ—¬ IP 데이터λ₯Ό μ‚¬μš© 사둀에 맞게 κ²½λŸ‰ν™”ν•˜κ³ , 검증 속도λ₯Ό 높일 수 μžˆλ„λ‘ 데이터 ꡬ쑰λ₯Ό μ΅œμ ν™”ν•  ν•„μš”κ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€.


3. κΈ°μ‘΄ μ„œλΉ„μŠ€μ™€μ˜ κ°„νŽΈν•œ 톡합

λ³Έ ν”„λ‘œμ νŠΈκ°€ λͺ©ν‘œν•˜λŠ” κΈ°λŠ₯은 β€˜νŠΉμ • IPκ°€ ν΄λΌμš°λ“œ λŒ€μ—­μΈμ§€ κ²€μ¦ν•˜λŠ” Bool ν•¨μˆ˜β€™ μ •λ„λ‘œ μš”μ•½ν•  수 μžˆμ—ˆκΈ°μ—, λ³„λ„μ˜ μ„œλ²„λ₯Ό κ΅¬μΆ•ν•˜λŠ” 것은 μ˜€λ²„ μ—”μ§€λ‹ˆμ–΄λ§μ΄λΌκ³  νŒλ‹¨ν–ˆμŠ΅λ‹ˆλ‹€.

μ΅œμ†Œν™”λœ κ°„λ‹¨ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•˜λŠ” λ™μ‹œμ— Spring Boot둜 κ΅¬μ„±λœ κΈ°μ‘΄ 기술 μŠ€νƒκ³Ό λΉ λ₯΄κ²Œ 톡합될 수 μžˆμ–΄μ•Ό ν–ˆκΈ°μ— 이λ₯Ό λͺ¨λ‘ λ§Œμ‘±ν•˜λŠ” 라이브러리 ν˜•νƒœλ₯Ό μ±„νƒν–ˆμŠ΅λ‹ˆλ‹€.


개발

기술 μŠ€νƒ

λ³Έ ν”„λ‘œμ νŠΈλŠ” μ•„λž˜μ™€ 같은 μž₯점듀을 이유둜 Kotlin으둜 μž‘μ„±ν–ˆμŠ΅λ‹ˆλ‹€.

  • κΈ°μ‘΄ JVM-Spring 기반 μ„œλΉ„μŠ€μ™€μ˜ 100% ν˜Έν™˜
  • Kotlin-first Kotlin + Spring ν™˜κ²½ 지원
  • μ™ΈλΆ€ API / 파일 IO 처리 μ‹œ Null νƒ€μž… μ•ˆμ •μ„±
  • kotlinx.serialization ν™œμš© 직렬화 처리
  • κ°„κ²°ν•œ 문법을 ν†΅ν•œ 둜직 가독성
  • ν™•μž₯ μ‹œ 코루틴 비동기 처리 용이


μ•„ν‚€ν…μ²˜

λ³Έ ν”„λ‘œμ νŠΈμ˜ μ•„ν‚€ν…μ²˜λŠ” 크게 ν΄λΌμš°λ“œ 제곡자의 IP λŒ€μ—­μ„ μˆ˜μ§‘ν•˜μ—¬ μ €μž₯ν•˜λŠ” λΆ€λΆ„κ³Ό μ €μž₯ν•œ IP λŒ€μ—­μ„ λΆˆλŸ¬μ™€μ„œ κ²€μ¦ν•˜λŠ” λΆ€λΆ„ 두 κ°€μ§€λ‘œ λ‚˜λ‰©λ‹ˆλ‹€.


ν΄λΌμš°λ“œ IP λŒ€μ—­ μˆ˜μ§‘

Cloud IP Range Conversion Flow Image

ν΄λΌμš°λ“œ μ œκ³΅μžκ°€ κ³΅κ°œν•˜λŠ” CIDR ν˜•μ‹μ˜ IP λŒ€μ—­ 데이터λ₯Ό νŒŒμ‹±ν•˜μ—¬ 사전 μ •μ˜λœ λΆ„λ₯˜ κ·œμΉ™(Provider, Region)에 맞게 μ •μ œν•©λ‹ˆλ‹€.

이후, 검증에 μ‚¬μš©ν•  수 μžˆλ„λ‘ CIDR을 μ •κ·œμ‹μœΌλ‘œ λ³€ν™˜ν•˜μ—¬ JSON 파일의 ν˜•νƒœλ‘œ μ €μž₯ν•©λ‹ˆλ‹€. 검증 μ‹œ, λΌμ΄λΈŒλŸ¬λ¦¬λŠ” λ³Έ νŒŒμΌμ— μ €μž₯된 μ •κ·œμ‹μ„ 읽어 IPλ₯Ό κ²€μ¦ν•˜κ²Œ λ©λ‹ˆλ‹€.

λ°±μ—… 및 이λ ₯ 기둝을 μœ„ν•˜μ—¬ μ •μ œλœ CIDR 데이터 원본도 JSON ν˜•νƒœλ‘œ μ €μž₯ν•©λ‹ˆλ‹€.


IP λŒ€μ—­ 검증

IP Identification Flow Chart Image

μ‚¬μš©μž μž…μž₯μ—μ„œ ν•„μš”ν•œ κΈ°λŠ₯이 λ‹¨μˆœν•œ 만큼, λ³΅μž‘ν•œ κ΅¬ν˜„μ„ μΆ”μƒν™”ν•˜μ—¬ μ΅œμ†Œν•œμ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•˜μ˜€μŠ΅λ‹ˆλ‹€. μ‚¬μš©μžλŠ” isServerIP ν•¨μˆ˜λ§Œ ν˜ΈμΆœν•˜μ—¬ IPκ°€ ν΄λΌμš°λ“œ λŒ€μ—­μΈμ§€ 검증할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, Provider, Region νŒŒλΌλ―Έν„°λ₯Ό μ „λ‹¬ν•˜μ—¬ 검증 쑰건을 λΆ€μ—¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ‚¬μš©μžκ°€ IP 검증을 μš”μ²­ν•˜λ©΄, λΌμ΄λΈŒλŸ¬λ¦¬λŠ” λ‘œμ»¬μ— μ €μž₯된 Map ν˜•μ‹μ˜ Provider별 μ •κ·œμ‹ μΊμ‹œλ₯Ό λ¨Όμ € ν™•μΈν•©λ‹ˆλ‹€.

μΊμ‹œκ°€ μ‘΄μž¬ν•  μ‹œ Provider별 μ •κ·œμ‹ λͺ©λ‘μ„ λ°˜ν™˜ν•˜κ³ , λΌμ΄λΈŒλŸ¬λ¦¬λŠ” λŒ€μ—­ μ •κ·œμ‹ 쀑 μΌμΉ˜ν•˜λŠ” λŒ€μ—­μ΄ μžˆλŠ”μ§€ κ²€μ¦ν•˜μ—¬ κ²°κ³Όλ₯Ό μ‘λ‹΅ν•©λ‹ˆλ‹€. λŒ€μ—­ λ‹¨μœ„λ‘œ 포함 μ—¬λΆ€λ₯Ό 확인해야 ν•˜λ―€λ‘œ 전체 λͺ©λ‘μ— λŒ€ν•œ 검사가 μ§„ν–‰λ©λ‹ˆλ‹€.

μΊμ‹œκ°€ μ‘΄μž¬ν•˜μ§€ μ•Šμ„ μ‹œ JSON νŒŒμΌμ— μ €μž₯된 Provider의 μ •κ·œμ‹λ“€μ„ 읽어와 μΊμ‹œμ— μ μž¬ν•©λ‹ˆλ‹€.


νŠΈλŸ¬λΈ” μŠˆνŒ…

1. λŒ€μ—­ 데이터 μ €μž₯ 방식

ν΄λΌμš°λ“œλŠ” 넓은 λŒ€μ—­μ˜ IPλ₯Ό μ§€μ›ν•©λ‹ˆλ‹€. 그렇기에 λŒ€μ—­μ— λŒ€μ‘ν•˜λŠ” λͺ¨λ“  IPλ₯Ό 일일히 String으둜 μ €μž₯ν•˜κ³  λΆˆλŸ¬μ˜¨λ‹€λ©΄ 곡간을 κ³Όν•˜κ²Œ μ°¨μ§€ν•˜λŠ” 것은 λ¬Όλ‘ , 검증 속도도 맀우 λŠλ €μ§€λŠ” 상황을 μ˜ˆμƒν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œ 적은 곡간을 μ°¨μ§€ν•˜λ„λ‘ λŒ€μ—­μ„ μ••μΆ•ν•  수 μžˆμ–΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€.

ν΄λΌμš°λ“œ μ œκ³΅μžλ“€μ€ λŒ€μ—­μ„ λ‚˜νƒ€λ‚΄λŠ” CIDR ν˜•μ‹μœΌλ‘œ κ³΅κ°œν•©λ‹ˆλ‹€. μ—¬κΈ°μ—μ„œ μ°©μ•ˆν•˜μ—¬ CIDR을 μ •κ·œμ‹μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 방식을 λ– μ˜¬λ¦¬κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ •κ·œμ‹μ„ μ‚¬μš©ν•  경우, 전체 λŒ€μ—­ 데이터λ₯Ό ν•œ μ€„μ˜ λ¬Έμžμ—΄λ‘œ 99.97% 이상 μ••μΆ•ν•  수 있으며 ν•œ 번의 μ—°μ‚°μœΌλ‘œ IPκ°€ λŒ€μ—­μ— ν¬ν•¨λ˜λŠ”μ§€ 검증할 수 μžˆμŠ΅λ‹ˆλ‹€.


2. μ»΄ν“¨νŒ… μžμ› 관리

κ·ΈλŸ¬λ‚˜, 아무리 λŒ€μ—­μ„ μ••μΆ•ν•˜λ”λΌλ„ μ—¬λŸ¬ ν΄λΌμš°λ“œλ“€μ˜ λŒ€μ—­ 데이터λ₯Ό λͺ¨λ‘ λ©”λͺ¨λ¦¬μ— μ˜¬λ¦°λ‹€λ©΄ κ²°μ½” 적지 μ•Šμ€ μš©λŸ‰μ„ μ°¨μ§€ν•˜κ²Œ λ©λ‹ˆλ‹€.

이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄, λŒ€μ—­ μ •κ·œμ‹ νŒŒμΌμ„ λ””μŠ€ν¬μ— μ €μž₯ν•˜κ³  ν•„μš”ν•  λ•Œλ§Œ μ½μ–΄μ˜€λŠ” μ§€μ—° λ‘œλ”© 방식을 μ±„νƒν•˜μ˜€μŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 λ©”λͺ¨λ¦¬μ— λͺ¨λ“  μ •κ·œμ‹ 데이터λ₯Ό κ°€μ§€κ³  μžˆμ„ ν•„μš” 없이 ν•„μš”ν•œ λΆ€λΆ„λ§Œ μ½μ–΄μ„œ λ‘œλ”©ν•  수 있게 λ©λ‹ˆλ‹€. λ˜ν•œ, μ •κ·œμ‹ 데이터가 μΈμŠ€ν„΄μŠ€μ˜ μ‹€ν–‰κ³Ό λ…λ¦½μ μœΌλ‘œ μ €μž₯λ˜κΈ°μ— μΈμŠ€ν„΄μŠ€λ₯Ό μž¬μ‹œμž‘ν•  λ•Œλ§ˆλ‹€ 무거운 μ •κ·œμ‹ 데이터 생성을 μ§„ν–‰ν•  ν•„μš”κ°€ μ—†μ–΄μ§‘λ‹ˆλ‹€.

ν•˜μ§€λ§Œ λ‹¨μˆœ μ§€μ—° λ‘œλ”©μœΌλ‘œλ§Œ κ΅¬ν˜„ν•œλ‹€λ©΄, λ§Žμ€ λ””μŠ€ν¬ I/Oκ°€ λ°œμƒν•˜κΈ°μ— λ§Žμ€ νŠΈλž˜ν”½μ΄ λ°œμƒν•˜λŠ” ν™˜κ²½μ—μ„œλŠ” μ„œλ²„μ— λ§Žμ€ 뢀담을 μ£Όκ³ , 높은 λ ˆμ΄ν„΄μ‹œλ₯Ό μ˜ˆμƒν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œ 데이터λ₯Ό λ©”λͺ¨λ¦¬μ— 캐싱할 ν•„μš”κ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

κ·Έλ ‡λ‹€λ©΄ μ–΄λ–€ κΈ°μ€€μœΌλ‘œ 데이터λ₯Ό 캐싱해야 ν• κΉŒμš”?

κ°œλ³„ λŒ€μ—­μ„ 캐싱할 μˆ˜λŠ” μ—†μ—ˆμŠ΅λ‹ˆλ‹€. ν΄λΌμš°λ“œ μ„œλ²„μ˜ IPλŠ” Region ν• λ‹Ή λŒ€μ—­ λ‚΄μ—μ„œ μ˜ˆμΈ‘ν•  수 없이 λ°”λ€ŒκΈ° λ•Œλ¬Έμ— κ³΅κ²©μžκ°€ λ‹€λ₯Έ λŒ€μ—­μœΌλ‘œ λ°”κΎΈμ–΄ μš”μ²­ν•œλ‹€λ©΄ μΊμ‹±λœ λŒ€μ—­μ€ μ˜λ―Έκ°€ μ—†μ–΄μ§‘λ‹ˆλ‹€.

κ·Έλ ‡λ‹€κ³  Region을 κΈ°μ€€μœΌλ‘œ 선택적인 캐싱을 ν•  μˆ˜λ„ μ—†μ—ˆμŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ μ‚¬μš© μ‚¬λ‘€μ˜ 경우, νŠΈλž˜ν”½μ˜ Region 지정에 λŒ€ν•œ μˆ˜μš”κ°€ μ—†κ±°λ‚˜ 예츑 λΆˆκ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

그렇기에 μ΅œμ’…μ μœΌλ‘œ Provider λ‹¨μœ„ 캐싱을 μ„ νƒν•˜μ˜€μŠ΅λ‹ˆλ‹€. 각 Provider에 λŒ€ν•œ 검증 μš”μ²­ μ‹œ, μ΅œμ΄ˆμ—λ§Œ λ””μŠ€ν¬μ—μ„œ 읽어 λ©”λͺ¨λ¦¬μ— μ μž¬ν•˜κ³  μ΄ν›„μ—λŠ” μΊμ‹œλœ 데이터λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 Providerλ₯Ό μ§€μ •ν•˜μ—¬ 검증할 경우의 λ””μŠ€ν¬ I/Oλ₯Ό 1회둜 μ œν•œν–ˆμŠ΅λ‹ˆλ‹€.

Providerλ₯Ό μ§€μ •ν•˜μ§€ μ•Šμ€ 검증 μš”μ²­μΈ 경우, κ²°κ΅­ λͺ¨λ“  Provider의 λŒ€μ—­μ— λŒ€ν•œ 검증이 ν•„μš”ν•΄ λͺ¨λ“  Provider 데이터λ₯Ό λ©”λͺ¨λ¦¬μ— μΊμ‹±ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 경우 μ§€μ—° λ‘œλ”©μ˜ λ©”λͺ¨λ¦¬ 저감이 μ œν•œμ μ΄κΈ° λ•Œλ¬Έμ—, λ¨Όμ € 전체 κ²€μ¦μœΌλ‘œ μš΄μ˜ν•œ λ’€ 검증 톡계λ₯Ό 보고 μ‹€μ œλ‘œ ν•„μš”ν•œ Provider만 μ§€μ •ν•΄ κ²€μ¦ν•˜λ„λ‘ μ „ν™˜ν•˜λŠ” 방식을 ꢌμž₯ν•©λ‹ˆλ‹€.


3. ν΄λΌμš°λ“œ IP 변동성 λŒ€μ‘

μ•žμ„œ λͺ©ν‘œμ—μ„œ μ„€λͺ…ν•˜μ˜€λ“―, ν΄λΌμš°λ“œμ˜ IP λŒ€μ—­μ€ μˆ˜μ‹œλ‘œ λ³€κ²½λ©λ‹ˆλ‹€.

이λ₯Ό λ°˜μ˜ν•˜κΈ° μœ„ν•΄ IP λŒ€μ—­ νŒŒμΌμ„ κ°±μ‹ ν•˜λŠ” ν•¨μˆ˜λ₯Ό μ œκ³΅ν•˜μ—¬ 라이브러리의 버전과 관계 없이 λŸ°νƒ€μž„μ— λŒ€μ—­μ„ μ—…λ°μ΄νŠΈν•  수 μžˆλ„λ‘ κ΅¬μ„±ν–ˆμŠ΅λ‹ˆλ‹€.

이λ₯Ό 톡해 μΈμŠ€ν„΄μŠ€ μž¬μ‹œμž‘μ΄λ‚˜ 라이브러리 μ—…λ°μ΄νŠΈ 없이도 μ΅œμ‹  λŒ€μ—­μ„ λ°˜μ˜ν•  수 있으며 μŠ€μΌ€μ€„λ§μ΄λ‚˜ 이벀트 트리거 λ“± μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ›ν•˜λŠ” μ‹œμ μ— κ°±μ‹  λ‘œμ§μ„ 넣을 수 μžˆμŠ΅λ‹ˆλ‹€.


κ²°κ³Ό

GitHub Repository Preview Image

사내에 λ„μž…ν•œ 라이브러리λ₯Ό λ²”μš©μ μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ„λ‘ λ°”κΎΈμ–΄ μ˜€ν”ˆ μ†ŒμŠ€λ‘œ κ³΅κ°œν–ˆμŠ΅λ‹ˆλ‹€.

λ¬Έμ„œ κ°œμ„ , 비동기 처리 μΆ”κ°€ λ“± ν•΄μ•Ό ν•  μž‘μ—…λ“€μ΄ 아직 남아 μžˆμŠ΅λ‹ˆλ‹€. ν•˜λ‚˜μ”© ν•΄κ²°ν•˜λ©° λ°œμ „μ‹œμΌœ λ‚˜κ°€λ €κ³  ν•©λ‹ˆλ‹€. κΈ°μ—¬λŠ” μ–Έμ œλ‚˜ ν™˜μ˜μž…λ‹ˆλ‹€!