본문 바로가기

개발공부/SPRING

(11)
[SPRING] 공통 Response와 Exception Handler 관리하기 안녕하세요! 키크니 개발자 입니다. 🦒 처음 프로젝트를 셋팅하고 개발하기 전에 공통 Response를 구성하고, Exception Handler 설정을 하는데 이 부분에 대해 기록하면 좋을 것 같아 글로 남깁니다! 😁 Spring Boot 프로젝트를 처음 생성하게 되면, 아래와 같이 공통 Response 데이터를 설정해줍니다. Response.class import lombok.AllArgsConstructor; import lombok.Getter; @Getter @AllArgsConstructor public class Response { private String resultCode; private T result; public static Response success() { return new ..
[Spring Batch] @JobScope, @StepScope @JobScope, @StepScope Scope 스프링 컨테이너에서 빈이 관리되는 범위를 의미한다. singleton, prototype, request, session, application 공통점 Job과 Step의 빈 생성과 실행에 관여하는 스코프이다. 프록시 모드가 기본 값 : @Scope(value="job", proxyMode=ScopedProxyMode.TARGET_CLASS) 해당 스코프가 선언되면 빈 생성 시점이 어플리케이션 구동 시점이 아니라 빈의 실행 시점에 이뤄진다. → 프록시 객체가 실제 빈을 호출해서 메소드 실행한다. 병렬처리 시 각 쓰레드마다 스코프 빈이 할당되기 때문에 안전하다. @JobScope Step 선언문에 정의한다. @Value: jobParameter, jobEx..
[Spring Batch] Quartz의 개념과 예시 Quartz란? 스프링 프레임워크와 통합되어 스프링 애플리케이션에서 스케줄링 작업을 수행할 수 있도록 지원하는 오픈소스 라이브러리이다. 스프링에서 Quartz를 사용하기 위해서는 의존성을 추가 하고, Quartz 스케줄러를 스프링 빈으로 등록하고, Job과 Trigger를 스프링 빈으로 등록하여 스케줄러에서 사용할 수 있도록 설정해야 한다. 이를 위해 스프링에서는 QuartzJobBean과 CronTriggerFactoryBean 등의 클래스를 제공한다. 의존성 추가 Maven org.springframework.boot spring-boot-starter-quartz Gradle implementation 'org.springframework.boot:spring-boot-starter-quartz' ..
[Spring Batch] Spring Batch 개념 왜 스프링 배치를 사용하는가? 배치 처리는 컴퓨터에서 사람과 상호 작용 없이 이어지는 프로그램의 실행 → 한번 요청으로 그 시스템 내에서 종료가 됨 사용자와의 상호 작용이 주력인 웹 애플리케이션과는 지향점이 다름 web : 실시간 처리 / QA 용이성 batch : 후속 처리 / QA 복잡성 언제 사용하는가? 일정 주기로 실행되어야 할 때 웹어플리케이션으로 실시간 처리가 어려운 대량의 데이터를 처리할 때 배치는 대량의 데이터를 처리하기 위해서 여러 가지 기능을 제공 → 개발자는 업무 로직의 구현에만 집중하고 공통적인 기반 기술은 프레임워크가 담당 pageSize, chunkSize 등이 프레임워크 단위에서 지원이 됨 하지만 Quartz는 지원해주지 않음 -> Spring Batch와 Quartz를 함께 ..
[Mockito] @Mock @ InjectMocks @MockBean @Spy @SpyBean 비교 테스트 코드를 처음 접할 때 @Mock, @InjectMocks, @MockBean, @Spy, @SpyBean 어노테이션이 너무나도 비슷해서 제일 헷깔렸던 부분이었습니다. 그래서 다시 한 번 정리를 해야겠다고 생각했습니다. Mockito를 설명하기 이전 Test Double이 무엇인지 먼저 알아보겠습니다. Test Double (Mockito) 테스트를 진행하기 어려운 경우 이를 대신해 테스트를 진행할 수 있도록 만들어주는 객체를 의미합니다. 예를 들어 우리가 데이터베이스로부터 조회한 값을 연산하는 로직을 구현했다고 가정하면, 해당 로직을 테스트 하기 위해선 항상 데이터베이스의 영향을 받을 것이고, 이는 데이터베이스의 상태에 따라 다른 결과를 유발할 수도 있습니다. 이렇게 테스트 하려는 객체와 연관 된..
[Spring] 비동기 프로그래밍 & ThreadPoolExecutor - 실습 안녕하세요! 키크니 개발자 입니다. 🦒 비동기 프로그래밍에 대해서 강의를 보고 정리하고자 작성하였습니다. 😁 AppConfig package dev.be.async.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; @Configuration public class AppConfig { @Bean(name = "defaultTaskExecutor") public ThreadPoolTaskExecutor defaul..
[Spring] 비동기 프로그래밍 & ThreadPoolExecutor 생성자 - 개념 안녕하세요! 키크니 개발자 입니다. 🦒 비동기 프로그래밍에 대해서 강의를 보고 정리하고자 작성하였습니다. 😁 동기 / 비동기 개념 더보기 동기란? 동기는 요청을 보낸 후 응답 (결과물)을 받아야지만 다음 동장이 이루어지는 방식을 말한다. 모든 일은 순차적으로 실행되며 어떤 작업이 수행중이라면 다음 작업은 대기하게 된다. 장점: 설계가 간단하고 직관적 단점: 결과를 볼대 까지 아무것도 못하고 대기해야한다 비동기란? 비동기는 동시에 일어나지 않는다 의미한다. 요청과 결과가 동시에 일어나지 않는 거라는 약속. 요청한 그 자리에서 결과가 주어지지 않음 노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 된다. 장점: 결과가 주어지는 데 시간이 걸리더라도 그동안 다른 작업이 가능해 자원의 효율적인 사용이 가능 단..
[Spring] Swagger API 연동하기 💡 코드가 보이지 않으시다면 드래그 혹은 오른쪽 아래 🌜 아이콘을 눌러 테마 색을 변경해주세요. 안녕하세요! 키크니 개발자 입니다. 🦒 기존 프로젝트에서는 API 문서를 Spring Rest Doc으로 진행하다가, 이번에는 Swagger로 진행하였습니다. 진행하면서 참고 될 만한 것들을 적어보았습니다! Swagger란? Open Api Specification(OAS)를 위한 프레임워크이다. API들이 가지고 있는 스펙(spec)을 명세, 관리할 수 있는 프로젝트/문서 API 사용 방법을 사용자에게 알려주는 문서 Springboot에서 Swagger를 사용하면, 컨트롤러에 명시된 어노테이션을 해석하여 API문서를 자동으로 만들어준다. 참고로 Swagger는 Java에 종속된 라이브러리가 아니다. URL에..