이번에는 스프링 개발에 있어 필수적인 객체지향 설계 5가지 원칙인 SOLID를 가볍게 정리해보도록 하겠습니다. 객체지향 원칙이란? 객체지향 프로그래밍(OOP)은 소프트웨어 개발 방법 중 하나로, 현실 세계의 객체를 모델링하여 소프트웨어를 구현하는 방식입니다. 객체지향 프로그래밍에서는 데이터와 기능을 하나의 단위인 객체(object)로 묶어서 관리하며, 객체 간의 상호작용을 통해 프로그램을 구성합니다. SOLID 원칙의 정의와 목적 설명 객체지향 프로그래밍의 핵심 원칙으로는 SOLID 원칙이 있습니다. SOLID 원칙은 SRP, OCP, LSP, ISP, DIP 다섯 가지 원칙으로 구성되어 있으며, 각각 단일 책임 원칙, 개방-폐쇄 원칙, 리스코프 치환 원칙, 인터페이스 분리 원칙, 의존 역전 원칙을 의미..
Entity Graph란? Entity Graph는 JPA(Java Persistence API)에서 제공하는 기능으로, 엔티티 객체를 가져올 때 연관된 엔티티 객체들을 함께 가져오는 방법을 지정하는 기능입니다. 일반적으로 JPA에서는 지연 로딩(lazy loading) 방식을 사용하여 연관된 엔티티 객체를 필요할 때 가져옵니다. 그러나 이 경우에는 연관된 엔티티 객체를 가져오는 쿼리가 지연 로딩 수행 시 매번 실행되어 성능상의 이슈가 발생할 수 있습니다. Entity Graph는 이러한 성능상의 이슈를 해결하기 위해, 한 번의 쿼리로 필요한 모든 엔티티 객체를 함께 가져오기 위한 방법을 제공합니다. 따라서 연관된 엔티티 객체를 여러 번 가져오지 않아도 되므로 성능상의 이점을 얻을 수 있습니다. Enti..
spring에서 지원하는 JPA에서는 각 Entity 클래스에서 기본 키(Primary Key, PK)를 지정해야 합니다. 이때, 복합적인 기본 키를 사용하는 경우가 있습니다. spring에서는 @IdClass 어노테이션을 사용하여 복합적인 기본 키를 지정할 수 있습니다. @IdClass @IdClass 어노테이션은 복합적인 기본 키를 사용하는 엔티티 클래스에서 기본 키를 정의할 때 사용됩니다. 이 어노테이션을 적용한 클래스는 복합 키를 구성하는 여러 필드를 포함하고 있습니다. 예를 들어, Person 클래스에서 id와 name 필드를 복합 키로 사용하려면, PersonId 클래스를 정의하고 이를 @IdClass 애노테이션으로 마크업합니다. public class PersonId implements Se..
spring이 지원하는 JPA에서는 여러 개의 Entity로 구성된 객체 모델을 관계형 데이터베이스 테이블로 매핑합니다. 이 때, 객체 모델의 필드 중에는 복합적인 값을 가지는 경우가 있습니다. 예를 들어서 Address라는 객체가 있는데, Address는 ciry, street, zipCode 필드로 구성됩니다. 이러한 복합적인 값을 가지는 필드를 매핑하기 위해 @Embeddable을 사용합니다. @Embeddable @Embeddable 애노테이션은 복합적인 값을 가지는 객체를 정의할 때 사용됩니다. 이 애노테이션을 적용한 클래스는 엔티티의 필드로 사용될 수 있습니다. 예를 들어, Address 클래스를 정의하고 이를 @Embeddable 애노테이션으로 마크업하면, 다른 엔티티 클래스에서 Addres..
Java에서 클래스를 정의할 때, 보통 필드(field)와 그에 상응하는 접근자 메소드(getter, setter)를 함께 정의합니다. 이때, 자바 빈(JavaBean) 규약을 따르는 클래스라면, 필드와 메소드를 정의하는 작업이 번거로울 수 있습니다. 이러한 문제를 해결하기 위해 롬복(Lombok) 라이브러리에서는 @Data 어노테이션을 제공합니다. @Data 어노테이션이란? @Data 어노테이션은 롬복 라이브러리에서 제공하는 어노테이션 중 하나로, 클래스 내부에 정의된 필드에 대해 getter, setter, equals, hashCode, toString 메소드를 자동으로 생성해줍니다. 이렇게 생성된 메소드들은 모두 자바 빈 규약을 따르므로, 자바 빈 규약을 따르는 클래스를 간단하게 정의할 수 있습니..
Swagger는 RESTful API 문서화를 위한 도구로, API의 사용 방법과 API의 매개변수, 반환값 등을 문서로 정리해주는 역할을 합니다. 이번 글에서는 Spring Framework에서 Swagger를 사용하는 방법을 소개하겠습니다. Swagger 추가 먼저 Swagger를 사용하기 위해 build.gradle 파일에 다음과 같이 의존성을 추가합니다. dependencies { implementation 'io.springfox:springfox-swagger2:2.9.2' implementation 'io.springfox:springfox-swagger-ui:2.9.2' } Swagger 설정 Swagger를 사용하기 위해서는 @Configuration 어노테이션이 붙은 설정 파일을 작성해..
Mockito는 유닛 테스트에서 모의 객체를 생성할 수 있게 해줍니다. 이를 통해서 의존성 및 동작의 모의 객체를 생성하여 컴포넌트의 기능을 독립적으로 테스트 할 수 있습니다. 그리고 MockitoExtension은 spring Framework와 통합되는 Mockito의 확장 프레임워크입니다. 이번 글에서는 MockitoExtension에 대한 정리와 간단한 사용법등을 알아보겠습니다. MockitoExtension이란? MockitoExtension은 Spring Framework와 통합되는 Mockito 프레임워크의 확장 프레임워크입니다. @Mock 어노테이션을 사용하여 Spring이 관리하는 컴포넌트에 모의 객체(mock objects)를 자동으로 주입할 수 있습니다. 이는 개발자가 유닛 테스트에서..
Spring Security는 Spring Framework에서 인증과 권한 부여를 수행하는 데 사용되는 강력한 보안 프레임워크입니다. Spring Security는 Spring Framework에서 자체적으로 보안 구성을 제공하며, 다양한 보안 기능을 제공하는 다양한 확장 모듈을 제공합니다. 이번 글에서는 Spring Security를 사용하여 웹 보안을 구성할 때 사용하는 @EnableWebSecurity 어노테이션에 대해 알아보겠습니다. 1. @EnableWebSecurity 어노테이션 @EnableWebSecurity 어노테이션은 Spring Security를 사용하여 웹 보안을 구성할 때 사용하는 어노테이션입니다. 이 어노테이션을 사용하면 Spring Security와 관련된 구성을 할 수 있습..
@OnDelete 어노테이션은 JPA에서 제공하는 어노테이션 중 하나로, 연관된 엔티티를 삭제할 때 어떻게 처리할 것인지를 지정할 때 사용됩니다. 이번 글에서는 @OnDelete 어노테이션에 대해 자세히 알아보겠습니다. @OnDelete 어노테이션 @OnDelete 어노테이션은 연관된 엔티티가 삭제될 때 어떻게 처리할 것인지를 지정할 때 사용됩니다. 이 어노테이션을 사용하면 다른 엔티티와의 관계를 가진 엔티티가 삭제될 때, 그 관계가 끊어진 후 어떤 동작을 수행할지 지정할 수 있습니다. @Entity public class Order { @ManyToOne @OnDelete(action = OnDeleteAction.CASCADE) private Customer customer; // ... } 위의 예..
Spring Framework은 개발자들이 데이터베이스와 상호작용하기 위해 사용되는 다양한 기능을 제공합니다. 그 중에 @Query 어노테이션은 JPA(Java Persistence API)를 사용할 때 유용하게 쓰이며, 데이터베이스 쿼리를 정의하고 실행할 때 사용됩니다. 이번 글에서는 @Query 어노테이션에 대해 자세히 알아보겠습니다. @Query란? @Query 어노테이션은 JPA에서 제공하는 어노테이션 중 하나로, 데이터베이스 쿼리를 직접 작성하고 실행할 때 사용됩니다. 이 어노테이션을 사용하면 Spring Framework에서 제공하는 Repository 인터페이스를 구현할 때 쿼리를 간편하게 작성하고 사용할 수 있습니다. @Query 어노테이션 사용하기 @Query 어노테이션은 다음과 같이 사..