Java
-
Spring Bean 을 등록하는 이유는 여러가지가 있다. 📌 장점 항목설명의존성 주입(DI)스프링이 객체를 관리해주므로 생성자 주입 등 다른 의존 객체도 자동 주입 가능싱글톤 유지기본적으로 Spring Bean 은 싱글톤으로 관리해 매번 새로 생성되지 않고 재사용AOP 사용 가능@Transactional, @Async 등 AOP 기능 사용 가능생명주기 관리@PostConstruct, @PreDestroy 등을 통해 초기화 및 종료 로직을 관리 가능유지보수 용이스프링 컨테이너가 관리하므로 설정, 테스트, 확장 등에 유리함 ✅ 1. @Component 기본적인 Bean 등록 어노테이션Spring 이 클래스파일 경로를 스캔할 때(@ComponentScan) Bean 등록을 위한 어노테이션들이 붙은 클..
Spring Bean 등록을 위한 어노테이션(@Component, @Controller, @Service, @Repository, @Configuration+@Bean)Spring Bean 을 등록하는 이유는 여러가지가 있다. 📌 장점 항목설명의존성 주입(DI)스프링이 객체를 관리해주므로 생성자 주입 등 다른 의존 객체도 자동 주입 가능싱글톤 유지기본적으로 Spring Bean 은 싱글톤으로 관리해 매번 새로 생성되지 않고 재사용AOP 사용 가능@Transactional, @Async 등 AOP 기능 사용 가능생명주기 관리@PostConstruct, @PreDestroy 등을 통해 초기화 및 종료 로직을 관리 가능유지보수 용이스프링 컨테이너가 관리하므로 설정, 테스트, 확장 등에 유리함 ✅ 1. @Component 기본적인 Bean 등록 어노테이션Spring 이 클래스파일 경로를 스캔할 때(@ComponentScan) Bean 등록을 위한 어노테이션들이 붙은 클..
2025.06.11 -
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