9.1 JPA 로깅 설정하기
- 서버에서 데이터의 생성, 조회, 수정, 삭제 등을 요청 ➡️ JPA의 리포지토리가 DB에 해당 요청 전달
- 요청을 받은 DB는 자신의 언어인 SQL로 쿼리를 작성해 테이블 속 데이터를 관리
✔️ 쿼리(query): DB에 정보를 요청하는 구문
- 생성: INSERT
- 조회: SELECT
- 수정: UPDATE
- 삭제: DELETE
CRUD 수행에 따른 DB의 SQL 쿼리 분석하기 위해서는 resources > application.properties에서 JPA 로깅 설정을 해야 한다.
✔️ 로깅(logging): 시스템이 작동할 때 당시의 상태와 작동 정보를 기록하는 것
- 레벨1 TRACE: DEBUG보다 상세한 정보
- 레벨2 DEBUG: 응용 프로그램을 디버깅하는 데 필요한 세부 정보
- 레벨3 INFO: 응용 프로그램의 순조로운 진행 정보
- 레벨4 WARN: 잠재적으로 유해한 상황 정보
- 레벨5 ERROR: 응용 프로그램이 수행할 수 있는 정도의 오류 정보
- 레벨6 FATAL: 응용 프로그램이 중단될 만한 심각한 오류 정보
- 레벨7 OFF: 로깅 기능 해제
➡️ 출력 레벨을 설정하면 그 이상의 레벨의 모든 로그가 기록된다.
1. JPA가 동작 시 수행되는 SQL 쿼리를 보기 위해 로그 레벨을 DEBUG로 설정하기
logging.level.org.hibernate.SQL=DEBUG
➡️ org.hibernate.SQL 문구를 확인할 수 있었는데, drop,create으로 시작하는 SQL쿼리를 확인할 수 있다.
2. 쿼리들 줄바꿈해 보기 쉽게 정렬하기
application.properties 파일에서 format_sql = true로 하는 코드 추가해 SQL 쿼리에 줄바꿈 적용하기
spring.jpa.properties.hibernate.format_sql=true
3. JPA쿼리에서 DB로 넘어가는 매개변수 값을 확인하는 코드 추가하기
로그로 찍힌 SQL 쿼리를 보다 보면 ?를 볼 수 있는데, 코드를 추가해 ? 속 내용도 확인할 수 있다.
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
4. H2 DB에 접속할 때 URL 고정하기
spring.datasource.generate-unique-name=false
spring.datasource.url=jdbc:h2:mem:testdb
- 유니크 URL 설정을 false로 해준다.
- jdbc:h2:mem:testdb 라는 고정 url을 설정해준다.
➡️ 설정한 값으로 url이 변한 것을 확인할 수 있다.
9.2 SQL 쿼리 로그 확인하기
9.2.1 데이터 생성 시: INSERT
✔️ 기본키(primary key): 테이블에 저장된 각 데이터를 유일하게 구분할 수 있도록 지정한 속성(article 테이블에서는 id)
data.sql 파일에 직접 id값을 1, 2, 3 이렇게 넣어줬는데, entity > Article.java 파일에 @Id와 @GeneratedValue 통해 자동 생성하도록 만들었으므로 id가 충돌하게 되는 부분을 수정해줘야 한다. ➡️ DB가 알아서 id를 넣을 수 있도록 한다.
@GeneratedValue(strategy = GenerationType.INDENTITY)
- id값에는 default: DB가 알아서 id를 생성해 준다는 의미
- content에는 ?: 아래 생성된 Article객체에서 확인
- title도 Article객체에서 확인할 수 있다.
9.2.2 데이터 조회 시: SELECT 문
- SELECT문의 where이 추가되어 id가 ?인 데이터를 가져오면 된다.
- ?에 들어가는 값은 로그에서 id값을 보면 된다.
9.2.3 데이터 수정 시: UPDATE 문
- UPDATE쿼리가 실행됐는데 ?에 들어갈 값을 content, title에서 찾을 수 있다.
9.2.4 데이터 삭제 시: DELETE 문
9.3 기본 SQL 쿼리 작성하기
9.3.1 coffee 테이블 만들기
- create table 문: 테이블을 만드는 쿼리
- id, content, title 속성 가진 article이라는 이름의 테이블을 만들라는 뜻
entity > Article.java파일의 @Entity 어노테이션으로 DB가 해당 객체를 인식 = 해당 클래스로 테이블 생성
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Entity // 엔티티임을 선언
@Getter
public class Article {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // DB가 id 자동 생성
private Long id;
@Column
private String title;
@Column
private String content;
}
➡️ 서버를 실행하면 새로운 Article 객체가 만들어지므로 CREATE TABLE 문도 자동으로 수행된다.
CREATE TABLE 테이블명 (
속성명1 자료형,
속성명2 자료형,
속성명3 자료형,
PRIMARY KEY(기본키)
);
엔티티 클래스에 @Table(name='ORDERS') 선언 시 클래스명과 상관없이 ORDERS 이름의 테이블이 생성된다.
9.3.2 coffee 데이터 생성하기
INSERT INTO coffee(id, name, price) VALUES(1, '아메리카노', 4100);
9.3.3 coffee 데이터 조회하기
SELECT id, name, price FROM coffee WHERE id=3;
9.3.4 coffee 데이터 수정하기
UPDATE coffee SET price=9900 WHERE id=4;
9.3.5 coffee 데이터 삭제하기
DELETE FROM coffee WHERE id=4;
'CS > 스프링부트3 자바 백엔드 개발 입문' 카테고리의 다른 글
[REST API와 테스트 코드 작성하기] 11장 | HTTP와 REST 컨트롤러 (0) | 2025.03.01 |
---|---|
[REST API와 테스트 코드 작성하기] 10장 | REST API와 JSON (0) | 2025.02.27 |
[게시판 CRUD 만들기] 8장 | 게시글 삭제하기: Delete (0) | 2025.02.27 |
[게시판 CRUD 만들기] 7장 | 게시글 수정하기: Update (0) | 2025.02.22 |
[게시판 CRUD 만들기] 6장 | 게시판 내 페이지 이동하기 (0) | 2025.02.22 |