Table of contents
들어가며
그림1 : NXCommand팀 단체 사진
안녕하세요~ 이번엔 인텔리전스랩스의 NXCommand팀을 찾아왔습니다.
NXCommand팀은 게임과 게임 플랫폼의 중간에 위치한 소프트웨어를 개발하는 조직으로, 데이터 인터페이스 또는 플랫폼 연동 인터페이스를 통합하는 Mission을 진행하고 있습니다.
오늘은 NXCommand팀 백엔드 개발자이신 조유리님의 하루 일과를 보면서 팀 내 백엔드 개발자가 어떤 일을 하고 또 어떤 고민을 가지고 있는지 한 번 살펴볼까요?
1. 업무 확인
그림2 : 조유리님 자리
안녕하세요~ NXCommand팀 백엔드 개발자 조유리 입니다. 저의 하루를 소개해 드릴게요~!
오늘도 여느 때와 다름없이 업무 확인으로 하루를 시작합니다. 해야 할 일과 메일함을 확인해보니 일이 제법 있네요?!
알찬 하루가 될 것으로 예상됩니다.
2. 업무 : 게임 표준 API
많은 분들이 팀 이름에 있는 ‘NXCommand’가 뭘지 궁금해하셨을 것 같은데요.
‘NXCommand’는 넥슨의 게임 표준 API로, 넥슨 플랫폼을 통해 퍼블리싱되는 게임들이 표준화된 API를 통해 플랫폼과 연동할 수 있는 환경을 제공하는 목적으로 개발된 서비스입니다.
쉽게 말씀드리면, 다양한 장르의 게임 데이터에 동일한 방식으로 접근하기 위한 서비스입니다.
‘NXCommand’란?
넥슨의 게임 표준 API 서비스인 ‘NXCommand’는 게임 외부에서 게임 내부 데이터에 접근하기 위한 표준화 된 프로토콜을 제공합니다. 인텔리전스랩스 내 플랫폼 시스템들은 넥슨에서 서비스 중인 수십 개의 게임 데이터를 개별적으로 접근하지 않고, 게임 표준 API를 통해서 어떤 게임이든 동일한 방법으로 접근할 수 있습니다. 게임 운영, 이벤트, 프로모션, 아이템 관리, 캐릭터 관리 등의 작업이 게임마다 개별로 구현되지 않도록 합니다.
그림3 : 게임 표준 API 구조도
게임 표준 API는 크게 4가지 기술을 사용하고 있습니다.
1.
Kubernetes(k8s): 게임 트래픽에 맞춰 스케일 아웃/인을 기민하게 대응합니다.
2.
gRPC: 게임별 표준 API 명세는 protobuf 메시지를 활용합니다.
3.
Kafka: 요청-응답까지의 과정을 추적하여 처리 결과를 publish 합니다. ( 오늘의 작업!)
4.
OpenSearch: 이벤트 풀로깅에 대해서 수집하고 API 결과에 대해 쉽게 검색이 가능합니다.
동시에 게임 표준 API는 크게 3가지의 기능을 제공하고 있습니다.
1.
명령어 중복 실행 방지: 쿠폰 및 아이템 중복 지급을 방지하는 데 사용되고 있습니다.
•
트랜잭션 아이디와 만료 기간을 통해 이미 실행된 명령어의 실행을 차단합니다.
2.
명령어 예약 실행: 이벤트, 알림 등의 예약 또는 주기적인 명령어를 실행합니다.
•
반복 패턴 또는 시작/종료일을 정의하여 예약합니다.
3.
명령어 실행 제한: 제한 수 이상의 요청이 왔을 경우 대기 처리(Queuing)합니다.
•
단위 시간 동안 제한된 수의 명령어만 전달합니다.
•
각 게임 서버의 허용 가능한 수치를 계산하여 명령어 실행이 고르게 퍼질 수 있도록 합니다.
◦
게임 이벤트 특성상 특정 시간에 트래픽이 매우 몰려서 들어올 수 있거든요. (게임 서버 지킴이!)
오늘의 작업! 회고
오늘은 Kafka 연동을 진행했는데요. 팀 내에서 함께 신청한 Kafka 관련 동영상 강의를 참고해서 작업하니, 효율성을 더 높일 수 있었습니다. (Tip! NXCommand팀에서는 업무에 필요한 강의나 도서를 구매하여 함께 지식을 쌓고 나누고 있습니다.) 또한 모든 작업에 대해서 코드 리뷰도 진행하고 있는데요. 이런 코드 리뷰 문화는 놓쳤던 부분을 찾게 되거나 새로운 지식을 쌓을 수 있어 서로에게 아주 유익한 시간이라고 생각합니다.
3. 데일리 스크럼
그림4 : 데일리 스크럼
NXCommand팀은 하루에 한 번 데일리 스크럼을 진행하고 있어요.
업무의 진행 상태와 업무를 진행하면서 느꼈던 어려운 점에 대해서 자유롭게 공유하는 팀 문화 중 하나인데요. 작업 진행 중 막혀있는 부분에 대해서 팀원분들께 도움을 받을 수 있어 제가 좋아하는 시간이기도 합니다.
4. 점심식사
그림5 : 맛있는 팔보채 덮밥!
데일리 스크럼이 끝나고 달려온 회사 식당!
메뉴는 팔보채 덮밥! 새우가 아주 맛있었어요.
(회사 식당에서 먹는 점심은 무료 제공이기에 더 맛있게 느껴지는 것 같기도 해요! )
5. 탁구
그림6 : 점심 탁구 한 판
NXCommand팀에서는 식후에 가벼운 운동이나 산책하곤 한답니다.
오늘의 운동은 탁구! 사원증까지 벗어던지고 접전 끝에 오탁구님을 이겼습니다!!
6. 업무 : API Gateway
식사와 운동이 끝난 후 다시 업무 시간이 찾아왔네요!
오늘은 ‘API Gateway’ 배포가 있는 날인데요.
‘API Gateway’를 설명해 드리자면, API Gateway는 NXCommand팀에서 운영 중인 프로덕트로, 인텔리전스랩스에서 제공하는 HTTP API 서비스를 통합하여 게임 시스템에 제공합니다. 70개 이상의 서비스가 입점되어 있으며, 현재도 계속해서 확장 중에 있습니다.
(70여 개의 서비스가 입점되어 있어서 배포할 때마다 너무 떨려요.. )
그림7 : API Gateway 구조도
API Gateway는 엣지로케이션에 위치한 Front Gateway와 멀티리전에 위치한 Internal Gateway로 나뉘어 각각 적합한 기능을 제공하고 있습니다.
•
Front Gateway: 다운스트림으로부터 전달받은 API 트래픽을 멀티 리전의 Internal Gateway로 전달하며 DDos 공격 방어나 API 캐싱, 그리고 멀리 떨어진 다운스트림의 네트워크 가속 등의 기능을 제공합니다.
•
Internal Gateway: 일반적인 API Gateway의 기능을 제공함과 동시에 GSLB를 사용하여 특정 리전 전체가 다운되더라도 잠깐의 다운 타임 후 트래픽을 우회할 수 있도록 설계되었습니다.
내부는 Envoy Proxy 오픈 소스 솔루션을 사용 중이고, Rust로 개발된 웹어셈블리(Wasm) 플러그인을 포함하고 있어요. 최대 50만 RPS를 처리하고 있는 플러그인이기에 간단한 기능이 추가되더라도 꼼꼼하게 테스트하고 있습니다.
이번 패치는 특정 국가에서 유입되는 트래픽을 차단하기 위해서 진행되었는데요. 사용자가 국가 정보를 변조하지 못하도록 Front Gateway로부터 관련 정보를 수집하고 있습니다.
배포는 무중단으로 마무리되었고, 오늘로써 API Gateway에서 제공하는 공통 기능이 50개가 되었습니다! HTTP API 오픈에 필요한 여러 가지 번거로운 작업을 단 몇 분 만에 해결해줄 수 있는 마법 같은 프로덕트라고 생각합니다.
나가며
지금까지 저의 소소한 하루 일과를 통해 NXCommand팀에 대해 알아보았는데요. 어떤 생각을 하셨을지 궁금합니다.
NXCommand팀에서는
글로벌 단위의 대규모 트래픽 처리에 관심이 있으신 분
도전과 성장에 관심이 많으신 분을 언제나 환영합니다!
NXCommand팀과 함께 성장하고자 하시는 분들을 기다리고 있겠습니다!
테크블로그 문의 devrel@nexon.co.kr