CRUD와 SQL 쿼리 종합

이동영·2025년 6월 19일

웹개발

목록 보기
13/36

JPA 로깅 설정

application.properties 파일을 열고, 아래 코드를 추가한다.

logging.level.org.hibernate.SQL=DEBUG

JPA 로깅을 설정하는 코드이다. 맨 마지막 DEBUG로 설정하면, 디버그 레벨로 설정이 된다.
로깅 레벨으로는 다음 7개가 있다.

  1. TRACE(level1) : DEBUG 레벨보다 더 상세한 정보
  2. DEBUG(level2) : 응용 프로그램을 디버깅하는 데 필요한 세부 정보
  3. INFO(level3) : 응용 프로그램의 순조로운 진행 정보
  4. WARN(level4) : 잠재적으로 유해한 상황 정보
  5. ERROR(level5) : 응용 프로그램이 수행할 수 잇는 정도의 오류 정보
  6. FATAL(level6) : 응용 프로그램이 중단될 만한 심각한 오류 정보
  7. OFF(level7) : 로깅 기능 해제

출력 레벨을 설정하면 해당 레벨 이상의 로그가 출력된다. 예를 들어, INFO로 설정하면 그 이상의 레벨인 INFO, WARN, ERROR, FATAL, OFF 레벨의 모든 로그가 기록된다.

JPA 로깅을 설정했으니, 이제 서버를 실행해보면

이렇게 SQL문이 출력됨을 확인할 수 있다.
그런데 쿼리들이 한 줄로 나와서 한눈에 보기가 힘들다.

spring.jpa.properties.hibernate.format_sql=true

이 코드를 추가하면, 쿼리가 자동으로 줄바꿈되어 보기가 편해진다.

이렇게.

그리고 종종 로그로 찍힌 SQL 쿼리를 보다 보면 ?(물음표)를 볼 수 있는데, 다음 코드를 추가하면 ?에 들어 있는 값을 볼 수 있다.

logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

마지막으로, H2 DB에 접속할 때 매번 JDBC URL을 새로 검색해서 입력했는데 이 URL을 고정하도록 하겠다. 먼저 유니크 URL 설정을 false로 하고, 다음으로 어떤 값을 고정 URL로 할 건지 적어 준다. 여기서는 jdbc:h2:mem:testdb라는 고정 URL을 사용하겠다.

# 유니크 URL 생성하지 않기
spring.datasource.generate-unique-name=false
# 고정 URL 설정하기
spring.datasource.url=jdbc:h2

서버를 재실행해보면,

이렇게 설정된 값으로 바뀐 것을 확인할 수 있다.

SQL 쿼리 로그 확인하기

지금까지 작성한 코드에서 새로운 데이터를 생성하려고 하면 오류가 나게 된다.


이유는 data.sql에서 임의로 더미데이터를 임의로 id를 1, 2, 3으로 생성했는데, 새 게시글을 작성할 때 id를 1번부터 넣게 해두어서 중복이 나서 오류가 난 것이다.
id는 기본키(primary key)이기 때문에, 중복을 허용하지 않기 때문이다.
이미 DB가 id를 자동생성하므로, data.sql에 입력값으로 준 id 속성과 속성 값 1, 2, 3을 삭제해준다.

INSERT INTO article(title, content) VALUES('가가가가', '1111');
INSERT INTO article(title, content) VALUES('나나나나', '2222');
INSERT INTO article(title, content) VALUES('다다다다', '3333');

그러면 새 데이터가 정상적으로 추가가 된다.


데이터를 입력하면 이렇게 로그가 출력되는데, id 값이 defualt로 들어가는데, 이건 DB가 알아서 생성해준다는 뜻이다.


그리고 목록 페이지로 가면 select문이 출력된다.


그리고 단일 데이터를 조회하면 select문에 where 절이 추가가 된다.

그리고 게시글을 수정하게 되면

update문이 이렇게 출력된다.

그리고 게시글 삭제를 하면

이렇게 delete문이 출력된다.

0개의 댓글