java 95

[Java] Java Collections Framework

⚡ 1. Java Collections Framework란?Java Collections Framework(JCF) 는 자료구조(컬렉션)를 효율적으로 다룰 수 있도록 제공하는 표준 라이브러리입니다.List, Set, Queue, Map 등의 인터페이스와 이를 구현하는 다양한 클래스들을 포함하고 있습니다. 💡 Collections Framework의 핵심 기능 • 데이터 저장 & 관리 → 배열보다 유연한 데이터 구조 제공 • 정렬 & 검색 → Comparator, Comparable 지원 • 멀티스레드 환경 지원 → Concurrent 컬렉션 제공 ⚡ 2. Java Collections Framework의 구조Java 컬렉션 프레임워크는 다음과 같은 핵심 인터페이스로 구성됩니다. 🏗 Java Colle..

BE/Java 2025.03.06

[Spring Boot] @TestMethodOrder

📌 1. @TestMethodOrder란? @TestMethodOrder는 JUnit 5에서 테스트 메서드 실행 순서를 지정하는 어노테이션임.기본적으로 JUnit은 테스트 메서드를 실행할 순서를 보장하지 않음.하지만, 특정한 실행 순서가 필요한 경우 @TestMethodOrder를 사용하면 테스트를 원하는 순서대로 실행할 수 있음. 📌 2. @TestMethodOrder 기본 사용법✅ (1) 테스트 실행 순서를 @Order로 지정 • @TestMethodOrder(OrderAnnotation.class)를 사용하면 각 테스트 메서드에 @Order(n)을 부여하여 실행 순서를 지정할 수 있음.import org.junit.jupiter.api.*;@TestMethodOrder(MethodOrderer...

[Kotlin] JPA에서 필드에 final을 붙이지 않는 이유 (val, var)

Spring Boot의 JPA 엔티티에서는 일반적으로 필드를 private으로 선언하고 final을 붙이지 않는 이유는 JPA의 프록시(proxy) 및 리플렉션(reflection) 메커니즘 때문. ✅ 1. JPA는 엔티티 객체를 리플렉션(Reflection)으로 생성해야 한다📌 final을 사용하면 JPA가 필드를 초기화할 수 없음 JPA는 기본 생성자(No-Arg Constructor)를 사용하여 엔티티 객체를 리플렉션으로 생성합니다.즉, JPA가 객체를 만들 때 필드에 값을 할당할 수 있어야 합니다. 🚨 private final을 사용하면 발생하는 문제@Entitypublic class User { @Id @GeneratedValue(strategy = GenerationType.ID..

BE/Kotlin 2025.02.21

[Spring Boot] Service를 Interface + ServiceImpl 구조로 사용하는 이유

Spring Boot에서 Service 계층을 인터페이스(Service)와 구현 클래스(ServiceImpl)로 분리하여 사용하는 패턴을 많이 볼 수 있음.예를 들어, 다음과 같은 구조를 가짐:📂 service ├── UserService.java (인터페이스) ├── UserServiceImpl.java (구현 클래스) 이렇게 분리하는 이유는 크게 확장성, 테스트 용이성, 유지보수성, 결합도 감소 때문임. 📌 1. Service를 Interface + ServiceImpl로 분리하는 이유✅ (1) 느슨한 결합 (Low Coupling) • 인터페이스를 사용하면 구현체를 쉽게 교체할 수 있음. • 클라이언트 코드(Controller, 다른 Service)가 UserServiceImpl을 직접 ..

[Spring Boot] REST Docs + Asciidoctor

Spring Boot에서 REST Docs와 Asciidoctor를 사용하면 API 명세서를 자동으로 생성할 수 있음.이는 테스트 코드 기반으로 문서를 생성하기 때문에, 코드와 문서가 항상 일치하도록 유지할 수 있음.📌 1. REST Docs + Asciidoctor란?🔹 Spring REST Docs • API 문서를 자동으로 생성할 수 있도록 지원하는 라이브러리 • API 응답을 테스트하며, 이를 기반으로 문서를 생성함 • 문서와 실제 동작하는 코드의 일관성 유지 가능 🔹 Asciidoctor • AsciiDoc 문법을 사용하여 문서를 작성하는 도구 • 마크다운(Markdown)과 비슷하지만 기능이 더 강력함 • HTML, PDF, ePub 등의 다양한 형식으로 변환 가능 ✅ 왜 REST Doc..

[Spring Boot] JaCoCo (Java Code Coverage)

Java 애플리케이션의 코드 커버리지를 측정하는 오픈 소스 도구로, 테스트 코드가 실제로 소스 코드의 어느 부분을 실행했는지 분석하는 역할을 함.주로 JUnit 테스트와 함께 사용되며, 테스트 코드가 작성된 클래스의 몇 %를 실행했는지 측정하여 테스트의 품질을 향상시키는 데 도움을 줌. 1. JaCoCo의 코드 커버리지 지표JaCoCo는 다음과 같은 커버리지 지표를 제공함:커버리지 유형설명Line Coverage실행된 코드 라인의 비율Branch Coverageif-else, switch 등의 분기 실행 비율Instruction Coverage실행된 JVM 바이트코드 명령어의 비율Method Coverage실행된 메서드 개수와 비율Class Coverage실행된 클래스 개수와 비율 ✅ 이 커버리지 지표를..

[Spring Boot] @Slf4j

Lombok 라이브러리에서 제공하는 어노테이션.클래스 내부에 SLF4J(Simple Logging Facade for Java) 기반의 로깅 객체를 자동으로 생성해 주는 기능을 함.즉, @Slf4j를 클래스에 추가하면, log라는 이름의 Logger 객체가 자동으로 생성되며, 이를 통해 로깅을 쉽게 사용할 수 있음. 1. @Slf4j 사용법@Slf4j 적용 및 사용 예제import lombok.extern.slf4j.Slf4j;@Slf4jpublic class LogExample { public static void main(String[] args) { log.info("Hello, this is an INFO log message!"); log.debug("Debuggi..

[Spring Boot] QueryDSL

QueryDSL 개념 QueryDSL은 타입 안전한 JPQL(또는 SQL) 쿼리를 작성하기 위한 라이브러리임. 일반적으로 JPA를 사용할 때 JPQL을 문자열로 작성하는데, 이는 컴파일 타임에 오류를 잡을 수 없고 실행 시에 오류가 발생할 위험이 있음. QueryDSL은 이를 보완하여, 코드를 작성하는 시점에 컴파일러가 쿼리의 오류를 검출할 수 있도록 해줌. QueryDSL은 Java 코드를 통해 쿼리를 작성할 수 있게 해주며, 이를 통해 가독성과 유지보수성을 높일 수 있음.주요 특징타입 안전(Type-safe):컴파일 타임에 쿼리의 구조와 필드 타입을 검증함.예를 들어, 정수 필드에 문자열을 비교하는 등의 오류를 방지할 수 있음.코드 자동 생성:엔티티 클래스를 기반으로 QClass라는 쿼리용 클래스를 ..

[Spring Boot] @Scheduled

@Schedule은 Spring Framework에서 제공하는 애노테이션으로, 정기적으로 특정 작업을 실행하는 데 사용됩니다. 주로 백그라운드 작업이나 일정 작업(예: 데이터 정리, 이메일 전송, 로그 정리)을 자동화하기 위해 사용됩니다. 1. @Scheduled 애노테이션이란?정의: 스프링에서 메서드를 스케줄링 작업으로 등록하고, 지정된 주기에 따라 실행되도록 설정하는 애노테이션.주요 특징:특정 시간 간격이나 일정에 따라 자동으로 메서드를 실행.작업이 비동기적으로 실행되도록 설정 가능.다양한 표현식(고정 시간, 크론 표현식 등)을 지원.2. @Scheduled의 주요 속성 @Scheduled에서 사용할 수 있는 속성은 크게 세 가지로 나뉩니다: 1. fixedRate설명: 메서드 실행 간격을 밀리초 단..

[Spring Boot] SpringSecurity UserDetails, User

Spring Security에서 UserDetails와 User Spring Security는 애플리케이션의 인증(Authentication)과 권한(Authorization)을 관리하기 위해 설계된 프레임워크임.UserDetails와 User는 사용자의 인증 정보를 처리하기 위해 사용되는 주요 인터페이스 및 클래스임.1. UserDetails 개념 UserDetails는 Spring Security에서 사용자 정보를 캡슐화한 인터페이스임. • 사용자의 계정 정보(이름, 비밀번호, 권한 등)와 계정 상태(활성화 여부, 잠김 여부 등)를 정의함. • UserDetails를 구현하여 사용자 정보를 커스터마이징할 수 있음. 주요 메서드 UserDetails는 다음과 같은 메서드를 제공함: 1. getAutho..