반응형

전체 글 164

Intellij에서 QClass 깨끗히 청소하기

Querydsl, MapStruct를 사용하면서 generated/ 경로 하단에 생기는 class 파일 때문에 삽질한 기억이 있었습니다. 이번 글에서는 class 파일 찌꺼기 파일이 왜 남는지와 깨끗히 청소하는 방법에 대해서 작성해보겠습니다. 💥 이슈사항 MapStruct와 QueryDSL을 사용하는 프로젝트에서 열심히 작업을 마치고 Git Branch를 변경하자 에러 발생! Branch 변경 이전의 파일을 찾고 있는 에러 발생!! 💦 이슈 발생배경 develop에서 각 feature를 생성 후 작업을 진행하고 있었습니다. 변경 전 ( feature/TEST-1 ) BeforeMapper → MapStruct → BeforeMapperImpl 으로 사용중 BeforeMapper → AfterMapper로..

Daily Develop 2022.01.11 (1)

[Kotlin] 테스트 코드 쉽게 작성하기 ( KotlinFixture, MockK, LiveTemplates )

개인적으로 테스트 코드는 중요하다고 생각합니다. 하지만 다양한 이유로 테스트 코드는 많이 Skip 됩니다. 시간적 여유가 없을 때 테스트 코드를 위한 노가다 작업이 많을 때 그 외 등등... 이 방법을 백퍼센트 보완하진 못하지만 좀 더 용이하게 작성하기 위해 제가 사용하는 방법을 공유합니다. 목차 MockK KotlinFixture Live Templates 1. MockK Java 진영에는 Mockito가 있다면 Kotlin 진영에서는 Mockk가 있습니다. Mockk는 Java에서 Mock처리하는 것과 동일하게 Kotlin스럽게 Mock을 처리할 수 있도록 도와줍니다. 환경구성 build.gradle.kts testImplementation 'com.ninja-squad:springmockk:{ver..

Study/test 2021.12.27

ThreadPoolTaskExecutor Queue가 full의 처리 정책

ThreadPoolTaskExecutor의 RejectedExecutionHandler 설정에 대해서 간단히 살펴보겠습니다. 이번글에서는 RejectedExcecutionHandler의 정책을 설정하는 기준과 설정 시 어떤 결과값이 나오는지 살펴보겠습니다. RejectedExcutionHandler의 종류 AboryPolicy CallerRunsPolicy DiscardPolicy DiscardOldestPolicy ThreadPoolTaskExecutor 기본 설정 @Configuration public class TestThreadPool { @Bean public TaskExecutor test() { var executor = new ThreadPoolTaskExecutor(); executor...

Daily Develop 2021.12.21

지방대 출신 토스 합격까지!

토스 합격!! 정말 오랜만에 글을 작성하네요. 10월달에 토스합격 후 정신없이 달렸네요. :) 먼저 결론부터 작성하자면 좋은 곳에서 좋은 팀과 좋은 서비스를 만들고 있어 매우 만족하는 상태입니다. ( 아직 한달밖에 안되었지만요.. ㅎ ) 제가 느낀 토스는 모두가 조언을 아끼지 않고 조언을 귀담아 듣고 발전, 성장에 갈증을 느끼는 사람들이 모인 곳이라고 생각합니다. 그리고 모두가 한 마음으로 서비스가 잘되길 바라며 누가 시키지 않고도 스스로 일을 찾아 벌리는(?) 사람들입니다. 그렇기에 일을 즐기고 재밌어하는 사람들입니다. 저도 얼른 회사에 출근해서 제가 벌린(?) 일을 빨리하고 싶네요.. ㅎ 잠시 홍보하자면 토스에서 채용을 적극적으로 진행하고 있어요! 많이 지원해주세요 ㅎㅎ https://toss.im/..

MindControl 2021.12.13 (5)

대규모 시스템 설계 - 채팅 시스템 설계

들어가기 전에 가상 면접 사례로 배우는 대규모 시스템 설계 기초 라는 도서 중 12장인 채팅 시스템 설계를 정리한 내용입니다. http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9788966263158 가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 교보문고 2020년 출간 이후 아마존베스트셀러!아마존 컴퓨터네트워크응용 분야 베스트셀러 1위!《가상 면접으로 배우는 대규모 시스템 설계 기초》는 16가지 실제 시스템 설계 면접 문제와 상세한 답안을 www.kyobobook.co.kr 스터디 그룹에서 공유를 목적으로 작성한 글이기 때문에 이전 글과는 다르게 중요한 내용만 추려 작성하였습니다. ( PPT 방식 ..

Study 2021.12.07

Spring-Kafka Consumer 실패 시 재처리 ( Reply - @SendTo )

들어가기 전에 Consumer를 통해 카프카 클러스터에서 데이터를 Read할 때 모두 정상처리된다면 좋겠지만 그렇치 못한 경우도 있습니다. 그럴 경우 Spring-Kafka에서 재처리를 편리하게 할 수 있도록 Reply(@SendTo), Retry 기능을 제공합니다. 이번 글에서는 재처리 하는 방법에대해서 정리해보겠습니다. 목차 재처리를 해야하는 이유 ReplyTemplate 구성 @SendTo를 사용한 ReplyTemplate 구현 Reply 처리 플로우 1. 재처리를 해야하는 이유 Consumer를 이용해 카프카 클러스터에서 Read 한 후 Repository에 저장할 수도 있고 메일 발송을 할 수도 있고 다양하게 사용할 수 있습니다. 하지만 Repository 서버가 다운된다거나 메일 발송 중 메일..

Study/message-queue 2021.10.15

Spring-Kafka Consumer Offset 관리

들어가기 전에 Consumer를 AutoCommit을 false로 설정하고 사용하고 있습니다. Consumer에서 로직을 완료하고 partition에 commit을 처리하도록 작성하였습니다. 그런데 로직을 처리하던 중 Exception이 발생했고 partition에 commit을 하지 못했습니다. 그렇다면 이 Consumer는 무한 루프에 빠져 데이터를 계속 읽고 Exception을 계속 발생시킬까요? 정답은 NO! 입니다. Consumer 내부에서 Partition Offset과는 별개로 Consumer만을 위한 Offset을 관리하고 있기 때문입니다. Consumer Polling 방식 Consumer는 KafkaMessageListenerContainer에서 새로운 Thread를 생성하여 while..

Study/message-queue 2021.10.14

[엘레강트 오브젝트] 4-3장 final이나 abstract이거나

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 목차 잘못된 상속 클래스의 신분 올바른 설계 결론 1. 잘못된 상속 상속은 매우 강력한 기능입니다. 하지만 상속을 잘못 사용한다면 문제를 일으킬 수 있습니다. 문제를 일으키는 원인은 가상 메서드입니다. 코드로 살펴보겠습니다. open class Document { fun length(): Int { return content().length } open fun content(): String { // read document // load byte array return "" } } 위 코드와 같은 Document 클래스가 있..

Study/object 2021.10.13

Spring-Kafka Consumer Validation

모든 코드는 Github에 올려두었습니다. 들어가기 전에 Consumer는 Kafka에 Topic, Partition의 Record를 읽어오는 역할을 합니다. 하지만 Kafka에 잘못된 데이터가 들어오는 경우 Consumer에서는 데이터를 Validation 처리하여 올바른 데이터만 처리해야합니다. 이번 글에서는 Spring-Kafka를 사용하는 Consumer에서 어떻게 Validation 처리를 하는지 작성해보겠습니다. 목차 Validation 방식 Validation 구성 Consumer Validation 구현 Validation 테스트 @KafkaListener ErrorHandler 결론 Validation 방식 Spring-Kafka는 Version 2.2 부터 @KafkaListener의 ..

Study/message-queue 2021.10.12

[엘레강트 오브젝트] 4-2장 체크 예외(checked exception)만 던지세요

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 목차 Checked Exception vs Unchecked Exception 꼭 필요한 경우에만 예외를 잡자 항상 예외를 체이닝하자 단 한번만 복구하자 관전-지향 프로그래밍을 사용하자 하나의 예외 타입만으로도 충분하다 1. Checked Exception vs Unchecked Exception 두 Exception의 차이는 이 글을 참조해주세요. unchecked exception fun length(file: File): Int { if (!file.exists()) throw IllegalArgumentException..

Study/object 2021.10.06

[엘레강트 오브젝트] 4-1장 절대 NULL을 반환하지 마세요

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 목차 무너진 신뢰 빠르게 실패하기 vs 안전하게 실패하기 NULL 대안 주관적인 생각 1. 무너진 신뢰 이전 글에서 메서드 인자에 Null을 전달하는 것은 매우 안좋은 방법이라고 소개하였습니다. 마찬가지로 NULL을 반환하는 방법 또한 안좋은 방법입니다. class Page( val title: String? ) { fun title(): String? { if (title == null) { return null // null return } return "Elegant Objects" } } 위와 같은 Page 클래스가 있..

Study/object 2021.10.05

[엘레강트 오브젝트] 3-7장 인트로스펙션과 캐스팅을 피하세요

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 목차 인트로스펙션을 피하세요 캐스팅을 피하세요 정리 1. 인트로스펙션을 피하세요 타입 인트로스펙션은 리플렉션이라는 더 포괄적인 용어로 불리는 여러 가지 기법들 중 하나입니다. 리플렉션을 사용하면 메서드, 명령어, 구문, 클래스, 객체, 타입을 변경할 수 있습니다. 리플렉션은 매우 강력한 기법이지만 유지보수를 어렵게 만드는 안좋은 기법입니다. fun size(items: Iterable): Int { if (items is Collection) { return items.size } var size = 0 for (item in..

Study/object 2021.09.27

[엘레강트 오브젝트] 3-6장 부 ctor 밖에서는 new를 사용하지 마세요

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 목차 잘못된 의존성 주입 올바른 의존성 주입 정리 1. 잘못된 의존성 주입 잘못된 의존성 주입은 종종 치명적인 결과를 초래합니다. 코드로 살펴보겠습니다. class Cash( private val dollars: Int ) { fun euro() = Exchange().rate("USD", "EUR") * this.dollars } euro() 메서드 안에서 Excahnge 인스턴스를 생성하고 있습니다. 이 코드의 문제는 '하드코딩된 의존성'입니다. Cash 클래스는 Exchange 클래스에 직업 연결되어 있기 때문에, 의존성..

Study/object 2021.09.26

[엘레강트 오브젝트] 3-5장 절대 getter와 setter를 사용하지 마세요

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 목차 객체 대 자료구조 좋은 의도, 나쁜 결과 접두사에 관한 모든 것 1. 객체 대 자료구조 먼저 getter와 setter를 사용하지 말아야하는 이유를 알아보기 전에 객체와 자료구조에 대해서 짚고 넘어가겠습니다. 자료구조 class Cash( var dollars: Int ) // use val cash = Cash(20) // get val dollars = cash.dollars // set cash.dollars = 30 // print println("dollars:: ${cash.dollars}") 자료구조는 단순한..

Study/object 2021.09.25

[엘레강트 오브젝트] 3-4장 충성스러우면서 불변이거나, 아니면 상수이거나

이 글은 엘레강트 오브젝트 새로운 관점에서 바라본 객체지향 도서를 보며 스터디한 글입니다. 책에서 주장하는 내용을 정리하였으며 예제들은 모두 코틀린 코드로 변환하여 작성하였습니다. 목차 상태와 데이터 가변 객체와 불변 객체 정리 1. 상태와 데이터 이전 2.6 섹션에서 불변성에 다루었습니다. 이번 섹션을 정리하기 전에 다시 한 번 불변성에 대해 명확하게 정리하려고 합니다. 먼저 상태(state)와 데이터(data)에 대해서 명확하게 짚고 넘어가겠습니다. class WebPage( private val uri: URI ) { fun content(): String { // 외부 연동하여 웹페이지의 Content을 읽어 반환 return "" } } 상태: uri 데이터: content() 메서드를 호출하여..

Study/object 2021.09.18
728x90
반응형