Java 30

@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)에서 저장하고 관리하는 방식을 의미합니..

임베디드 서버로 작업

94p 루트 폴더로 이동하여 애플리케이션을 JAR파일로 패키징(다시 한번 말하지만, 제발 띄어쓰기가 없는 폴더로...고통....)./gradlew bootJar bootJar 작업은 코드를 컴파일하고, 애플리케이션을 JAR파일로 패키징 함.이때 JAR는 build/libs 폴더로 생성되게 기본 설정 되어있음. java -jar build/libs/catalog-service-0.0.1-SNAPSHOT.jar 명령을 통해 실행.(bootJar와 test작업을 하나로 결합한 build를 사용해도 됨)  ctrl c 를 눌러 애플리케이션 중지 3.2.3 내장 톰캣 설정(98p)application.properties파일을 application.yml 로 변경하고해당 yml파일에 HTTP 포트, 연결 타임아웃,..

쿠버네티스로 컨테이너 관리

2.4 쿠버네티스로 컨테이너 관리 (68p) 컨테이너 구성에는 컨테이너 런타임이 있는 컴퓨터 필요.쿠버네티스를 사용하면 오케스트레이션 구성이기 때문에 클러스터 필요. ※클러스터 Cluster컨테이너화된 애플리케이션을 실행하는 작업자 머신(노드 node)의 집합. 모든 클러스터에서는 적어도 하나의 작업자 노드가 존재.미니큐브 사용시 로컬 머신에서 쉽게 단일 노드 클러스터 생성 가능. → 프로덕션, 즉 실제 서비스 환경에서는 클라우드 공급자가 관리하는 클러스터 사용. ※작업자 노드 worker node쿠버네티스 클러스터에는 작업자노드라는 머신이 여러 대 존재할 수 있는데, 이 작업자 노드에 컨테이너화된 애플리케이션이 배포됨. 컨테이너가 실행하고 네트워크에 연결할 수 있도록 작업자 노드는 CPU, 메모리, 네..

컨테이너를 통한 스프링 애플리케이션의 실행

루트폴더인 catalog-service로 이동하여 ./gradlew bootBuildImage 명령어 입력.이 그래들 작업은 내부적으로 클라우드 네이티브 빌드팩을 이용해 애플리케이션을 컨테이너 이미지로 패키징 한다.PS C:\Y\Cloud Native Spring in Action> cd C:\Y\"Cloud Native Spring in Action"\catalog-servicePS C:\Y\Cloud Native Spring in Action\catalog-service> ./gradlew bootBuildImageStarting a Gradle Daemon (subsequent builds will be faster)> Task :bootBuildImageBuilding image 'docker.i..