[개발] IP -> 국가코드 변환 방법 (Database & API)

in #kr-dev7 years ago (edited)

안녕하세요. 박세계입니다.

본 글은 개발자를 위한 글임을 미리 밝힙니다.


서비스를 만들때 접속기기의 국가를 알아야 하는 경우가 있습니다. 방법은 크게 세가지 입니다.

  1. 접속 IP로 IP Database 조회
    • 장점: 거의 모든 상황에서 별다른 추가 권한 획득 없이 비교적 쉽고 정확하게 사용 가능
    • 단점: 우회하기 쉬운편이고, 100% 정확한건 아니며, IP Database를 별도로 관리해야 함
  2. 모바일 기기의 경우 GPS 좌표로 Google API 등을 호출하여 조회 (1번 방법도 여전히 가능)
    • 장점: 비교적 정확
    • 단점: 보통 추가권한 획득이 필요하며, 우회하기도 쉬운편이고, 좌표가 부정확하거나 아예 잡히지 않는 경우가 많고, Google API등 추가 서비스를 거쳐야 함
  3. 카드정보등 국가가 포함된 개인정보와 직결된 정보를 입력받아 조회
    • 장점: 조작이 쉽지 않아 가장 높은 정확도를 보장 (정확도가 매우 중요한 서비스에 사용)
    • 단점: 서비스 사용의 장벽을 엄청나게 높이고, 개인정보 노출의 위험을 서비스에서 책임져야 함

종합해보면 특별한 경우가 아닌 이상 '1. 접속 IP로 IP Database 조회' 방법이 가장 무난한 걸 알 수 있습니다. 보통 바로 적용이 가능하며, 비교적 쉽고 정확하기 때문입니다. 어차피 100%의 정확도를 보장하는 방법은 없습니다.

국가를 알아야 하는 목적은 다시 크게 둘로 나뉩니다. 둘다 필요한 경우도 많습니다.

  1. 국가별 통계 필요
  2. 국가별 서비스 제한

'1. 국가별 통계 필요'의 경우는 개별 IP Database(이하 IP Table)를 관리하는 수 밖에 없습니다. IP 저장시 IP Table과 JOIN 하여 국가코드까지 저장하는게 보통입니다.

IP Range와 국가코드가 매칭되있는 무료 Database 중 다음 서비스를 추천합니다. 요령껏 주기적으로 IP Database를 다운받아 자신이 관리하는 IP Table을 업데이트 해야합니다.

  • http://software77.net/geo-ip/
    • 사이트 우측 하단 Download 영역에서 다운로드 가능
    • Direct Download URL 제공 (배치 관리시 필수)
    • 완전 무료 (기부 가능)
    • 매일 최신 정보로 업데이트
    • 2002년 부터 지금까지 서비스 중 (현재 16년)
    • 최근 6년간 99.99%의 Uptime을 자랑
    • 간단한 데이터 구조

geo-ip.png

'2. 국가별 서비스 제한'을 위한 방법은 좀 다릅니다. 다음 두가지 방법을 통해 적용 가능합니다. 두 방법을 혼용해도 좋습니다.

  1. 위의 방법과 같이 IP Table을 개별 관리하여 활용
  2. 외부 API 활용

IP와 매칭되는 국가 정보는 생각보다 자주 갱신되기 때문에 주기적으로 업데이트 해주지 않으면 나중에는 계속 틀린 정보를 받게 됩니다. 즉, 반드시 배치를 통해 관리해야 하는 번거로움이 있습니다.

국가별 서비스 제한등 특정 시점에서만 조회하면 되거나, 트래픽이 적은 서비스의 경우 다음 API 사용을 추천합니다.

ip2c.png

꼭 서버에서 호출하지 않아도 되는 장점도 있습니다. http://ip2c.org/self로 호출하면 Wifi에 접속된 모바일 기기에서도 내부 아이피가 아닌 외부로 나가는 공식 아이피와 매칭되는 국가코드를 알려줍니다. 별도 IP Table을 관리하는게 생각보다 쉽지 않은데, 이 API를 활용해봐도 좋을거 같습니다.

해당 API가 제대로 동작하지 않는 경우에 대비하려면 결국 내부적으로 IP Table을 관리해야 하는게 맞긴 하지만 여전히 활용도가 높은거 같아 소개합니다.

감사합니다.

Sort:  

Cheer Up!

  • from Clean STEEM activity supporter

개발하시는 분들은 대단하신듯요... 저는 도저히 무슨 말인지 도통 알 수가 없네요.... 개발을 통해 이렇게 스팀잇도 잘 쓰고 있는데, 저의 소양이 부족한 것 같습니다. 좋은 글 잘보고 갑니다. ^^

아닙니다 ㅎㅎ 제가 하는일이 이런거라 이 분야를 조금더 알고 있을뿐 당연히 다른 분야는 무지합니다. 지식의 소양은 다양한 글 올려주시는 성림대디님이 훨씬 높으실거라 확신합니다. 들러주셔서 감사합니다 ^^

역시 geo-ip ^^ 이런 개발관련 글은 보상을 떠나 아주 의미 있다고 생각합니다.

저도 개발관련 정보 아주 허접한 것이라도 올릴 계획을 생각하고 있는데요.. 구글 트래픽이라도 좀더 이쪽으로 끌고 싶은 생각이 있어서... ^^

kr.dev 계정을 파서 허접한 개발관련정보라도 올릴까도 고민해보고 있고... 막 그렇습니다. ㅎㅎㅎ 주민번호 validate 검사 스크립트 라든지 숫자, 영문 아스키 코드 검사 등 검색 많이 하는 것들로 좀 채우면 어떨까 싶거든요. 어떻게 생각하시나용?

유의미하게 봐주셔서 감사합니다. 역시 제맘을 알아주시는군요 ㅎㅎ

저는 앞으로도 순수 개발자외에는 알아보기 힘들만한 이런 글도 종종 올릴 생각입니다. 소통의 폭이 좁긴 해도 여전히 이렇게 소통으로써의 의미도 여전히 크다고 생각합니다. 꼭 모든글이 100% 대중적일 필요는 없으니까요.

알기는 알면서도 최선의 정보를 어디서 얻을 수 있는지 매번 까먹고 다시 검색하고 이런 경우가 많기 때문에, 일단 제 미래의 삽질을 줄이는 의미도 큽니다.

또한 자신에게 도움되는 개발 정보는 타 개발자 분들도 알면 좋은 경우도 생각보다 많기 때문에 충분히 유의미하다 생각합니다. 각자의 관심 분야와 전공 또한 다르니까요.

@nhj12311 님이 올려주시는 개발글도 기대하겠습니다. 굳이 별도의 계정을 사용할 필요는 없을거 같습니다 :)

좋습니다. 허접하다고 욕하시면 안되요~! ㅎㅎ

너무 겸손하십니다 ㅎㅎ 지금까지 개발해주신 많은 것들로 이미 실력을 증명하신거 같습니다 :)

0지식 증명 ㅎㅎㅎ

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

웃어주시니 기쁨 ㅋㅋㅋㅋ

👍👍👍👍

Cheers :)

뭐가뭔지 모르겠지만...일단...감사합니다^^

이해가 다되지는 않지만 잘 읽고 갑니다.

ㅎㅎ 저도 1번으로 사용하고 있습니다.
서버에서 다른 나라를 차단할때나? 이럴때?
잘보고갑니다. !

그동안 궁금했었는데.. 꿀정보 감사드립니다.
vpn때문에 사실 IP어드레스를 믿기는 어렵지만 그래도 가장 저렴한 방법 같습니다. (1)하고 (2) 하고 짬뽕해서 쓰면 좋을것 같습니다.

여담으로, 스탠다드는 아니지만 latency 기반으로 위치증명에 힘을 보탤수 있을 것 같습니다. 예를들면 영국에있는 사람이 한국에 있는 VPN을 이용하여 한국 사이트에 접속하는 경우 (저...저말입니다) 브라우저단의 약간의 스크립트를 이용하여 latency 차이를 감지 할수 있겠죠. AWS Route53 같은경우 비슷한 매트릭을 활용합니다. 그런데 실제로 이정도로 절실히 사용자를 구분해내고싶은 경우가 어느경우인지는 잘 떠오르지가 않네요.. ㅎㅎㅎ

Coin Marketplace

STEEM 0.27
TRX 0.11
JST 0.031
BTC 68401.94
ETH 3807.69
USDT 1.00
SBD 3.52