CS 42

ConcurrentHashMap

ConcurrentHashMap이란?ConcurrentHashMap 은 Java에서 제공하는 멀티스레드-safe한 해시 맵(Map) 구현체임.동시에 여러 스레드가 데이터를 읽거나, 추가하거나, 수정하거나, 삭제해도 안전하게 작동하도록 설계되었음.1. 왜 필요한가?기본적인 HashMap 은 동기화 기능이 없기 때문에 멀티스레드 환경에서 사용할 경우 데이터 충돌(레이스 컨디션)이 발생함.예:Map map = new HashMap();Runnable task = () -> map.put("key", "value");위 코드를 여러 스레드에서 동시에 실행하면 데이터가 유실되거나 예외가 발생할 수 있음이를 해결하기 위해 ConcurrentHashMap을 사용함2. 구조적 특징 (Java 8 기준)핵심 특징:내부 ..

CS 2025.05.19

분산락

분산락(Distributed Lock)이란?분산락(Distributed Lock) 은 여러 대의 서버 또는 인스턴스가 동시에 공유 자원(예: 데이터, 파일, 외부 API 등)을 수정하거나 사용할 때, 하나의 주체만 접근할 수 있도록 잠금을 거는 방식임.단일 서버 내에서의 synchronized 나 Lock 과 달리, 분산 환경에서는 서로 다른 프로세스, 서버, JVM 간에도 락을 공유해야 함.1. 분산 환경에서 왜 락이 필요한가?예시 상황:주문 시스템에서 동시에 두 사용자가 같은 상품을 주문하면 재고가 음수가 될 수 있음스케줄러가 여러 서버에서 동시에 실행되면 중복 작업 수행 가능성 있음동일한 외부 API를 중복 호출하여 과금 증가 위험 발생→ 이를 막기 위해 '누가 먼저 락을 잡았는가'를 공유할 수 있..

CS 2025.05.15

임계구역

임계구역(Critical Section)이란?임계구역(Critical Section) 은 둘 이상의 스레드 또는 프로세스가 동시에 접근하면 안 되는 공유 자원(변수, 메모리, 파일 등)을 접근하는 코드 영역을 의미함.여러 작업(스레드)이 이 구역을 동시에 실행하면 데이터 충돌, 레이스 컨디션(race condition), 이상 동작이 발생할 수 있기 때문에, 서로 배타적으로 접근하도록 제어해야 함.1. 왜 임계구역이 필요한가?멀티스레드 환경에서는 다음과 같은 문제가 발생함:여러 스레드가 공유 변수에 동시에 접근함한 스레드가 값을 수정하는 도중 다른 스레드가 동일 변수에 접근함결과적으로 예상치 못한 값, 데이터 손실, 프로그램 오작동이 발생함→ 이런 충돌을 막기 위해 '임계구역'을 정의하고, 한 번에 하나..

CS 2025.05.14

Gof 디자인 패턴

GoF(Gang of Four) 디자인 패턴 정리 1. 생성(Creational) 패턴객체 생성 방식의 유연성과 캡슐화를 지원함패턴명설명Singleton오직 하나의 인스턴스만 생성되도록 보장함Factory Method객체 생성 로직을 서브클래스에 위임함Abstract Factory관련 객체 집합을 생성하는 인터페이스 제공Builder복잡한 객체 생성을 단계별로 분리함Prototype기존 객체를 복사하여 새로운 객체를 생성함2. 구조(Structural) 패턴클래스나 객체를 조합하여 더 큰 구조를 만들기 위한 패턴패턴명설명Adapter인터페이스가 다른 클래스를 호환되도록 연결해 줌Bridge구현과 추상화를 분리하여 독립적으로 확장 가능하게 함Composite트리 구조로 객체를 구성하고, 전체-부분 관계를 ..

CS 2025.05.13

세션

세션(Session)이란?세션(Session) 은 웹에서 사용자의 상태를 서버에 유지하기 위해 사용되는 기술임.HTTP는 본래 Stateless(무상태) 프로토콜이기 때문에, 사용자가 요청을 보낼 때마다 서버는 이전 요청과의 연결 관계를 알 수 없음.따라서 로그인, 장바구니, 사용자 설정 등 사용자별 데이터를 유지하려면 '세션'이라는 개념이 필요함.1. 세션의 기본 동작 원리전체 흐름:클라이언트가 서버에 처음 요청을 보냄서버는 고유한 세션 ID를 생성하여 클라이언트에 전달함 (Set-Cookie)클라이언트는 이후 요청마다 해당 세션 ID를 쿠키를 통해 자동으로 전송함서버는 세션 ID를 기반으로 해당 사용자의 상태 정보를 메모리나 저장소에서 조회함→ 결과적으로 서버가 클라이언트별 상태를 유지할 수 있게 됨..

CS 2025.05.11

쿠키

쿠키(Cookie)란? – 웹 브라우저의 상태 관리 기술 정리쿠키(Cookie) 는 웹 서버가 클라이언트(브라우저)에 저장시키는 작은 데이터 조각임.주로 사용자 인증 상태 유지, 세션 식별, 사용자 설정 저장 등에 사용되며,HTTP가 기본적으로 상태를 유지하지 않는(stateless) 특성을 보완해 줌.1. 쿠키의 기본 구조쿠키는 HTTP 응답 또는 자바스크립트를 통해 클라이언트에 저장되며, 이후 같은 도메인에 요청할 때 자동으로 포함되어 전송됨.예시 (HTTP 헤더):Set-Cookie: userId=12345; Path=/; Max-Age=3600; HttpOnly; Secure; SameSite=Lax2. 쿠키의 주요 속성들속성설명Name=Value쿠키의 키-값 쌍Domain쿠키가 전송될 도메인 지..

CS 2025.05.10

매직 넘버

매직 넘버(Magic Number)란?매직 넘버(Magic Number) 란, 코드 안에서 의미 없이 하드코딩된 숫자 값을 말함.즉, 설명이 없이 갑자기 등장하는 "숫자 상수" 로, 코드의 의미를 모호하게 만들고 유지보수를 어렵게 함.1. 매직 넘버 예시public double getCircleArea(double radius) { return radius * radius * 3.14159; // ← 3.14159가 매직 넘버}위 코드에서 3.14159 는 "왜 저 숫자가 사용되었는지" 를 설명하지 않기 때문에다른 사람이 볼 때 의미를 파악하기 어렵고, 실수로 수정하거나 복사/붙여넣기 시 오류를 유발할 수 있음.2. 매직 넘버가 문제되는 이유문제설명가독성 저하숫자의 의미를 알기 어렵고, 코드의 목적..

CS 2025.05.09

3-Way Handshake

3-Way Handshake 란? (TCP 연결 설정 과정)**3-Way Handshake(3-웨이 핸드셰이크)**는 TCP 통신에서 연결을 설정하기 위해 클라이언트와 서버가 3번의 패킷을 주고받는 과정을 의미함.TCP는 신뢰성 있는 데이터 전송을 보장하기 위해 연결 지향형(Connection-oriented) 방식으로 동작함.따라서 실제 데이터를 주고받기 전에 통신 상대방과 연결이 준비되었는지를 확인하고 연결을 수립하는 과정이 필요함.1. 왜 3-Way Handshake가 필요한가?TCP는 다음을 보장하기 위해 3단계 절차를 수행함:양측 모두 통신 준비가 되었는지 확인함시퀀스 번호를 주고받아 순서를 맞춤패킷 유실, 중복 방지, 흐름 제어 등을 위한 상태 정보를 초기화함2. 3-Way Handshake의..

CS 2025.05.08

프로토콜

프로토콜(Protocol)이란 무엇인가?프로토콜(protocol) 은 컴퓨터나 시스템 간의 데이터 통신을 위한 약속 또는 규칙의 집합임.쉽게 말해, 컴퓨터끼리 서로 말이 통하게 하려면 “어떻게 대화할지”에 대한 공통된 규칙이 필요하며,이 규칙들을 표준화한 것이 바로 네트워크 프로토콜임.1. 왜 프로토콜이 필요한가?사람도 서로 다른 언어를 쓰면 통신이 안 되는 것처럼, 컴퓨터도 규약 없이 서로 데이터를 주고받으면 오류가 발생함.어떤 포맷으로 보낼지, 언제 응답할지, 어떤 에러에 어떻게 반응할지 등 모든 것을 정해 놓아야 함.예:“보낼 때 앞에 길이부터 붙이자”“응답은 무조건 3초 이내에 하자”“파일 전송은 일정한 조각 단위로 나눠서 보내자”이러한 규약들을 표준화한 것이 TCP, HTTP, FTP, DNS ..

CS 2025.05.03

퍼사드 패턴

퍼사드 패턴(Facade Pattern)이란 무엇인가퍼사드(Facade) 패턴은 복잡한 시스템이나 서브시스템에 대해 단순화된 인터페이스를 제공하는 디자인 패턴임.여러 개의 클래스나 복잡한 로직을 하나의 인터페이스로 감싸서, 외부에서 쉽게 사용할 수 있도록 도와줌."퍼사드(Facade)"라는 단어는 건물의 '정면'이나 '외관'을 뜻하는데, 건물 내부가 복잡하더라도 외부에서는 단순한 입구만 사용하면 되는 것처럼, 복잡한 구현을 감추고 단순한 인터페이스만 제공하는 것이 퍼사드 패턴의 핵심임.1. 퍼사드 패턴의 구조퍼사드 패턴의 구조는 다음과 같음.클라이언트 → 퍼사드(Facade) → 여러 서브시스템 클래스들클라이언트복잡한 서브시스템을 직접 다루지 않고, 퍼사드 인터페이스를 통해 기능을 사용함.퍼사드 (Fac..

CS 2025.04.14