
들어가며결제 버튼을 빠르게 두 번 누르면 어떻게 될까?사용자가 두 번 눌렀다는 이유로 결제까지 두 번 처리되어서는 안 된다. 결제뿐만 아니라 주문 생성, 포인트 차감, 쿠폰 사용과 같이 한 번만 실행되어야 하는 기능에서중복 요청을 안전하게 처리할 수 있어야 한다. 1. 중복 요청은 왜 발생할까?중복 요청은 개발자나 사용자가 의도하지 않아도 발생할 수 있다.사용자가 버튼을 빠르게 두 번 클릭한 경우네트워크 타임아웃으로 클라이언트가 요청을 자동 재전송한 경우서버의 응답을 받지 못해 사용자가 다시 시도한 경우동일한 요청을 고의로 반복해서 호출한 경우따라서 “사용자가 한 번만 누를 것이다”라는 가정만으로 API를 설계해서는 안 된다. 2. 레이어별 중복 요청 방어 전략중복 요청은 하나의 계층에서만 막기보다 ..
들어가며트래픽이 폭주하여 서버가 느려졌다. 이 때, 캐시(Cache)와 메시지 큐(Queue) 중 어느 것을 도입해야하는가?진짜 문제를 해결하기 위해서는 '원인(병목)'을 먼저 찾아 그에 알맞게 선택해야한다.1. 캐시(Cache)느려진 원인이 반복적인 데이터 조회(Read) 때문일 때.데이터베이스(DB)까지 가지 않고 메모리에서 데이터를 즉시 반환(조회 속도 O(1))하여 서버와 DB의 연산 부담을 줄임.2. 메시지 큐(Queue)느려진 원인이 무거운 작업이나 쓰기/생성(Write) 요청 때문일 때.서버가 요청을 받자마자 메시지 큐에 던져두고 사용자에게는 "접수 완료" 응답을 바로 보냄.실제 무거운 처리는 백엔드에서 비동기(Asynchronous)로 차례차례로 처리한다. 3. 병목을 찾는 모니터링 도구"..
SchemaSchema는 테이블, 뷰, 인덱스 등의 데이터베이스 객체를 구분하고 관리하는 이름 공간이다.그런데 Schema라는 용어는 MariaDB, PostgreSQL, Oracle에서 조금씩 다른 의미로 사용된다. 따라서 사용하던 DBMS가 변경되면 같은 Schema라는 표현 때문에 데이터베이스 구조를 혼동할 수 있다.DBMS별 구조를 간단히 정리하면 다음과 같다. MariaDBDB 서버 → Database(= Schema) → Table PostgreSQLDB 서버 → Database → Schema → TableOracleDB 서버·인스턴스 → PDB → User(≒ Schema) → Table
소셜 로그인 기능을 구현하다 보면 마주하게 되는 단어가 있다.바로 Access Token과 Refresh Token 많은 튜토리얼에서 Refresh Token을 DB에 저장하라고 가르치지만, 모든 서비스가 그럴 필요는 없다.오히려 불필요한 저장 방식은 보안 리스크만 키울 수 있다. 이번 글에서는 서비스의 성격에 따른 OAuth 2.0 관리 정책의 차이점을 정리해보고자 한다. 1. 시나리오 A: "사용자가 서비스에 접속해 있는 동안만 권한이 필요해요" (단순 로그인 및 실시간 데이터 조회 서비스 + 활동 기반 실시간 인증 방식)사용자가 우리 서비스에 로그인해서 마이페이지를 보거나, 버튼을 눌러 본인의 구글 드라이브 파일 목록을 불러오는 경우이다.핵심 로직: 사용자가 우리 서비스에 '로그인' 상태를 유지..
1. NIC 설정이란?"NIC(네트워크 인터페이스 카드)"설정은 운영체제에서 IP 주소, 서브넷 마스크, 게이트웨이, DNS 등을 구성하여 네트워크 통신을 가능하게 하는 과정" 이라고 정의되어 있다. 우리가 Window에서 이더넷 설정으로 DHCP를 사용하지 않고 수동으로 고정 IP설정을 할 때, 아래의 같은 설정창에서설정하는 것도 NIC 설정이라고 볼 수 있다. 2. 각 설정 항목의 역할단순히 숫자를 입력하는 것처럼 보이지만, 이 값들은 네트워크 통신을 위한 '주소 체계'를 형성한다.IPv4 주소: 네트워크상에서 내 컴퓨터를 식별하는 고유한 주소 번호서브넷 마스크: 네트워크 상에서 내 PC가 속한 '동네의 범위'를 의미함 어디까지가 내부 네트워크(우리 동네)이..