본문 바로가기

반응형

전체 글

(226)
[gRPC] Proto file 문법 (Message type, Service type) 1. 프로토 파일 (Proto file)프로토콜 버퍼를 사용하기 위해서는 사용할 데이터와 서비스에 대해서 프로토 파일에 작성해야한다. 프로토 파일에 작성된 프로토콜 버퍼는 아래의 과정을 거쳐서 다른 프로그래밍 언어에서 사용할 수 있도록 변환된다.  우리가 사용할 데이터 구조를 .proto 파일에 작성하면 프로토콜 버퍼 컴파일러인 protoc 가 이를 컴파일하여 해당 프로그래밍 언어의 소스코드를 생성한다. 이렇게 생성된 소스코드를 사용자의 프로젝트 코드와 함께 컴파일하여 프로토콜 버퍼 클래스를 프로그램에서 호출하여 사용할 수 있도록 한다. 아래에는 프로토콜 버퍼 데이터를 정의하기 위해 프로토 파일 문법에 대해서 정리한다. 버전은 proto3 를 기준으로 정리하였다.2. Message Typesyntax =..
[gRPC] gRPC 와 Protocol Buffer 1. gRPC 란?gRPC 는 구글에서 만든 RPC (Remote Procedure Call) 로 'Google Remote Procedure Call' 의 줄임말이다. 프로토콜 버퍼를 IDL 로 사용하며 서로 다른 장치의 프로그램 간의 메서드 호출을 가능하게 해주어 쉽게 분산처리 시스템을 구축할 수 있도록 해준다. gRPC 는 다른 RPC 들과 같이 서비스를 정의하는 것과 원격으로 호출할 수 있는 함수들과 함수의 매개변수, 반환타입 등을 지정하는 것을 기반으로 한다. 서버측에서는 해당 인터페이스를 구현하고 gRPC 서버를 실행하여 클라이언트의 요청을 처리한다. 클라이언트측은 서버와 같은 기능을 제공하는 stub, 스텁을 가지고 통신을 수행한다.  gRPC 클라이언트와 서버는 여러가지 환경에서 통신할 수..
[JAVA] Virtual Thread 블로그 포스트 등을 통해서 Java21 에 대한 내용들을 접하게 되었다. 그중에서 virtual thread 에 대한 글들을 많이 접할 수 있었다. virtual thread 가 기존 thread 보다 가볍고 성능이 우수하다는 내용을 접하면서 흥미가 생겼고, 이전에 I/O 작업을 처리하기 위하여 사용했던 파이썬의 asyncio 와도 유사한 느낌이 들어서 virtual thread 와 관련 내용을 정리해보려고 한다.1. virtual thread 란?virtual thread 는 기존 자바의 동시성 모델을 개선하고자 하는 Project Room 에 의해 시작된 경량화 스레드 기술로 JDK21 에 정식 기능으로 추가되었다. 기존의 방식과 비교하여 많은 동시성 작업에 대해서 처리량이 많고 대기시간이 짧도록 개..
[JPA] LazyInitializationException 과 OSIV 테스트 코드를 작성하다가 LazyInitializationException 에러가 발생하였다. 이슈에 대해서 찾아보니 JPA 의 lazy loading 과 관련된 이슈였으며, @Transactional 등을 사용하여 해결할 수 있었다. 오늘은 해당 이슈가 발생하고 이를 해결하면서 가졌던 의문점과 이에 대한 설명을 정리해본다. 1. LazyInitializationException 에러 설명 및 발생 원인 org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.msa.dataset.domain.entity.Project.categories: could not initialize proxy ..
[JAVA] 람다식 (lambda expression) 자바의 람다식을 사용하던 중 "Local variable number defined in an enclosing scope must be final or effectively final" 라는 에러가 발생했다. 이 에러는 람다식에서 지역변수에 접근할때 발생하였는데, 찾아보니 메모리에서 람다식의 변수를 관리하는 방식과 관련된 문제였다. 해당 에러를 알아보면서 이번 기회에 람다식에 대해서도 한번 정리해보았다. 1. 람다식 (lambda expression) 람다식은 자바 1.8 버전부터 제공된 기능으로 함수를 하나의 식으로 표현한 것이다. 람다식은 메서드의 이름과 반환값이 필요없는 익명함수로 괄호와 화살표를 사용하여 식을 표현한다. (매개변수, ...) -> { 실행문 } 람다식을 사용하게 되면 보다 간결하..
[SpringBoot] Logging - 3 (log4j2) 이전에 springboot 의 로깅 프레임워크를 공부하면서 logback 까지만 공부하고 사용했었다. 보다 최신 로깅 프레임워크인 log4j2 를 한번 들여다보고 싶었는데 기회가 없다가 이번에 개인 공부를 하면서 로그 환경을 설정할 기회가 있어서 log4j2 에 대해서 알아보았다. 1. log4j2 log4j2 는 자바 로깅 프레임워크 중 하나로 log4j 의 최신버전이다. 비동기 로깅을 통해서 logback 이나 이전버전의 log4j 보다 성능을 향상시킨 버전이다. Log4j2 기능 Async Logger log4j2 는 비동기 로깅 기능이 추가되었다. 비동기 로깅은 I/O 작업을 별개의 스레드에서 실행하도록 하여 애플리케이션의 성능을 향상시킨다. 이를 통해서 logger 가 처리할 수 있는 처리량이 ..
[Docker] Docker Root Directory (도커 스토리지) 변경 도커를 사용해서 개발을 하다보면 도커 이미지들이 계속해서 쌓이게 된다. 버전별로 빌드된 도커 이미지들은 작으면 몇 MB 에서 nvidia, gpu 와 관련된 이미지들의 경우에는 20GB 정도까지 용량이 커지곤 한다. 이러한 이미지들이 계속해서 쌓이면 로컬 디스크의 용량이 부족해지는 경우가 있다. 이 글에서는 이런 상황을 해결하기 위하여 마운트된 디스크와 같이 특정 위치로 도커 스토리지의 위치를 변경하는 법을 정리한다. 1. Docker Root Directory 도커 데몬은 도커와 관련된 파일들, 컨테이너 정보, 도커 이미지, 볼륨 정보, 서비스 정보 등등 도커와 관련된 정보들을 특정 디렉토리에 저장하여 사용한다. 이러한 디렉토리를 Docker Root Directory 라고 하는데 해당 디렉토리의 기본..
[Python] Default Argument Value - mutable object 파이썬 함수를 호출하다가 이상한 점을 발견하였다. 분명히 인자로 아무 값도 넘겨주지 않았는데 함수 내부에서는 파라미터에 값이 들어가 있는 것이다. 디버깅을 한 결과 파이썬의 default argument value 를 잘못 사용하고 있었다는 것을 알게 되었다. 이 문서에서는 문제를 발견하고 이를 디버깅한 과정과 이후 알게 된 내용을 정리한다. 1. 이슈 발견 및 디버깅 예시에서는 Context 클래스의 func 함수를 호출하고 있다. func 함수는 v 라는 파라미터와 l 이라는 파라미터를 가지고 있다. 여기서 v 는 int 1 을 기본값으로 l 는 list [] 를 기본값으로 가지고 있다. func 함수는 리스트 l 에다가 v 의 값을 추가한 다음에 이를 화면에 출력하는 함수이다. 그렇기 때문에 함수를..

반응형