최근 프로젝트들에서 API를 설계할 때, 항상 RESTful API로 설계를 했다. 사실 알고 있는 통신 방식이 RESTful 밖에 없었는데, GraphQL과 같은 통신 방식을 들으며 RESTful API를 내가 납득하고 쓸 수 있어야 겠다는 생각이 들어서 RESTful API란 무엇인지 공부해보고자 한다. 1. RESTful API란?RESTful API는 REST(Representational State Transfer) 아키텍처 스타일을 따르는 웹 API라고 한다.영어를 해석해보면:Representational(표현의)서버의 실제 데이터나 리소스 자체를 주고받는 게 아니라 표현(Representationa)을 주고받는다는 의미사용자 정보를 JSON, XML 등 다양한 형태로 "표현"해서 전달Stat..
Web
HTTP 메서드 스펙상 `POST`는 멱등성을 보장하지 않는다. 하지만 결제나 포인트 충전 같은 민감한 로직에선 네트워크 지연이나 사용자의 실수로 인한 중복 처리를 반드시 막아야 한다. 이를 멱등키를 적용해 구현할 수 있다는 사실을 알게 되었다. 그래서 한번 실험해보려고 한다. 사용자의 포인트를 충전하기 위한 API를 만들어야 하고, 멱등키를 지원해야 한다는 상황이다.요구사항URL: `POST /api/v1/points/charge`Header: ` Idempotency-Key`: `String`Request Body: { "userId": 1, "amount": 1000}Response Body (성공 시):{ "status": "SUCCESS", "currentBalance": 1000, "..
백엔드 개발자라면 웹 서버와 WAS에 대해 잘 알아야 한다고 생각한다. 서버 측 로직과 데이터를 처리하는데, 이 과정에서 우리가 작성한 코드가 실제로 어떻게 배포되고 어떤 환경에서 실행되며, 어떻게 클라이언트와 통신하는지 이해해야 더 좋은 시스템을 설계하고 구현할 수 있기 때문이다. 그 뿐만 아니라, 문제가 발생하면 문제의 원인을 빠르게 찾아 해결할 수도 있을 것이다. 웹 서버란?웹 서버는 HTTP 프로토콜을 기반으로 클라이언트(브라우저)의 요청을 받아 정적 컨텐츠(HTML, CSS, 이미지 등)를 제공하는 서버이다. 하드웨어적 관점에선 웹 서버 소프트웨어와 웹사이트의 컴포넌트 파일들을 저장하는 컴퓨터를 의미하고, 소프트웨어적 관점에선 클라이언트가 호스트 파일들에 어떻게 접근하는지를 관리하는 HTTP ..
LG cns 최종 면접에서 '동기, 비동기에 설명해주세요.'라는 질문을 받았었다. 그 당시 허접하게 '동기는 순차적으로, 비동기는 동시에 프로세스가 진행됩니다. ~~.'라고 허접하게 답변한 기억이 있다. 시스템의 특성과 요구사항을 분석해 가장 적합한 패턴을 선택하는것이 중요한 백엔드 개발자의 역량에서 Blocking과 Non-Blocking / Sync와 Async 개념은 필수적이다. 과거의 허접한 나에서 발전하기 위해 이 개념을 내 것으로 만들어 보자. Blocking과 Non-Blocking / Sync와 Async는 서로 독립적인 개념으로 다음과 같이 정의할 수 있다:Blocking과 Non-Blocking ➡️ 제어권의 소유Blocking: 호출한 함수가 제어권을 가져가서 해당 작업이 완료될 때까..
Servlet 서블릿은 동적 컨텐츠를 만드는 웹 컴포넌트이다. 조금 쉽게 말하면, 서블릿은 클라이언트의 요청에 따라 HTML, JSON 등을 동적으로 만들어 준다. 클라이언트가 HTTP 요청을 한다고 생각해 보자. 클라이언트가 웹 서버에 HTTP 요청을 한다. 서블릿 컨테이너는 요청 URL과 매핑된 서블릿을 찾고 HttpServletRequest, HttpServletResponse 객체를 생성한다. 서블릿 컨테이너는 매핑된 서블릿에게 클라이언트의 요청을 HttpServletRequest에 담아 전달한다. 서블릿은 받은 요청에 따른 로직을 수행하고 클라이언트에게 보낼 데이터를 생성한다. 서블릿은 생성한 데이터를 HttpServletResponse 객체에 담아 서블릿 컨테이너에게 전달한다. 서블릿 컨테이너..