전체 글 55

토끼책을 읽고 - 메시지를 믿을 수 있을까? (2)

[v4] 조금 다른 예를 들어보겠습니다. /* 1. 제품을 만들기 위한 부품 (인자로서 사용됨을 표시하기 위해 Dto 표기) */ @Setter @Getter @NoArgsConstructor public class PartDto { // 모든 곳에서 필요합니다. private Boolean steal; // 컴퓨터와 핸드폰에서 필요합니다. private Boolean semiconductor; // 선풍기에서 필요합니다. private Boolean propellers; // 선풍기와 핸드폰에서 필요합니다. private Boolean button; } /* 1. 제품을 만들기 위한 부품이 있는지 확인하고 있으면 만드는 서비스 */ public class ProductService { public bo..

Study 2021.03.08

토끼책을 읽고 - 메시지를 믿을 수 있을까? (1)

이전 회사에서는 객체 지향적인 설계보다는 일단 되는 프로그램을 만드는 게 먼저였는데, 이번에 옮긴 회사에서는 객체 지향에 대한 투자를 많이 하는 것 같습니다. 이론의 부족함을 느꼈기에 이전에 읽으려다 만 토끼 책 (객체지향의 사실과 오해 - 조용호 저)을 읽어봤습니다. 역할, 책임 & 메시지, 협력 대부분 좋은 내용이고 이전에 구현한 어설픈 OOP, ORM에 대한 고민을 해결해줬지만, 하나가 계속 걸려서 이 글을 쓰게 되었습니다. 메시지를 믿을 수 있을까? 책에서 언급되지 않은 부분은 각색하고, 관련된 코드의 브랜치를 스텝별로 대괄호 표시했습니다. https://github.com/Hyune-c/Trust-Message/tree/master [v1] 책에서는 판사-토끼-증인을 객체로서 책임과 메시지를 설..

Study 2021.03.08

비동기 테스트 만들기

비지니스 로직을 하다 보면 외부 API 호출을 할 때가 많은데, 속도를 위해 비동기 처리를 하곤 합니다. API로 구현된 비동기 처리는 예제가 많았지만, 서비스로 구현된 비동기 처리는 예제를 찾기 힘들었습니다. 아래는 메인 로직 후 이메일을 보내는 비동기 후처리 로직을 분리하고 테스트한 예제입니다. 결론 Reactor 객체를 메서드의 반환 값으로 받습니다. 테스트할 때는 block() 을 걸어 동기 처리를 합니다. 비동기 이메일 전송 메소드 Before request 메서드에서 request 객체를 만들고 비동기 발송까지 모두 하고 있습니다. 지금은 후처리 로직이 로깅뿐이지만, 로직이 들어가는 경우 메서드가 복잡해집니다. 비지니스 로직의 메서드인 sendEmail에서는 발송 결과를 알지 못합니다. // ..

Study 2021.02.25

enum 을 조회하는 방법

회사의 enum 조회 코드를 보다가 불현듯 이펙티브 자바와 블로그에서 본 개선 방법이 생각나서 실험을 해봤습니다. Spring boot 2.x.x, Java 11 테스트 코드 Repository Link enum 조회 시 Stream, Array, Map의 성능 차이는 얼마나 될까? @Getter @AllArgsConstructor public enum CategoryColor { YELLOW(0, "#FEDE00"), BLUE(1, "#85C4E7"), ORANGE(2, "#F3AC13"), ... ; private final int order; private final String code; public static final Map categoryColorMap = new HashMap(); sta..

Querydsl 로 가는 길

여느 때처럼 재미있는 글을 찾다가 예전에 비슷하게 했던 실수를 비슷한 방법으로 고치는 글을 보는데.. Querydsl 이 그냥 갑자기 눈에 띄었고, 그냥 갑자기 하고 싶어졌다. 뽐뿌라는 건 갑자기 오나보다. 그렇게 야밤의 삽질을 적어봅니다. 코드리뷰 적응기(feat. 파일럿 프로젝트) - 우아한형제들 기술 블로그 안녕하세요. 결제정산개발팀의 권세희입니다.저는 정산업무를 맡게 되었는데, 정산은 데이터 정합성과 트랜잭션, 도메인 주도 개발, Entity 간의 연관 관계, 대용량 데이터 처리가 핵심인 시스템 woowabros.github.io 자아성찰 현재의 구성 SpringBoot 2.x 모놀리스 서비스 2개로 구성된 Postgresql DB mybatis 80%, JpaRepository 20% 내 실력 ..

Study 2020.12.02

ParameterizedTest 를 잘해보자

처음 ParameterizedTest를 본건 코드스쿼드 멤버의 코드를 리뷰하면서 였습니다. @CsvSource의 단순한 형태였던 것으로 기억하는데, 당시에는 러닝 커브의 이유로 공부하지 않았었습니다. 하지만 이제는 회사에서의 개발을 시작하면서, 몇 가지 시도를 해봤고 조금은 마음에 드는 코드가 나와 글을 써 봅니다.라고 하지만 이 글을 쓰는 순간에도 설정 에러가 나고 있습니다 🤣 영감을 준 Sunny에게 감사를. ParameterizedTest에 대한 설명은 더 좋은 자료들이 많으니 Annotaion 만 정리하고 넘어가겠습니다. Annotation Description @ValueSource literal 배열 값으로 테스트 @EnumSource Enum 값으로 테스트 @MethodSource 가공이 필..

Study 2020.08.21

Stream 의 병렬 처리란?

Stream 은 Java 8에 추가된 Lambda를 활용할 수 있는 기술 중 하나로, 연속된 요소의 집합을 순차 처리합니다. Stream의 병렬 처리는 데이터 병렬성을 구현한 것으로, 내부적으로는 Fork-Join Framework를 이용하며 성능을 향상할 수도 있지만 몇 가지 주의 사항이 있습니다. No storage 별도의 저장 공간이 필요하지 않습니다. Immutable 원본을 수정하지 않고 결과를 생성합니다. Laziness 결과를 위한 최소한의 동작만을 수행합니다. Possibly 무한한 값을 가질 수 있습니다. Consumable 스트림의 요소는 생명 주기 동안 한번만 사용됩니다. 사용하면 좋은 경우 충분한 개수의 가용 코어와 충분히 큰 요소당 처리 시간 처리 시간이 Thread Pool 과 ..

Study 2020.08.21