본문 바로가기

전체 글

(191)
Java 멀티 쓰레드 멀티스레드 도메인 3요소도메인역할 (Role)비유실제 자바 타입1. 작업 (Task)'무엇'을 할 것인가? (로직)요리 레시피Runnable, Callable2. 일꾼 (Worker)'누가' 실행할 것인가? (스레드)요리사Thread3. 관리자 (Executor)'언제/어디서' 시킬 것인가? (제어)주방장 (매니저)ExecutorService, ThreadPool 관리자는 일꾼들을 미리 뽑아놓고(Thread Pool), 들어오는 작업들을 줄 세워(Blocking Queue) 관리합니다.① 일꾼 바구니: 스레드 풀 (Thread Pool)역할 : 관리자를 "일꾼 10명"이라고 설정하면, 부팅 시점에 OS에 요청하여 스레드 10개를 미리 만들어 넣어둡니다.이득: 매번 new Thread()를 하지 않아도 되..
JDBC, HikariCP JDBCJava와 RDBMS를 연결하는 표준 인터페이스. 구현체는 존재하지 않고 아래의 규칙만 정의DriverManager : DB Driver를 직접 가동시켜 매번 물리적인 DB 연결을 새로 생성.DataSource: 컨넥션을 재사용 하기 위해서 컨넥션 풀을 관Connection: DB와의 연결 세션을 표현. 트랜잭션(commit, rollback) 및 Statement 생성 담당Statement / PreparedStatement: SQL 쿼리를 DB로 전송하고 실행하는 규칙 (executeQuery(), executeUpdate())ResultSet: DB가 돌려준 조회 결과 데이터를 다루는 규칙" (next(), getString()) Connection DB와의 물리적 연결(세션)을 관리합니다...
OS의 I/O 시스템 I/O 시스템I/O는 Input(입력)과 Output(출력), CPU와 메모리가 외부 장치들과 데이터를 주고받는 모든 과정OS 커널 내부의 I/O 시스템은 성격이 완전히 다른 두 가지 핵심 모듈 계층(Layer)으로 나뉘어 작동합니다.1. 장치 종속적 I/O 소프트웨어 : 하드웨어를 제어하는 모듈 (밑바닥 계층)2. 장치 독립적 I/O 소프트웨어 : 프로세스에게 데이터를 서빙하고 관리하는 모듈 (윗바닥 계층) 장치 종속적 I/O 소프트웨어 : 장치 드라이버 & 하드웨어 컨트롤러이 계층의 관심사는 오직 "어떻게 특정 하드웨어와 오류 없이 데이터를 주고받을 것인가"입니다. 프로세스가 누군지, 유저가 뭘 원하는지 이 계층은 전혀 관심이 없습니다.동작: 디스크, 네트워크 카드, 키보드 등 각 장치에 특화된 장..
분산 시스템의 문제점과 보완 네트워크의 불확실성네트워크의 불확실성으로 인해 한번의 요청으로 처리 완료( Exactly-Once Delivery)를 확신하는 방법이 존재하지 않는다.케이스 1: 전송 자체가 유실 → Producer 재전송 필요케이스 2: Consumer 처리는 됐는데 ACK가 유실 → 재전송하면 중복 발생케이스 3: Consumer 처리 중 timeout → 됐는지 안됐는지 모름메시지 전송 보장 전략At-Most-Once (최대 한 번) : ACK를 확인하지 않고 한 번만 보냅니다. 유실되면 끝입니다.At-Least-Once (최소 한 번) : ACK를 받을 때까지 계속 재전송합니다.Exactly-Once (정확히 한 번) : At-Least-Once로 ACK를 받을때 까지 계속 전송하지만 멱등성 처리일반적으로 일..
TypeScript Typiescript본질 : TypeScript는 컴파일 타임에만 존재하는 '가짜 언어'이고, 실제 실행은 JavaScript라는 '진짜 언어'가 한다.사용이유 : 에러를 실행 시점이 아니라 컴파일 시점에서 잡기 위해서 에러 검출방식 객체가 가진 필드의 이름과 타입(형태)을 검사class User { name: string; age: number; // 필드 타입 정의}const user = new User();user.age = "스물다섯";// ❌ 에러 발생: 'string' 형식을 'number' 형식에 할당할 수 없습니다. 함수의 입출력 타입검사// 파라미터에 age는 무조건 'number'만 들어와야 한다고 명시function registerAge(age: number) {console.l..
동시성 문제 동시성 문제 : 여러 스레드(Thread)나 프로세스가 동일한 자원(데이터, 파일, 메모리 등)에 동시에 접근하여 수정하려고 할 때, 예상치 못한 잘못된 결과가 발생하는 현상 동시성 프로그램 지표코드는 데이터의 일관성이 훼손되는 것을 막고 (Safety), 잠금으로 인해서 동작이 멈추는 것을 방지해야합니다 (Liveness) 멀티스레드 환경에서 코드가 안전하게 돌아가는지 평가할 때 보통 두 가지 축을 봅니다.개념의미한 줄 요약 Safety (안전성)"나쁜 일은 절대 일어나지 않는다."데이터가 꼬이거나 망가지지 않음(Race Condition 방지) Liveness (활성도)"좋은 일은 결국 일어난다."프로그램이 멈추지 않고 언젠가는 반드시 실행됨( 데드락 / 라이브락 / 기아 방지) 동시성 문제├──..
분산 시스템, 분산 트랜잭션 분산 시스템 (Distributed Systems)│├── 데이터 (Data)│ ├── 일관성 보장 (Consistency)│ │ ├── Outbox Pattern│ │ ├── Inbox / Idempotent Consumer│ │ ├── Two-Phase Commit (2PC)│ │ ├── Saga Pattern│ │ │ ├── Choreography│ │ │ └── Orchestration│ │ └── TCC (Try-Confirm-Cancel)│ ││ ├── 저장 방식 (Storage)│ │ ├── Event Sourcing│ │ └── CQRS│ ││ └── 동기화 (Synchronization)│ ..
Server-MCP 모델 1. 아키텍처의 변화: Server-Client → Server-MCP Host과거에는 서버가 클라이언트(브라우저/앱)에 데이터를 전달하는 것이 주 목적이었다면, 이제는 AI 에이전트(Claude 등)가 비즈니스 로직을 수행할 수 있도록 '환경'을 제공하는 구조로 변하고 있습니다.기존: [Server] ↔ [Client (Human Interface)]현재: [LLM (Brain)] ↔ [MCP Host (Orchestrator)] ↔ [MCP Server (Back-end/Tools)]핵심: 이제 백엔드의 직접적인 사용자는 '사람'이 아니라 **'지능을 가진 AI 에이전트'**가 됩니다. 2. 설계 중심의 이동: 자원(Resource) → 행위(Action)RESTful API가 데이터베이스의 엔티티..