최신 글
- [Java 11 -> 17] immutable Class와 record class, 그리고 compact constructor 개요지금 회사에서 kotlin만 사용하던 나에게 다시 Java를 사용할 수 있는 기회가 찾아왔습니다. 뭐든지 역시 실제로 업무에서 사용하는 것 만큼 그 기술에 대해서 공부할 수 있는 좋은 동기부여는 없는것 같다라는 생각이 들었습니다. 소식으로만 접하던 Java의 변화에 대해서 실제 업무에서 쓰면서 그 가치를 제대로 느껴볼 수 있었습니다.오늘 알아볼 내용은 Java의 record keyword 입니다. record keyword는 무엇이고 어디에 사용할 수 있고 등의 내용을 함께 알아보도록 하겠습니다.immutable class (불변 클래스) 란 ?한번 값을 설정하고 나면 수정할 수 없도록 클래스 instance를 생성하는 것을 immutable class 라고 일반적으로 말합니다. 특별한 이유가 없다면..
- [Security-OAuth2] Authorization Code Flow도 ID / Password를 입력하는데 Password Grant만 안전하지 않다고 하나요 ? 개요OAuth2의 인증 방식중 Password Credentials 라는 것이 있습니다. 이는 ID와 Password를 입력하여 Access Token을 얻어서 Resource Server에 접근할 수 있는 메커니즘을 가진 인증 방식입니다. 그런데 이 방식은 취약한 방법으로 더이상 OAuth2에서는 권장하지 않는 방식입니다. 그리고 일반적으로 많이 사용하는 Authorization Code Flow 방식이 있습니다. 이는 인증을 한 후 Code를 통해서 Resource Server에 접근할 수 있도록 하는 인증 방식입니다. 이 또한 처음에 ID / Password를 입력받아서 인증하게됩니다.두개의 Type 모두 동일하게 유저는 ID와 Password를 입력하는데 왜 Authorization Code Fl..
- Kotlin Coroutine에서의 TraceId는 어떻게 주입하나 ? - Context 전파와 MDCContext 코루틴을 사용하면서 발생하는 주요 문제 중 하나는 실행 컨텍스트의 전파입니다. 특히 분산 시스템에서 로깅과 추적을 위해 중요한 역할을 하는 traceId와 MDC(Mapped Diagnostic Context)의 사용이 이에 해당합니다. 이번 글에서는 코루틴 환경에서 traceId와 MDC를 어떻게 효과적으로 전파할 수 있는지 알아보겠습니다.요약traceId란 무엇이고 어떻게 활용할 수 있는가 ?traceId는 분산 시스템에서 요청을 추적하고 각 서비스간의 연관성을 식별하는 데 사용되는 유니크한 식별자ThreadLocal과 MDC(mapped diagnostic contexts)란 무엇인가?ThreadLocal은 자바에서 제공하는 클래스로, 각 쓰레드가 자신만의 데이터 복사본을 갖도록 해서, 쓰레드 사이..
- [기타] 날짜와 시간 표현의 국제 표준인 ISO 8601에 대해서 자세히 알아보자. (RFC3339, ISO8601, JavaTime) 개요먼저 표준화라는것은 사물, 개념, 방법 및 절차 등에 대하여 합리적인 기준을 설정하여 그 기준에 맞추는 것을 말합니다. 표준이 필요한 이유는 생산, 소비, 서비스 등 다양한 분야에서 생산성과 경제성을 높이고자함입니다. 표준화가 되어있는 요소에 대해서는 재활용이 가능하고 서로 이해하는것도 좋습니다. 최근의 좋은 표준의 예시는 in/out port로써 C-Type으로 통일되어가고 있습니다. 기존에 각 제품마다 표준이 달라서 불편했던 생산과 소비에 이제 단일화된 표준으로 편리함을 제공해주고 있지요. 이것이 바로 표준화가 필요한 이유입니다.오늘은 날짜와 시간 표현의 국제 표준인 ISO 8601과 RFC 3339에 대해서 알아보는 시간을 가져보려고합니다. 인터넷 표준에 비추어 볼때 우리가 따라야하는 표준은 I..
- [security] OAuth 2.0의 인가 스펙과 OIDC(OpenID Connect)의 인증 스펙에 대해서 알아봅시다 개요안녕하세요. 오늘은 OIDC(OpenID Connect)에 대해서 자세히 알아보는 시간을 가져보도록 하겠습니다. 다들 OAuth2에 대해서는 아실것 같습니다. 잘 모르시는 분들은 [OAuth2] OAuth2 개론 - 개요와 Authorization Code Flow를 통해서 먼저 보고 오시는것을 추천드립니다. OAuth2는 HTTP 기반에서의 권한 부여(Authorizaiton)를 위한 업계 표준 프로토콜입니다. OIDC는 OAuth2의 확장중 하나로써 인증(Authentication)에 대한 프로토콜입니다.오늘은 인증과 인가의 차이부터 OIDC까지 알아보도록 하겠습니다.요약인증과 인가의 차이인증(Authentication): 사용자의 신원을 확인하는 과정입니다. 로그인과 같은 방식으로 사용자가 누구..
인기 글
- [Linux] top 명령어로 서버의 상태 파악하기 안녕하세요. 오늘은 linux의 top 명령어어 대해서 분석하는시간을 가져보도록 하겠습니다.TOP 명령어top 명령어는 현재 OS의 상태를 나타내주는 CLI 어플리케이션입니다. 메모리 사용량, CPU 사용량 등을 나타내주며 top를 실행하는 동안에는 주기적인 업데이트로 실시간에 근접한 내용을 보여줍니다. 리눅스에서 top 명령어를 실행하면 아래와 깉이 노출됩니다. 위에는 전체의 요약이 있으며 아래에는 각 프로세스마다 구체적인 내용을 포함하고 있습니다.요약 영역요약 영역은 top에서 상단에 위치하고 있습니다. 이 요약영역은 전체 프로세스가 OS에 대해서 리소스를 어느정도 차지하고 있는지를 알려줍니다. 요약 영역에 나타나는 대표적인 값은 시간, 유저, 로드 에버리지(Load Average), 테스크(Task..
- [database] 낙관적 락(Optimistic Lock)과 비관적 락(Pessimistic Lock) 안녕하세요. 오늘은 낙관적 락과 비관적 락의 개념에 대해서 알아보는 시간을 가져보도록 하겠습니다.DB 충돌 상황을 개선할 수 있는 방법database에 접근해서 데이터를 수정할 때 동시에 수정이 일어나 충돌이 일어날 수 있습니다. 우리는 이런 상황을 해결할 수 있도록 코딩을 진행해야합니다. 어떻게 해결할 수 있을까요 ?첫번째, 테이블의 row에 접근시 Lock을 걸고 다른 Lock이 걸려 있지 않을 경우에만 수정을 가능하게 할 수 있습니다.두번째, 수정할 때 내가 먼저 이 값을 수정했다고 명시하여 다른 사람이 동일한 조건으로 값을 수정할 수 없게 하는 것입니다.비관적 락(pessimistic lock)비관적 락은 Reeatable Read 또는 Serializable 정도의 격리성 수준을 제공합니다. D..
- [UML] 클래스 다이어그램 이해하기 [UML] 클래스 다이어그램 이해하기[UML] 시퀀스 다이어그램 이해하기안녕하세요. 오늘은 클래스 다이어그램에 대해서 이야기 해보고자 합니다. 최근 레거시 시스템의 구조개선을 조금씩 하고 있습니다. 그러면서 객체의 구성 및 도메인 모델을 어떻게 가져가야할지 고민을 하게 되었습니다. DDD 관련된 책이라던지 찾아보는데 이때 기본이 되는게 UML, 특히 클래스 다이어그램 이라는 것을 알 수 있었습니다. 지끔까지는 막연한 지식은 있지만 이번 기회에 명확하게 이를 이해하고자 UML, 그 중에서도 클래스 다이어그램에 대해서 정리해보고자 합니다.UML 이란먼저 UML이란 Unified Modeling Language의 약자로 도메인(해결하고자 하는 목표, ex) 결재시스템 등)을 모델로 표현해주는 대표적인 모델링 ..
- [markdown] mermaid를 이용해서 UML 그리기 - 플로우차트 안녕하세요. 오늘은 mermaid에 대해서 알아보는 시간을 가져보도록 하겠습니다.mermaid란 markdown 문법으로 diagram을 그려주는 라이브러리입니다.mermaid 란 ?mermaid는 markdown으로 UML을 그릴 수 있는 언어입니다.이 mermaid를 이용하면 쉽고 직관적으로 UML을 그릴 수 있습니다.수도 코드를 통해서 작성하기 때문에 다이어그램 뿐만 아니라 수도 코드를 통해서도 흐름을 이해할 수 있다는 것도 장점이라고 여겨집니다.그렇다면 실제로 mermaid를 사용하는 방법에 대해서 알아보도록 하겠습니다.pluginmermaid를 사용하기 위해서는 markdown에 plugin이 필요합니다.editor 별 plugin 리스트를 참조해서 본인이 사용하시는 editor에 플러그인을 ..
- [git] git을 이용한 버전관리 - 기본편 (remote, push, pull, fetch, clone) with github 안녕하세요. git에 대해서 이야기하는 3번째 시간입니다. 오늘은 원격 저장소(remote repository)과 이를 이용하는 명령어인 push, pull, fetch, clone에 대해서 알아보도록 하겠습니다.git의 component 구조이전 시간까지는 혼자서 작업하는 내용의 버전을 관리하는 방법이 었다면 이번시간부터 배우는 원격저장소를 이용하면 공동으로 협업할 수 있는 시스템 아키텍처가 그려지게됩니다. 원격저장소를 포함하면 2가지의 관점에서 구조적인 이미지를 그려볼 수 있습니다. 첫번째는 개인 관점에서의 git 이용 flow, 또 다른 한 관점은 다른 사람과의 공동으로 원격저장소의 사용입니다.첫번째 git에 관한 포스팅에서 git의 3가지 컴포넌트에 대해서 이야기 했던 적이있습니다. 아래 이미지와..