내일배움캠프(Sparta)/Spring25 [Spring] SpringBoot의 JPA 1) SpringBoot의 JPA 1. SpringBoot환경에서의 JPA Hibernate 설정 show_sql, foramt_sql, use_sql comments 옵션 Hibernate가 DB에 요청하는 모든 SQL을 보기좋게 출력해줌 ddl-auto create : 기존 테이블 삭제 후 다시 생성 (DROP + CREATE) create-drop : create와 같으나 종료시점에 테이블 DROP update : 변경된 부분만 반영 validate : Entity와 테이블이 정상 매핑되었는지만 확인 none : 아무것도 하지 않음 SpringBoot 환경에서는 EntityManagerFactory와 EntityManager를 자동으로 생성해줌 application.properties에 DB 정보를.. 2023. 11. 7. [Spring] Entity의 상태 Entity의 상태 비영속(Transient) new 연산자를 통해 인스턴스화 된 Entity 객체 아직 영속성 컨텍스트에 저장되지 않았기 때문에 JPA의 관리를 받지 않음 JPA가 관리하지 못하기 때문에 해당 객체의 데이터를 변경해도 변경 감지가 이루어지지 않음 영속(Managed) persist(entity) : 비영속 Entity를 EntityManager를 통해 영속성 컨텍스트에 저장하여 관리되고 있는 상태로 만듦 em.persist(memo); 관리받은 상태(영속 상태)인 MANAGED상태가 됨. 준영속(Detached) 영속성 컨텍스트에 저장되어 관리되다가 분리된 상태 영속상태 ➡️ 준영속 상태로 바꾸는 법 (3가지) detach(entity) : 특정 Entity만 준영속 상태로 전환 em.. 2023. 11. 7. [Spring] Entity / Persistence Context / Transaction 1) Entity : JPA에서 관리되는 클래스. 즉, 객체를 의미 Entity 클래스는 DB의 테이블과 매핑되어 JPA에 의해 관리됨. Annotation @Entity : JPA가 관리할 수 있는 Entity 클래스로 지정하는 annotaion @Table : 매핑할 테이블 지정 @Id : table의 기본키를 지정해주는 annotation 영속성 컨텍스트에서 entity를 구분할 때 사용 기본키를 넣어주지 않으면 오류 발생 @GeneratedValue : 기본 키 생성을 DB에 위임 가능 (strategy = GenerationType.IDENTITY) : DB가 자동으로 ID를 생성하도록 함 @Column nullable : null 허용 여부 (default : true) unique : 중복 .. 2023. 11. 7. [Spring] ORM / JPA / Hibernate DB를 직접 다룰 때의 문제점 SQL에 의존적이라 변경에 취약함. => ORM이 없는 환경에서는 백엔드 개발자가 비즈니스 로직 개발보다는 SQL 작성 및 수정에 더 많은 노력을 들였어야 함. 1) ORM : 객체와 DB를 mapping 해주는 도구 (Object-Relational Mapping의 약자.) 반복적이고 번거로운 애플리케이션 단에서의 SQL 작업을 줄여주기 위해 등장 2) JPA (Java Persistence API) : 자바 ORM 기술의 대표적인 표준 명세 (ORM 기술 중 표준적인 기술) JPA는 애플리케이션과 JDBC 사이에서 동작 JPA를 사용하면 DB 연결 과정을 직접 개발하지 않아도 자동으로 처리해줌 객체를 통해 간접적으로 DB 데이터를 다룰 수 있기 때문에 매우 쉽게 DB작업.. 2023. 11. 7. [Spring] IoC / DI / Bean IoC는 설계원칙, DI는 디자인 패턴에 해당. 스프링은 좋은 코드를 위해 IoC, DI를 제공 Spring Docs 발췌 내용 >> " DI패턴을 사용해 IoC 설계원칙을 구현하고 있다. " ❓ 좋은 코드란 무엇일까? - 논리 간단 - 중복 제거 & 표현 명확 - 이해하기 쉽고 수정에 용이 - 의존성 최소화 - 새로운 기능 추가시 크게 구조 변경 없어야 함. 의존성이 높으면 강한 결합. 강한 결합은 수정이 많이 필요함. 🤔 그럼 의존성을 어떻게하면 떨어뜨릴 수 있을까? ➡️ 다형성의 원리(ex; 인터페이스를 사용)를 통해 강하게 결합되어 있는 것을 바꾸고 의존성을 낮출 수 있음. 🤔 강한 결합을 해결할 수 있는 방법이 있을까? 1️⃣ 각 객체에 대한 객체 생성은 1번만 2️⃣ 생성된 객체는 모든 곳에서.. 2023. 11. 7. [Spring] 3 Layer Architecture 3 Layer Architecture Controller 클라이언트의 요청을 받음 클라이언트에서 받아온 request data가 있다면 controller가 service에 전달함. (service는 요청에 대한 로직 처리 전담) controller는 service에서 처리가 완료된 결과를 받아 client에게 응답. (controller >> 출입문이기도 하지만 출구이기도 한 그런 역할.!) Service : 사용자의 요구사항(business logic)을 처리하는 계층. 실세 중의 실세 현업에서는 Service 코드가 계속해서 비대해지고 있음 DB 저장 혹은 조회가 필요할 때 Repository 계층에게 데이터 요청 Repository : DB를 관리하는 역할 (연결, 해제, 자원 관리, CRUD 작.. 2023. 11. 3. [Spring] JDBC JDBC (Java Database Connectivity) : DB에 접근할 수 있도록 Java에서 제공하는 API 애플리케이션 서버를 개발하게 되면 DB와의 소통이 필수적인데, 이 때 Java application과 DB를 연결해주는 역할을 함. JDBC의 등장 배경 application server에서 DB(MySQL)의 접근하기 위해 필요한 작업 DB에 연결 SQL 작성 후 커넥션을 통해 SQL 요청 요청한 SQL에 대한 응답 받기 ➡️ MySQL 이 아닌 PostgreSQL 로 변경한다면 위의 3가지 방법이 모두 다를 수 있기 때문에 DB의 연결 로직들을 모두 수정해야 하는 문제가 발생하는데 이러한 문제를 해결하기 위해 JDBC 표준 인터페이스 등장 JDBC에 연결해야하는 DB의 JDBC 드라이.. 2023. 11. 3. [Spring] Database / SQL Database : 데이터의 집합. 정보를 저장하고 관리해줌 DBMS (Database Management System) : DB를 관리하고 운영하는 소프트웨어 RDBMS : 관계형 데이터 베이스. 행과 열로 이루어진 테이블이라는 최소 단위로 구성됨. Foreign Key를 통해 다른 데이터를 조합해 함께 볼 수 있음. RDBMS 종류 MySQL PostgreSQL Oracle Database SQL (Structured Query Language) : RDBMS에서 사용되는 언어. 국제표준화 기구에서 SQL에 대한 표준을 정해서 발표하고 있지만, 회사마다 약간의 차이 존재 DDL, DCL, DML 3가지로 분류됨. DDL (Data Definition Language) : 테이블이나 관계의 구조를 생성.. 2023. 11. 3. [Spring] DTO DTO (Data Transfer Object) : 데이터 전송 및 이동을 위해 생성되는 객체 순수한 Java POJO 클래스 client에서 보내오는 데이터를 객체로 처리할 때 사용 서버의 계층간 데이터 이동시 사용 (A라는 클래스의 객체에서 B라는 클래스의 객체로 데이터를 보내줘야할 때) Entity를 그대로 Client에 반환하는 것이 아닌, DTO로 한 번 변환 후 반환할 때 사용 RequestDTO, ResponseDTO 라는 이름을 붙여 DTO 클래스를 만들 수 있음. 절대적인 규칙 X. 조직에 따라 규칙 다를 수 있음 ResponseDTO가 DB와 소통하는 class랑 똑같은 경우가 많음. 그런데도 분리하는 이유는 DB와 소통하는 클래스는 조심스럽게 다뤄야 하기 때문❗ 용어 정리 Entity.. 2023. 11. 2. 이전 1 2 3 다음