REST컨트롤러

댓글 REST API를 위한 컨트롤러로 서비스와 협업, 클라이언트 요청을 받아 응답하며 뷰가 아닌 데이터 반환

 

서비스

REST 컨트롤러와 리파지터리 사이에서 비즈니스 로직, 처리흐름을 담당하며 예외 상황이 발생했을 때 @Transactional로 변경된 데이터 롤백

 

DTO

사용자에게 보여줄 댓글 정보를 담은 것, 단순히 클라이언트와 서버 간에 댓글 JSON 데이터 전송

 

엔티티

DB 데이터를 담는 자바 객체로 엔티티를 기반으로 테이블 생성, 리파지터리가 DB속 데이터를 조회하거나 전달할 때 사용

 

리파지터리 

엔티티를 관리하는 인터페이스로 데이터 CRUD 등 기능 제공, 서비스로부터 댓글 CRUD등의 명령을 받아 DB에 보내고 응답받음

 

 

'코딩자율학습단 > 스프링부트' 카테고리의 다른 글

스프링부트 14일차  (0) 2024.01.20
스프링부트 13일차  (0) 2024.01.19
스프링부트 12일차  (0) 2024.01.19
스프링부트 11일차  (0) 2024.01.18
스프링부트 10일차  (0) 2024.01.16

@ManyToOne

두 엔티티를 다대일 관계로 설정하는 어노테이션

@JoinColumn

해당 엔티티에 외래키를 생성하는 어노테이션

@Query

SQL과 유사한 JPQL이라는 객체지향 퀴리 언어를 통해 쿼리를 처리할 수 있도록 지원하는 어노테이션

기존의 SQL문을 그대로 쿼리 언어로 사용하고 싶다면 nativeQuery속성을 true로 설정

@DateJpaTest

JPA와 연동한 테스트를 진행하는 어노테이션.

리파지터리와 엔티티 등의 객체를 테스트 코드에서 사용할 수 있다.

@DisplayName

테스트 이름을 붙일 때 사용,

테스트 이름은 메서드 이름을 따라가는데, 메서드 이름은 그대로 둔 채 테스트 이름을 바꾸고 싶을 때 사용.

 

JPARepository

ListCrudRepository와 ListPagingAndRepository를 상속받은 인터페이스로,

CRUD뿐만 아니라 엔티티를 페이지 단위로 조회 및 정렬하는 기능과 JPA에 특화된 여러 기능 등을 제공

 

네이티브 쿼리 메서드

리파지터리의 메서드로 퀴리를 작성해 실행하는 것을 말합니다. 네이티브 쿼리 메서드는 @query어노테이션이나 orm.xml파일을 이용해 만들 수 있다.

 

'코딩자율학습단 > 스프링부트' 카테고리의 다른 글

스프링부트 15일차  (0) 2024.01.22
스프링부트 13일차  (0) 2024.01.19
스프링부트 12일차  (0) 2024.01.19
스프링부트 11일차  (0) 2024.01.18
스프링부트 10일차  (0) 2024.01.16

테스트 

프로그램의 품질을 검증하는 것,

의도대로 프로그램이 잘 동작하는 지 확인하는 과정

 

테스트 보드 작성법

1. 예상 데이터 작성하기

2. 실제 데이터 획득하기

3. 예상 데이터와 실제 데이터 비교해 검증하기

 

@SpringBootTest

스프링부트와 해당 클래스를 연동해 테스트할 때 사용하는 어노테이션.

테스트 코드에서 스프링부트가 관리하는 다양한 객체를 주입받을 수 있습니다.

 

테스트 케이스의 트랜잭션 처리

테스트 시 데이터를 조회하는 것이 아닌 조작하는 작업을 했다면 테스트를 마치고 데이터를 롤백해야 한다. 

롤백하지 않으면 테스트 수행으로 조작된 데이터가 남아 문제를 일으킬 수 있다. 

롤백은 테스트 메서드 위에 @Transactional어노테이션을 붙여 해당 메서드를 트랜잭션 처리해주면 된다.

 

 


 

index()는 목록을 보여주는 메서드.

DB에 있는 데이터들이 전부 보여지는 게 예상 데이터

실제 데이터가 있는 articleService에서 가져와서

assertEquals로 비교

 

show()는 상세 페이지.

1페이지로 예상 데이터를 구성하면

id=1 title="가가가가" content="1111로 이루어져 있음 

성공 케이스를 먼저 실행해야 하기에 DB에서 맞는 데이터를 가져와서 예상 데이터에 삽입.

articleService에서 구성한 서비스에서 show()를 가져와서 비교

 

실패케이스는 예상 데이터를 null값으로 두고 실행

 

 

ArticleServiceTest.java
ArticleController.java

create()의 경우에는 컨트롤러에서 ArticleForm을 매개변수로 받아왔기때문에 여기서도 사용해줘야한다.

새로 생성하기 위해서는 dto를 엔티티로 변경하고 그 엔티티를 레포지토리에 저장한다.

 

 

'코딩자율학습단 > 스프링부트' 카테고리의 다른 글

스프링부트 15일차  (0) 2024.01.22
스프링부트 14일차  (0) 2024.01.20
스프링부트 12일차  (0) 2024.01.19
스프링부트 11일차  (0) 2024.01.18
스프링부트 10일차  (0) 2024.01.16

서비스

컨트롤러와 리파지터리 사이에 위치하는 계층, 서버의 핵심 기능(비지니스 로직)을 처리하는 순서를 총괄한다.

 

트랜잭션

모두 성공해야 하는 일련의 과정. 

쪼갤 수 없는 업무 처리의 최소 단위

 

@Service

해당 클래스를 서비스로 인식해 스프링 쿠즈에 서비스 객체를 생성.

 

@Transactional

해당 어노테이션이 선언된 메서드를 트랜잭션으로 묶는다. 

중간에 실패하면 롤백해 처음상태로 되돌아간다.

'코딩자율학습단 > 스프링부트' 카테고리의 다른 글

스프링부트 14일차  (0) 2024.01.20
스프링부트 13일차  (0) 2024.01.19
스프링부트 11일차  (0) 2024.01.18
스프링부트 10일차  (0) 2024.01.16
스프링부트 9일차  (0) 2024.01.15

REST : HTTP URL로 서버의 자원을 명시하고, HTTP메서드로 해당 자원에 대해 CRUD하는 것

API : 클라이언트가 서버의 자원을 요청할 수 있도록 서버에서 제공하는 인터페이스

REST API : REST를 기반으로 API를 구현한 것, 클라이언트가 기기에 구애받지 않고 서버의 자원을 이용할 수 있을 뿐만 아니라 서버가 클라이언트의 요청에 체계적으로대응할 수 있어서 서버 프로그램의 재사용성과 확장성이 좋아집니다.

 

REST Controller

데이터를 반환한다.

normal Controller

뷰 페이지 반환

 

잘하다가 오류나서 구글링해봤는데 결국 해결못하고(17일) 오늘 보니까 dto에 getter가 없어서 발생한 오류였음(...)

 

ResponseEntity

REST의 컨트롤러의 반환형, REST API의 응답을 위해 사용하는 클래스, REST API요청을 받아 응답할 때 이 클래스에 HTTP상태코드, 헤더, 본문을 실어보낼 수 있습니다.

 

HttpStatus

HTTP상태 코드를 관리하는 클래스, 다양한 enum타입과 관련한 메서드를 가진다.

enum타입은 열거형, 여러 상수로 이루어진 고정 집합을 가진다. 

열거형이름.상수

'코딩자율학습단 > 스프링부트' 카테고리의 다른 글

스프링부트 13일차  (0) 2024.01.19
스프링부트 12일차  (0) 2024.01.19
스프링부트 10일차  (0) 2024.01.16
스프링부트 9일차  (0) 2024.01.15
스프링부트 8일차  (0) 2024.01.14

REST API

서버 자원을 클라이언트에 구애받지 않고 사용할 수 있게 하는 설계 방식.

클라이언트에서 정보를 요청하면 서버는 특정 기기에 종속되지 않고 모든 기기에서 통용할 수 있는 JSON 데이터를 응답으로 보냅니다.

 

JSON

키 와 값, 쌍으로 이루어진 속성으로 구성.

{
    "키1": 값,
    "키2": 값,
    "키3": 값
}

 

Talend API Tester

HTTP 및 REST API를 쉽게 호출, 검색 및 테스트할 수 있습니다.

https://chromewebstore.google.com/detail/talend-api-tester-free-ed/aejoelaoggembcahagimdiliamlcdmfm?hl=ko&pli=1

 

Talend API Tester - Free Edition

Visually interact with REST, SOAP and HTTP APIs.

chrome.google.com

 

가짜 API를 사용해 무료로 테스트를 할 수 있다.

https://jsonplaceholder.typicode.com

 

JSONPlaceholder - Guide

Guide Below you'll find examples using Fetch API but you can JSONPlaceholder with any other language. You can copy paste the code in your browser console to quickly test JSONPlaceholder. Getting a resource fetch('https://jsonplaceholder.typicode.com/posts/

jsonplaceholder.typicode.com

HTTP 상태 코드

HTTP메시지

시작라인 - HTTP요청 또는 응답 내용이 있습니다. 시작 라인은 항상 한 줄로 끝납니다.

헤더 - HTTP전송에 필요한 부가정보가 있습니다.

빈 라인 - 헤더의 끝을 알리는 빈 줄로, 헤더가 모두 전송되었음을 알립니다.

본문 - 실제 전송하는 데이터가 있습니다.

'코딩자율학습단 > 스프링부트' 카테고리의 다른 글

스프링부트 12일차  (0) 2024.01.19
스프링부트 11일차  (0) 2024.01.18
스프링부트 9일차  (0) 2024.01.15
스프링부트 8일차  (0) 2024.01.14
스프링부트 7일차  (0) 2024.01.12

 

로깅 레벨 7단계.

TRACE(1)

DEBUG(2)

INFO(3)

WARN(4)

WRROR(5)

FATAL(6)

OFF(7)

출력 레벨을 설정하면 해당 레벨 이상의 로그가 출력됩니다. 

 

 

JPA로깅 설정

#JPA logging setting
#print query Debug level
logging.level.org.hibernate.SQL=DEBUG
#println query
spring.jpa.properties.hibernate.format_sql=true
#show parameter
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

 

#CREATE
CREATE TABLE 테이블 명 (
	속성명1 자료형,
    속성명2 자료형,
    속성명3 자료형,
    PRIMARY KEY(기본키)
);


#INSERT
INSERT 
INTO
	테이블 명
    (속성명1, 속성명2, 속성명3, ...)
VALUES
	(값1, 값2, 값3, ...);
    
#SELECT
SELECT
	속성명1, 속성명2, 속성명3
FROM
	테이블명
WHERE
	조건;
    
 
#UPDATE
UPDATE
	테이블명
SET
	속성명=변경할 값
WHERE
	조건;
    
#DELETE
DELETE
	테이블명
WHERE
	조건;

'코딩자율학습단 > 스프링부트' 카테고리의 다른 글

스프링부트 11일차  (0) 2024.01.18
스프링부트 10일차  (0) 2024.01.16
스프링부트 8일차  (0) 2024.01.14
스프링부트 7일차  (0) 2024.01.12
스프링부트6일차  (0) 2024.01.11

데이터 삭제하기

 

클라이언트가 서버로 삭제 요청

서버는 DB에서 해당 데이터를 찾아 삭제

클라이언트를 리다이렉트된 페이지로 보낸다.

 

RedirectAttributes

리다이렉트 페이지에서 사용할 일회성 데이터를 관리하는 객체.

addFlashAttribute()메서드로 리다이렉트된 페이지에서 사용할 일회성 데이터를 등록할 수 있다.

 

articleRepository.delete()

DB에 접근해 데이터를 삭제할 때 사용하는 메서드

'코딩자율학습단 > 스프링부트' 카테고리의 다른 글

스프링부트 10일차  (0) 2024.01.16
스프링부트 9일차  (0) 2024.01.15
스프링부트 7일차  (0) 2024.01.12
스프링부트6일차  (0) 2024.01.11
1주차 필수 미션 : 도서 리뷰작성하기  (1) 2024.01.11

+ Recent posts