본문 바로가기

프로그래밍248

[markdown] mermaid를 이용해서 UML 그리기 - 시퀀스 다이어그램 안녕하세요. 오늘은 mermaid에 대해서 알아보는 2번째 시간입니다. 오늘은 mermaid를 이용하여 시퀀스 다이어그램을 그리는 방법에 대해서 알아보도록 하겠습니다. 시퀀스 다이어그램(Sequence Diagram) 시퀀스 다이어그램은 여러 참여하고 있는 컴포넌트들의 상호작용 다이어그램입니다. 이 다이어그램은 시간 순서대로 프로세스가 어떤 흐름을 가지는지를 보여줍니다. 아래는 제 개인 프로젝트에서 이루어지고 있는 파일 업로드 기능에 대해서 시퀀스 다이어그램을 그려본 예제입니다. 이렇듯 mermaid를 이용하면 쉽게 수도코드만으로 시퀀스 다이어그램을 그릴 수 있는것을 확인할 수 있었습니다. 시퀀스 다이어그램에 대해서 궁금하신 분들은 [UML] 시퀀스 다이어그램 이해하기를 참고해주시기 바랍니다. seque.. 2022. 1. 16.
[markdown] mermaid를 이용해서 UML 그리기 - 플로우차트 안녕하세요. 오늘은 mermaid에 대해서 알아보는 시간을 가져보도록 하겠습니다. mermaid란 markdown 문법으로 diagram을 그려주는 라이브러리입니다. mermaid 란 ? mermaid는 markdown으로 UML을 그릴 수 있는 언어입니다. 이 mermaid를 이용하면 쉽고 직관적으로 UML을 그릴 수 있습니다. 수도 코드를 통해서 작성하기 때문에 다이어그램 뿐만 아니라 수도 코드를 통해서도 흐름을 이해할 수 있다는 것도 장점이라고 여겨집니다. 그렇다면 실제로 mermaid를 사용하는 방법에 대해서 알아보도록 하겠습니다. plugin mermaid를 사용하기 위해서는 markdown에 plugin이 필요합니다. editor 별 plugin 리스트를 참조해서 본인이 사용하시는 edito.. 2022. 1. 9.
[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.