Java/Spring
-
AOP(Aspect-Oriented Programming)핵심 비즈니스 로직과 공통 관심 사항(로깅, 보안, 트랜잭션, 예외 처리 등)을 분리하기 위한 프로그래밍 패러다임이다. AOP는 관심사를 모듈화해서 코드 중복을 줄이고 유지보수를 쉽게 만들기 위한 개념이다.예를 들어, 모든 서비스 로직에 로깅을 넣는다고 할 때 각 메서드마다 System.out.println() 을 직접 쓰는건비효율적이다. AOP를 쓰면 한 곳에서 정의하고 자동으로 설정한 모든 메서드에 적용할 수 있다. 🔧 어디에 사용하는가? 상황설명🔍 로깅(logging)메서드 실행 전/후 시간, 파라미터, 결과값 등을 기록할 때🔒 보안(Security)특정 메서드는 인증된 사용자만 접근 가능하게 할 때💾 트랜잭션 처리메서드 단위로 트..
AOP(Aspect-Oriented Programming)AOP(Aspect-Oriented Programming)핵심 비즈니스 로직과 공통 관심 사항(로깅, 보안, 트랜잭션, 예외 처리 등)을 분리하기 위한 프로그래밍 패러다임이다. AOP는 관심사를 모듈화해서 코드 중복을 줄이고 유지보수를 쉽게 만들기 위한 개념이다.예를 들어, 모든 서비스 로직에 로깅을 넣는다고 할 때 각 메서드마다 System.out.println() 을 직접 쓰는건비효율적이다. AOP를 쓰면 한 곳에서 정의하고 자동으로 설정한 모든 메서드에 적용할 수 있다. 🔧 어디에 사용하는가? 상황설명🔍 로깅(logging)메서드 실행 전/후 시간, 파라미터, 결과값 등을 기록할 때🔒 보안(Security)특정 메서드는 인증된 사용자만 접근 가능하게 할 때💾 트랜잭션 처리메서드 단위로 트..
2025.05.30 -
✅ 전체 흐름 요약 [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