본문 바로가기

분류 전체보기264

2021년 회고와 2022년의 계획 안녕하세요. 2021년 한해도 지고 이제는 2022년이 되었습니다. 모두 새해 복 많이 받으시기바랍니다. 이번 포스팅에서는 2021년의 회고와 정리, 그리고 2022년의 계획에 대해서 알려드리도록 하겠습니다. 회고를 시작하며.. 이 블로그는 2019년 6월에 오픈하였습니다. 저는 첫 회사를 운이 좋게도 대기업 IT 직군으로 입사하게 되었었습니다. 그리고 그곳에서 2년동안 일을 했습니다. 저는 그 2년동안 PM일을 병행하면서 개발을 병행했었습니다. 시간이 지날수록 내가 정말 되고 싶었던 개발자가 이런직장에서 될 수 있을까? 라고하는 의문을 많이 가지게 되었고 결국 퇴사하였습니다. 그렇게 이 블로그는 제가 생각하는 개발자로 성장하기 위한 발판으로 삼고자 시작하게 되었습니다. 지금 생각하면 정말 이 블로그를 .. 2022. 1. 5.
[Spring Boot] package(패키지)의 역할과 archUnit를 이용하여 구조 정립하기 안녕하세요. 오늘은 객체지향에서 package의 역할과 archUnit을 이용하여 정립한 패키지 구조에 대해서 제대로 사용할 수 있도록 제한하는 방법에 대해서 알아보도록 하겠습니다. 패키지(package)의 역할 패키지는 단순하게 말하면 클래스를 위치시키는 디렉토리의 역할을 할 수 있습니다. 클래스는 패키지 아무곳이나 아무렇게 위치를 시켜도 될까요? 기능적으로 안되진 않습니다. 하지만 이렇게 했을 때 괜찮을까요? 개인의 PC에 사용하는 파일을 폴더에 위치시킬때를 생각해봅시다. 파일들을 아무 디렉토리에 두신 경험이 있으시죠? 그럴때 다시 찾고자 할때 찾기 쉬우셨나요? 어렵습니다. 그래서 우리는 파일들도 디렉토리를 나누어서 정리하여 사용합니다. 코딩의 경우는 어떨까요? 코딩은 혼자 하는 일이 아닙니다. 그렇.. 2021. 12. 26.
[MSA] spring boot에서 resilience4j 사용해보자 - RateLimiter, BulkHead, TimeLimiter 편 안녕하세요. 이번 포스팅에서는 spring boot 환경에서 resilience4j의 ratelimiter와 bulkhead, 그리고 timelimiter 패턴에 대해서 실습해보는 시간을 가져보도록 하겠습니다. RateLimiter rateLimiter는 단위 시간동안 얼마만큼의 실행을 허용할 것인지 제한할 수 있는 메커니즘을 말합니다. resiliece4j에서는 단순하게 요청의 숫자를 이용하여 제한(limit)할 수 있으며 또는 제한에 걸린 요청은 queue를 생성하여 이후에 처리하거나 하는 방법도 제공합니다. 위 이미지는 공식 docs에서 가져온 이미지입니다. rateLimiter가 어떻게 동작하는지 매커니즘을 잘 나타내고 있습니다. System.nanoTime()을 JVM 시작과 함께 일정한 단위 .. 2021. 12. 15.
[MSA] spring boot에서 resilience4j 사용해보자 - Retry, CircuitBreaker 편 안녕하세요. 이번 포스팅에서는 resilience4j를 실제로 spring boot 환경에서 사용해보는 방법에 대해서 알아보는 시간을 가져보도록 하겠습니다. 환경 먼저 오늘 실습에 사용된 환경은 아래와 같습니다. Java 11 Spring Boot 2.5.5 resilience4j 1.7.1 Spring Boot 기본적으로 resilience4j는 Spring Boot 전용이 아닙니다. 다양한 프레임워크에서 돌아갈 수 있도록 모듈이 준비되어있는데요. 그래서 Spring Boot에서 지원하는 properties 또는 Bean을 활용한 설정을 하기위해서는 Spring Boot 전용 모듈을 함께 추가해 주어야합니다. 추가해주어야하는 모듈은 아래와 같습니다. dependencies { compile "io.gi.. 2021. 12. 12.
[MSA] Hystrix말고 resilience4j ? 안녕하세요. 오늘은 분산 시스템에서 장애 상황을 견딜 수 있게 하는 Hystrix가 maintenance mode에 들어감에 따라 대체로 떠올랐던 resilience4j에 대해서 알아보는 시간을 가져보도록하겠습니다. 이번 시간에는 Hystrix 프로젝트의 현재 상태와 resilience에서 제공하는 것은 어떤것이 있는지에 대해서 알아보고 다음시간에는 spring boot 환경에서 실습을 진행할 수 있도록 하겠습니다. 먼저 Hystirx와 fallback tolerance에 대해서 잘 모르신다면 이전에 제가 올렸던 [MSA] Spring Cloud Hystrix - 개념편 포스팅을 먼저 참고해주시기 바랍니다. Hystrix의 현재 상태(Status) Hystirx는 2017년 7월 13일 Version 1.. 2021. 12. 10.
[gradle] buildSrc를 이용한 gradle 의존성 관리 안녕하세요. 오늘은 gradle의 의존성 관리를 좀 더 명확하고 유지관리하게 쉽게 할 수 있는 gradle의 buildSrc에 대해서 알아보는 시간을 가져보도록 하겠습니다. 빌드 도구의 상수와 함수 코딩을 하면 기본적으로 자주 사용하는 함수 또는 상수에 대해서 별도의 파일로 선언하여 여러 곳에서 참조할 수 있게합니다. 이렇게 함으로써 중복 코드를 줄이고 코드의 가독성도 높일 수 있습니다. 이건 이 글을 읽고 있는 개발자이신 여러분들에게는 기본적인 것이겠지요. gradle 에서도 buildSrc를 이용하면 이러한 방법으로 script를 작성할 수 있다는 사실을 알고 있으셨나요 ? buildSrc를 이용하면 build script를 더 쉽게 유지보수하고 가독성을 향상시킬 수 있습니다. buildSrc와 in.. 2021. 11. 22.
[kotlin] kotlin 1.4.0 RELEASE 정리 안녕하세요. 오늘은 kotlin 1.4.0 버전 RELEASE에 업데이트 된 내용을 한번 살펴보도록하겠습니다. kotlin 1.4.0 코틀린 1.4.0은 성능과 품질에 집중했다고 합니다. 어떤 점이 변경되었는지 아래에서 바로 알아보겠습니다. kotlin/JVM 기준으로 알아두면 좋을것 같은 것들만 발췌하였습니다. 코틀린 Interface SAM(Single Abstract Method) Java8부터 Interface에 1개의 메서드만 가지게 되면 이를 함수형 인터페이스(Functional Interface)라고 부르며 람다(lambda)식으로 사용할 수 있게됩니다. 이를 SAM(Single Abstract Method)라고도 부릅니다. 대표적으로 Function이라는 인터페이스가 있습니다. @Funct.. 2021. 11. 11.
[kotlin] 1.3 버전 RELEASE 정리 안녕하세요. 최근 회사의 업무를 하던 중 필요에 의해서 kotlin 버전이 올라가면서 추가된 것을 확인해 볼 필요가 있었습니다. 정리한 내용을 이대로 버리기에는 아깝다고 생각했습니다. 오늘은 kotlin 1.3의 RELEASE에 대해서 번역한 내용을 공유드립니다. Kotlin 1.3.x kotlin 1.3.x 버전은 최초에 2018년에 출시된 코틀린 버전입니다. pre 버전을 제외한 최초 RELEASE은 1.3.0 버전으며 2018년 10월에 나왔으며 최종버전은 1.3.72로 2020년 4월에 출시되었습니다. 최초버전만 보자면 오래된 버전이긴합니다. 그러면서 최종 버전이 2020년 4월이기 현재.. 1.6.x 버전을 preview 하고 있기때문에 나름 장기간 유지된 메이저 버전이란 것도 알 수 있습니다... 2021. 11. 7.
[webflux] webflux 환경에서 locale 커스터마이징하기 안녕하세요. 저는 개인적으로 그리고 팀에서 webflux를 사용하고 있습니다. 관련하여 어느정도 사용을 해보았기 때문에 이제는 webflux 관련된 포스팅도 한번씩 올려보려고합니다. 오늘은 그 첫번째로 webflux 환경에서 언어 정보를 커스터마이징하는 방법에 대해서 알아보도록 하겠습니다. locale 정보 글로벌 앱을 개발하다보면 로컬 앱을 개발할 때와는 다른 고려해야할 부분이 생기게됩니다. 대표적인 예가 시간, 그리고 언어입니다. 지역에 따라서 언어와 시간이 다르기 때문에 지역에 따라 다른 시간과 언어 정보를 데이터로 활용할 수 있기 때문입니다. 서버에서는 클라이언트에서 요청할 때의 특정 정보를 해석하여 그에 맞는 언어를 내려줍니다. 어디에 정보를 담아줄지는 개발하는 설계에 따라서 달라질 수 있습니다.. 2021. 10. 24.
[kotlin] 코틀린 차곡차곡 - 14. 중위 표기법 함수 (infix notation function) 안녕하세요. 오늘은 코틀린에 대해서 알아보는 14번째 시간입니다. 오늘은 여러분과 infix function에 대해서 알아보는 시간을 가져보도록 하겠습니다. infix function 이란 infix function은 어떤걸까요? 먼저 infix function에 대해서 알아보기 전에 infix 라는 단어가 어색하실 수 있을것 같습니다. 그렇다면 preifx, postifx는 좀 익숙하실까요? prefix는 앞에 어떤 행위가 온다는 것이고 postfix는 뒤에 어떤 행위가 온다는 것입니다. 간단한 예를 들어보면 표기법(expression)을 들 수 있을것 같습니다. 표기법은 연산자를 어디에 두냐에 따라 전위(prefix), 후위(postfix), 그리고 중위(infix)로 나뉘게 됩니다. 즉, infix.. 2021. 10. 23.
[gradle] gradle의 퍼포먼스를 늘릴 수 있는 유용한 정보 및 옵션들 요즘은 spring의 빌드 도구로 java, kotlin을 가리지 않고 gradle을 많이 사용합니다. 오늘은 이와 관련된 주제로 gradle의 퍼포먼스를 늘릴 수 있는 유용한 정보 및 옵션드에 대해서 알아보는 시간을 가져보도록 하겠습니다. 의존성을 주입할 때 dynamic version 보다는 static version을 사용하자 일반적으로 의존성을 주입할 때 dnynamic version 보다는 static version을 사용하는 것을 권장합니다. 이유는 버전을 dynamic version으로 하게되면 이후 특정 모듈의 버전이 올라감에 있어서 호환성 이슈가 발생할 수 있기 때문입니다. 이와는 별개로 static version을 사용하는것이 좋은 이유가 있습니다. 바로 성능적인 문제입니다. grad.. 2021. 10. 13.
[kotlin] 코틀린 차곡차곡 - 13. data class 안녕하세요. 오늘은 코틀린의 13번째 시간입니다. 오늘 여러분들과 공유할 내용은 코틀린의 data 클래스입니다. kotlin data class에서 만들어지는 것들 Java로 코딩을 하다보면 DTO나 VO를 만들 때 get/set 메서드, toString 과 같은 코드를 만드는 일이 반복적으로 일어나게 됩니다. 이러한 반복적인 코드를 보일러플레이트 코드라고 하는데요. 자바에서 이러한 코드르 없애려고 노력하듯이 코틀린 또한 노력하고 있습니다. 자바에서는 lombok 이나 16버전 이상부터 사용학능한 record를 사용하면 됩니다만 코틀린에서는 data class 라는 타입으로 이를 해결할 수 있습니다. 예제로 한번 알아보도록 하겠습니다. 아래는 일반적인 java 코드입니다. get/set/toString/.. 2021. 10. 5.