전체 글 195

리버스 프록시

리버스 프록시(Reverse Proxy)란? 리버스 프록시(Reverse Proxy) 는 클라이언트의 요청을 대신 받아 서버로 전달하고, 서버의 응답을 받아 다시 클라이언트에게 반환하는 중간 서버임. 일반적으로 로드 밸런싱, 보안 강화, 캐싱, SSL 처리, 웹 가속화 등의 목적으로 사용됨. 1️⃣ 리버스 프록시 vs 포워드 프록시 리버스 프록시와 포워드 프록시는 개념이 다름.구분리버스 프록시 (Reverse Proxy)포워드 프록시 (Forward Proxy)요청 방향클라이언트 → 리버스 프록시 → 백엔드 서버클라이언트 → 포워드 프록시 → 인터넷사용 목적서버 보호, 로드 밸런싱, SSL 처리사용자 익명성 보호, 웹 필터링클라이언트가 아는 서버리버스 프록시가 서버처럼 동작클라이언트가 프록시를 직접 설정..

Infra 2025.04.03

[Java] ArrayDeque

📌 Java의 ArrayDeque란? ArrayDeque(배열 기반 덱, Double-Ended Queue)은 양쪽에서 삽입과 삭제가 가능한 자료구조로, 배열(Array) 기반으로 동작하는 덱(Deque) 임. ✅ 특징 • 양방향 삽입/삭제 가능 → addFirst(), addLast(), removeFirst(), removeLast() • 빠른 성능 → ArrayList보다 요소 추가/삭제가 빠름 (LinkedList보다도 빠를 수 있음) • 크기 제한 없음 → 동적으로 크기 조절 가능 • 스택(LIFO), 큐(FIFO)로 모두 사용 가능 • null 저장 불가 → NullPointerException 발생 1️⃣ ArrayDeque 선언 및 기본 사용법 📌 ArrayDeque 선언import j..

BE/Java 2025.04.02

[Spring Boot] WebFlux

Spring WebFlux란? Spring WebFlux는 비동기(Asynchronous) 및 논블로킹(Non-blocking) 방식으로 동작하는 웹 프레임워크로, Spring 5에서 처음 도입되었음. ✅ Spring WebFlux의 특징 1. 비동기 & 논블로킹 (Asynchronous & Non-blocking) • 기존 Spring MVC는 요청을 처리하는 동안 스레드를 블로킹하지만, WebFlux는 논블로킹 방식으로 동작하여 높은 동시성 처리 가능. 2. 리액티브 스트림(Reactive Streams) 기반 • Publisher와 Subscriber 개념을 활용하여 데이터 스트림을 처리. • Project Reactor의 Mono와 Flux를 사용하여 비동기 데이터 흐름을 제어. 3. 함수형 엔드..

[Spring Boot] DAO와 Repository의 차이?

1️⃣ DAO (Data Access Object)란? DAO는 데이터베이스와의 직접적인 상호작용을 담당하는 객체로, SQL을 사용하여 CRUD(Create, Read, Update, Delete) 작업을 수행하는 계층을 의미함. 📌 특징 • 데이터베이스와 직접 연결하여 데이터를 조회, 저장, 수정, 삭제하는 역할. • JDBC, MyBatis, Hibernate, JPA 등 다양한 방법으로 구현 가능. • 비즈니스 로직(Service)과 데이터 접근을 분리하여 코드의 유지보수성을 높임. 📌 DAO 예제 (JDBC 사용)import java.sql.*;public class UserDao { private static final String URL = "jdbc:mysql://localhost:..

[Spring Boot] DAO

DAO (Data Access Object)란? 1️⃣ DAO 개념 DAO(Data Access Object)는 데이터베이스(DB)와 애플리케이션 간의 데이터 접근을 담당하는 객체임. 즉, DAO는 데이터베이스와 직접 상호작용하는 계층으로, 데이터를 조회, 저장, 수정, 삭제(CRUD)하는 역할을 함. DAO를 사용하는 이유: • 비즈니스 로직과 데이터 접근 코드의 분리 (유지보수성 증가) • 데이터베이스 변경 시 애플리케이션 코드에 최소한의 영향 • 코드의 재사용성을 높이고 가독성을 향상 2️⃣ DAO 패턴 구조 DAO는 MVC 패턴에서 Model 계층의 일부로 사용됨. DAO 패턴의 주요 구성요소: 1. Entity (DTO, VO) • DB 테이블과 1:1 매핑되는 데이터 객체 2. DAO (Dat..

[Kotlin] 비동기 처리 (async, await)

코틀린의 비동기 처리 (async, await) 코틀린에서는 비동기(Asynchronous) 처리를 위해 Coroutine(코루틴)을 활용함.특히, async와 await 을 사용하면 비동기 작업을 실행하고 그 결과를 기다리는 방식으로 코드를 효율적으로 작성할 수 있음. 1️⃣ 비동기 처리의 필요성 코틀린에서 비동기 처리를 사용하는 이유: • CPU 작업과 I/O 작업을 효율적으로 처리하기 위해 • 동기 코드보다 빠른 실행 가능 (여러 작업을 동시에 수행) • 메인 스레드를 블로킹(blocking)하지 않음 (예: UI 애플리케이션에서 중요) 2️⃣ async 와 await 개념 • async {} → 비동기적으로 실행되는 작업을 정의 • await() → 비동기 작업의 결과를 반환받음 (suspend ..

BE/Kotlin 2025.03.29

[Java] 비동기 처리 (try-catch)

자바에서 비동기 처리 시 예외 처리 (try-catch) 자바에서 비동기 처리(Asynchronous Processing) 를 할 때 예외(Exception)를 적절하게 처리하는 것은 매우 중요함.비동기 코드에서는 기존의 try-catch 문이 제대로 동작하지 않을 수 있기 때문에 별도의 예외 처리 방식을 적용해야 함. 1️⃣ 기본적인 try-catch 블록 (동기 코드에서 예외 처리) 동기(Synchronous) 코드에서는 try-catch 블록을 사용하여 예외를 쉽게 처리할 수 있음.public class SyncTryCatchExample { public static void main(String[] args) { try { int result = 10 / 0;..

BE/Java 2025.03.28

[Kotlin] as? 와 null 형변환

코틀린의 as? 연산자와 안전한 널(null) 형변환 코틀린에서는 형변환(Type Casting) 을 위해 as 연산자를 사용하지만, 형변환이 실패할 경우 런타임 오류(ClassCastException)가 발생할 수 있음. 이를 방지하기 위해 안전한(null-safe) 형변환 연산자인 as? 를 제공함. 1. as 연산자 (일반적인 형변환) 기본적으로 as 연산자는 한 객체를 특정 타입으로 변환하려고 할 때 사용됨.val obj: Any = "Hello"val str: String = obj as String // 성공println(str) // Hello 하지만, 형변환이 불가능한 경우 런타임 오류가 발생함.val obj: Any = 123val str: String = obj as String ..

BE/Kotlin 2025.03.27

Artillery (부하테스트 툴)

Artillery란? Artillery는 웹 애플리케이션이나 API의 성능을 측정하고, 부하 테스트(Load Test)를 수행하는 오픈소스 성능 테스트 도구임. 주로 웹 서비스의 부하 상황을 가정하여 동시에 많은 사용자가 접근했을 때 서비스가 얼마나 빠르고 안정적으로 작동하는지 측정하기 위해 사용됨. • 공식 홈페이지: https://www.artillery.io/ • GitHub 레포지토리: https://github.com/artilleryio/artillery Artillery의 주요 기능과 장점 Artillery의 주요 특징 및 장점은 다음과 같음. • 간단한 설정: YAML 파일로 시나리오를 설정하고 간편하게 테스트 가능함. • 성능 측정 및 모니터링: 응답시간(Response time), 초당..

Infra/Performance 2025.03.26

DSL

DSL(Domain Specific Language)이란? DSL(Domain Specific Language)이란 특정한 문제나 도메인을 표현하거나 해결하기 위해 특별히 설계된 프로그래밍 언어를 의미함. DSL은 Domain-Specific Language의 약자로, 우리말로는 ‘도메인 특화 언어’라고 번역할 수 있음. 여기서 도메인이란 특정한 영역이나 문제 범위를 의미함. 즉, 범용적인 프로그래밍 언어(예: Java, Python)가 모든 분야를 폭넓게 다룰 수 있는 언어라면,DSL은 특정한 분야나 문제에 맞춰서 간결하고 명확한 표현을 하도록 만들어진 언어임. DSL을 사용하는 목적 DSL을 사용하는 가장 큰 목적은 특정 분야에서 문제를 쉽고 직관적으로 표현하고 해결하기 위함임. 즉, • 특정 도메인..

CS 2025.03.25