[게시판 CRUD 만들기] 9장 | CRUD와 SQL 쿼리 종합

2025. 2. 27. 12:56·CS/스프링부트3 자바 백엔드 개발 입문

9.1 JPA 로깅 설정하기

  1. 서버에서 데이터의 생성, 조회, 수정, 삭제 등을 요청 ➡️ JPA의 리포지토리가 DB에 해당 요청 전달
  2. 요청을 받은 DB는 자신의 언어인 SQL로 쿼리를 작성해 테이블 속 데이터를 관리

✔️ 쿼리(query): DB에 정보를 요청하는 구문

  • 생성: INSERT
  • 조회: SELECT
  • 수정: UPDATE
  • 삭제: DELETE

CRUD 수행에 따른 DB의 SQL 쿼리 분석하기 위해서는 resources > application.properties에서 JPA 로깅 설정을 해야 한다.

✔️ 로깅(logging): 시스템이 작동할 때 당시의 상태와 작동 정보를 기록하는 것

  1. 레벨1 TRACE: DEBUG보다 상세한 정보
  2. 레벨2 DEBUG: 응용 프로그램을 디버깅하는 데 필요한 세부 정보
  3. 레벨3 INFO: 응용 프로그램의 순조로운 진행 정보
  4. 레벨4 WARN: 잠재적으로 유해한 상황 정보
  5. 레벨5 ERROR: 응용 프로그램이 수행할 수 있는 정도의 오류 정보
  6. 레벨6 FATAL: 응용 프로그램이 중단될 만한 심각한 오류 정보
  7. 레벨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
'CS/스프링부트3 자바 백엔드 개발 입문' 카테고리의 다른 글
  • [REST API와 테스트 코드 작성하기] 11장 | HTTP와 REST 컨트롤러
  • [REST API와 테스트 코드 작성하기] 10장 | REST API와 JSON
  • [게시판 CRUD 만들기] 8장 | 게시글 삭제하기: Delete
  • [게시판 CRUD 만들기] 7장 | 게시글 수정하기: Update
순토언니
순토언니
기록
  • 순토언니
    secrete_parallel
    순토언니
  • 전체
    오늘
    어제
    • 분류 전체보기 (49)
      • CS (23)
        • 혼자 공부하는 컴퓨터 구조 + 운영체제 (7)
        • 파이썬 알고리즘 인터뷰 (0)
        • 스프링부트3 자바 백엔드 개발 입문 (14)
        • 개발 (2)
      • AI (4)
        • 혼자 공부하는 머신러닝 딥러닝 (0)
        • 논문 리뷰 (0)
        • LLM을 활용한 실전 AI 애플리케이션 개발 (4)
      • 프로젝트 (0)
        • GDSC 겨울 프로젝트 (0)
        • forA (0)
      • 시험 후기 (2)
      • 손에 잡히는 경제 (14)
      • 영화 (0)
      • 독서기록 (2)
      • 맛집DB (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    kiwipiepy
    론도론도
    정처기
    손경제 리뷰
    손에 잡히는 경제 플러스
    손에 잡히는 경제
    손경제 플러스
    한국어 형태소 분석기
    테스트 프레임워크
    손경제
    손경제 플러스 리뷰
    pytest
    스프링부트3
    손잡경
    코딩 자율학습 스프링 부트3 자바 백엔드 개발 입문
    임베딩
    코딩자율학습단
    백엔드
    양귀자
    딥러닝
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
순토언니
[게시판 CRUD 만들기] 9장 | CRUD와 SQL 쿼리 종합
상단으로

티스토리툴바