Spring/문법 11

AOP (Aspect-Oriented Programming)

AOP란?핵심 비즈니스 로직과 부가적인 관심사(로깅, 트랜잭션, 보안 등)를 분리하여 모듈화하는 프로그래밍 기법관심사의 분리(Separation of Concerns, SoC)를 통해 코드의 재사용성, 유지보수성을 높인다AOP의 필요성로깅, 예외 처리, 트랜잭션 관리 등은 여러 클래스에서 반복적으로 등장한다.이를 각 클래스에 흩뿌려 두면 코드가 중복되고, 수정이 어려워진다.AOP를 사용하면 공통 기능을 한 곳에 모아 관리할 수 있다.AOP 핵심 용어Aspect: 공통 기능(로깅, 트랜잭션 등)을 모듈화한 단위Join Point: Advice가 적용될 수 있는 지점(메서드 실행 등)Pointcut: Join Point 중 실제 Advice가 적용될 지점을 지정Advice: 언제(언제 실행되는지: befor..

Spring/문법 2025.06.11

@EntityGraph - fetch join을 어노테이션으로 처리하기

@EntityGraph란?JPA의 Entity Graph 기능을 Spring Data JPA에 적용한 어노테이션지연 로딩(LAZY) 필드들을 명시적으로 fetch join 하도록 설정할 수 있다.JPQL의 join fetch 없이 리포지토리 메서드 수준에서 연관 엔티티를 즉시 로딩할 수 있도록 도와준다.기본 사용법attributePaths: 즉시 로딩하고 싶은 연관 엔티티 경로내부적으로 JPQL의 join fetch와 유사한 SQL이 실행됨public interface MemberRepository extends JpaRepository { @EntityGraph(attributePaths = {"team"}) List findAll(); // findAll 호출 시 team도 함께 조회됨}예..

Spring/문법 2025.06.11

테스트 커버리지 - JaCoCo 설정

JaCoCo란?Java Code Coverage의 약자로, 테스트 코드가 실제 애플리케이션 코드를 얼마나 실행했는지 측정해주는 도구.build.gradle 설정 플러그인 적용plugins { id 'jacoco' // Java Code Coverage} 버전 및 리포트 경로 지정jacoco { toolVersion = '0.8.13' reportsDirectory = layout.buildDirectory.dir('reports/jacoco')} 테스트 후 커버리지 리포트 생성tasks.named('test') { useJUnitPlatform() finalizedBy jacocoTestReport} 커버리지 기준 설정 (빌드 실패 조건)jacocoTestCoverageV..

Spring/문법 2025.06.11

테스트 코드 개념 2 + Mock 을 이용한 테스트 코드 작성 예제

✅ 목차테스트를 위한 Annotation 단위 테스트 작성 원칙 Mocking 개념 및 사용 이유 행위 검증 vs 상태 검증 [예제] 단위 테스트 - Repository[예제] 단위 테스트 - Service[예제] 단위 테스트 - Controller[예제] 유틸 테스트[예제] 통합 테스트1. 테스트를 위한 Annotation @DataJpaTestJPA 관련 컴포넌트만 로드하여 Repository 레이어 단위 테스트용기본적으로 인메모리 DB(H2 등) 사용@ExtendWithJUnit5 확장 기능 적용용주로 MockitoExtension과 함께 Service, 클래스 단위 테스트에 사용@WebMvcTestWeb Layer (Controller, Filter 등) 테스트용@Controller, @Contr..

Spring/문법 2025.06.11

테스트 코드 개념

✅ 목차테스트를 왜 해야할까? 테스트 코드는 왜 필요할까?테스트 코드 작성의 원칙테스트의 종류테스트 코드는 어떻게 작성해야할까?1. 테스트를 왜 해야할까? 기능이 요구사항대로 잘 동작하는지 확인하기 위함완벽한 코드를 한 번에 작성하기 어렵고 예상치 못한 입력으로 장애가 발생할 수 있기 때문에 다양한 케이스를 테스트로 검증해야 한다. 테스트 방법Swagger, Postman 등으로 다양한 케이스를 직접 확인QA 과정에서 UI, 프론트, 서버를 아우르는 테스트테스트 코드를 작성해 자동화된 검증 수행 2. 테스트 코드는 왜 필요할까? 버그를 조기에 발견개발 단계에서 버그를 미리 찾아 수정 가능코드 품질 개선테스트 작성이 어려운 코드를 개선하게 되고, 클래스 역할과 책임을 명확히 하여 클린 코드 작성에 도움배포..

Spring/문법 2025.06.11

JSON 포맷 변경하기: Jackson 설정 커스터마이징

1. Jackson이란?Java 객체와 JSON 간 변환(직렬화/역직렬화)을 담당하는 라이브러리Spring Boot 기본 JSON 처리 라이브러리로 자동 설정 제공2. JSON 포맷 변경이 필요한 이유API 응답 형식 일관성 유지날짜/시간 포맷 표준화null 값 처리 방식 조절필드 네이밍 전략 변경 (camelCase ↔ snake_case)가독성 향상을 위한 pretty print 적용 등3. Jackson 설정 커스터마이징하는 방법 ObjectMapper 직접 설정@Configurationpublic class JacksonConfig { @Bean public ObjectMapper objectMapper() { ObjectMapper mapper = new ObjectMa..

Spring/문법 2025.05.23

Spring Boot Logger 사용법 – SLF4J & Logback

Spring Boot에서는 System.out.println() 대신 Logger를 사용한다. 처음에는 println이 더 직관적이고 간편하게 느껴질 수 있지만, 실제 서비스 운영 환경에서는 다음과 같은 요구 사항이 생긴다:로그 중요도 구분 (DEBUG, INFO, ERROR 등)로그 파일 저장 및 관리다양한 환경별 로그 수준 조절멀티스레드 환경에서도 안정적 동작일관된 포맷, 성능 최적화이를 위해 Spring Boot는 기본적으로 SLF4J(Simple Logging Facade for Java) + Logback 조합을 내장하여 제공한다.이 글에서는 왜 Logger를 사용해야 하는지, 어떻게 사용하는지, 그리고 실전에서 어떻게 설정하고 활용할 수 있는지 정리한다.1. System.out.println(..

Spring/문법 2025.05.23

Spring Boot 환경별 설정 관리하기 – application-{profile}.properties

Spring Boot 환경별 설정 관리하기application.properties 파일에 접미사를 붙여 다양한 환경(개발, 운영 등)에 맞는 설정을 관리하는 방법에 대해 정리하고자 한다.1. application-{profile}.propertiesSpring Boot에서는 다음과 같은 형태로 설정 파일을 분리할 수 있다.src/main/resources/├── application.properties # (공통 설정)├── application-dev.properties # (개발 환경)└── application-prod.properties # (운영 환경) 파일 구성 예시 # application.properties (공통 설정)server.port=8080spring.profiles.ac..

Spring/문법 2025.05.23

다중 데이터소스 설정 하기 (feat. DB 여러 개 연결하기)

환경Java 17Spring Boot 3.xMySQLspring-boot-starter-jdbc 사용1. application.properties 설정 꼭 jdbc-url로 적어야 한다.단일 DB 쓸 땐 url도 되지만, 다중 설정에서는 오류난다.# 첫 번째 DB (기본)spring.datasource.todo.jdbc-url=jdbc:mysql://localhost:3306/todospring.datasource.todo.username=rootspring.datasource.todo.password=1234spring.datasource.todo.driver-class-name=com.mysql.cj.jdbc.Driver# 두 번째 DBspring.datasource.todo-v2.jdbc-url=j..

Spring/문법 2025.05.12

정적 팩토리 메서드 (Static Factory Method)

정적 팩토리 메서드란?new 키워드를 사용하지 않고, 클래스에 정의된 static 메서드를 통해 객체를 반환하는 방식이다.public class User { private String name; private User(String name) { this.name = name; } public static User of(String name) { return new User(name); }}User user = User.of("홍길동");장단점✅ 장점 이름을 가질 수 있어 의미가 명확하다→ User.of("홍길동") vs new User("홍길동")생성 로직을 캡슐화할 수 있다→ 내부적으로 캐싱, 서브타입 반환 등도 가능생성자보다 유연하다→ 같은 파라미..

Spring/문법 2025.05.09