dew's CSE Studying

스프링부트3 자바 백엔드 9장~11장 본문

3-1/[inflearn]스프링입문

스프링부트3 자바 백엔드 9장~11장

dew₍ᐢ.ˬ.⑅ᐢ₎ 2024. 11. 23. 21:52

9장 CRUD와 SQL 쿼리 종합

9.1 JPA 로깅 설정하기

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

-INSERT문(생성), SELECT문(조회), UPDATE문(수정), DELETE문(삭제)

 

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

<로깅 설정하기>

1.application.properties에 코드 추가

logging.level.org.hibernate.SQL=DEBUG

-로깅 레벨(7단계)

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

2.서버 실행

org.hibernate.SQL이 새롭게 나온다

 

3.application.properties에 쿼리 줄바꿈을 위한 코드 추가

spring.jpa.properties.hibernate.format_sql=true

 

4.서버 재시작

줄바꿈 적용된 것 확인

 

5.매개변수 값 보여주기 코드 추가

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

 

6.서버 재시작

문제 없이 동작하는 것 확인~

 

7.고정 url을 위한 코드 추가

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

 

8.서버 재시작

jdbc를 검색해보면 설정값으로 바뀐 것 확인 가능

 

9.h2-console에서 해당 주소로 접속해보기

9.2 SQL 쿼리 로그 확인하기

9.2.1 데이터 생성 시: INSERT 문

  • id 자동 생성 전략 추가하기

새글을 작성하고 submit하면 id 충돌 오류가 나는 것을 확인할 수 있다.

자동생성되도록 코드를 추가하고
id 부분을 삭제해준다

 

  • 데이터 생성 시 동작하는 SQL 로그 확인하기

id 4로 올바르게 입력된다
실행창에서도 확인 가능~

9.2.2 데이터 조회 시: SELECT 문

서버에서 조회시 SELECT문이 수행된 것을 볼 수 있다

article 테이블에서 id, content, title을 조회하라는 쿼리

 

단일 데이터 조회 시 where절이 추가된 것으르 알 수 있다.

 

9.2.3 데이터 수정 시: UPDATE 문

수정 시 update문 확인 가능

 

9.2.4 데이터 삭제 시: DELETE 문

9.3 기본 SQL 쿼리 작성하기

9.3.1 coffee 테이블 만들기

이 create문은 어떻게 생성되었을까?

@Entity: DB가 해당 객체를 인식하도록

->서버를 실행하면 새로운 Article 객체가 만들어지기 때문에 CREATE TABLE문도 자동으로 수행되는 것이다

 

테이블을 생성해보자

테이블을 복사해서 요소를 약간 수정해주었다
coffee 테이블 생성

 

 

9.3.2 coffee 데이터 생성하기

이렇게 삽입해주고
잘 들어갔는지 확인도 해준다

이번에는 여러 데이터를 한꺼번에 생성해보자

코드 작성해주고
확인~

 

9.3.3 coffee 데이터 조회하기

9.3.4 coffee 데이터 수정하기

잘 변경되었다

9.3.5 coffee 데이터 삭제하기

Part 3 Rest API와 테스트 코드 작성하기

10장 REST API와 JSON

10.1 REST API와 JSON의 등장 배경

서버는 웹 브라우저 뿐만 아니라 모든 클라이언트(스마트폰, 스마트워치...)의 요청에 응답해야 한다.

REST API(Representational State Transfer API): 서버의 자원을 클라이언트에 구애받지 않고 사용할 수 있게 하는 설계방식

-HTTP 요청에 대한 응답으로서 서버의 자원을 반환한다(서버에서 보내는 응답이 특정 기기에 종속되지 않도록 모든 기기에서 통용될 수 있는 데이터를 반환함)

JSON(JavaScript Object Notation): 서버가 클라이언트의 요청에 대한 응답으로 전송하는 응답데이터

-키와 값으로 구성된 정렬되지 않은 속성의 집합

10.2 REST API 동작 살펴보기

10.2.1 {JSON} Placeholder 사이트 둘러보기

POST 메서드를 통해 지정된 URL로 요청을 보내면 게시판에 새 글이 등록되고 새로 생성된 데이터는 JSON 형태로 반환된다

 

PUT vs PATCH

  • PUT: 기존 데이터를 전부 새 내용으로 변경한다. 만약 기존 데이터가 없다면 새로 생성한다
  • PATCH: 기존 데이터 중 일부만 새 내용으로 변경한다

 

10.2.2 Talend API Tester 설치하기

확장 프로그램을 설치해 주었다

10.2.3 GET 요청하고 응답받기

전체 데이터 조회하기
1번 데이터 조회하기
101번 데이터 조회시 실패

 

<HTTP 상태 코드>

상태코드 설명
1XX(정보) 요청이 수신되어 처리 중입니다
2XX(성공) 요청이 정상적으로 처리되었습니다
3XX(리다이렉션 메시지) 요청을 완료하려면 추가 행동이 필요합니다
4XX(클라이언트 요청 오류) 클라이언트의 요청이 잘못되어 서버가 요청을 수행할 수 없습니다
5XX(서버 응답 오류) 서버 내부에 에러가 발생해 클라이언트의 요청에 대해 적절히 수행하지 못하였습니다

 

<HTTP 요청 메시지와 응답 메시지>

 

HTTP 메시지의 구성

  • 시작라인: HTTP 요청 또는 응답 내용이 있다. 시작라인은 항상 한줄로 끝난다
  • 헤더: HTTP 전송에 필요한 부가 정보(metadata)가 있다
  • 빈 라인: 헤더의 끝을 알리는 빈 줄로, 헤더가 모두 전송되었음을 알린다
  • 본문: 실제 전송하는 데이터가 있다

요청메시지
응답 메시지

 

10.2.4 POST 요청하고 응답받기

요청 메시지: 시작라인과 헤더에는 응답 정보가, 본문에는 생성 데이터가 실려 반환되었다.

응답 메시지도 마찬가지이다. 이때 id는 자동으로 101번이 매겨졌다.

 

10.2.5 PATCH 요청하고 응답받기

수정한 내용이 반환되었다

 

10.2.6 DELETE 요청하고 응답받기

200이 반환되면 잘 삭제되었다는 의미

본문은 비어있다

 

11장 HTTP와 REST 컨트롤러

11.1 REST API의 동작 이해하기

  • REST: HTTP URL로 서버의 자원을 명시하고, HTTP 메서드로 해당 자원에 대해 CRUD하는 것
  • API: 클라이언트가 서버의 자원을 요청할 수 있도록 서버에서 제공하는 인터페이스
  • REST API: REST를 기반으로 API를 구현한 것

 

11.2 REST API의 구현 과정

  • 조회 요청: /api/articles 또는 /api/articles/{id}

->GET 메서드로 Article 목록 전체 또는 단일 Article을 조회한다

  • 생성 요청: /api/articles

->POST 메서드로 새로운 Article을 생성해 목록에 저장한다

  • 수정 요청: /api/articles/{id}

->PATCH 메서드로 특정 Article의 내용을 수정한다

  • 삭제 요청: /api/articles/{id}

->DELETE 메서드로 특정 Article을 삭제한다

 

11.3 REST API 구현하기

11.3.1 REST 컨트롤러 맛보기

Talend API Tester에서도 잘 동작한다

REST 컨트롤러와 일반 컨트롤러의 차이점

->REST컨트롤러(FisrtApiController): JSON이나 텍스트 같은 데이터를 반환

    일반컨트롤러(FirstController): 뷰페이지를 반환

 

11.3.2 REST API: GET 구현하기

-모든 게시글 조회하기

ArticleApiController.java를 생성해 코드를 작성해주고
잘 작동한다

 

-단일 게시글 조회하기

코드 추가

 

 

11.3.3 REST API: POST 구현하기

REST API에서 데이터를 생성할 때는 JSON 데이터를 받아와야 하므로 단순히 매개변수로 dto를 쓴다고 해서바아올 수 있지 않다

->@RequestBody 추가해주기!

 

11.3.4 REST API: PATCH 구현하기

-데이터 전체를 수정할 경우

메서드의 본문

  1. 수정용 엔터티 생성하기
  2. DB에 대상 엔터티가 있는지 조회하기
  3. 대상 엔터티가 없거나 수정하려는 Id가 잘못됐을 경우 처리하기
  4. 대상 엔티티가 있으면 수정 내용으로 업데이트하고 정상 응답(200) 보내기

-Response Entity: REST 컨트롤러의 반환형, 즉 REST API의 응답을 위해 사용하는 클래스

 

-일부 데이터만 수정할 경우

target.patch(article)추가해주고
patch 메서드도 생성

11.3.5 REST API: DELETE 구현하기

  1. DB에서 대상 엔티티가 있는지 조회하기
  2. 대상 엔티티가 없어서 요청 자체가 잘못됐을 경우 처리하기
  3. 대상 엔티티가 있으면 삭제하고 정상 응답(200) 반환하기

코드 작성
2번 데이터를 삭제해주고
삭제 확인해준다