전체 글 140

JPA 엔티티간 연관 관계 매핑 (feat. Fetch전략, Cascade)

JPA 엔티티간 연관 관계 매핑 JPA에서 연관 관계 매핑은 단방향 연관 관계와 양방향 연관 관계가 있으며 방향성과 관계없이 일대다(1:N), 다대일(N:1), 다대다(N:N), 일대일(1:1)관계가 존재한다. JPA 엔티티의 연관 관계를 매핑할때 보통 다대다(N:N)의 구조를 일대다(1:N)와 다대일(N:1)로 분리하고 분리된 관계들을 각각 단방향으로 다대일(N:1)로 연결해준 뒤 필요에따라 일대다(1:N)로 양방향 연결을 해준다. 위의 관계도를 보면 Order와 Coffee간 다대다 관계를 OrderCoffee로 일대다 다대일 관계로 나누었다. 또한 Order와 Member는 다대일 관계이며 Member와 Stamp는 일대일 관계이다. 다대일(N:1) 연관 관계 @Getter @Setter @Buil..

JPA의 Entity 매핑 (feat. Auditable, GeneratedValue 전략)

Entity와 테이블간의 매핑 @Getter @Setter @Builder @Entity // 1. public class Member extends Auditable { // 8. @Id // 2. @GeneratedValue(strategy = GenerationType.IDENTITY) // 3. private Long memberId; @Column(nullable = false, updatable = false, unique = true) // 4. private String email; @Column(length = 100, nullable = false, name = "FULL_NAME") private String name; @Column(length = 13, nullable = fals..

JPA(Java Persistence API)

JPA JPA(Java Persistence API)는 Java 진영에서 사용하는 ORM(Object-Relational Mapping) 기술의 표준 사양(또는 명세, Specification)이다. Java의 인터페이스로 사양이 정의되어 있기 때문에 JPA라는 표준 사양을 구현한 구현체는 따로 있다. Hibernate ORM Hibernate ORM는 JPA 표준 사양을 구현한 구현체중 하나이다. 쉽게말하면 JPA라는 표준사양을 구현하는 API이며 JPA에서 지원하는 기능 이외에 Hibernate 자체적으로 사용할 수 있는 API 역시 지원하고 있다. JPA는 Java Persistence API의 약자이지만 현재는 Jakarta Persistence라고도 불린다. 데이터 액세스 계층에서의 JPA 위치..

Spring Data JDBC에서 Offset-Pagination 적용하기

페이지네이션(Pagination) Pagination이란 데이터 베이스에 회원 정보가 100건이 저장되어 있는데 클라이언트 쪽에서 100건의 데이터를 모두 요청하는 것이 아니라 한 페이지에 일정 개수만큼만 나누어서 달라고 요청하는 것을 페이지네이션(Pagination)이라고 한다. Pagination에는 Offset Pagination과 Cursor Pagination이 있다. Offset Pagination 출력되는 모든 결과물을 특정한 개수만큼 나누어 페이지별로 제공하는 형식이다. 일반적인 게시판 형태(검색 엔진 등)이다. Cursor Pagination 정해진 개수만큼의 데이터를 가저와 로드하고 이후 로드된 마지막 데이터부터 다시 정해진 개수만큼의 데이터를 가저와 로드하는 형식이다. SNS에 주로 ..

Spring Data JDBC

Spring Data JDBC Spring Data JDBC는 Spring에서 데이터베이스에 접근하는 다양한 기술들중 하나로 JDBC API 안에서 작동한다. 또한 ORM기술이 적용되어 SQL문을 직접 작성하는 것이 아닌 객체를 통해 데이터베이스에 접근 할수 있는 기술이다. ORM (Object Relational Mapping) 이란 객체 지향 프로그래밍 언어와 SQL문을 맵핑해주는, 즉, 두 언어를 서로 변환시켜 관계형 데이터베이스에 접근 할수 있도록 해주는 기술이다. Spring Data JDBC 사용 라이브러리 추가 dependencies { ... ... implementation 'org.springframework.boot:spring-boot-starter-data-jdbc' //Sprin..

JDBC(Java Database Connectivity)

JDBC(Java Database Connectivity) JDBC란 자바에서 데이터베이스에 접속할 수 있도록 하는 자바API이다. JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다. - 위키피디아 ( https://ko.wikipedia.org/wiki/JDBC ) JDBC는 자바 애플리케이션에서 데이터베이스에 접근하기 위한 표준 스펙이다. 즉, JDBC를 이용하여 자바코드로 데이터베이스에 접근하여 데이터를 생성, 수정, 삭제 등의 작업이 가능하며 다양한 벤더(Oracle, MS SQL, MySQL 등)의 데이터베이스와 연동할 수 있다. 자바 애플리케이션에서 JDBC API를 통해 JDBC 드라이버를 로딩한 후, 데이터베이스에 접근한다. JDBC 드라이버는 RDBMS의 종류에 따..

Exception, 예외 처리

체크 예외(Checked Exception)와 언체크 예외(Unchecked Exception) 체크 예외(Checked Exception) 체크 예외란 위의 그림에서와 같이 RuntimeException 클래스를 상속받지 않는 예외 클래스들이다. 예를 들면 ClassNotFoundException등이 있으며 catch 혹은 throws 키워드를 사용하여 반드시 해당 예외를 처리해주어야한다. 언체크 예외(Unchecked Exception) 언체크 예외는 RuntimeException 클래스를 상속받는 예외들이다. 체크 예외와 달리 해당 예외를 반드시 처리해 주지 않아도 되며 NullPointerException, ArrayIndexOutOfBoundsException등이 있다. 또한 RuntimeExc..

Entity와 Mapper

Entity Entity는 실제 데이터베이터베이스의 데이터구조와 1:1로 매핑되는 객체이다. 그렇기에 DB의 테이블내에 존재하는 컬럼만을 위한 필드를 가저야한다. Entity 클래스는 상속을 받고나 구현되여서는 안되며 테이블내에 존재하지 않는 컬럼을 가져서도 안된다. Entity와 DTO를 구분한 이유 Entity와 DTO를 살펴보면 사용하는 애너테이션만 조금 다를뿐 구성되는 필드는 거희 비슷하다. 하지만 굳이 이 둘을 분리시킨 가장 큰 이유는 두 객체간의 주 목적이 다르기 때문이다. DTO : 클라이언트의 요청 데이터를 하나의 객체로 받기 위해 혹은 응답으로 주기위해 사용하며 API계층에서 사용 Entity : 비즈니스 로직과 데이터베이스의 작업을 수행하기위해 사용되며 비즈니스계층과 데이터 엑세스계층에..

DTO (Data Transfer Object) 과 Validation

DTO (Data Transfer Object) DTO는 Data Transfer Object의 약자로 마틴 파울러(Martin Fowler)가 ‘Patterns of Enterprise Application Architecture’ 라는 책에서 처음 소개한 엔터프라이즈 애플리케이션 아키텍처 패턴의 하나이다. 이름에서 알수있듯이 데이터의 전송을 위한 '객체'이다. 클라이언트에서 요청을 통해 서버로 JSON 포멧의 데이터를 보내면 DispatcherSerblet의 HandlerAdapter가 받은 JSON 데이터를 지정된 DTO객체로 만들어주게된다. 또한 응답시에도 DTO(객체)를 응답해주게되면 HandlerAdapter는 JSON 포멧으로 데이터를 변환시킨 뒤 클라이언트로 응답을 보내게된다. 이렇게 DT..

Servlet과 JSP 그리고 MVC(Model, View, Controller)

Servlet 서블릿은 클라이언트의 요청을 처리하고 해당 요청의 결과를 클라이언트에게 전송하는 자바 프로그래밍 기술이다. 즉, 웹 어플리케이션을 동적으로 만들어주는 역할을 담당하고 있다. 웹 어플리케이션은 요청과 응답으로 클라이언트와 백엔드 서버간에 소통을 하며 동적서비스를 만드는데 이때 Servlet container가 클라이언트의 요청을 받아 요청에 맞는 로직을 수행할 Servlet 객체를 생성하고 관리한다. (Spring에는 Tomcat이 내장되어있으며 이 Tomcat이 Servlet container 역할을 한다.) Servlet 필수 메서드 init() - 서블릿 생성 service() - 처리 진행 destroy() - 서블릿 삭제 Servlet container의 역할 요청과 응답을 이용하여..