language, framework, library110 [Java 11 -> 17] immutable Class와 record class, 그리고 compact constructor 개요지금 회사에서 kotlin만 사용하던 나에게 다시 Java를 사용할 수 있는 기회가 찾아왔습니다. 뭐든지 역시 실제로 업무에서 사용하는 것 만큼 그 기술에 대해서 공부할 수 있는 좋은 동기부여는 없는것 같다라는 생각이 들었습니다. 소식으로만 접하던 Java의 변화에 대해서 실제 업무에서 쓰면서 그 가치를 제대로 느껴볼 수 있었습니다.오늘 알아볼 내용은 Java의 record keyword 입니다. record keyword는 무엇이고 어디에 사용할 수 있고 등의 내용을 함께 알아보도록 하겠습니다.immutable class (불변 클래스) 란 ?한번 값을 설정하고 나면 수정할 수 없도록 클래스 instance를 생성하는 것을 immutable class 라고 일반적으로 말합니다. 특별한 이유가 없다면.. 2024. 11. 25. Kotlin Coroutine에서의 TraceId는 어떻게 주입하나 ? - Context 전파와 MDCContext 코루틴을 사용하면서 발생하는 주요 문제 중 하나는 실행 컨텍스트의 전파입니다. 특히 분산 시스템에서 로깅과 추적을 위해 중요한 역할을 하는 traceId와 MDC(Mapped Diagnostic Context)의 사용이 이에 해당합니다. 이번 글에서는 코루틴 환경에서 traceId와 MDC를 어떻게 효과적으로 전파할 수 있는지 알아보겠습니다.요약traceId란 무엇이고 어떻게 활용할 수 있는가 ?traceId는 분산 시스템에서 요청을 추적하고 각 서비스간의 연관성을 식별하는 데 사용되는 유니크한 식별자ThreadLocal과 MDC(mapped diagnostic contexts)란 무엇인가?ThreadLocal은 자바에서 제공하는 클래스로, 각 쓰레드가 자신만의 데이터 복사본을 갖도록 해서, 쓰레드 사이.. 2024. 7. 8. [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. [kotlin] 코틀린 차곡차곡 - 19. Functional (SAM) interfaces 안녕하세요 ! 오늘은 이전 시간에 이어서 코틀린 Functional interfaces에 대해서 알아보도록 하겠습니다. Functional Interfaces 란 ? Functional Interface는 Java 8 부터나온 개념입니다. 이 개념은 그대로 kotlin에서도 사용이 가능합니다. Java의 Functional Interface의 개념이 궁금하신 분은 이전에 제가 이전에 아래 2개의 포스팅을 작성한 적이 있습니다. 해당 포스팅을 참고해주시기 바랍니다. [java8] java의 주요 functional interface - Function, Supplier, Consumer [java8] java의 주요 functional interface - Predicate, Operator functio.. 2023. 2. 7. [kotlin] 코틀린 차곡차곡 - 18. value class (inline class) 안녕하세요. 오늘은 오랫만에 코틀린 알아보는 포스팅으로 찾아왔습니다. 오늘 여러분들에게 소개해드릴 코틀린 개념은 value class입니다. 자 그럼 바로 들어가보도록 하겠습니다. 상황 설명 유저 정보를 담는 Entity를 만들어보도록 하겠습니다. email, hashedPassword, displayName, createdAt 필드를 가지도록합니다. 그리고 email은 email의 특정 형식이 있습니다. 하지만 User Entity에서는 String 형식으로 email을 받고 있기때문에 email 형식을 충족시키지 못하더라도 Entity 생성을 할 수 있습니다. 이러한 검증을 위해서 init을 이용할 수 있습니다. 그리고 email의 경우 domain과 id를 @ 기준으로 분리할 수 있기 때문에 해당 .. 2023. 2. 4. [Spring Security] 인증 Filter를 기준으로 Custom Filter 추가와 변경 안녕하세요. 오늘 포스팅에서는 인증 Filter의 추가와 변경하는 방법에 대해서 알아보도록 하겠습니다.FilterSpring Securtiy는 기본적으로 Filter를 기반으로 동작합니다. 따라서 Spring Security Framework를 이해하기 위해서는 Filter에 대해서 이해하는것이 필수입니다. Filter는 요청을 수신하고 그 논리를 실행하고 최종적으로 다음 Filter로 요청을 전달하는 역할을 합니다.아래의 이미지는 여러 필터가 동작하는 방식을 나타냅니다. Filter 1에서 로직을 실행하고 Filter 2로 전달, Filter 3으로 전달하고 마지막에는 Controller에서 Request를 받아서 처리합니다. 그리고 Controller의 Response가 만들어지고 이렇게 만들어진 R.. 2023. 1. 18. [Spring Security + JPA] JPA를 사용해서 Spring Security User 인증 서비스 만들기 안녕하세요. 오늘은 유저 정보를 MySQL에 저장하고 JPA를 활용하여 이 정보를 기준으로 Spring Security에서 유저의 인증을 확인하는 샘플을 만들어보도록 하겠습니다. 오늘 구현할 부분은 아래의 이미지에서 색깔로 칠해져 있는 부분입니다. 이부분들을 커스터 마이징하면 DB에서 유저를 가져와서 이를 인증에 이용할 수 있게 됩니다.오늘 구현한 샘플은 github에 올려두었습니다. 전체 코드가 궁금하신 분들은 github repository에 접근하시면 확인이 가능합니다.구현 필요 부분오늘 실습에서 Spring Security의 Interface를 이해하고 있어야하는 부분은 아래와 같습니다. 해당 Interface가 하는 역할 및 구현 부분에 대한 정의는 이전 포스팅[Spring Security] S.. 2022. 12. 28. 이전 1 2 3 4 ··· 10 다음