전체 글 36

멱등성(idempotency) 있는 엔드포인트 설계

이번주 회사에서 고객의 Credit Report을 벤더사에게 요청하는 엔드포인트를 만들어달라는 요청을 받았다. 벤더사에 Credit Report를 처음 요청하면 25불 정도 청구가 되고, 그 이후에 재발급 받으려면 대략 5불정도의 금액이 청구가 된다고 들었다. 이렇게 돈을 다루는 엔드포인트를 만들게 되면, 빠질 수 없는게 멱등성을 가진 엔드포인트를 만드는 일일거다. 멱등성이란?멱등성은 간단하게 얘기해서 여러번 요청이 들어와도 똑같은 결과를 보여주는 속성을 멱등성이라고 한다. HTTP Request Method에는 멱등성이 있는 친구들이 있고 없는 친구들이 있는데, 요약하면 아래와 같다. HTTP Method멱등성 여부GETOPOSTXPUTOPATCHXQUERYODELETEOHEADO POST와 PATCH..

백엔드 16:27:13

gRPC는 언제 써야하는걸까?

gRPC 많이 들어본 단어다. 이름에서 보듯 RPC를 이용한 기술이고, REST API 대신 쓸 수 있다고는 대충 들었는데... 대체 언제 쓰고 왜 쓰는 걸까? gRPC에 대해서 자세히 한 번 알아보자 Remote Procedure Call (RPC)Remote Procedure Call 한국말로 원격 프로시저 호출로 불리는 RPC는 네트워크 안에 있는 다른 컴퓨터의 함수를 마치 Local 환경에 있는 것처럼 실행하는 통신 기술이다. 이게 대체 무슨 말일까? 예를 들어 클라이언트가 서버로 요청을 보낸다고 해보자. REST API를 사용해 타 서버를 호출하려면 어떤 URL로 경로를 잡을지, HTTP Method(GET/POST)는 뭘로 할지, Request/Response 객체는 어떻게 파싱 할지 등 고민..

백엔드 2026.09.13

AWS 볼트

최근 이직한 스타트업에서 데이터 백업을 어떻게 하면 더 안전하게 관리할 수 있을지에 대한 논의가 있었다. 다른 기업들이 랜섬웨어 공격을 받았다는 소식을 보면서, 우리 서비스의 데이터 보관 체계를 한 단계 강화해보자는 취지였다.이전 회사에서는 보안팀이나 데브옵스, 데이터팀이 이런 영역을 전담했기에 깊이 관여할 기회가 없었는데, 스타트업에 와서 인프라의 안전성을 직접 고민하고 설계해볼 수 있게 된 점은 엔지니어로서 꽤 즐거운 경험이었다.그렇다면 우리가 대비해야 할 최악의 시나리오, 즉 클라우드의 Root 유저 권한이 탈취당하는 상황이 발생한다면 과연 어떻게 백업 데이터를 지켜낼 수 있을까? 기존의 벡업 시스템현재 우리 인프라는 Amazon Machine Image(AMI)와 EBS 스냅샷을 활용해서 백업을 ..

백엔드/Cloud 2026.09.06

AI Agent 메모리

이전 포스트에서 AI Agent의 구성요소 중 하나가 메모리라고 얘기를 했었습니다. 그럼 이 메모리는 왜 중요할까요? 우리가 흔히 접하는 전통적인 LLM이나 AI 모델은 기본적으로 Stateless 방식으로 동작합니다. 즉, 각 질문과 요청을 완전히 독립적인 작업으로 취급하죠. 방금 전에 나눈 대화라 할지라도 세션이 끊기거나 맥락이 넘어가면 모든 것을 잊어버립니다. 하지만 진정한 AI Agent는 질의응답만이 아니라, 워크플로우를 디자인해서 주어진 목표를 자동으로 수행하는 시스템입니다. 이러한 에이전트가 제대로 작동하려면 피드백 루프를 돌고, 지식 베이스를 활용하며, 과거의 상호작용을 통해 스스로를 개선해나가야 합니다. 즉, AI가 맥락을 유지하고, 시간에 따른 패턴을 인식하며, 과거의 경험을 바탕으로 ..

AI 2026.08.30

에이전트(Agent)에 관하여

컴퓨터 공학을 배우면 코딩하는 법보다는 컴퓨터가 어떻게 작동하고 만들어져 왔는지 배웁니다. 그리고 인공지능을 배운다고 하면, Machine Learning, Deep Learning 등을 배울 때 모델, 수학 공식 등을 배웁니다. 그런데 Agentic Coding을 사용하는 우리는 Agent에 대해서 제대로 알고 쓰는 걸까요? 그래서 오늘은 Agent에 대해서 좀 더 깊게 알아볼까 합니다. 에이전트 (Agent)란?IBM 공식문서에서 정의한 바에 따르면 "가용가능한 도구(Available tools)와 함께 워크 플로우(workflow)를 디자인해서, 주어진 과제들을 자동으로 수행하는 시스템"이라고 합니다. 여기서 도구는 최신 정보를 얻거나 과제를 수행할 때 사용되는 것들을 얘기하는데요. 예를 들어서, ..

AI 2026.08.16

형 변환(Type Conversion, Type Casting) 근데 자바(Java)를 곁들인

최근에 알고리즘 문제 관련 코드 리뷰를 받았다. 자바 라이브러리의 Math.pow()를 써서 지수(Exponent) 연산을 구현했는데, 처리하려는 변수의 원시 타입(Primitive Type)은 정수(Integer)였다. 피드백의 요지는 Math.pow()가 double을 반환하기 때문에 불필요한 type conversion을 강제한다는 점이었다. 따라서 정수(Integer) 연산만 전용으로 처리하는 함수를 만들어 쓰라는 권장이었다. Math.pow()가 double을 리턴한다는 사실은 알고 있었지만, 단순 형 변환(Type Conversion)을 유발하는 오버헤드는 그리 크지 않을 거라 생각했었다. 과연 그럴까?형 변환(Type Conversion, Type Casting)이란?한국어로는 Type Co..

백엔드/Java 2026.08.09

Controller Layer에 관하여

개발 업무를 시작하고 나서, Controller - Service - Repository로 이어지는 아키텍처를 많이 봤다. 그중 Controller의 역할은 단순하게 Input을 받고/정제하고 Service 레이어에 보내주고 관련 Output을 받는 걸로 이해를 했다. 하지만 Controller를 그렇게 사용하지 않고 다른 용도를 포함해서 쓰는 코드를 본적이 있다. Controller Layer는 어떻게 정의하는게 좋을까? MVC 패턴대표적인 디자인 아키텍처인 MVC(Model - View - Controller)를 살펴보자. 먼저 Model의 대한 역할은 애플리케이션의 Business 로직과 Data 구조에 대해 관리한다. 예를 들어, 쇼핑몰에서 유저가 결제를 하게 되면 관련 Business 로직과 데..

백엔드 2026.08.02

[데이터 중심 애플리케이션 설계] 확장성과 부하

시스템 디자인에서 확장성은 "증가한 부하에 대처하는 시스템 능력을" 설명하는 데 사용하는 용어라고 한다. 그럼 확장성을 고려한 설계는 다양한 부하(load)를 고민해 보는 설계가 필요하다. 그럼 이 부하는 어떻게 표현할까? 부하 매개변수와 측정 방법부하는 부하 매개변수(load parameter)라고 부르는 몇 개의 숫자로 나타낼 수 있는데, 이러한 부하 매개변수에 대한 선택은 시스템 디자인에 따라 달라진다고 한다. 예를 들어, 웹 서버의 초당 요청 수, 데이터베이스의 읽기 대 쓰기 비율, 대화방의 동시 활성 사용자, 캐시 적중률 등이 될 수 있다. 그럼 부하가 생겼을 때, 시스템의 성능을 어떻게 검증할 수 있는 지도 알아봐야한다. 온라인 시스템에서 대표적인 부하 관련 지표로는 응답 시간(response..

서로소 집합 자료 구조 (Union-Find Data Structure)

지난주 Leetcode Daily Problem의 테마는 Disjoint Set을 사용하는 문제가 많이 나왔었다. 그래서 이번에 개념을 확실히 정리해두려고 . Disjoint Set두 개의 겹치치 않는 집합(Set) 이 있다. 이런 집합을 Disjoint set이라고 부른다. 즉 공통 원소(Common Element)가 존재하지 않는 부분 집합(Subset)의 집합을 말한다. 그리고 Disjoint Set을 표현하기 가장 좋은 자료구조 중 하나가 Union-Find 자료구조다. Union-Find그럼 Union-Find 자료구조는 어떻게 Disjoint Set을 표현할까요? 제일 먼저 Union-Find는 보통 Tree 방식으로 표현이 됩니다. 그리고 세 가지 연산을 이용해서 Disjoint Set을 만..

Algorithm 2026.07.19

[Docker] 컨테이너와 이미지

개발을 하다보면 도커를 직·간접적으로 자주 사용할 일이 많았다. 이미 구축된 파이프라인에 코드를 푸시해 빌드할 때나, 로컬 환경을 프로덕션 환경과 똑같이 세팅하는 등 다양한 용도로 도커를 썼다. 예전에 도커에 대해 잠깐 공부 했을 때 '격리된 환경을 만들어서 버전 관리를 쉽게 해준다'는 것만 알고 있었지 어떤 원리로 작동 되는지는 잘 몰랐다. 그래서 이번 기회에 한 번 공부해봤다. 컨테이너 (Container)컨테이너에 대해 이해 하려면 리눅스 커널이 가지고 있는 격리 기능들에 대해서 먼저 살펴봐야 한다. 결국 컨테이너는 이 격리 기능들을 기반으로 만들어진 공간이기 때문이다. 대표적인 격리 기능은 Namespaces와 Control Groups (cgroups)가 있다.Namespaces: 각 시스템의 ..

백엔드 2026.07.12