전체 글 511

[Spring][AOP] 3. Advisor API

1. Advisor"어떤 시점에 어떤 부가기능을 실행할지"를 정의 (Advice + Pointcut을 묶은 객체)Aspect의 최소 단위 2. 구현체DefaultPointcutAdvisorAdvisor advisor = new DefaultPointcutAdvisor(pointcut, advice);기본 구현체Advice + Pointcut를 한 번에 묶어서 등록이 가능 3. Advice 혼합 사용다양한 타입들의 Advice 객체를  혼합해서 하나의 프록시에 등록할 수 있음 예제) ProxyFactory더보기더보기더보기MyService target = new MyServiceImpl();ProxyFactory factory = new ProxyFactory();factory.setTarget(target..

Spring/Spring 2025.04.09

[Spring][AOP] 2. Pointcut API

1. Spring Pointcut API어떤 Advice가 어떤 메서드에 적용될지를 결정하는 기준을 정의함 Pointcut 인터페이스public interface Pointcut { ClassFilter getClassFilter(); MethodMatcher getMethodMatcher();}Advice의 적용 대상을 지정클래스와 메서드 조건이 모두 만족될 때 적용됨 항목ClassFilterMethodMatcher역할Pointcut이 적용될 클래스를 필터링Pointcut이 적용될 메서드를 필터링평가 시점AOP 프록시 생성 시점정적: 프록시 생성 시동적: 메서드 호출 시마다 평가정적/동적 여부항상 정적정적 (isRuntime() == false) 동적 (isRuntime() == true)주..

Spring/Spring 2025.04.09

[Spring][AOP] 1. Advice API

1. Advice 생명 주기구분Per-Class (공유 인스턴스)Per-Instance (객체별 인스턴스)적용 방식모든 대상 객체에서 동일한 Advice 인스턴스 공유각 대상 객체마다 별도의 Advice 인스턴스 생성상태 관리StatelessStateful사용 사례- 트랜잭션 관리- 로깅- 보안 검사- Mixin 패턴 구현- Introduction (인터페이스 동적 추가)성능메모리 사용량이 적고 효율적객체마다 인스턴스 생성 → 메모리 오버헤드 가능성대상모든 메서드 호출에 공통 적용특정 객체에 한정된 확장 기능 적용Spring AOP 지원기본 방식 (JDK 동적 프록시/CGLIB)@Aspect(perthis, pertarget) 2. Advice 유형Advice 종류실행 시점반환값 변경예외 처리사용 목적 ..

Spring/Spring 2025.04.09

[Spring][Validation] 2. Java Bean Validation

1. jakarta.validation자바 애플리케이션에서 공통된 유효성 검증을 위한 Bean Validation API Validator항목설명정의도메인 객체에 정의된 제약 조건을 검증함유효성 검증 방법수동적으로 호출하여 사용- validator.validate(object) 예제)더보기Validator validator = Validation.buildDefaultValidatorFactory().getValidator();Person person = new Person(); // name=null, age=–1Set> violations = validator.validate(person);for (ConstraintViolation violation : violations) { System.o..

Spring/Spring 2025.04.06

[Spring][Validation] 1. Validator Interface

1. Spring의 Validator 인터페이스를 이용한 검증Validator 인터페이스public interface Validator { boolean supports(Class clazz); void validate(Object target, Errors errors);}메서드명설명supports(Class clazz)검증 대상 타입 확인(이 Validator가 특정 클래스 타입을 검증할 수 있는지 여부를 반환)validate(Object target, Errors errors)실제 검증 로직 수행- Errors 객체 제공: 검증 중 발생한 오류를 수집함  예제) 객체더보기더보기public class PersonValidator implements Validator { public b..

Spring/Spring 2025.04.06

[Spring][Object] 1. Data Binding

1. Data BindingMap 형태의 사용자 입력을 자바 객체로 바인딩하는 기술DataBinder 클래스를 통해 구현됨키는 JavaBean 스타일의 프로퍼티 경로를 따라야 함 2. 바인딩 방식항목Constructor BindingProperty Binding바인딩 대상생성자 파라미터setter내부 메커니즘생성자를 통해 객체 생성BeanWrapper로 필드 세팅생성자 조건단일 생성자만 존재해야 함필요 없음파라미터 매핑 방식파라미터 이름 기준 (@ConstructorProperties 사용 가능)프로퍼티 이름과 setter로 자동 매핑중첩 객체 자동 생성✅✅컬렉션 지원✅✅사용 예record, DTO, 불변 객체일반적인 JavaBean, mutable 객체 예제) Constructor Binding더보기p..

Spring/Spring 2025.04.06

[Spring][Field] 2. Formatting

1. Formatter클라이언트 환경에서 문자열 ↔️ 객체 간 변환을 처리하는 인터페이스 특징특징설명강타입 기반Formatter 제네릭 타입으로 타입 안정성 보장Locale 지원Locale 정보를 기반으로 사용자 친화적인 지역화 포맷 처리 가능양방향 변환 지원print(): 객체 → 문자열parse(): 문자열 → 객체예외 처리변환 실패 시 ParseException 또는 IllegalArgumentException 발생 가능Thread-unsafe상태(state)를 가지는 경우 다중 스레드 환경에서 안전하지 않음 (주의 필요)  예시) DateFormatter더보기public final class DateFormatter implements Formatter { private String patt..

Spring/Spring 2025.04.06

[Spring][Field] 1. Type Conversion

1. Spring Type Conversion타입 변환 시스템 (기존 PropertyEditor의 대안) 기능외부 문자열을 자바 타입으로 변화애플리케이션 전반에서 타입 변환 API로 활용함 주요 인터페이스인터페이스설명Converter가장 기본적인 변환기. S → T로 단일 타입 변환ConverterFactory변환 대상이 계층 구조일 때 사용 (ex. String → Enum)GenericConverter다중 타입 지원. 유연하지만 복잡ConditionalGenericConverter특정 조건에 따라 변환 수행 (어노테이션, 메소드 존재 등)ConversionService런타임에서 변환 실행하는 중앙 APIConverterRegistry변환기 등록용 SPI 예제) Converter더보기public cla..

Spring/Spring 2025.04.06

[Spring][Core] 3-5. Container: Additional Capabilities of the ApplicationContext

1. MessageSource국제화를 지원하는 인터페이스다양한 언어로 메시지를 관리하고 사용자에게 언어별로 적절한 메시지를 제공할 수 있게 함public interface MessageSource { @Nullable String getMessage(String code, @Nullable Object[] args, @Nullable String defaultMessage, Locale locale); String getMessage(String code, @Nullable Object[] args, Locale locale) throws NoSuchMessageException; String getMessage(MessageSourceResolvable resolvable, Loc..

Spring/Spring 2025.04.06

[Spring][Core] 3-4. Container: Environment Abstraction

1. Profile특정 환경에서만 등록될 빈(Bean) 정의의 논리적 그룹 @Profile 애너테이션특정 프로파일이 활성화될 때만 해당 빈이 등록되도록 합니다표현식 사용 가능 (&, |, !) 예제) @Profile더보기@Configuration@Profile("development")public class StandaloneDataConfig { @Bean public DataSource dataSource() { return new EmbeddedDatabaseBuilder() .setType(EmbeddedDatabaseType.HSQL) .addScript("classpath:com/bank/config/sql/schema.sql") ..

Spring/Spring 2025.04.06