목록 전체 글 (298)
배경내부 서비스 간 통신을 REST에서 gRPC로 전환하고 있다.팀의 공통 학습을 위해 각자가 자신 있는 서비스 하나씩을 맡아 작업했고, 나는 역시 OpenAPI 서비스였다. 사실 gRPC에 익숙하지 않았던지라, 개인적인 공부가 필요했다.개념을 공부했고, 배포와 같은 운영 상황에서의 엣지 케이스를 점검했다.gRPC는 연결을 유지하며 그 안에서 요청을 처리한다.매번 핸드셰이크나 풀 관리가 필요 없으니 효율적이면서도, 연결이 유지되어 주의해야 하는 점도 있었다. 내가 담당한 서비스 외에도, 다른 팀원들의 담당 서비스의 코드, 전략도 확인했다. 놓친 설정도 찾았고, 이를 팀에 공유했다.빠진 설정을 개선하면서, 동시에 서비스마다 분산되어 있었던 gRPC 설정의 표준화 라이브러리 개발을 맡게 되었다. 이 글에선 ..
배경회사에서 레거시 Api 서비스의 유료화 프로젝트를 진행하고 있다.기존에는 부족했던 사용량 제한과 집계, 서버 가용성, 응답 속도 등 개선해야 할 것이 많았다.나는 그중 전면의 게이트웨이를 구성하고, 인증 흐름, 요청/응답 로깅, 사용량 제한을 처리하는 역할을 맡았다.게이트웨이로는 다양한 플러그인과 활발한 커뮤니티, NginX 기반의 빠른 성능을 갖고 있는 ApiSix를 선정했다. 사용 내역 조회, 사용량 제한을 위한 구조가 가장 재밌었다.액세스 로그를 Kafka로 전달하고, 이를 OLAP(Starrocks)가 수신, 집계 처리하는 구성이었는데, 사용자별 사용량, API 별 요청량, 사용 패턴이나 응답 속도 등, 수억건의 데이터에 대한 집계가 수 초 안에 처리되는 것에 놀랐다.그리고 그렇게 집계한 데이..
배경나는 IoT 서비스 회사의 백엔드 개발자이다.약 260만 개의 기기에서 초당 6천 개에 달하는 기기 상태 이벤트가 발생하고 있다.나는 이를 수신하여 가공하고, 적재 또는 다음 서비스로 전달하는 파이프라인을 개발한다. 수많은 기기 상태 이벤트를 가공 없이 날것 그대로 저장하는 것은 매우 중요하다.적재된 데이터는 기기가 과거 특정 시점에 어떤 상태였는지 확인하는 히스토리가 되고,고객의 기기 동작 문의를 확인하거나 외부 플랫폼의 이벤트 처리 여부를 증명하는 중요한 증적이 된다. 데이터 저장소 비교1차 시도: CloudWatch처음에는 단순 로그로 취급하여 CloudWatch Logs에 모든 이벤트를 기록했고, 비용 문제를 만났다.CloudWatch Logs는 수집, 저장, 분석 세 가지 영역에서 비용이 발..
배경최근 국내 서비스들에 보안 이슈가 많았다.우리 회사도 보안 점검을 진행했고, 내가 맡고 있는 서비스의 인증 서버 역시 주요 대상이 되었다.요청 수 제한, 애플리케이션 키 관리, 로그 마스킹, 개인정보 보관 방법 등을 점검하고 개선했다.기능적으로는 '구글 연동 로그인'과 '2FA 강제'를 위한 추가 개발이 필요했다. 추가 기능을 개발하고 보안을 점검하기 위해선, OAuth 2.0으로 구현된 인증 서버를 먼저 이해해야 했다.아래는 그 과정에서 재밌었던 부분을 정리한다. OAuth 2.0 가 필요했던 이유지금까지의 경우와는 달리, 이번엔 내가 OAuth 서버를 운영하는 입장이 되었다.연동 서비스에서 OAuth 서버를 운영하는 이유부터 이해해야 했다. 우리 회사의 연동 서비스는 삼성, LG와 같은 외부 Io..
배경나는 IoT 서비스 회사의 백엔드 개발자이다.회사 기기는 삼성 Smartthings, LG ThinQ, Naver, KT, Kakao 등 국내 IoT 플랫폼과의 연동을 지원한다. 서버는 플랫폼의 기기 제어 요청을 처리하고, 반대로 기기의 상태를 플랫폼으로 전달하는 중간 다리의 역할을 한다. 그 중 이벤트 파이프라인은 기기의 이벤트를 수신하고, 이를 연동된 플랫폼으로 전달하는 서비스이다. 전달된 이벤트는 화재 감지, 강제 문 열림 알림, 동작 감지 등 앱 상 UI 변경만이 아닌, 사용자 안전 문제와 직결된 알림을 처리한다.그렇기에 지연 시간과 유실률은 서비스 신뢰도 문제이며, 안정적인 리소스 관리, 꼼꼼한 처리 증적 관리가 특히 더 중요했다. 처리량 증가서비스가 성장하며 이벤트가 크게 늘었다. 2년 ..
배경IoT 서비스 회사에서 백엔드 개발자로 일하고 있다.기기 사용 환경을 넓히기 위해, 자체 플랫폼 외 LG, 삼성, 네이버, 카카오, KT 등 다른 국내 IoT 플랫폼과의 연동 서비스를 지원한다.브라우저용 웹 대시보드도 그중 하나이다.나는 대시보드에서 발생한 제어 요청을 기기에 전달하고, 반대로 기기의 이벤트를 대시보드에 전달하는 중간 다리 역할을 맡는다.이 글에선 웹 소켓 서버의 관리 어려움과 이를 개선하기 위한 구조 변경 경험을 소개한다. 전통적인 웹 소켓 서버 아키텍처웹 소켓, SSE 같은 연결 유지가 필요한 서비스는 관리가 어렵다.클라이언트와 서버가 한번 연결되면, 해당 연결은 최초 수립된 인스턴스에 종속된다. 이로 인해 메시지 전달을 위해선 클라이언트가 연결된 서버를 찾아야 하는 복잡함이 있다..
배경재밌는 일이 들어왔다. 회사의 카메라 기기를 외부 플랫폼에서 스트리밍 될 수 있도록 만들어야 했다. 회사에 DevOps가 따로 없다 보니 클라우드를 직접 만지고 비용을 관리한다. 특히나 우리 회사는 홈 카메라도 판매하기에 스트리밍을 위한 데이터 통신비가 얼마나 큰지 안다. WebRTC를 위한 모든 데이터가 서버를 거친다면, 그 속도도 문제지만 통신 비용도 클 것이다. 그래서 노드 간, 이번 작업에선 사용자의 앱과 카메라 기기 사이의 직접 연결이 중요하다. 나는 여기가 재밌었다. 이 글 자체도 사실 이걸 얘기하고 싶었다.배포되지 않은 로컬 네트워크의 기기끼리 어떻게 서로를 찾아 직접 통신하는지 궁금했다. NAT 동작 과정P2P 통신의 원리를 이해하기 위해선, NAT의 동작 과정을 이해해야 한다.NAT..
배경지난 글에서 논 블록킹을 구현하는 두 가지 방법을 확인했다.Netty는 커널의 I/O 멀티플렉싱 연산을 사용하고, DelayQueue는 커널 단의 스레드 제어 연산을 사용했다. 이번에는 CAS와 CountDownLatch가 궁금했다.사실 CAS와 CountDownLatch도 앞선 두 경우와 비슷할 것 같다는 생각에 파본 것인데, 그렇지 않았다.CAS는 전혀 다른 방법으로 동작했고, CountDownLatch는 짬뽕이었다. 나는 컴퓨터공학을 전공했다. 부끄럽지만 컴퓨터구조와 운영체제 수업을 가장 재밌게 수강했다.앞선 멀티 플렉싱이라는 키워드도, 앞으로 얘기할 커널 모드와 시스템 콜도, 다 공부한 개념인데 참 낯설다.오랜만에 복습할 겸, 운영체제와 자바 개발을 스르륵 녹일 수 있는 글이 되었으면 좋겠다..