BACKEND/SPRING 23

스프링부트 유효성 검사와 예외처리 - 예외 처리

예외 처리 애플리케이션 개발 과정에서 다양한 오류와 예외 상황에 직면하게 됩니다. 이를 처리하기 위해 자바는 try/catch 및 throw 구문을 제공합니다. 스프링 부트는 이보다 진화된 예외 처리 메커니즘을 제공하여 개발자에게 더 편리하게 예외 처리를 도와줍니다. 예외 (Exception) 애플리케이션의 정상적인 동작을 방해하는 상황을 나타냅니다. 예를 들면, 잘못된 입력값, 유효하지 않은 참조 값 등이 있습니다. 예외는 개발자가 코드 내에서 직접 처리할 수 있으므로, 적절한 코드 설계와 로직을 통해 미리 예상하고 처리할 수 있습니다. 에러 (Error) 에러는 예외와 비슷한 개념으로 여겨지는 경우가 많지만, 실제로는 근본적으로 다른 현상입니다. 에러는 주로 자바의 가상머신 (JVM)에서 발생하며, ..

BACKEND/SPRING 2023.08.27

스프링부트 유효성 검사와 예외처리 - 유효성 검사

애플리케이션의 유효성 검사(validation)는 중요한 부분입니다. 사용자로부터 입력받은 데이터의 유효성을 검사하여 데이터의 정확성, 안정성, 및 신뢰성을 보장하려고 합니다. 스프링 부트(Spring Boot)에서도 유효성 검사를 위한 다양한 기능과 라이브러리(예: JSR 380: Bean Validation 2.0)를 제공합니다. 일반적인 애플리케이션 유효성 검사의 문제점. 데이터 검증 로직의 문제점 분산된 로직: 계층별로 유효성 검사를 진행하면 검증 로직이 각 클래스별로 분산되어 있어 관리하기 어렵습니다. 중복된 코드: 검증 로직에는 의외로 중복이 많이 발생하여, 여러 곳에서 유사한 기능의 코드가 반복적으로 나타날 수 있습니다. 검증 코드의 길이: 검증해야 할 값이 많아지면, 검증 로직이 길어져 코..

BACKEND/SPRING 2023.08.27

연관관계 매핑 - 연관관계 매핑 종류와 방향

"연관관계 매핑"은 객체 지향 프로그래밍과 관계형 데이터베이스 사이에서 관계를 매핑할 때 사용되는 개념입니다. 주로 ORM (Object-Relational Mapping) 프레임워크, Java의 JPA (Java Persistence API) 또는 Python의 SQLAlchemy에서 자주 사용됩니다. 연관관계 매핑 종류와 방향 연관관계를 맺는 두 엔티티 간에 생성할 수 있는 연관관계의 종류 일대일 (OneToOne): 한 엔티티가 다른 엔티티를 하나만 참조할 수 있습니다. 일대다 (OneToMany): 한 엔티티가 여러 개의 다른 엔티티를 참조할 수 있습니다. 다대일 (ManyToOne): 여러 엔티티가 한 개의 다른 엔티티를 참조할 수 있습니다. 다대다 (ManyToMany): 여러 엔티티가 여러 ..

BACKEND/SPRING 2023.08.20

Spring Data JPA 활용 - JPA Auditing 적용

Spring Data JPA의 Auditing 기능은 엔터티의 변경시점에 언제, 누가 엔터티를 생성, 변경했는지에 대한 정보를 자동으로 등록할 수 있게 도와줍니다. JPA Auditing의 주요 기능 @CreatedBy, @LastModifiedBy: 엔터티가 생성 또는 수정될 때의 수정자 정보를 기록 @CreatedDate, @LastModifiedDate: 엔터티가 생성 또는 수정된 시간을 기록 @EnableJpaAuditing: Spring Data JPA의 Auditing 기능을 활성화 JPA Auditing 적용 방법 Auditing을 활성화 메인 애플리케이션 클래스 또는 설정 클래스에 @EnableJpaAuditing 애노테이션을 추가합니다. @SpringBootApplication @Enab..

BACKEND/SPRING 2023.08.13

Spring Data JPA 활용 - @Query 어노테이션과 QueryDSL

Spring Data JPA는 쿼리 메서드의 이름을 기반으로 자동으로 쿼리를 생성할 수 있지만, 때로는 개발자가 정확한 쿼리를 작성해야 할 필요가 있습니다. 이때 사용하는 것이 @Query 어노테이션입니다. QueryDSL은 타입-세이프한 방식으로 쿼리를 작성하는 프레임워크로, 복잡한 쿼리의 작성과 재사용을 도와줍니다. @Query 어노테이션 Spring Data JPA는 @Query 어노테이션을 통해 JPQL 또는 SQL을 직접 사용하여 데이터베이스 쿼리를 지정할 수 있게 합니다. 이는 기본 제공되는 메서드 이름 기반 쿼리로 해결하기 어려운 복잡한 쿼리 요구 사항을 처리하는 데 유용합니다. JPQL 지원: Java Persistence Query Language를 사용하여 객체 지향 쿼리를 작성할 수 ..

BACKEND/SPRING 2023.08.13

Spring Data JPA 활용 - 정렬과 페이징 처리

Spring Data JPA는 정렬과 페이징 처리를 간단하게 지원합니다. PagingAndSortingRepository를 상속받으면 기본적인 페이징과 정렬 기능을 사용할 수 있습니다. 정렬 처리하기 일반적인 쿼리문에서 정렬을 사용할 때는 ORDER BY 구문을 사용합니다. 쿼리 메서드로 정렬 기능에 동일한 키워드가 사용됩니다. public interface UserRepository extends JpaRepository { List findByNameOrderByNumberAsc(String name); List findByNameOrderByNumberDesc(String name); } // 서비스나 컨트롤러에서 사용 예시 userRepository.findByName("John"); Spring..

BACKEND/SPRING 2023.08.13

Spring Data JPA 활용 - JPQL과 쿼리 메서드

Spring Data JPA를 사용하면 데이터 접근 코드를 간소화하고 개발 생산성을 향상시킬 수 있습다. JPQL (Java Persistence Query Language)는 엔터티 객체를 중심으로 데이터를 쿼리하기 위한 언어입니다. 동적 쿼리 Spring Data JPA는 메소드 이름을 기반으로 쿼리를 생성하는 기능을 제공합니다. 이때 사용되는 메서드 이름의 주제 키워드를 이용하면 쿼리를 자동으로 생성할 수 있습니다. 쿼리 메서드의 생성 쿼리 메서드는 크게 동작을 결정하는 주제와 서술어로 구분하며 키워드로 쿼리의 주제를 정하먀 By는 서술어의 시작을 나타내는 구분자 역할을 합니다. // (리턴타입) + (주제 + 서술어(속성)) 구조의 메서드 List findByName(String name); 쿼리..

BACKEND/SPRING 2023.08.13

데이터베이스 연동 - 레포지토리 인터페이스 설계와 DAO 연동을 위한 컨트롤러 설계

데이터베이스 연동에 있어 레포지토리 인터페이스와 컨트롤러의 설계는 중요한 부분입니다. 레포지토리는 DAO와 유사하게 데이터 액세스 로직을 추상화하고, 컨트롤러는 사용자 요청을 처리하여 서비스 레이어와 레포지토리와의 연동을 담당합니다. 레포지토리 인터페이스 설계 레포지토리 인터페이스는 Spring Data JPA를 사용하여 엔터티와 관련된 CRUD 작업을 단순화하게 해줍니다. 인터페이스만 정의하면 Spring Data JPA가 런타임에 구현체를 자동으로 생성합니다. public interface PersonRepository extends JpaRepository { // 추가적인 쿼리 메서드를 정의할 수 있습니다. List findByName(String name); } 컨트롤러 설계 컨트롤러는 HTTP..

BACKEND/SPRING 2023.08.06

데이터 베이스 연동 - 엔티티 설계와 DAO 설계

엔터티 설계 엔터티는 데이터베이스 테이블을 자바 클래스로 표현하는 것입니다. 이를 통해 데이터베이스와 객체 지향 프로그래밍 간의 간극을 줄일 수 있습니다. @Entity public class Person { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "name", nullable = false) private String name; @Column(name = "age") private int age; // 기본 생성자 public Person() { } // Getter와 Setter // ... } DAO 설계 DAO는 데이터베이스와의 CRUD 작업을 캡슐화하는 객체입니다. DAO를 통해..

BACKEND/SPRING 2023.08.06

데이터 베이스 연동 - ORM, JPA

ORM (객체 관계 매핑) 스프링 부트(Spring Boot)에서 ORM(Object-Relational Mapping)은 객체 지향 프로그래밍 언어의 객체와 관계형 데이터베이스의 데이터를 매핑하는 프로그래밍 기술입니다. 스프링 부트에서는 JPA(Java Persistence API)를 주로 사용해 ORM을 구현하고, Hibernate는 JPA의 대표적인 구현체 중 하나입니다. 객체와 RDB(Relational Database)의 테이블을 자동으로 매핑하는 방법을 의미하며 데이터 베이스와 애플리케이션 클래스와의 불일치와 제약사항을 해결해 줄 수 있는 역할입니다. 장점 개발 생산성 향상: SQL 쿼리를 직접 작성하지 않아도 되므로 개발 속도가 빨라집니다. 대부분의 ORM 프레임워크는 CRUD 연산을 위한 ..

BACKEND/SPRING 2023.08.06