IT/Spring 8

[Spring] AOP

Spring 이 제공하는 중요한 기능 중 하나인 AOP(Aspect-Oriented Programming) 에 대해 정리하고자 한다.AOP 는 애플리케이션의 핵심 비즈니스 로직과 이를 둘러싼 공통 기능(로깅, 보안, 트랜잭션 관리 등)을 분리하여 모듈화하는데 집중한다. AOP 관련 핵심 개념에는 다음과 같은 항목들이 있다.1. Aspect (관점)- 공통 기능(횡단 관심사)을 모듈화한 것2. Join Point (결합 지점)- Aspect 를 적용할 수 있는 지점  > Spring AOP 에서는 메서드 실행 지점만 Join Point 로 지원3. Advice (조언)- Join Point 에서 수행할 구체적인 작업 정의4. Pointcut (포인트컷)- Advice 가 적용될 Join Point 를 필터..

IT/Spring 2025.01.06

[Spring] JDK Proxy vs. CGLIB

Spring AOP 에서는 프록시 기술로 JDK Proxy 와 CGLIB 를 제공하고 있는데,  이 둘에 대한 비교 글을 작성하고자 한다. 1. JDK Proxy - 인터페이스 기반  > 프록시를 생성하려면 반드시 대상 객체가 구현한 인터페이스가 있어야 함- InvocationHandler.invoke() 메서드를 통해 인터페이스의 메서드 호출을 처리 2. CGLIB- 클래스 기반  > 대상 클래스의 상속을 통해 프록시를 생성하고, 메서드를 오버라이딩하여 동작 추가  > 인터페이스를 구현하지 않은 클래스도 프록시로 사용할 수 있음- 내부적으로 MethodInterceptor 를 구현하여 메서드 호출을 가로채고 처리- 대상 클래스나 메서드가 final 이면 프록시 생성 불가 3. 기타- JDK Proxy ..

IT/Spring 2025.01.05

[Spring] Reflection

Reflection 개념에 대해 얕게 알고 자동으로 사용해 왔음을 알고 이참에 정리하고자 한다. 1. 정의- Java 에서 런타임 시 클래스, 메서드, 필드 등의 정보를 동적으로 탐색하고 조작할 수 있는 메커니즘 2. 사용 예시- 의존성 주입  > @Autowired 어노테이션이 붙은 필드가 메서드에 Reflection 을 사용해 적절한 빈을 주입- AOP (Aspect-Oriented Programming)  > Reflection 을 사용해 메서드 실행 전후에 추가 로직을 삽입하거나 메서드 호출을 가로챔- 커스텀 애너테이션 처리 3. 특징- 유연성 (런타임에 동적으로 객체를 다룰 수 있어 확장성 제공)- 코드 간소화- 성능 저하- 복잡성 증가 (코드가 동적으로 처리되기 때문) 4. 최적화- Proxy..

IT/Spring 2025.01.03

[Spring] Spring Batch 도입기

회사에서 주소 데이터를 카카오 API 를 호출하여 획득한 정보로 대용량 업데이트 해야 할 일이 생겼다.스케줄러를 활용해 주기적으로 업데이트를 하는데, 이 때 Spring Batch 개념을 활용하기로 결정하였다.그래서 이를 도입할 때의 내용을 정리하고자 한다. 1. 도입 배경- 대용량 데이터 일괄 처리에 필요한 시간이 커서 단순 API 호출로는 해결할 수 없어 대체 방안 필요  2. 환경 설정- build.gradle 에 의존성(dependency) 추가implementation 'org.springframework.boot:spring-boot-starter-batch' 3. Configuration 파일 추가 및 설정 3.1. BatchConfig.java  - ItemReader, ItemProces..

IT/Spring 2025.01.02

[Spring] WebFlux 테스트 코드 작성

Spring 테스트 코드 관련하여 참고하기 위해 찾아보는 가운데, Spring MVC 환경에서의 테스트 코드에 대한 글은 많이 있지만 WebFlux 환경에서의 테스트 코드 글의 갯수는 적은 것 같아 직접 포스팅하고자 한다. - Environment > Java 11  - HTTP 메서드 > GET, POST, PUT Layer 별로 테스트 코드를 작성하였고, 그 순서는 다음과 같다.- Handler (Router) -> Service -> Repository 그리고 given / when / then 구조에 맞춰 작성해 보았다. 먼저 GET 메서드 기준, Layer 별로 테스트 코드를 작성한다. 1. Handler@Transactional@SpringBootTest@AutoConfigureWebTestC..

IT/Spring 2024.11.27

[Spring] Spring Framework vs. Spring Boot

회사에서 Spring Framework 를 사용하다가, Spring Boot 로 전환했던 경험이 있다. 그리고 현재는 Spring Boot 를 사용하는 곳으로 이직을 하여 커리어를 쌓고 있는 중이다.그 과정에서 Spring Boot 가 막연히 편하다, 생산성이 좋다, 레퍼런스 자료가 많다 등의 생각을 갖고 있었는데 Spring Framework 와 비교하여 어떤 점을 갖고 있는지 정리할 필요가 있다고 생각이 들어 이 글을 쓰게 되었다.그러면 구체적으로 장점을 나열하면 다음과 같다. 1. Jar 파일로 편리한 실행 가능- Spring Framework 의 경우 개발한 애플리케이션을 War 파일로 만들어 웹 애플리케이션 서버에 배포해야 하나, Spring Boot 의 경우 Tomcat 이나 Jetty 등의 ..

IT/Spring 2024.11.14

[Spring] Spring IoC Container

Spring IoC Container 의 개념에 대한 정리를 하고자 글을 쓴다. 1. Spring IoC Container 의 역할 - Spring Framework 에서 객체를 생성하고 관리하고 책임지고 의존성을 관리 해주는 컨테이너 - IoC (Inversion of Control, 제어의 역전) - 개념 - 객체의 생성, 생명 주기의 관리 등 모든 객체에 대한 제어권이 내부에서 외부로 역전 - 사용 이유 - 역할과 관심을 분리해 응집도를 높이고 결합도를 낮추며, 이에 따라 변경에 유연한 코드를 작성할 수 있는 구조를 만들어 객체 지향 원칙을 잘 지킬 수 있기 때문 - DI (Dependency Injection) 개념과의 비교 - DI 는 의존 방향의 역전을 의미 - 고수준 모듈이 저수준 모듈에 의..

IT/Spring 2023.05.21

[Spring] Entity, DTO, DAO, VO 란?

회사 프로젝트 및 개인 프로젝트 (" Spring Boot & JPA 를 활용한 주식 종목 관리 게시판 개발 ") 진행 중에 이에 대한 명확한 개념 정리가 필요하다고 생각하여 포스팅한다. 1. Entity - 개념 Entity 는 SQL 에서 자주 사용되는 개념이고, "실제, 객체" 의 의미를 갖고 있다. 그 중 JPA 의 Entity 에 대해 이야기 해보자면, DB 에서 영속적으로 저장된 데이터를 Java 객체로 매핑하여 인스턴스의 형태로 존재하는 데이터를 의미한다. 참고) JPA 를 어디에 사용하면 좋을까? 기존 JDBC 만을 이용한다면, 반복적이며 비슷한 SQL 문을 계속 만들어야 하고 DB 의 테이블과 Java 객체 간 매핑 작업을 계속해야 한다. 그러나 JPA 를 사용하면 SQL 문을 개발자가 ..

IT/Spring 2022.11.30