본문 바로가기

전체 글

(89)
k8s 기초 뼈대 잡기: 대용량 트래픽과 DSR 네트워크 최적화까지 쿠버네티스(Kubernetes)를 처음 접하면 수많은 오브젝트와 복잡한 네트워크 흐름에 압도되기 쉽습니다. 하지만 "대용량 트래픽을 처리하는 안정적인 서비스를 만드는 과정"이라는 큰 그림을 염두에 두고 접근하면, 각 구성 요소들이 왜 존재하는지 명확하게 이해할 수 있습니다.이번 글에서는 대용량 파일 전송이 빈번한 **'오브젝트 스토리지 서비스'**를 예시로, 쿠버네티스의 핵심 워크로드 배포 전략부터 트래픽의 Inbound/Outbound 흐름, 그리고 네트워크 최적화 기법인 DSR까지 하나의 흐름으로 망라해 보겠습니다.1단계: 서버에 프로그램 배치하기 (워크로드 배포)가장 먼저 우리가 만든 스토리지 애플리케이션을 쿠버네티스 클러스터(여러 대의 서버 묶음) 위에 올려야 합니다. K8s에서 실행되는 가장 작..
REST API 인증 아키텍처 - Session vs. JWT 백엔드 개발을 하다 보면 자연스럽게 마주하게 되는 헤더, 바로 X-Auth-Token (혹은 Authorization). 클라이언트는 내 아이디나 비밀번호를 URL이나 Body에 담지 않고, 그저 의미를 알 수 없는 긴 문자열(토큰) 하나만 띡 던져줍니다. 그런데도 우리 서버는 "아, 이거 AAA 님이 보낸 요청이구나!" 하고 찰떡같이 알아듣죠.도대체 백엔드 서버에서는 무슨 일이 일어나고 있는 걸까요? 오늘은 REST API에서 토큰을 활용한 인증(Authentication) 방식의 뼈대를 정리해 보려 합니다. 1. 내 아이디를 URL이나 Body에 넣으면 안 될까?초보 시절에는 이런 생각을 할 수 있습니다. "그냥 GET /buckets?userId=royce 이렇게 보내거나, Body에 {"userI..
나무가 아닌 숲을 보는 연습을 하자 : AI 시대의 아키텍처 생존법 1. 코더(Coder)의 종말과 설계자의 등장과거에는 연차가 쌓이면서 자연스럽게 '나무'에서 '숲'을 보는 능력을 길렀습니다. 하지만 이제는 상황이 달라졌습니다. AI 개발 툴의 폭발적인 발전 때문입니다.단순히 스크립트를 짜고, 디버깅하고, 리팩토링하는 기계적인 작업은 이미 AI가 인간의 속도를 한참 앞질렀습니다. 이제 시장은 '코드를 잘 짜는 사람'이 아니라, **'전체 시스템의 구조를 설계하고 의사결정을 내리는 사람'**을 원합니다. 신입 개발자에게도 아키텍처에 대한 이해가 필수가 된 이유입니다. 이제 개발자는 단순 작업자가 아닌, AI라는 강력한 엔진을 제어하는 시스템 설계자가 되어야 합니다.2. 아키텍처를 가르는 결정적 한 방: 의존성 역전(DIP)다양한 방법론이 섞여 머릿속이 복잡할 때, 딱 하..
[API 개발] 트랜잭션 걸기 애플리케이션을 개발하다 보면, "여러 개의 데이터베이스 작업을 하나의 묶음으로 처리해야 할 때"가 반드시 찾아옵니다. 가장 고전적인 예가 바로 "계좌 이체"입니다. 이때 트랜잭션(Transaction)이 없다면, 우리는 끔찍한 데이터 불일치 문제를 겪게 됩니다. 트랜잭션이란 무엇인가?트랜잭션은 "더 이상 쪼갤 수 없는 하나의 작업 단위(Unit of Work)"를 의미합니다.핵심 속성은 "전부 성공(All) 하거나, 전부 실패(Nothing) 하거나" 둘 중 하나만 보장하는 원자성(Atomicity)입니다. INSERT, UPDATE, DELETE 같은 여러 개의 작업을 논리적인 하나의 묶음으로 만듭니다. 트랜잭션이 왜 필요한가? (예: 계좌 이체)"A"가 "B"에게 10만 원을 이체하는 시나리오를 ..
[API 개발] "그래서 DI가 뭔데?" - Go와 DI, 그리고 '조립 공장'의 발견 개발을 하다 보면 코드가 뒤엉키는 순간이 옵니다. 내 라우터가 데이터베이스를 "알고" 있고, 내 서비스가 특정 로거 구현체에 "의존"합니다. 코드를 수정하면 10군데에서 에러가 터지고, 테스트 코드를 짜는 건 불가능에 가깝습니다. 이 문제의 핵심에는 "강한 결합도(Tightly Coupled)"가 있습니다. 그리고 이 문제를 푸는 열쇠가 바로 의존성 주입(Dependency Injection, DI)입니다. "DI"라는 용어는 무섭게 들리지만, 그 본질은 아주 간단합니다. DI, 넌 누구냐? (OOP? DDD?)가장 먼저 헷갈리는 질문. DI는 DDD에 대한 걸까요, OOP에 대한 걸까요?정답: 둘 다에게 필수적인 "도구(Pattern)"입니다.OOP (객체 지향 프로그래밍): DI는 OOP의 SOLI..
"Domain Driven Development" 에 대하여 우리 팀 뿐 아니라 판교 전역에서 흔히 쓰이는 개발 방식인 DDD에 대해서 알아보자. Q. DDD의 인기 추세 DDD는 반짝이는 트렌드라기보다는 "시대를 초월한 클래식"에 가깝다. 2003년에 Eric Evans의 책에 처음 언급되면서 세상에 알려졌고, 지난 20년 넘게 현대적인 아키텍처의 일환이다. 인기가 시들하다가, 최근 몇년간 MSA 마이크로서비스 아키텍처가 클라우드 네이티브 환경의 표준으로 자리잡으면서 다시 주목받기 시작한 케이스다. 하나의 거대한 monolith 시스템이 아닌, 여러 개의 작은 서비스로 나뉜 시스템을 적용하는 데에 있어서, DDD의 Bounded Context(경계가 있는 컨텍스트) 개념이 그 완벽한 해답을 제공하는 것처럼 보이기 때문이다. 참고로, "도메인 주도 설계"라는 키..
[네트워크] 커넥션 타임아웃 늪에서 벗어나기 feat. proxy settings 분명 서버는 인터넷이 잘 되는데, 이상하게 컨테이너 안에서만 curl 등 API 호출이 실패하는 경우가 있다. 이에 대한 원인은 보통 컨테이너가 가진 "고립"이라는 특성에 있다. 컨테이너는 호스트와 분리된 자신만의 네트워크 공간을 가지며, 호스트의 설정을 자동으로 물려받지 않기 때문. 특히나 프록시를 사용하는 기업 환경에서는 이 문제가 더욱 빈번히 발생한다. 이 글에서는 내가 당면했었던 네트워크 통신 관련한 프록시 설정 문제를 통과하는, 일련의 과정을 설명한다. 컨테이너 환경에서의 프록시 설정의 3단계 여정 1단계 - 호스트 - 모든 네트워크의 근원 컨테이너가 실행되는 물리서버(혹은 우리의 경우처럼 vm). 실제 네트워크 카드를 가지고 인터넷과 연결되는 첫번째 관문.호스트 자체에 HTTP_PROXY, ..
[웹 관련] CORS 에러, 더 이상 두렵지 않아! Simple vs Preflight 웹 프론트엔드 개발을 하다가 API를 호출했는데, 브라우저 콘솔에 빨간 글씨로 나타나는 공포의 메시지를 본 적 있으신가요?ACCESS TO FETCH AT 'HTTPS://API.EXAMPLE.COM/DATA' FROM ORIGIN 'HTTPS://MY-AWESOME-SITE.COM' HAS BEEN BLOCKED BY CORS POLICY...이 CORS 에러는 우리를 좌절하게 만들지만, 사실은 우리를 지켜주는 고마운 '보안 요원'입니다. 이 보안 요원이 어떻게 일하는지, 그리고 Simple 요청과 Preflight 요청은 무엇인지 제대로 이해하면 더 이상 CORS 에러가 두렵지 않을 겁니다. 시작하기 전에: CORS는 왜 필요할까? - SOP 이야기 CORS를 이해하려면 먼저 브라우저의 기본 보안 정..