All 230

TCP/UDP 포트 번호 정리

네트워크 통신에서 **포트(port)**는 하나의 IP 주소 내에서 여러 애플리케이션을 구분하기 위한 논리적 번호입니다.예를 들어, 같은 서버의 192.168.0.10 IP를 사용하더라도 80번 포트는 웹 서버(HTTP), 22번 포트는 SSH 접속으로 각각 다른 애플리케이션을 실행할 수 있습니다. IANA(Internet Assigned Numbers Authority)는 포트를 아래와 같이 구분합니다. Well-known Ports (0–1023) : 잘 알려진 포트, OS 및 표준 서비스에서 사용Registered Ports (1024–49151) : 특정 업체·애플리케이션에서 등록한 포트Dynamic/Private Ports (49152–65535) : 클라이언트가 임시로 사용하는 포트 (Ephe..

BackEnd 2025.08.27

Sync / Async / Blocking / Non-Blocking 정리

네트워크 I/O, 동시성 프로그래밍을 공부하다 보면 자주 등장하는 개념이 바로 동기(Synchronous), 비동기(Asynchronous), 블로킹(Blocking), 논블로킹(Non-Blocking) 입니다.처음 접하면 혼동하기 쉬운데, 사실 이들은 서로 다른 기준의 개념입니다.1️⃣ 개념 정리 구분 의미 특징Synchronous (동기)요청 후 응답까지 기다림함수 호출이 끝나야 다음 코드 실행Asynchronous (비동기)요청 후 바로 다음 코드 실행응답은 콜백, 이벤트, Future/Promise 등으로 나중에 처리Blocking (블로킹)스레드가 멈춤작업이 완료될 때까지 해당 스레드는 대기Non-Blocking (논블로킹)스레드가 멈추지 않음요청 후 바로 반환, 스레드는 다른 작업 수행 가능즉..

BackEnd 2025.08.05

DB Function vs Procedure 차이와 활용법

데이터베이스에서는 **Function(함수)**과 **Procedure(프로시저)**라는 두 가지 주요 SQL 프로그램 객체를 제공한다.둘 다 SQL 블록을 재사용할 수 있는 구조이지만, 반환 방식·호출 방식·트랜잭션 처리에서 큰 차이가 있다.1️⃣ Function과 Procedure 기본 개념Function (함수)값을 반환하는 SQL 객체일반 프로그래밍의 함수와 유사SELECT, WHERE 등 SQL 문장 내에서 직접 호출 가능-- Oracle 예시: 세금 계산 함수CREATE OR REPLACE FUNCTION calc_tax(p_amount NUMBER)RETURN NUMBERISBEGIN RETURN p_amount * 0.1;END;-- 사용 예시SELECT product_name, ca..

DB 2025.08.03

헥사고날 아키텍처 적용기: Project 설계 사례 (auth + sms)

1️⃣ 프로젝트 개요이번 Project는 사용자 메시지 전송 시스템을 예시로 한헥사고날 아키텍처 + 멀티모듈 구조 프로젝트입니다. 프로젝트의 목표:도메인 중심 설계: 핵심 비즈니스 로직을 외부 시스템(DB, 메시징 등)과 분리확장성과 유지보수성 확보: 외부 API, DB, 메시징 교체에도 최소한의 수정으로 대응멀티모듈 구성: 서비스별 역할을 모듈 단위로 명확히 분리 2️⃣ 모듈 구성Project/├── core # 도메인/유스케이스/포트 (비즈니스 핵심)├── auth # 사용자 인증 및 메시지 요청 API└── sms # SMS 전송 서버core프로젝트의 심장도메인 엔티티, 유스케이스, 포트 인터페이스 정의auth관리자 및 사용자 인증, 메시지 전송 요청 처리메시지 전송 요..

BackEnd 2025.08.03

헥사고날 아키텍처

헥사고날 아키텍처, 왜 도입하고 어떻게 활용할까?서비스가 커질수록 시스템의 복잡도는 기하급수적으로 증가한다. 외부 API 연동, 메시지 큐, 캐시 시스템, 다양한 DB 등과 연결되는 로직이 늘어나면서 자연스럽게 이런 고민이 생긴다.“내 핵심 비즈니스 로직은 어디에 있고, 외부 시스템과의 연결은 어디까지 확장돼야 하지?” “Kafka나 Redis를 붙이면 구조가 뒤엉키는데, 이게 맞는 방향일까?”이러한 질문에 답하기 위한 아키텍처가 바로 헥사고날 아키텍처(Hexagonal Architecture), 또는 Ports & Adapters Architecture이다. 이 글에서는 헥사고날 아키텍처의 핵심 개념부터 패키지 구조, 실제 구현 시 유의할 점까지 모두 정리해본다.헥사고날 아키텍처란?헥사고날 아키텍처는 ..

BackEnd 2025.07.30

멀티스레드 vs 버추얼 스레드 vs 코루틴: 실패와 중지 처리는 어떻게 다를까?

동시성과 병렬성을 구현할 때 스레드나 코루틴을 사용할 수 있지만, 실무에서는 단순 실행만큼 중요한 것이 있습니다.바로 작업 도중 실패했을 때 어떻게 중단하고 복구할 수 있느냐입니다.이 글에서는 Java의 전통적인 멀티스레드, Java 21의 버추얼 스레드, 그리고 Kotlin의 코루틴에서 **실패 처리(예외 처리, 중단, 롤백)**를 어떻게 다루는지 구조적으로 비교합니다.✅ 1. 전통 멀티스레드의 실패 처리특징OS 레벨 스레드중단: Thread.interrupt() 호출 → 내부에서 체크해야 함실패 처리: try-catch 사용, 직접 제어 필요자동 롤백 없음 (DB 트랜잭션, 상태 복구는 별도로 구현)예시Thread t = new Thread(() -> { try { for (int ..

Language/Kotlin 2025.07.14

Kotlin 코루틴은 멀티스레드 안에서 비동기 처리가 되는 걸까

코루틴을 처음 접할 때 가장 흔히 드는 의문 중 하나는 다음과 같습니다.“멀티스레드 위에서 비동기로 실행된다면, 결국 그냥 멀티스레드 아닌가?”“멀티스레드, 코루틴, 버추얼 스레드 각각은 어떻게 다르고 언제 써야 하지?”이 글에서는 Kotlin의 코루틴이 멀티스레드 환경에서 어떻게 비동기 처리를 수행하는지, 그리고 전통적인 멀티스레드나 Java의 버추얼 스레드와 어떤 차이가 있는지를 실무적인 관점에서 입체적으로 정리합니다.✅ 코루틴의 등장 배경: 왜 필요했을까?Java의 전통적인 멀티스레드는 다음과 같은 한계가 있습니다.스레드 하나당 약 1MB의 메모리 소비컨텍스트 스위칭 비용이 큼 (OS가 직접 관리)수천 개 이상의 동시 작업 처리 시 리소스 한계이런 제약을 극복하기 위해 등장한 것이 경량 스레드(Li..

Language/Kotlin 2025.07.14

Kotlin/Java 컬렉션 구조 비교: Stack vs Queue vs ArrayDeque

스택과 큐는 모든 프로그래머가 한 번쯤은 접해보는 대표적인 선형 자료구조입니다. Java 및 Kotlin에서도 다양한 구현체가 제공되지만, 실제로 어떤 자료구조를 써야 할지 헷갈릴 수 있습니다. 특히 Stack, Queue, ArrayDeque는 모두 삽입/삭제 연산을 제공하면서도 구조와 성능, 사용 목적이 다르기 때문에 정확한 이해가 필요합니다.이 글에서는 각 자료구조의 특징과 차이점을 비교하고, 어떤 상황에 어떤 자료구조를 선택해야 하는지 실용적인 가이드를 제공합니다.기본 개념 요약Stack (스택)LIFO (Last In, First Out) 구조가장 나중에 삽입된 요소가 가장 먼저 제거됨Java의 Stack 클래스는 Vector를 상속 → 동기화 처리됨 (synchronized)Kotlin에서도 ..

Language/Kotlin 2025.07.07

Spring Batch 실행 순서 정리

Spring Batch는 Job → Step → Reader/Processor/Writer 구조로 구성되며, 실행 시 각 컴포넌트가 정의된 순서와 스프링 컨텍스트 초기화 흐름에 따라 동작합니다. 이 글에서는 클래스 단위 기준으로 실행 순서를 정리합니다.✅ 실행 순서 흐름 (클래스 단위)BatchApplication└─ BatchConfig ← @Configuration: Job, Step, Reader 등 Bean 등록└─ UserJobLauncher ← @Component: JobLauncher로 수동 Job 실행 └─ ImportUserJob ← BatchConfig에서 정의된 Job ..

Spring Boot 어노테이션 실행 순서 정리

Spring Boot 애플리케이션이 실행될 때, 다양한 어노테이션들이 어떤 순서로 처리되는지 정확히 이해하는 것은 설정과 초기화 과정을 설계하는 데 매우 중요합니다. 이 글에서는 애플리케이션 구동 시 어노테이션이 처리되는 순서를 정리합니다.✅ 전체 흐름 요약Spring Boot는 SpringApplication.run(...) 실행 시 다음과 같은 단계로 어노테이션을 처리합니다:1. @ComponentScan2. @Configuration3. @Enable* / @Import4. @Component / @Service / @Repository / @Controller5. @Autowired / 생성자 주입6. @PostConstruct7. @ApplicationRunner / @CommandLineRun..

BackEnd/Spring Boot 2025.06.24