JPA 로깅 설정하기

로깅이란 시스템이 작동할 당시의 상태와 작동 정보를 기록하는 것을 말한다.

JPA의 로깅 설정은 application.properties 파일에서 할 수 있는데 로깅 레벨을 디버그로 설정하여 아래 코드 추가.

# JPA 로깅 설정
# 디버그 레벨로 쿼리 출력
logging.level.org.hibernate.SQL=DEBUG

로깅 레벨은 7단계로 나눌 수 있는데 아래와 같다.

서버를 실행해 정말로 SQL 쿼리가 로그로 찍히는지 확인해 보면 아래와 같이 쿼리들이 실행되는 것을 볼 수 있다.

그런데 쿼리들이 한 줄로 나와 보기 힘드니 정렬하는 코드를 application.properties에 추가해 준다.

여기에 함께 매개변수 값을 보여주는 코드도 동일 파일에 추가해 준다.

# 쿼리 줄바꿈하기
spring.jpa.properties.hibernate.format_sql=true

# 매개변수 값 보여주기
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

서버를 재시작하면 아래와 같은 결과를 볼 수 있다.

마지막으로 그동안 H2 DB에 접속할 때 매번 JDBC URL을 새로 검색해서 입력했는데,

URL을 고정시키기 위해 앞서와 동일 파일에 아래 코드를 추가시켜 준다.

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

서버를 재시작해 아래와 같이 고정 URL을 확인하고,

localhost:8080/h2-console 페이지에 접속해 고정 URL로 접속도 확인해 준다.

 


SQL 쿼리 로그 확인하기

제일 처음으로 데이터 생성 즉 Create 시 쿼리를 알아볼 것이다.

우리가 만든 New Article 버튼을 클릭 후 새 글 작성을 해 submit 하면 데이터 생성 실패를 볼 수 있을 것이다.

3개의 더미 데이터를 생성하는 INSERT문에서 1,2,3번 데이터를 집어넣었는데,

새 글을 작성할 때 id를 1번부터 넣게 해서 id가 중복이 되었기 때문이다.

Article.java 파일로 가 아래와 같이 id 자동 생성 전략 코드를 추가해 준다.

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

그다음 data.sql에 입력값으로 준 id 속성과 값도 삭제해 주고 다시 새 데이터 생성 과정을 해 본다.

위와 같이 잘 저장이 되는 것을 확인할 수 있다.

두 번째로는 SELECT문을 확인해 볼 것인데 목록 조회 시와 게시글 하나를 조회할 시에는 where절의 차이를 볼 수 있다.

데이터 수정 시에는 아래와 같이 update문이 동작하는 것을 볼 수 있다.

마지막으로 데이터를 삭제할 때의 쿼리를 볼 것인데 이 때는 delete 쿼리가 수행되고,

where 절에 삭제할 게시글의 id가 들어간다.


기본 SQL 쿼리 작성하기

이번에는 새로운 테이블 coffee를 만들어 SQL 쿼리를 작성하는 예제를 실습하도록 하겠다.

인텔리제이에서 서버를 실행하고 http://localhost:8080/h2-console로 접속한다.

그다음 아래와 같이 작성하여 coffee 테이블을 생성해 준다.

create table coffee (
        id bigint generated by default as identity,
        name varchar(255),
        price integer,
        primary key (id)
    )

정상적으로 생성되었다면 아래와 같이 보이게 될 것이다.

테이블에 INSERT문으로 새 데이터를 넣어주는데 SQL 키워드를 대문자로 작성해서 쿼리 작성 후 넣어주도록 하겠다.

INSERT INTO COFFEE(id, name, price)
VALUES (1, '아메리카노', 4100);

여러 데이터를 한꺼번에 생성하는 것도 가능한데 VALUE 절에 새로 생성할 데이터를 쉼표로 구분해 추가해 주면 된다.

INSERT INTO COFFEE(id, name, price)
VALUES (2, '카페라떼', 4600),  (3, '카페모카', 5200),  (4, '레몬에이드', 5600)

전체 데이터를 보기 위해 SELECT문으로 조회 시 앞서 생성한 데이터들이 잘 저장된 것을 볼 수 있다.

이제 마지막으로 데이터를 수정하고 삭제하는 과정을 해 볼 것인데,

아래와 같이 수정 시에는 UPDATE문으로 삭제 시에는 DELETE 문으로 해 주면 된다.

UPDATE coffee
SET price = 4500
WHERE id = 1;

DELETE FROM coffee
WHERE id = 4;

수정과 삭제 후 다시 전체 데이터를 조회해 보면 아래와 같이 확인할 수 있다.