프록시 서버의 두 가지 유형: 포워드 프록시와 리버스 프록시
·
Backend Development
들어가며프록시 서버는 클라이언트와 서버 사이에서 중개자 역할을 하는 서버입니다. 프록시 서버는 크게 포워드 프록시와 리버스 프록시로 나뉘며, 각각의 역할과 특징이 다릅니다. 이번 글에서는 이 두 가지 프록시 서버의 차이점과 각각의 사용 사례를 자세히 살펴보겠습니다.포워드 프록시 (Forward Proxy)개념포워드 프록시는 클라이언트 측에 위치하여, 클라이언트의 요청을 대신 전달하는 중개자 역할을 합니다. 주로 사용자의 익명성 보장과 접근 제어에 사용됩니다.주요 기능익명성 제공클라이언트의 실제 IP 주소를 숨김프록시 서버의 IP 주소로 요청을 대체개인정보 보호와 보안 강화캐싱자주 요청되는 웹 페이지나 파일을 저장네트워크 대역폭 절약응답 속도 향상보안 강화악성 웹사이트 접근 차단불법 콘텐츠 필터링바이러스 ..
HTTPS: 웹 보안의 기본, 안전한 통신의 시작
·
Backend Development
오늘날 우리는 인터넷을 통해 수많은 개인정보와 중요한 데이터를 주고받습니다. 이 과정에서 데이터의 안전성은 매우 중요한 이슈가 되었습니다. 이번 글에서는 웹 보안의 기본이 되는 HTTPS에 대해 자세히 알아보도록 하겠습니다.HTTP vs HTTPS: 왜 HTTPS가 필요한가?HTTP의 한계HTTP(Hypertext Transfer Protocol)는 웹의 기본이 되는 통신 규약입니다. 하지만 HTTP는 데이터를 평문(암호화되지 않은 형태)으로 전송하기 때문에 다음과 같은 보안 위험이 있습니다:데이터 탈취 위험중간자 공격(Man-in-the-Middle Attack) 가능성데이터 변조 위험HTTPS의 등장이러한 보안 위험을 해결하기 위해 HTTPS(Hypertext Transfer Protocol Secu..
스택(Stack) 자료구조: 개념부터 구현까지
·
Backend Development
자료구조는 프로그래밍의 기초이자 핵심입니다. 그 중에서도 스택(Stack)은 가장 기본적이면서도 강력한 자료구조 중 하나입니다. 이 글에서는 스택의 기본 개념부터 Java와 Python에서의 구현 방법까지, 실무에서 바로 활용할 수 있는 지식을 제공합니다.1. 스택이란 무엇인가?스택은 후입선출(LIFO: Last In, First Out) 원칙을 따르는 선형 자료구조입니다. 쉽게 말해, 가장 나중에 들어온 데이터가 가장 먼저 나가는 구조를 가집니다.스택의 주요 특징데이터는 항상 스택의 최상단(top)에서만 삽입(push)과 삭제(pop)가 이루어집니다.스택이 비어있을 때 pop을 시도하면 스택 언더플로우(Stack Underflow)가 발생합니다.스택이 가득 찼을 때 push를 시도하면 스택 오버플로우(..
MySQL InnoDB의 락킹 메커니즘: 갭락과 넥스트키 락 이해하기
·
Backend Development
서론데이터베이스에서 트랜잭션의 격리성(Isolation)을 보장하기 위한 락킹 메커니즘은 매우 중요합니다. 특히 MySQL InnoDB 엔진은 갭락(Gap Lock)과 넥스트키 락(Next-Key Lock)이라는 독특한 락킹 메커니즘을 제공하여 팬텀 리드(Phantom Read) 현상을 방지합니다. 이 글에서는 이러한 락킹 메커니즘의 개념과 동작 방식을 자세히 살펴보겠습니다.팬텀 리드(Phantom Read)란?팬텀 리드는 트랜잭션 격리성과 관련된 중요한 문제입니다. 이는 다음과 같은 상황에서 발생합니다:트랜잭션 A가 특정 조건으로 데이터를 조회트랜잭션 B가 새로운 데이터를 삽입트랜잭션 A가 동일한 조건으로 다시 조회할 때, 이전에 없던 새로운 데이터가 나타남예시 코드-- 트랜잭션 A 시작START TR..
CORS 이해하기: 크로스 오리진 리소스 공유의 모든 것
·
Backend Development
서론현대 웹 애플리케이션은 다양한 출처(Origin)의 리소스를 활용합니다. 이때 발생할 수 있는 보안 문제를 해결하기 위해 CORS(Cross-Origin Resource Sharing)가 등장했습니다. 본 글에서는 CORS의 개념, 필요성, 그리고 작동 방식을 상세히 설명하겠습니다.CORS의 기본 개념1. CORS란?CORS는 서로 다른 출처 간의 리소스 공유를 가능하게 하는 보안 메커니즘입니다. 여기서 출처(Origin)는 다음 세 가지 요소로 구성됩니다:프로토콜 (http, https)도메인 (example.com)포트 (80, 443 등)2. 출처 비교 예시URL 1URL 2동일 출처 여부https://example.comhttps://example.comOhttps://example.comht..
Spring AOP와 @Transactional: private 메서드에서의 동작 방식
·
Backend Development
서론Spring Framework에서 @Transactional 애너테이션은 데이터베이스 트랜잭션 관리를 위한 핵심 기능입니다. 그러나 이 애너테이션이 private 메서드에서 제대로 동작하지 않는 경우가 있습니다. 이는 Spring AOP의 동작 방식과 밀접한 관련이 있습니다. 본 글에서는 Spring AOP의 동작 원리와 @Transactional이 private 메서드에서 동작하지 않는 이유, 그리고 이를 해결하는 방법에 대해 설명하겠습니다.Spring AOP의 동작 원리1. AOP 프록시 생성 방식Spring AOP는 런타임에 동작하며, JDK Dynamic Proxy와 CGLIB 두 가지 방식으로 프록시를 생성합니다.JDK Dynamic Proxy인터페이스를 구현한 클래스에 적용public 메서..
네트워크 타임아웃 이해하기: Connection, Socket, Read Timeout
·
Backend Development
서론네트워크 통신에서 타임아웃은 시스템의 안정성과 효율성을 보장하는 중요한 개념입니다. 특히 Connection Timeout, Socket Timeout, Read Timeout은 각각 다른 시점에서 발생하며, 각각의 역할과 중요성이 다릅니다. 본 글에서는 이 세 가지 타임아웃의 차이점과 필요성에 대해 설명하겠습니다.타임아웃의 종류와 특징1. Connection TimeoutConnection Timeout은 클라이언트가 서버에 연결을 시도할 때, 일정 시간 내에 연결이 이루어지지 않으면 발생하는 타임아웃입니다.주요 특징TCP 3-way-handshake 과정에서 발생서버의 장애나 응답 지연으로 인해 연결 실패 시 발생연결 수립 단계의 타임아웃2. Socket TimeoutSocket Timeout은 ..