본문 바로가기

반응형

Tech

(56)
[Spring] Spring 과 Tomcat 스프링을 사용하다 보면 톰캣  (Tomcat) 이라는 이름을 듣게된다. 예전에 공부했었던 웹서버, WAS 등의 기억을 더듬어서 막연하게 스프링에 내장되어 있는 WAS 정도로 이해하고 넘어갔었다. 이번 글에서는 톰캣이 무엇인지, 스프링과 톰캣이 어떤 관계를 가지는지에 대해서 정리해보려 한다.1. Web Server 와 WAS (Web Application Server)톰캣에 대해서 본격적으로 알아보기 전에 Web Server 와 WAS 의 개념부터 정리해보자. 일반적인 웹 서비스에서 클라이언트는 서버의 규격에 맞는 HTTP 요청을 보내고 서버로부터 응답을 받는다. Web Server 와 WAS 는 둘다 클라이언트의 요청에 알맞은 응답을 보내는 역할을 하는데, 이때 어떤 요청에 대응하는지 목적과 기능에 따라..
[gRPC] gRPC - Java 이전의 글들에서는 gRPC 의 기본 개념과 gRPC 에서 사용하는 proto buffer 와 이를 정의하는 proto file 등에 대해서 정리했다. 이번에는 gRPC 를 실제 프로그래밍 언어에서 사용하는 방법을 정리해보려 한다.grpc 는 Java, Go, Kotlin, C++, Dart, Node, Python, Ruby 등등 다양한 언어를 지원한다. 그 중에서 Java 로 gRPC 를 사용하는 법, 그리고 Java 와 많이 사용되는 웹 프레임워크인 스프링에서 gRPC 서버를 같이 사용하는 법을 정리해본다.1. 자바 프로젝트 설정자바에서 gRPC 를 사용하기 위해서는 먼저 자바 프로젝트의 환경 설정부터 진행해줘야 한다. 자바 프로젝트는 gradle 기반으로 생성하였고 gRPC 를 사용하기 위해서 gr..
[gRPC] Proto file (.proto) - Message, Service 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 클라이언트와 서버는 여러가지 환경에서 통신할 수..
[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 ..
[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 라고 하는데 해당 디렉토리의 기본..
[Linux] 디스크 마운트 (fdisk, mkfs, mount, df) 서버의 디스크 용량을 확인하고 추가 디스크를 마운트 작업을 정리한다. 1. 디스크 상태 확인 서버의 현재 디스크 정보를 fdisk 명령어를 사용하여 확인한다. fdisk 명령어는 서버의 디스크 파티션 정보를 출력하거나 디스크 파티션을 조작하는데 사용하는 명령어이다. 아래와 같이 fdisk 의 l 옵션을 사용하여 디스크 파티션 목록을 확인할 수 있다. 디스크 파티션 조회 결과로 /dev/xvda 에 연결되어 있는 디스크와 /dev/xvdb 에 연결되어 있는 디스크 두가지를 확인할 수 있다. 이중에서 /dev/xvda 디스크는 /dev/xvda1 으로 파티션이 나누어 있지만 /dev/xvdb 디스크는 파티션이 설정되어 있지 않은 것을 확인할 수 있다. df 명령어로 디스크의 용량을 확인하면, 위의 이미지에서..

반응형