Spring Boot

Spring Boot

Spring Boot Batch

💡 Spring Boot Batch 대량의 데이터를 처리하는 작업을 자동화하여 시스템의 부하를 줄이고 효율적인 데이터 처리를 가능하게 하는 프레임워크 💡 배치 프로그램(Batch Program) 대량의 데이터를 처리하는 작업을 자동화하는 프로그램 Job과 Step을 이용한 배치 프로세스 구현 배치 처리의 단위 작업(Job)과 작은 단위 작업(Step)을 이용하여 배치 프로세스를 구현하는 기능을 제공 Chunk 지향 처리 방식을 통한 대용량 데이터 처리 Chunk 단위로 데이터를 처리하여 대용량 데이터 처리 기능을 제공 전체 프로세스 1. Job Launcher로 Job을 실행 (Job Launcher -> Job) 2. Job은 Step을 통해 실제 배치처리를 수행 (Job → Step) 3. Step에..

Spring Boot

@RequestParam Enum 값 받기

@RequestBody로 받는 Enum 타입 값들은 @JsonCreater를 사용해 받을 수 있었다! @JsonCreator public static PostStatus create(String requestValue) { return Stream.of(values()) .filter(v -> v.key.equalsIgnoreCase(requestValue)) .findFirst() .orElseThrow(() -> new BadRequestException(INVALID_POST_STATUS)); } 그렇다면 @RequestParam으로 받아야 하는 Enum 값들은 어떻게 받아야 할까? @RequestParam은 주로 쿼리스트링이나 폼 데이터와 관련이 있다. @RequestParam을 사용하는 경우에는..

Spring Boot

JUnit과 Mockito 기반의 Spring 단위 테스트 코드 작성 방법

Modckito 개발자가 동작을 직접 제어할 수 있는 가짜(Mock) 객체를 지원하는 테스트 프레임워크 의존성은 단위 테스트를 작성하는 것을 어렵게 하는데, 이를 해결하기 위해 가짜 객체를 주입시켜줌 Mockito를 활용함으로써 가짜 객체에 원하는 결과를 Stub하여 단위 테스트를 진행 가능 Mock 객체 의존성 주입 @Mock: Mock 객체를 만들어 반환해주는 어노테이션 @Spy: Stub하지 않은 메서드들은 원본 메서드 그대로 사용하는 어노테이션 @InjectMocks: @Mock 또는 @Spy로 생성된 가짜 객체를 자동으로 주입시켜주는 어노테이션 UserController에 대한 단위 테스트를 작성하고자 할때, UserService를 주입받고 있다면 @Mock 어노테이션을 통해 가짜 UserSer..

Spring Boot

단위 테스트(Unit Test)와 통합 테스트

단위 테스트 하나의 모듈(기능 또는 메소드)을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트 어떤 기능이 실행되면 어떤 결과가 나오는지 테스트 진행 통합 테스트 모듈을 통합하는 과정에서 모듈 간의 호환성을 확인하기 위해 수행되는 테스트 애플리케이션은 여러 개의 모듈들로 구성이 되고, 모듈들끼리 메세지를 주고 받으면서(함수 호출) 기능을 수행 통합된 모듈들이 올바르게 연계되어 동작하는지 검증 단위 테스트(Unit Test) 작성의 필요성 통합 테스트 실제 여러 컴포넌트들 간의 상호작용을 테스트하기 때문에 모든 컴포넌트들이 구동된 상태에서 테스트 통합 테스트를 위해서는 캐시나 데이터베이스 등 다른 컴포넌트들과 실제 연결을 해야 함 시스템을 구성하는 컴포넌트들이 많아질수록 테스트를 위한 비용(시간)이 ..

Spring Boot

API 예외 처리

HTML 페이지 vs API 오류 HTML 페이지 BasicErrorController 는 HTML 페이지를 제공하는 경우에는 매우 편리 (4xx, 5xx) API 오류 API 마다, 각각의 컨트롤러나 예외마다 서로 다른 응답 결과를 출력해야 할 수 있음 API 오류 처리는 뒤에서 설명할 @ExceptionHandler 를 사용 스프링 부트가 기본으로 제공하는 ExceptionResolver ExceptionHandlerExceptionResolver @ExceptionHandler 을 처리 API 예외 처리는 대부분 이 기능으로 해결 ResponseStatusExceptionResolver HTTP 상태 코드를 지정 @ResponseStatus 가 달려있는 예외 처리 (@ResponseStatus(va..

Spring Boot

서블릿 필터, 스프링 인터셉터

필터 흐름 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러// 로그인 사용자 HTTP 요청 -> WAS -> 필터(적절하지 않은 요청이라 판단, 서블릿 호출X) // 비 로그인 사용자 init(): 필터 초기화 메서드, 서블릿 컨테이너가 생성될 때 호출 doFilter(): 고객의 요청이 올 때 마다 해당 메서드가 호출 (필터 로직을 구현) destroy(): 필터 종료 메서드, 서블릿 컨테이너가 종료될 때 호출 서블릿 필터 인증 체크 필터 개발 // 필터를 사용하려면 필터 인터페이스를 구현해야 함 @Slf4j public class LoginCheckFilter implements Filter { // 화이트 리스트를 제외한 나머지 모든 경로에 인증 체크 로직을 적용 private st..

Spring Boot

쿠키, 세션 - 스프링 적용

HTTP 프로토콜 환경은 connectionless, stateless한 특성을 가짐 (통신이 끝나면 상태 정보를 유지하지 않음) Connectionless 클라이언트가 서버에 요청(Request)을 했을 때, 그 요청에 맞는 응답(Response)을 보낸 후 연결을 끊음 Stateless 연결을 끊는 순간 클라이언트와 서버의 통신이 끝나고 상태 정보를 유지하지 않음 쿠키와 세션을 사용하여 사용자에 대한 인증 유지 필요 쿠키 클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증 유지 이름, 값, 만료일, 경로 정보로 구성 클라이언트 로컬에 저장되기 때문에 변질되거나 request에서 스니..

Spring Boot

Validation

BindingResult 스프링이 제공하는 검증 오류를 보관하는 객체 BindingResult가 있으면 @ModelAttribute에 데이터 바인딩 시 오류가 발생해도 컨트롤러가 호출됨 검증할 대상 바로 다음에 와야함 ex) @ModelAttribute Item item , BindingResult bindingResult FieldError 가격에 숫자가 아닌 문자가 입력될 때 문자를 보관할 방법이 없음 → FieldError가 오류 발생시 사용자 입력 값 저장 objectName : 오류가 발생한 객체 이름 field : 오류 필드 rejectedValue : 사용자가 입력한 값(거절된 값) - 오류 발생시 사용자 입력 값을 저장하는 필드 bindingFailure : 타입 오류 같은 바인딩 실패인지..

Spring Boot

Thymeleaf - 스프링 통합과 폼

입력 폼 처리 th:object : 커맨드 객체를 지정 *{...} : 선택 변수 식 → th:object 에서 선택한 객체에 접근 th:field HTML 태그의 id , name , value 속성을 자동으로 처리 상품 ID th:object="${item}" : 에서 사용할 객체를 지정 th:field="*{itemName}" (선택 변수 식 사용) th:field는 id , name , value 속성을 모두 자동으로 만들어줌 체크 박스 판매 여부 판매 오픈 타임리프를 사용하면 체크 박스의 히든 필드와 관련된 부분도 함께 해결 disabled를 사용해서 상품 상세에서는 체크 박스가 선택되지 않도록 함 th:field를 사용하면, 값이 true인 경우 체크를 자동으로 처리 → checked="che..

Spring Boot

Thymeleaf 기본 기능

텍스트 출력 - text, utext // HTML의 콘텐츠(content)에 데이터 출력 [[${data}]]// HTML 콘텐츠 영역 안에서 직접 데이터 출력 타임리프가 제공하는 th:text , [[...]] 는 기본적으로 이스케이스(escape)를 제공 ex) → > Unescape (꼭 필요할 때만 사용) th:text → th:utext [[...]] → [(...)] 변수 - SpringEL 변수 표현식: ${...} Object user.username : user의 username을 프로퍼티 접근 user['username'] : 위와 같음 user.getUsername() List users[0].username : List에서 첫 번째 회원을 찾고 username 프로퍼티 접근 use..

koeyhk
'Spring Boot' 카테고리의 글 목록