Java
-
Spring Security 6버전을 설정하면서 문득 FilterChain 의 순서가 궁금하여 찾아보다가 아래 방법으로 목록을 확인했다. @Autowiredprivate List securityFilterChains;@PostConstructpublic void printFilters() { securityFilterChains.forEach(chain -> { chain.getFilters().forEach(filter -> { System.out.println("FILTER === "+filter.getClass().getSimpleName()); }); });} SecurityFilterChain 목록을 가진 리스트를 @Autowired 를 통..
Spring Security FilterChain 목록 조회(@PostConstruct)Spring Security 6버전을 설정하면서 문득 FilterChain 의 순서가 궁금하여 찾아보다가 아래 방법으로 목록을 확인했다. @Autowiredprivate List securityFilterChains;@PostConstructpublic void printFilters() { securityFilterChains.forEach(chain -> { chain.getFilters().forEach(filter -> { System.out.println("FILTER === "+filter.getClass().getSimpleName()); }); });} SecurityFilterChain 목록을 가진 리스트를 @Autowired 를 통..
2025.06.16 -
의존성 주입을 할때 대표적인게 @Autowired 어노테이션을 사용하거나 클래스의 생성자 주입을 사용한다. ✅ @Autowired vs 생성자 주입 – 차이점 요약항목@Autowired 주입생성자 주입주입 방식필드나 메서드에 @Autowired 설정생성자를 통해 주입불변성객체 필드가 final 이 될 수 없음final 키워드로 인해 불변 보장 가능테스트 용이성Mock 주입 어려움(리플렉션 필요)테스트 시 생성자 인자만 넘기면 됨Null SafetyNPE 발생 가능성이 존재객체 생성 시 반드시 주입되므로 안전순환 참조감지 어려움컴파일 단계에서 일부 감지 가능권장 여부(Spring 공식)과거에 많이 사용Spring 팀에서 권장하는 방식 ✅ 왜 생성자 주입이 "귀찮게" 느껴질까? 생성자 주입을 해놓은 ..
Spring @Autowired 주입과 생성자 주입 차이 그리고 파라미터 주입의존성 주입을 할때 대표적인게 @Autowired 어노테이션을 사용하거나 클래스의 생성자 주입을 사용한다. ✅ @Autowired vs 생성자 주입 – 차이점 요약항목@Autowired 주입생성자 주입주입 방식필드나 메서드에 @Autowired 설정생성자를 통해 주입불변성객체 필드가 final 이 될 수 없음final 키워드로 인해 불변 보장 가능테스트 용이성Mock 주입 어려움(리플렉션 필요)테스트 시 생성자 인자만 넘기면 됨Null SafetyNPE 발생 가능성이 존재객체 생성 시 반드시 주입되므로 안전순환 참조감지 어려움컴파일 단계에서 일부 감지 가능권장 여부(Spring 공식)과거에 많이 사용Spring 팀에서 권장하는 방식 ✅ 왜 생성자 주입이 "귀찮게" 느껴질까? 생성자 주입을 해놓은 ..
2025.06.11 -
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