본문 바로가기

전체 글

(43)
[KOTLIN] 코틀린 스코프 함수(Scope functions): let, run, with, apply, also 최근에 자바에서 코틀린을 사용하고 있다. 코틀린과 자바에 대해서 비슷하다고는 많이 들었는데 코드를 작성하면서 어떤 상황에서 사용해야되는지 가장 많이 헷깔리는 스코프 함수에 대해서 정리해보려고 한다. 🤓 대표적으로 let, run, with, apply, also가 있다. 스코프 함수에 대해서 살펴보기전에 수신객체에 대해서 알아보자. 수신객체란? 코틀린에서 확장함수나 스코프함수내에서 사용되는 용어이며, 이는 해당 함수가 호출되는 대상 객체를 의미한다. 수신객체 참조 방법 스코프 함수 this apply, run it let, also 기타 with는 수신객체를 함수의 인자로 받는다. 수신객체는 this, it을 사용해서 접근할 수 있지만, 따로 전달 인자명을 지정할 수 있다. // 전달 인자명 지정해서 참..
[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..
[DDD] 2. 아키텍처 개요 2.1 네 개의 영역 표현, 응용, 도메인, 인프라스트럭처는 아키텍처를 설계할 떄 출현하는 전형적인 네 가지 영역이다. 표현 영역 사용자의 요청을 받아 응용 영역에 전달하고, 응용 내역의 처리 결과를 다시 사용자에게 보여주는 역할(대표적으로 스프링 MVC 프레임워크가 여기에 해당) 응용 영역 시스템이 사용자에게 제공해야 할 기능을 구현한다.(주문 등록, 주문 취소, 상품 상세 조회 등) 기능을 구현하기 위해 도메인 영역의 도메인 모델을 사용한다. 응용 서비스는 로직을 직접 수행하기 보다는 도메인 모델에 로직 수행을 위임한다. public class CancelOrderService { @Transactional public void cancelOrder(String orderId) { Order orde..