database 6

지연 로딩과 즉시 로딩의 차이

즉시 로딩: 연관관계에서 1:N 관계에 있는 엔티티를(N쪽의 데이터를) 조회할 때, 거기에 매핑된 다른 엔티티도 한 번에 하나의 쿼리로 가져오는 방식지연 로딩: DB가 아닌 프록시에서 데이터를 가져온다. 마찬가지로 N 쪽의 데이터를 조회할 때, 해당 데이터는 실제 DB쿼리로 가져오고 매핑된 다른 엔티티들은 프록시 객체로 함께 생성되어 메모리에 로딩됨. (프록시 객체는 즉시 생성되지만 그 프록시 내부의 실제 데이터는 아직 로딩되지 않음) 예를 들어보자...@Entitypublic class MemberPrefer { @ManyToOne(fetch = FetchType.LAZY) private Member member;}MemberPrefer이라는 객체에 N:1관계로 매핑된 객체 member 즉시..

궁금한 것 2025.05.08

[SpringBoot] Transaction 트랜잭션

서비스 계층의 역할비즈니스 로직을 갖는다여러 SQL에 접속하는 경우 트랜잭션 관리트랜잭션이란?쪼갤 수 없는 업무의 최소 단위"모든 작업이 성공해야 최종적으로 적용됨"을 보장모든 SQL을 성공시키거나, 하나라도 실패하면 모두 실패시킴 MySQL 트랜잭션 명령어(SQL)start transaction;트랜잭션 시작하기commit;트랜잭션 정상 종료 (트랜잭션 시작 후 실행된 모든 SQL 한번에 반영)rollback;트랜잭션 실패 처리 (트랜잭션 시작 후 실행된 모든 SQL 미반영) 실습트랜잭션 실행 후, 테이블에 값 저장. 이 상태에서 다른 MySQL 창에서 해당 테이블의 정보를 검색하면트랜잭션이 시작된 후 아직 commit이나 rollback으로 이 트랜잭션의 반영 여부를 알려주지 않았기 때문에, 다른 단..

스프링부트 2025.03.10

[SpringBoot] Spring Data JPA를 사용한 CRUD

Spring Data JPA v.s. JPASpring Data JPA는 복잡한 JPA 코드를 스프링과 함께 쉽게 사용하도록 도와주는 라이브러리위의 함수들은 복잡한 JPA 코드를 감싼 코드임 전체 틀Spring Data JPA: JPA 사용JPA는 규칙일 뿐이고, 이를 구현한 Hibernate가 코드 역할을 하며Hibernate는 내부적으로 jdbc를 사용한다. 그래서 우리는 Srping Data JPA를 사용하면서 JDBC를 사용하고 있는 것Service에서 JpaRepository를 상속받은 Repository의 함수를 이용해서 CRUD 기능을 구현해보자사용할 repository 클래스가 JpaRepository를 상속받게 하면, 해당 repository는 굳이 @Repository를 붙이지 않아도,..

스프링부트 2025.03.10

[SpringBoot][DB] JPA (이용 배경, 개념, table과 객체 맵핑 실습)

JPA 이용 배경JdbcTemplate을 사용해서, 개발자가 문자열로 저장한 sql을 JdbcTemplate을 이용하여 데이터베이스에 던져주는 식으로 진행했을 때의 한계1. 문자열을 개발자가 직접 작성: 실수할 수 있고, 실수 인지 시점이 느림문자열 내부에서 나는 이 오류는 컴파일 시점이 아닌 런타임 시점에 잡히기 때문.*런타임 시점 오류와 컴파일 시점 오류에 대해서는 아래 글을 참고하세요https://mim-doremi.tistory.com/542. 특정 데이터베이스에 종속적이게 됨데이터베이스를 변경하고자 할 때, 작성했던 레포지토리 클래스를 하나하나 찾아가서 바꿔줘야 함.3. 반복 작업이 많아짐테이블 하나 생성 시 기본적으로 CRUD가 항상 필요한데, 이 쿼리들을 항상 작성해줘야 한다.4. 데이터베이..

스프링부트 2025.03.09

[DB] [Spring] Spring에서 Database 사용하기

스프링 부트가 데이터베이스(MySQL)에 접근할 수 있도록 해주는 방법프로젝트파일/src/main/resources에 application.yml이라는 파일을 생성해당 파일 내에 스프링부트가 데이터베이스에 붙을 수 있게 설정해 줄 것이다.spring: datasource: url: "jdbc:mysql://localhost/library" username: "root" password: "" driver-class-name: com.mysql.cj.jdbc.Driver  spring:spring boot의 설정을 정의하는 루트 키datasource:스프링부트가 어떤 데이터를 가리키게 할 것인지 설정하는 부분데이터베이스 연결과 ..

스프링부트 2025.03.05

[DB] [MySQL] Database와 MySQL

서버를 시작하고 어떤 정보들을 저장하게 한 후, 서버를 종료했다가 재시작하면 내가 저장했던 정보들이 모두 사라짐. 서버를 실행시켜 API를 동작시키면, 우리가 개발하여 DISK에 위치해있던 코드가 RAM 쪽으로 복사됨API가 실행되면, 연산이 수행되며, CPU와 RAM을 왔다갔다 하면서 데이터가 단기기억에 저장됨즉 우리가 저장한 정보들은 RAM에 쓰여있음.이 RAM(단기 기억)에 쓰여 있는 정보는 서버가 종료될 시 사라짐 서버에서 장기기억 (Disk)에 저장하기 위해서, Database를 사용한다Database데이터를 구조화 시켜 저장하는 것RDB (Relational Database)데이터베이스의 한 종류데이터를 표처럼 구조화 시켜 저장하는 것RDB의 대표적인 데이터베이스로 MySQL이 있다 SQL(S..

MySQL 2025.03.04