여러 컨테이너를 구동 시 동일한 환경 변수를 이용할 때, 혹은 한 컨테이너에 대해 상황에 따라 다른 환경 변수를 동적으로 주입해 줘야 할 때 docker-compose에서는 환경 변수를 주입해 줄 수 있도록 여러 방법을 지원한다. 나의 경우 동일한 내용의 컨테이너를 병렬 적으로 여러 개 구동하나 동일한 환경 변수를 사용하기에 하나의 파일로 환경 변수를 사용하기 위해 알아보았다. 우선 환경 변수를 주입하는 방법을 간단하게 알아보자. docker compose를 사용하여 환경 변수 설정 방법크게는 docker-compose 파일을 이용하는 방법과 CLI를 사용하는 방법이 있다.파일로 작성.env 파일 작성키-값 쌍의 여러 환경 변수를 한 번에 주입하기 용이하다. 작성된 .env 파일은 프로젝트 폴더의 루트 ..
전체 글
새로운 프로젝트를 시작하면서 구현만을 하던 API서비스를 직접 설계하게 되는 기회가 생겼다. 지속적으로 유지 관리가 되어야 하며 확장의 계획이 있는 프로젝트이기에 확실한 기반과 구조를 가져가야 했고, 이번 기회에 API설계에 대한 패턴을 탐색해 보았다. API 설계 패턴은 빠른 확장을 가능하게 하고 설계 및 구동에 있어 일반적인 문제를 해결하는데 청사진이 될 수 있다. 하기 내용에는 API 디자인 패턴의 사용 이점과 일반적인 패턴, 구현 모범 사례를 함께 다루어 보려고 한다. API 디자인 패턴을 사용하면 좋은 점 디자인 패턴을 사용하는 원초적인 이유는 협업의 용이성과 안정적인 서비스 운용 등 다양하게 있다. 이에 따라서 API 디자인 패턴을 사용하면 함께 협업하는 개발자와 API를 더 쉽게 이해하고 확..
DTO Data Transfer Object)는 애플리케이션 간에 테이터의 전달을 목적으로 하는 객체이다. 이는 프레젠테이션 계층과 비즈니스 계층, 혹은 비즈니스 계층과 데이터 액세스 계층, 더 나아가 애플리케이션 간에서 비즈니스 로직을 갖지 않고 순수하게 데이터 전송을 위해 사용된다. 클라이언트와 서버의 관계를 갖는 서비스를 설계/구축해 봤으면 누구나 DTO에 대한 개념을 알 것이다. 그러나 순수한 DTO의 의미와 의도를 정확히 파악하고 구현하는 것은 어려움이 있을 것이라 생각된다. 최근 서비스를 구현하면서 DTO/VO/Entity 등 데이터를 다루는 기본적인 객체에 대해 고민을 해보면서, 더 정확히 알고 쓰면 깔끔하면서 명확한 코드 작성이 가능할 것 같아 몇 가지 알아본 내용을 정리해보려고 한다. 이..
TypeORM을 이용해서 SQL Server 2008 DB에 연결해 데이터를 가져오는 과정에서 문제가 생겼다. QueryFailedError: Error: Invalid usage of the option NEXT in the FETCH statement. SQL Server 2008 버전은 MS에서도 서비스를 종료했지만 작업 진행 중인 장비 특성상 DB의 버전을 변경할 수 없는 처지여서 원인을 찾고 해결해 보기로 했다. SQL Server 2008 버전은 너무 구버전이어서 MS 홈페이지에서도 매뉴얼을 찾을 수 없다. 관련 내용을 찾아보니 OFFSET/FETCH 구문이 SQL Server 2011 버전 이후에 도입된 듯하다. 아래 링크는 관련 이슈 내용이다. https://github.com/typeor..
node-gyp를 install 중 python 버전의 호환성 문제가 있어서 그 부분은 버전을 낮춰 해결은 했으나,,, python을 찾지 못하는 이슈가 또 발생했다. env: python: No such file or directory make: *** [Release/libffi.a] Error 127 gyp ERR! build error gyp ERR! stack Error: `make` failed with exit code: 2 gyp ERR! stack at ChildProcess.onExit ... 전혀 경험해보지 못한 경우라서 당황하긴 했지만 결국 'python'만 찾게 해 주면 되겠다 생각해서 어렵지 않게 생각했다. 이전 이슈: [이슈해결] ValueError: invalid mode: ..
node-gyp를 install 하는 중 아래와 같이 에러가 발생했다,,, 좀 이전의 버전과 의존성이 있었고 현재 기준 python 버전(3.11.*)과 호환이 되지 않는 문제가 있는 듯했다. (rU 폴더의 이름이 바뀌었던지,,,) ValueError: invalid mode: 'rU' while trying to load binding.gyp gyp ERR! configure error gyp ERR! stack Error: `gyp` failed with exit code: 1 gyp ERR! stack at ChildProcess.onCpExit ... 다행히 해결방법을 어렵게 찾지 않아 쉽게 해결했다. 참고: Node gyp ERR - invalid mode: 'rU' while trying to..