BackEnd 89

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

헥사고날 아키텍처 적용기: 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

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

K6란? 성능 테스트 도구 소개 및 실습 결과 분석

웹 서비스의 안정성을 확보하기 위해선 사전에 성능 테스트가 필수입니다. 특히 많은 요청이 몰릴 때 서버가 어떻게 반응하는지를 미리 확인하고 병목을 찾는 작업이 중요합니다. 이 글에서는 K6란 무엇인지, 기존 성능 도구(ab, JMeter 등)와의 차이점, 그리고 실제 부하 테스트 예시 및 결과 분석까지 정리합니다. ✅ K6란?K6는 Grafana Labs에서 만든 모던 부하 테스트 도구입니다. 주요 특징은 다음과 같습니다:코드 기반 테스트 (JavaScript)CLI 기반 실행 (스크립트 파일로 실행)HTTP 기반 API 테스트에 최적화고성능 (Go 기반)장점항목설명✅ 코드 중심테스트 시나리오를 JavaScript로 작성, 조건 분기와 반복도 가능✅ DevOps 친화적CI/CD에 쉽게 통합 가능 (Git..

BackEnd 2025.06.20

[WebFlux_2] @RestController vs @Component

✅ Spring WebFlux의 핵심 구조: DispatcherHandler와 그 내부 구조앞에서 @RestController와 @Component 방식의 차이를 다뤘다면, 이번에는 이 둘이 내부적으로 어떤 구조에서 동작하며, 왜 그 차이가 발생하는지를 정리해본다.🔸 DispatcherHandler란?DispatcherHandler는 Spring WebFlux의 중앙 진입점이다. Spring MVC에서의 DispatcherServlet과 역할이 동일하며, HTTP 요청을 받아 핸들러를 찾고 실행한 뒤 결과를 반환하는 흐름을 제어한다. WebFlux는 논블로킹 환경에서 동작하기 때문에 DispatcherHandler도 내부적으로 Mono와 Flux를 사용해 모든 처리를 리액티브하게 실행한다.🔸 Rest..

Kafka + Spring Boot 완전 연동기: Apache Kafka 실패부터 Bitnami Kafka 성공까지

Kafka를 처음부터 끝까지 Docker 기반으로 설정하고 Spring Boot 애플리케이션과 연동하는 과정을 공유합니다.특히 Apache Kafka 이미지로 고생한 뒤 Bitnami Kafka로 전환해 성공한 내용을 기록합니다.✅ 1. Spring Boot로 Kafka 연동하기Spring에서는 spring-kafka 의존성만 추가하면 Kafka를 쉽게 연동할 수 있습니다.// build.gradle.ktsimplementation("org.springframework.kafka:spring-kafka")Kafka 설정은 application.yml로 구성하며, 기본적인 Consumer/Producer 설정은 다음과 같습니다:spring: kafka: bootstrap-servers: localh..

BackEnd 2025.06.19

[WebFlux_1] @RestController vs @Component

Spring WebFlux를 사용할 때 가장 먼저 마주치는 애노테이션 중 하나가 @RestController입니다. 그런데 같은 스프링 빈으로 등록되는 @Component와 무엇이 다른 걸까요? 이 글에서는 @RestController와 @Component의 차이를 기본 개념부터 실무 사용 포인트, 내부 동작까지 정리합니다. 1️⃣ WebFlux란?Spring WebFlux는 Spring 5부터 도입된 리액티브 논블로킹 웹 프레임워크입니다.서블릿 기반 대신 Netty, Undertow 등 리액티브 서버를 기반으로 동작주요 리턴 타입: Mono, Flux (Project Reactor 기반)비동기 스트림 처리에 최적화2️⃣ @RestController vs @Component 기본 차이 항목@RestCon..