Java
-
✅ 전체 흐름 요약 [1] 클라이언트 → HTTP 요청 (JSON 문자열) ↓[2] DispatcherServlet (Spring의 Front Controller) ↓[3] HandlerMapping → Controller 매핑 ↓[4] HandlerAdapter 실행 ↓[5] HttpMessageConverter 를 통해 JSON → Java 객체 변환 (@RequestBody) ↓[6] Controller 메서드에서 DTO 사용 ✅ 주요 구성 요소 설명 + 예시 1. 클라이언트 요청 (JavaScript + Axios)const user = { name: "홍길동", age: 30 };axios.post('/api/users', JSON.stringify(user), { ..
Spring 에서 클라이언트의 API 요청(JSON 요청) 변환 및 처리 과정✅ 전체 흐름 요약 [1] 클라이언트 → HTTP 요청 (JSON 문자열) ↓[2] DispatcherServlet (Spring의 Front Controller) ↓[3] HandlerMapping → Controller 매핑 ↓[4] HandlerAdapter 실행 ↓[5] HttpMessageConverter 를 통해 JSON → Java 객체 변환 (@RequestBody) ↓[6] Controller 메서드에서 DTO 사용 ✅ 주요 구성 요소 설명 + 예시 1. 클라이언트 요청 (JavaScript + Axios)const user = { name: "홍길동", age: 30 };axios.post('/api/users', JSON.stringify(user), { ..
2025.05.27 -
Spring boot 기준으로 톰캣에 어플리케이션를 올렸다고 생각해보자 ✅ 메인 쓰레드의 역할Java 어플리케이션의 메인 쓰레드(Main Thread)는 프로젝트 내 프로젝트 명 + Application.java 파일을 보면public static void main(String[] args) 메서드가 존재하는데 어플리케이션의 최초 실행 흐름을 담당하는단 하나의 초기 진입점이다. Spring Boot 어플리케이션을 실행하면 main() 메서드에서 시작된다.@SpringBootApplicationpublic class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.cla..
Spring에서의 Thread 와 Thread PoolSpring boot 기준으로 톰캣에 어플리케이션를 올렸다고 생각해보자 ✅ 메인 쓰레드의 역할Java 어플리케이션의 메인 쓰레드(Main Thread)는 프로젝트 내 프로젝트 명 + Application.java 파일을 보면public static void main(String[] args) 메서드가 존재하는데 어플리케이션의 최초 실행 흐름을 담당하는단 하나의 초기 진입점이다. Spring Boot 어플리케이션을 실행하면 main() 메서드에서 시작된다.@SpringBootApplicationpublic class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.cla..
2025.05.21 -
Spring Boot 3 에서 동적 스케줄링이 필요해 어떤 방법으로 할까 고민하다가 비동기 형태의 방식으로ThreadPool 을 만들어 실행했다. 어플리케이션의 메인쓰레드, TaskScheduler 의 쓰레드, TaskExecutor 쓰레드는 각각 다른Thread Pool 을 만들어놓고 사용한다. 여기서 @Async 는 TaskExecutor 의 쓰레드를 사용해 비동기 처리한다. 1. @Async 사용을 위한 Config 설정package com.deotis.wisevoiceweb.system.config;import java.util.concurrent.Executor;import org.springframework.context.annotation.Bean;import org.springframewo..
Spring Boot @Async 어노테이션과 비동기 설정Spring Boot 3 에서 동적 스케줄링이 필요해 어떤 방법으로 할까 고민하다가 비동기 형태의 방식으로ThreadPool 을 만들어 실행했다. 어플리케이션의 메인쓰레드, TaskScheduler 의 쓰레드, TaskExecutor 쓰레드는 각각 다른Thread Pool 을 만들어놓고 사용한다. 여기서 @Async 는 TaskExecutor 의 쓰레드를 사용해 비동기 처리한다. 1. @Async 사용을 위한 Config 설정package com.deotis.wisevoiceweb.system.config;import java.util.concurrent.Executor;import org.springframework.context.annotation.Bean;import org.springframewo..
2025.05.21 -
Runnable 인터페이스란?작업(Task)을 정의하기 위한 함수형 인터페이스이다.주로 스레드에서 실행할 작업을 정의할 때 사용된다. @FunctionalInterfacepublic interface Runnable { void run();} 추상 메서드인 void run() 메서드만 존재한다.@FuntionalInterface 가 붙어있는 함수형 인터페이스라서 람다식으로 표현 가능하다.결과값이 없고 예외도 throws 하지 않는 단순한 실행 작업을 나타낸다. ✅ 언제 사용하나요? Thread 생성 시 실행할 작업 정의ExecutorService 같은 스레드 풀에 작업 제출할때 사용 ✅ Thread와 함께 사용하는 예 일반 클래스package com.obo.controller;public cl..
Runnable 인터페이스, ExecutorService 인터페이스Runnable 인터페이스란?작업(Task)을 정의하기 위한 함수형 인터페이스이다.주로 스레드에서 실행할 작업을 정의할 때 사용된다. @FunctionalInterfacepublic interface Runnable { void run();} 추상 메서드인 void run() 메서드만 존재한다.@FuntionalInterface 가 붙어있는 함수형 인터페이스라서 람다식으로 표현 가능하다.결과값이 없고 예외도 throws 하지 않는 단순한 실행 작업을 나타낸다. ✅ 언제 사용하나요? Thread 생성 시 실행할 작업 정의ExecutorService 같은 스레드 풀에 작업 제출할때 사용 ✅ Thread와 함께 사용하는 예 일반 클래스package com.obo.controller;public cl..
2025.05.16 -
Spring 의 @Scheduled 어노테이션을 통해 정적 스케쥴링은 해봤으나DB 데이터 기반으로 동적스케쥴링을 설정 해본적이 없어 진행한다. SchedulingConfigurer 란?Spring 의 스케줄링 설정을 프로그래밍적으로 커스터마이즈할 수 있게 해주는 인터페이스이다.@EnableScheduling 어노테이션과 함께 사용되며 스케줄링 작업을 코드 기반으로 등록할 수 있게해주는 인터페이스다. 주요 특징동적 스케줄링 설정 가능@Scheduled 어노테이션의 정적 스케쥴링 한계 극복런타임에 스케줄 작업 추가/수정✅ 언제 사용하나? 상황 사용 이유 @Scheduled가 부족할 때실행 주기를 DB에서 동적으로 제어하거나, 조건적으로 등록/제거하고 싶을 때여러 작업을 코드로 한꺼번에 등록하고 싶을 때코드..
Spring Boot 3 동적 스케줄링 설정해보기Spring 의 @Scheduled 어노테이션을 통해 정적 스케쥴링은 해봤으나DB 데이터 기반으로 동적스케쥴링을 설정 해본적이 없어 진행한다. SchedulingConfigurer 란?Spring 의 스케줄링 설정을 프로그래밍적으로 커스터마이즈할 수 있게 해주는 인터페이스이다.@EnableScheduling 어노테이션과 함께 사용되며 스케줄링 작업을 코드 기반으로 등록할 수 있게해주는 인터페이스다. 주요 특징동적 스케줄링 설정 가능@Scheduled 어노테이션의 정적 스케쥴링 한계 극복런타임에 스케줄 작업 추가/수정✅ 언제 사용하나? 상황 사용 이유 @Scheduled가 부족할 때실행 주기를 DB에서 동적으로 제어하거나, 조건적으로 등록/제거하고 싶을 때여러 작업을 코드로 한꺼번에 등록하고 싶을 때코드..
2025.05.15 -
ShedLock 이란?Java 에서 ShedLock 은 분산 작업 환경에서 스케쥴러가 동시에 여러 인스턴스에서 실행되는 것을 방지하기 위해사용하는 분산 락 라이브러리다.쉽게 말해 Java 에서 스케쥴러가 돌고 있다고 치면 동시에 여러 스케쥴러가 같은 시간에 같은 동작을 하면안되기 때문에 Lock 을 걸어 같은 작업을 동시에 못하도록 막아버린다. 예를 들어 Spring Boot 어플리케이션이 이중화되어 2대가 있다고 하면@Scheduled 어노테이션이 존재하는 클래스가 2개가 존재하고 작업을 실행했을 때별도의 조치가 없다면 2개의 스케쥴 작업이 진행된다. 이때 데이터 중복 처리나 성능 문제가발생할 수 있기 때문에 ShedLock 을 사용하여 Lock 을 걸어 동시성 문제를 해결한다. 🔧 동작 원리 1...
Java ShedLock 이란?ShedLock 이란?Java 에서 ShedLock 은 분산 작업 환경에서 스케쥴러가 동시에 여러 인스턴스에서 실행되는 것을 방지하기 위해사용하는 분산 락 라이브러리다.쉽게 말해 Java 에서 스케쥴러가 돌고 있다고 치면 동시에 여러 스케쥴러가 같은 시간에 같은 동작을 하면안되기 때문에 Lock 을 걸어 같은 작업을 동시에 못하도록 막아버린다. 예를 들어 Spring Boot 어플리케이션이 이중화되어 2대가 있다고 하면@Scheduled 어노테이션이 존재하는 클래스가 2개가 존재하고 작업을 실행했을 때별도의 조치가 없다면 2개의 스케쥴 작업이 진행된다. 이때 데이터 중복 처리나 성능 문제가발생할 수 있기 때문에 ShedLock 을 사용하여 Lock 을 걸어 동시성 문제를 해결한다. 🔧 동작 원리 1...
2025.05.13