Cloud Native Spring in Action 18

윈도우에 Grype(그라이프) 설치

하.... 윈도우에 안되는게 왤케 많아요 .. 암튼 먼저 WSL2 설치하고 Grype 설치하기로. WSL2 설치 1. powerShell을 관리자 권한으로 실행. 2. 아래 명령어 실행dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestartdism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart  3. 컴퓨터 재부팅. 4. powershell에서 wsl --install 를 입력하여 Windows Subsystem for Linux 설치 (우분투로 자동설치되었음) 5. 홈브루 설치로그가 너무 길게 ..

@JsonTest를 사용한 JSON 직렬화 테스트

@JsonTest 스프링 애플리케이션 콘텍스트를 로드하고 사용 중인 특정 라이브러리에 대한 JSON 매퍼를 자동으로 구성(기본설정: 잭슨) JSON 슬라이스에 대한 통합 테스트package com.polarbookshop.catalogservice.web;import com.polarbookshop.catalogservice.domain.Book;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.autoconfigure.json.JsonTest;import org.springframework.boot.test.json...

@WebMvcTest를 사용한 REST 컨트롤러 테스트

@WebMvcTest:스프링 MVC 컨트롤러가 의도한 대로 작동하는지 테스트 가능(실제 서버 환경이 아닌) 모의 웹 환경에서 스프링 애플리케이션 콘텍스트를 로드하고 스프링 MVC 인프라를 설정하며 @RestController 및 @RestControllerAdvice와 같은 MVC 계층에서 사용되는 빈만 포함  웹 MVC 슬라이스에 대한 통합 테스트🔹 웹 MVC 슬라이스(Web MVC Slice)란?Spring Boot의 @WebMvcTest를 사용하면 웹 계층(Web Layer)만 테스트할 수 있는 "슬라이스 테스트"를 수행할 수 있습니다. 📌 "슬라이스(Slice)"란?전체 애플리케이션을 테스트하지 않고 특정 계층만 테스트하는 방식@WebMvcTest를 사용하면 Spring MVC(Web) 계층만..

@SpringBootTest 를 통한 통합 테스트

@SpringBootTest: 테스트를 실행할 때 테스트 클래스에서 애플리케이션 콘텍스트를 자동으로 부트스트랩하기 위해 사용. 스프링 리액티브 웹을 위해 테스트 의존성 추가(build.gradle)plugins { id 'java' id 'org.springframework.boot' version '3.4.1' id 'io.spring.dependency-management' version '1.1.7'}group = 'com.polarbookshop'version = '0.0.1-SNAPSHOT'java { toolchain { languageVersion = JavaLanguageVersion.of(17) }}repositories { mavenCentral()}dependencies { impl..

JUnit5를 이용한 단위 테스트

소스 작성중 JUnit 이 임포트가 안되는 문제가 생김.그래들엔 분명 spring-boot-starter-test 의존성이 있고, 책에선 이게 JUnit5, 모키토, 어서트J 같은 테스트 라이브러리를 프로젝트로 임포트 한다고 써있는데...! package com.polarbookshop.catalogservice.domain;import jakarta.validation.Validation;import jakarta.validation.Validator;import jakarta.validation.ValidatorFactory;import org.junit.jupiter.api.BeforeAll;//Book 객체의 유효성 검사 제약조건을 검증하기 위한 단위 테스트public class BookValid..

중앙식 예외 핸들러와 이를 이용한 오류 처리

112p ~ @RestControllerAdvice 클래스는 예외와 상태 코드 사이의 매핑을 제공. 카탈로그에 이미 있는 책 생성시 422(처리할 수 없는 개체), 존재하지 않는 책을 가져오려할 때는 404(찾을 수 없음), Book 객체에서 하나 이상의 필드가 잘못되었을 때는 400(잘못된 요청) 응답 반환. package com.polarbookshop.catalogservice.web;import com.polarbookshop.catalogservice.domain.BookAlreadyExistsException;import com.polarbookshop.catalogservice.domain.BookNotFoundException;import org.springframework.http.Htt..

데이터 유효성 검사

109p ~ 111p 유효성 검사를 해야할 조건은 아래와 같다. ISBN은 올바른 형식으로 정의되어야 한다(ISBN-10 or 13)제목, 저자, 가격은 반드시 있어야하고 가격은 0보다 큰 값이어야 한다.plugins { id 'java' id 'org.springframework.boot' version '3.4.1' id 'io.spring.dependency-management' version '1.1.7'}group = 'com.polarbookshop'version = '0.0.1-SNAPSHOT'java { toolchain { languageVersion = JavaLanguageVersion.of(17) }}repositories { mavenCentral()}dependencies { ..

스프링 MVC를 이용한 REST API 구현, 그리고 Httpie 설치와의 사투

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 넘나 멍청하게 ./gradlew bootRun 치고 왜 안되지...... 이러고 있다가 윈도우터미널인걸 깨닫...하 바보가태 윈도우면 gradlew.bat bootRun 으로 실행 근데 또 오류낫쥬...? ㅎㅎ.... 더보기11:12:27.135 [main] ERROR org.springframework.boot.SpringApplication -- Application run failed org.yaml.snakeyaml.scanner.ScannerException: mapping values are not allowed here  in 'reader', line 2, column 7:     server:           ^      ..

스프링 MVC를 이용한 RESTful 애플리케이션 구축(2)

맨날 쓰던 어노테이션 이번 기회에 챗지에게 물어 정리 package com.polarbookshop.catalogservice;import com.polarbookshop.catalogservice.domain.Book;import com.polarbookshop.catalogservice.domain.BookRepository;import com.polarbookshop.catalogservice.domain.BookService;import org.springframework.http.HttpStatus;import org.springframework.web.bind.annotation.*;import java.util.Map;import java.util.Optional;import java.uti..

스프링 MVC를 이용한 RESTful 애플리케이션 구축(1)

이제 필요한 소스를 만드는 중인데, 중간중간 잘 모르는 메소드나 타입, 어노테이션 등을 chatGPT에게 물어봐서 답변 받았던 거 중 몇가지 아카이브(?). 책, 챗지한테서 나온 답변 걍 복사해넣고 아주 조금 다듬은 정도.  개체 Entity : 개체는 한 도메인에서 명사를 나타낸다. / ex. 책서비스 Service: 서비서는 도메인에 대한 사용사례를 정의하고 구현한다. / ex. 카탈로그에 책 추가리포지터리 Repository: 데이터 소스와 독립적으로 데이터에 엑세스하기 위한 추상화 계층이다. 📌 BookRepository 인터페이스의 인메모리 구현이란?✅ "인메모리 구현"이란, 데이터를 실제 데이터베이스(DB)에 저장하지 않고, 애플리케이션의 메모리(RAM)에서 저장하고 관리하는 방식을 의미합니..