스택(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은 ..