본문 바로가기

전체 글33

Go 바이너리 실행시 ENOENT(No such file or directory) 문제 해결하기 1편 - C 표준 라이브러리 구현체를 찾아서 문제 발생 상황Go 언어로 애플리케이션을 개발하고, 바이너리로 빌드한 다음 로컬에서 실행해보면 문제가 없는데 컨테이너로 띄우면 No such file or directory 에러가 뜨는 경우가 있습니다. 컨테이너 안에서 명령어를 쳐서 바이너리가 있는지 검사해봐도 아무런 문제가 없는데요.실제로 실행하려고 보면 파일이나 디렉터리가 없다고 에러가 뜨는 것이죠. 개발자의 눈으로 보면 아무런 문제가 없기 때문에 이러한 에러는 해결하기 매우 어려웠습니다. 이 문제를 해결하면서 Go와 이외 주변 영역에 대한 다양한 지식을 얻게 되었는데요.반대로 여러 배경지식이 있어야만 쉽게 풀 수 있는 문제였습니다. 결론부터 말씀드리면, C 표준 라이브러리 구현체를 빌드 환경과 실행 환경이 호환되도록 맞춰 줘야 합니다.왜 ENOEN.. 2025. 1. 20.
Go 언어 개발기 - Go로 gelf-forwarder를 만들다 서문많은 개발자들이 그렇겠지만 Go를 공부하고 Go로 개발해보고 싶다는 생각은 많이들 하는 것 같습니다.Stackoverflow에서 최근에 시행된 2024 Survey를 보니, Go는 전체 7위로 많이 배우고 싶어 하고, 또 만족감이 높은 언어인 것 같습니다.https://survey.stackoverflow.co/2024/technology#admired-and-desired-language-desire-admire Technology | 2024 Stack Overflow Developer SurveyPostgreSQL debuted in the developer survey in 2018 when 33% of developers reported using it, compared with the mo.. 2025. 1. 19.
Redirect URI는 프론트엔드여야 할까? 백엔드여야 할까? (OAuth 2.0에 대해서 알아보기) 계기: Redirect URI는 프론트엔드여야 할까? 백엔드여야 할까? 최근에 회사에서 개발을 진행하던 중, 로그인 방식 중 MS Entra ID 로그인을 구현해야 하는 요구사항이 있었습니다. MS Entra ID는 마이크로소프트에서 제공하는 OIDC 규격의 서드파티 로그인 서비스인데요. 사실 이번에 직접 구현해보기 전까지는 OAuth 2.0과 OIDC에 대해서 개념만 대충 알고 있었고, '실제로 구현하게 되면 그때 문서 보고 하지~' 같은 안일한 마음으로 열심히 공부하지 않았습니다.  그런데 막상 구현하려고 보니 생각보다 막히는 부분도 많았고, 프론트엔드 분들과 소통할 때도 서로 생각하는 시퀀스가 달라서 뭐가 맞는지에 대해서 고민이 많이 되더라구요. 그 중에서 가장 의견이 분분했던 Redirect UR.. 2024. 12. 24.
[Java] Optional.of는 왜 있을까? Optional 그리고 Optional.ofOptional은 Java를 사용할 때 null-safe한 코드를 간결하게 짤 수 있게 해주는 좋은 클래스입니다.저는 가능하면 Java에서 null을 다룰 때 Optional을 많이 사용하는데요. 1. if문을 사용한 검사보다 코드가 더 간결하고2. 직접적으로 null을 사용하지 않아도 되며3. 람다를 활용하여 필요한 동작을 매끄럽게 연계할 수 있기 때문입니다. 그런데 Optional을 사용하다 보니 Optional.of가 왜 필요한지 의문이 들었습니다. Optional.of의 javadoc을 보면 다음과 같이 나와 있는데요.Returns an Optional describing the given non-null value.Throws:NullPointerExc.. 2024. 10. 10.
[JPA] @Transient와 @Transient? (Spring Data와 JPA의 관계에 대해서) 프로젝트 개발하면서 @Transient Annotation과 관련하여 고생한 경험을 바탕으로, 깨달은 점을 정리해보려고 합니다.@TransientSpecifies that the property or field is not persistent. It is used to annotate a property or field of an entity class, mapped superclass, or embeddable class.https://docs.oracle.com/javaee/7/api/javax/persistence/Transient.html Oracle에서 제공하는 Java Persisence의 @Transient 항목을 보면, 다음과 같이 설명하고 있습니다.영속적이지 않은 프로퍼티나 필드를 명시한.. 2024. 10. 3.
OpenTelemetry 1편 - 개요 왜 필요한가?서비스를 개발하고 배포,운영하다 보면 다양한 비기능 요구사항에 마주치게 되는데요.이러한 요구사항을 만족하기 위해서는 서버가 어떻게 돌아가고 있는지에 대한 여러 정보가 필요하게 됩니다. 특히나 단순히 로그를 남기는 정도로는 해소하기 어려운 케이스들이 발생하게 됩니다.예를 들어, 다음과 같은 케이스에서는 로그만으로 해결하기에는 어려움이 있습니다. 1. 분산 시스템 환경  MSA, 클라우드 네이티브 환경에서는 기존의 운영 방법에 한계가 있습니다. 봐야 하는 정보가 여러 마이크로 서비스에 분산되어 있고, 서비스간 상호작용을 한 눈에 보기 어렵기 때문입니다. 2. 실시간 문제 분석 로그는 사용자가 설정한 이벤트만 기록하고, 이는 과거의 기록이므로 실시간으로 발생하는 성능 저하나 장애를 분석하는데는 적.. 2024. 9. 16.
[JPA] @OneToOne 관계와 UNIQUE 제약조건 @OneToOne 관계에 대해서 JPA에서는 일대일 연관관계를 맺는 엔티티를 표현하기 위해서 @OneToOne 애노테이션을 지원합니다. 일대일 연관관계에 대해서 JPA는 문서에서 3가지 예시 케이스를 제공하고 있습니다. FK 컬럼을 매핑하는 일대일 연관관계 PK를 공유하는 일대일 연관관계 Embeddable 클래스를 통한 일대일 연관관계 각각의 케이스를 예제로 살펴보면 다음과 같습니다. FK 컬럼을 매핑하는 일대일 연관관계 // On Customer class: @OneToOne(optional=false) @JoinColumn( name="CUSTREC_ID", unique=true, nullable=false, updatable=false) public CustomerRecord getCustomer.. 2024. 4. 8.
Dataverse Community Meeting 2023: Sharing data for future generation 2편 Dataverse의 미래 발전 방향 Dataverse의 미래 발전 방향은 크게 세 가지 정도로 요약할 수 있었습니다. Frontend와 Backend를 분리하고 Frontend를 React/TS 기반의 SPA로 개선 Shibboleth 등 여러 인증 수단을 래핑하고 OIDC와 Keycloak으로의 전환 컨테이너화 Frontend와 Backend 분리 및 SPA 개선 Dataverse의 기술 스택은 Java EE 8, JPA, JSF로 되어있습니다. 스프링 부트와 관련 스택들이 보편화된 지금에 와서는 다소 연식이 느껴지는 기술들인데요. Dataverse가 2007년에 시작한 프로젝트이다보니 아무래도 현재에 와서는 레거시 코드가 되어버린 것이 꽤나 있습니다. Java EE 8과 스프링은 선택의 차이라고 생각.. 2023. 6. 20.