Hibernate DDL auto혹시 팀플하다가 ddl-auto 때문에 데이터가 싹다 날아간 경험을 해본적이 있나요? 저는 국비학원에서 팀플할 당시 조원 중 한면이 모르고 ddl-auto create를 넣고 돌리는 바람에 크롤링한 데이터가 싸그리 날아간 경험을 한적이 있습니다. 그때의 트라우마로 그냥 ddl-auto 관련해서는 쳐다도 안보고있었는데, 이번 기회에 공부를 해보려고 합니다. hibernate.ddl-auto는 Hibernate가 데이터베이스 스키마를 애플리케이션의 엔티티(Entity) 클래스에 따라 어떻게 관리할지를 결정하는 중요한 설정입니다. 특히 Spring Boot 애플리케이션에서 application.yml 파일을 통해 이 속성을 쉽게 구성할 수 있습니다. 이번 포스팅에서는 각 옵션의..
영속성 컨텍스트영속성 컨텍스는 엔티티 객체를 관리하는 가상의 공간이라고 보면됩니다. 영속성 컨텍스트는 애플리케이션과 데이터베이스 사이에서 엔티티와 레코드의 괴리를 해소하는 기능과 객체를 보관하는 기능을 수행합니다. 엔티티 객체가 영속성 컨텍스트에 들어오면 JPA는 엔티티 객체의 매핑 정보를 데이터베이스에 반영하는 작업을 수행합니다. 이처럼 엔티티 객체가 영속성 컨텍스트에 들어와 JPA의 관리 대상이 되는 시점부터는 해당 객체를 영속 객체(Persistence Object)라고 부릅니다. 간단하게 애플리케이션과 데이터베이스와의 관계를 표현하면 아래와 같습니다.영속성 컨텍스트는 세션 단위의 생명주기를 가집니다. 데이터베이스에 접근하기 위한 세션이 생성되면 영속성 컨텍스트가 만들어지고, 세션이 종료되면 영속성..
하이버네이트하이버네이트는 자바의 ORM 프레임워크로, JPA가 정의하는 인터페이스를 구현하고 있는 JPA 구현체 중 하나입니다. Spring Data JPASpring Data JPA는 JPA를 편리하게 사용할 수 있도록 지원하는 스프링 하위 프로젝트 중 하나입니다. Spring Data JPA는 CRUD 처리에 필요한 인터페이스를 제공하며, 하이버네이트의 엔티티 매니저(EntityManager)를 직접 다루지 않고 리포지토리를 정의해 사용함으로써 스프링이 적합한 쿼리를 동적으로 생성하는 방식으로 데이터베이스를 조장합니다. 이를 통해 하이버네이트에서 자주 사용되는 기능을 더 쉽게 사용할 수 있게 구현한 라이브러리입니다.
JPAJPA(Java Persistence API)는 자바 진영의 ORM 기술 표준으로 채택된 인터페이스의 모음입니다. ORM이 큰 개념이라면 JPA는 더 구체화된 스펙을 포함합니다. 즉, JPA 또한 실제로 동작하는 것이 아니고 어떻게 동작해야 하는지 메커니즘을 정리한 표준 명세로 생각하면 됩니다. 아래 그림에서 JPA의 역할이 ORM이라고 보면 무난합니다.JPA의 메커니즘을 보면 내부적으로 JDBC를 사용합니다. 개발자가 직접 JDBC를 구현하면 SQL에 의존하게 되는 문제 등이 있어 개발의 효율성이 떨어지는데, JPA는 이 같은 문제점을 보완해서 개발자 대신 적절한 SQL을 생성하고 데이터베이스를 조작해서 객체를 자동 매핑하는 역할을 수행합니다. JPA 기반의 구현체는 대표적으로 세 가지가 있습니다..
ORMORM은 Object Relational Mapping의 줄임말로 객체 관계 매핑을 의미합니다. 자바와 같은 객체지향 언어에서 의미하는 객체와 RDB(Relational Database)의 테이블을 자동으로 매핑하는 방법니다. 지금 이야기하는 객체지향 언어에서의 객체는 클래스를 의미합니다. 클래스는 데이터베이스의 테이블과 매핑하기 위해 만들어진 것이 아니기 때문에 RDB 테이블과 어쩔 수 없는 불일치가 존재합니다. ORM은 이 둘의 불일치와 제약사항을 해결하는 역할입니다. 간략하게 애플리케이션의 클래스와 데이터베이스의 테이블을 매핑하는 것을 그림으로 나타내면 아래와 같습니다.ORM을 이용하면 쿼리문 작성이 아닌 코드(메서드)로 데이터를 조작할 수 있습니다.ORM의 장점ORM을 사용하면서 데이터베이스..
POST API 만들기POST API는 웹 애플리케이션을 통해 데이터베이스 등의 저장소에 리소스를 저장할때 사용되는 PAI입니다. GET API에서는 URL의 경로나 파라미터에 변수를 넣어 요청을 보냈지만 POST API 에서는 저장하고자 하는 리소스나 값을 HTTP 바디(body)에 담아 서버에 전달합니다. 그래서 URI가 GET API에 비해 간단합니다. POST API를 만들기 위해 우선 아래 예제와 같이 PostController라는 이름의 컨트롤러 클래스를 생성하고 @RequestMapping 어노테이션을 이용해 공통 URL을 설정합니다.package com.springboot.api.controller;import org.springframework.web.bind.annotation.Requ..