본문 바로가기

분류 전체보기262

Kotlin Coroutine에서의 TraceId는 어떻게 주입하나 ? - Context 전파와 MDCContext 코루틴을 사용하면서 발생하는 주요 문제 중 하나는 실행 컨텍스트의 전파입니다. 특히 분산 시스템에서 로깅과 추적을 위해 중요한 역할을 하는 traceId와 MDC(Mapped Diagnostic Context)의 사용이 이에 해당합니다. 이번 글에서는 코루틴 환경에서 traceId와 MDC를 어떻게 효과적으로 전파할 수 있는지 알아보겠습니다.요약traceId란 무엇이고 어떻게 활용할 수 있는가 ?traceId는 분산 시스템에서 요청을 추적하고 각 서비스간의 연관성을 식별하는 데 사용되는 유니크한 식별자ThreadLocal과 MDC(mapped diagnostic contexts)란 무엇인가?ThreadLocal은 자바에서 제공하는 클래스로, 각 쓰레드가 자신만의 데이터 복사본을 갖도록 해서, 쓰레드 사이.. 2024. 7. 8.
[기타] 날짜와 시간 표현의 국제 표준인 ISO 8601에 대해서 자세히 알아보자. (RFC3339, ISO8601, JavaTime) 개요먼저 표준화라는것은 사물, 개념, 방법 및 절차 등에 대하여 합리적인 기준을 설정하여 그 기준에 맞추는 것을 말합니다. 표준이 필요한 이유는 생산, 소비, 서비스 등 다양한 분야에서 생산성과 경제성을 높이고자함입니다. 표준화가 되어있는 요소에 대해서는 재활용이 가능하고 서로 이해하는것도 좋습니다. 최근의 좋은 표준의 예시는 in/out port로써 C-Type으로 통일되어가고 있습니다. 기존에 각 제품마다 표준이 달라서 불편했던 생산과 소비에 이제 단일화된 표준으로 편리함을 제공해주고 있지요. 이것이 바로 표준화가 필요한 이유입니다.오늘은 날짜와 시간 표현의 국제 표준인 ISO 8601과 RFC 3339에 대해서 알아보는 시간을 가져보려고합니다. 인터넷 표준에 비추어 볼때 우리가 따라야하는 표준은 I.. 2024. 7. 2.
[security] OAuth 2.0의 인가 스펙과 OIDC(OpenID Connect)의 인증 스펙에 대해서 알아봅시다 개요안녕하세요. 오늘은 OIDC(OpenID Connect)에 대해서 자세히 알아보는 시간을 가져보도록 하겠습니다. 다들 OAuth2에 대해서는 아실것 같습니다. 잘 모르시는 분들은 [OAuth2] OAuth2 개론 - 개요와 Authorization Code Flow를 통해서 먼저 보고 오시는것을 추천드립니다. OAuth2는 HTTP 기반에서의 권한 부여(Authorizaiton)를 위한 업계 표준 프로토콜입니다. OIDC는 OAuth2의 확장중 하나로써 인증(Authentication)에 대한 프로토콜입니다.오늘은 인증과 인가의 차이부터 OIDC까지 알아보도록 하겠습니다.요약인증과 인가의 차이인증(Authentication): 사용자의 신원을 확인하는 과정입니다. 로그인과 같은 방식으로 사용자가 누구.. 2024. 6. 19.
[Security] OAuth 2 Extension, Proof Key of Code Exchange(PKCE)에 대해서 알아보자 개요안녕하세요. 이전 포스팅 [OAuth2] OAuth2 개론 - 개요와 Authorization Code Flow을 통해서 OAuth2 개론을 알아보았습니다. OAuth2는 http 기반에서의 인증의 표준으로써 안전하게 토큰을 발급하고 이를 통해서 인증(Authentication)된 유저만 접근할 수 있도록 할 수 있습니다.하지만 기본 OAuth2는 네이티브 앱 또는 SPA 웹을 사용할 경우 authorization code interception attack을 당할 수 있습니다. 이 공격을 당하면 본인이 아닌 다른 유저가 token을 발급받을 수 있게됩니다. 따라서 이를 방지하기 위해서 OAuth 2.1의 업데이트의 하나로 Proof Key of Code Exchange(PKCE)가 있습니다.오늘은 .. 2024. 6. 9.
[Network] HTTP Keep-Alive VS TCP Keep-Alive 제대로 알기 안녕하세요. 지난 시간에 Apache HttpClient 코드를 분석하면서 Network에 대해서 훑어보는 시간을 가져보았었습니다. 그러면서 Keep-Alive에 대해서 간단히 짚고 넘어갔었는데요. 오늘은 이 Keep-Alive에 대해서 헷갈릴 수 있는 부분들을 정리해보도록 하겠습니다.개요Keep-Alive는 Connection을 유지하기 위한 메커니즘입니다. TCP와 Http 모두 Keep-Alive로 Connection을 유지합니다. 둘을 햇갈릴 수 있습니다. 하지만 이 두 Keep-Alive는 완전 다르기 때문에 구분해서 알아둘 필요가 있습니다.Connection은 너무 오래유지하는 것도 너무 짧게 유지하는것도 모두 리소스적인 낭비로 이어질 수 있습니다. 너무 오래 유지하게 되면 더 이상 사용하지 .. 2024. 6. 2.
[Network] Apache HttpClient의 설정으로 알아보는 클라이언트 관점의 네트워크 속성들 개요네트워크에 대해서 꼼꼼하게 이해하고 사용하면 좋겠다라는 생각을 했습니다. 어디서부터 시작할까를 생각했을 때 가장 쉽게 접근하고 사용할 수 있는 영역부터 시작한다면 좋겠다라는 생각으로 정리하며 이글을 써보게 되었습니다. 다른 서버를 호출하는 HttpClient의 설정을 하나하나 알아보며 이 설정들은 어떤것을 뜻하는지 이해해보도록 하겠습니다.Apache httpClient오늘 예제로 사용할 코드는 Apache HttpClient 코드입니다. Apache HttpClient는 현재도 관리되고 있는 몇 안되는 java 기반의 http client 중 하나입니다. 저는 해당 라이브러리를 아래의 이유로 사용하고 있습니다.현재도 메인테이닝되는 중non-blocking IO 지원코루틴을 명확하게 지원feign과 연.. 2024. 5. 17.
[Go] Java 개발자의 GoLang 튜토리얼 - Goroutine & GMP Model 개요GoLang을 잘 모르시는 분들이라도 Go하면 Goroutine을 사용한 효율적인 Thread의 운용으로 동시성에 대해서 좋은 퍼포먼스와 쉬운 사용을 보여주는 언어라는 사실 정도는 들어보신적이 있으실것 같습니다. 오늘은 GoLang의 Thread 모델과 이론에 대해서 간단히 본 후 goroutine의 사용방법에 대해서 알아보도록 하겠습니다.먼저 실습을 통해서 돌아가는 모습을 확인해보겠습니다. 그리고 기반이 되는 이론에 대해서 잠시 살펴보도록 하겠습니다. 주의하실 점은 해당 포스팅에서의 이론은 깊지 않습니다. 좀 더 깊은 내용은 레퍼런스를 참고해주세요.goroutine (고루틴)goroutine은 Go의 Runtime에 의해서 관리되는 경량 thread(aka. green thread)입니다.새로운 g.. 2023. 10. 10.
[Go] Java 개발자의 GoLang 튜토리얼 - Interface와 Duck Typing 개요Java에서의 Interface는 기능적인 설계를 추상화하고 특정 기능을 강제적으로 구현하게 만듬으로써 다형성과 같은 설계적인 이점을 가져가기 위한 언어적인 특징입니다. 우리는 Java에서의 Interface를 통해서 설계적인 추상화를 할 수 있고 상황에 따라 캐스팅하여 다형성(polymorphism)을 충족시킬수도 있습니다.Go에서도 interface가 있습니다. 하지만 Java에서의 interface와는 결이 유사하면서도 조금 다릅니다. Go에서의 Interface는 형태를 강제하지 않습니다. 반대로 Interface와 동일한 어떠한 형태를 띄고 있으면 이것을 Interface의 하나의 구현으로 보는 Duck Typing의 형태를 띄고 있습니다.이러한 부분이 이해가 잘 가지 않으실 수 있습니다. .. 2023. 10. 2.
[Go] Java 개발자의 GoLang 튜토리얼 - Method와 Receiver 개요안녕하세요. Java에서는 Class를 이용하여 코드를 캡슐화하고 OOP를 달성하는 기초로 활용합니다. 하지만 GoLang에는 클래스를 지원하지 않습니다. type struct로 커스텀 object를 만들 수는 있지만 method를 내부에 가질 수 없습니다. golang에서는 하지만, 그와 타입에 대한 method를 정의할 수 있는 방법이 별도로 있는데요. 그 방법에 대해서 알아보도록 하겠습니다.Receiver클래스 내부의 함수 즉, 메소드(Method)를 사용하기 위해서는 sturct type을 먼저 작성하고 Receiver 함수를 만들어주야합니다. 선언은 아래처럼할 수 있습니다.func (r {{ReceiverType}}) {{MethodName}}({{arguments}}) { // metho.. 2023. 9. 26.
[Go] Java 개발자의 GoLang 튜토리얼 - New vs Make 개요안녕하세요. Java는 new를 이용하여 Heap 메모리에 데이터를 할당할 수 있습니다. 반면 Go는 메모리에 할당할 수 있는 방법이 여럿있고 해당 방법에 따라서 할당되는 방식이 달라집니다. 오늘은 이러한 Golang의 Memory 할당에 대해서 알아보도록 하겠습니다.Java에서의 객체 메모리 할당Java에서는 아래처럼 new keyword를 이용하여 heap 메모리에 객체(Object)를 할당할 수 있습니다.User user = new User();Go 언어에서도 메모리에 객체를 할당할 수 있는 방법을 제공합니다. Go 언어는 Java와는 다르게 메모리를 할당하고 값을 초기화 할 수 있는 방법을 여럿 제공하고 있습니다. 어떠한 것들이 있는지 확인해보고 그 차이점을 확인해보도록 하겠습니다.newnew.. 2023. 9. 10.
[Go] Java 개발자의 GoLang 튜토리얼 - 데이터 타입과 타입 변환 (Conversion) 개요안녕하세요. Java를 이미 배운 상태에서 새로운 언어인 GoLang을 처음부터 배우는건 귀찮고 힘듭니다. 그래도 배워야한다면 이미 배운 지식인 Java를 이용해서 비교해가면서 배워보는건 어떨까요 ? 저는 이러한 방법으로 Go 언어를 배웠습니다. 그랬더니 조금은 덜 지루했던것 같아요.오늘은 Java와 비교하며 Go 언어의 문법적인 내용을 살펴보도록 하겠습니다.데이터 타입제일 처음 알아볼 Go 언어에 대한 내용은 DataType에 대한 내용입니다. DataType은 프로그램을 구성하는 가장 기본적인 메모리 구조에 대한 정의입니다. 어떤 DataType을 선택하느냐에 따라서 최적화된 프로그래밍이 가능합니다.DataType은 변수의 값이 메모리에 할당되는 사이즈를 정의할 수 있고 Type을 정의할 수 있습.. 2023. 9. 4.
[Go] Java 개발자의 GoLang 튜토리얼 - Mac에서 Go 설치 및 IDE를 통한 Run 안녕하세요. 오랫만에 인사드립니다. 거의 3달만에 신규 포스팅을 작성하게 되었습니다. 이전 마지막 포스팅이 6월 4일의 ChatGPT에 관한내용이더라구요. 한동안 공부와는 거리를 두고 지냈었습니다. 게임도하고 하반기에 있는 이벤트 준비도하고 그랬습니다. 그리고 이제 조금씩 다시 복귀하려고합니다.개요최근 회사 업무로 GoLang을 사용해불 수 있었습니다. Kotlin, React 이래로 제대로 하나의 언어를 공부하는것은 오랫만이었는데요. Golang 언어에 대해서 제가 얻었던 지식을 이번 포스팅부터 조금씩 풀어보려고합니다.어떤 언어든 설치하고 Hello World는 찍어보는것이 그 언어에 대한 시작이라고 생각합니다. 오늘은 Mac에서 Go를 설치하고 IDE를 통해 Run을 해보는것까지 진행해보겠습니다.Ma.. 2023. 8. 29.