ConfigMap우리는 어플리케이션 yaml파일에서 db host라던지 패스워드 등을 적곤한다.그런데 이러한 환경변수 값을 deployment에서 적을 수 있다.그런데 아래와 같이 적는방법도 있다. env: - name: MY_ACCOUNT value: hello - name: MY_PASSWORD value: pwd1234그러나 이러한 설정값을 디플로이먼트에 적는다는것은 관리하기가 어려워진다 설정값 변경만해도 디플로이먼트를 다시 배포해야한다.각각의 역할을 가지고 있는 것처럼 환경 변수를 관리하는 역할을 가진 오브젝트가 따로 존재하는것이다. 이게 바로 컨피그 맵이다.더해서 별도의 파일로 분리를 해서 관..
Deployment파드를 묶음으로 쉽게 관리할 수 있는 기능이전까지는 파드매니패스트 파일을 실행했지만 개수가 많아지면 코드가 늘어나게 되고 관리가 힘들다 그래서현업에서는 일반적으로 서버를 작동시킬 때 파드(Pod)를 수동으로 배포하진 않는다. 디플로이먼트(Deployment)라는 걸 활용해서 파드(Pod)를 자동으로 배포한다. 디플로이먼트(Deployment)의 장점- 파드 개수를 지정하는대로 생성이 가능하다- 파드가 비정상적으로 종료되는경우 새로 파드를 생성해 유지한다- 즉 일괄적으로 수정, 삭제, 중지, 업데이트 하기가 쉽다 디플로이 먼트 구조디플로이먼트는 레플리카셋을 관리하고 레플리카 셋은 여러 파드를 관리한다디플로이먼트 -> 레플리카셋 -> 파드그래서 디플로이먼트 -> 파드를 관리한다 라고 성립..
쿠버네티스란?오케스트레이션을 보고나면 지휘자가 어느곳은 약하게 강하게 이런지휘를 하게 된다 또 어떤곳을 연주할지랑 조율을 자주한다이런이미지를 인프라에 대입시켜보면 쿠버네티스는 인프라 관리지휘를 하는 역할을하는것이다.개발적으로는 컨테이너가 악기들이며 이러한 다수의 컨테이너를 효율적으로 배포, 확장 및 관리하기 위한 오픈소스이다.DokcerCompose와 비슷하지만 DockerCompose의 확장판이라고 생각하자 쿠버네티스 장점- 컨테이너 관리 자동화(배포, 확장, 업데이트)- 부하 분산(로드 밸런싱)- 쉬운 스케일링 (매니페스트 파일로 간단)- 셀프 힐링 Pod도커에서는 하나의 프로그램을 실행시키는 단위를 컨테이너 쿠버네티스에서는 파드라고 부른다. 파드는 일반적으로 쿠버네티스에서 하나의 프로그램을 실행시키..
이번글은 Spring Batch5에서 멀티데이터소스 설정에 대한 글입니다.제가 원하는 상황은 spring batch에 대한 meta-table을 schema를 서비스 schema와 분리시키고 싶었습니다. Spring Batch5 특징및 달라진점들어가기전에 Spring Batch5로 바뀌면서 달라진점에 대해 간단히 알아보자일단 Java17이 필수다@EnableBatchProcessing을 사용 안해야한다. 사용하는 경우는 meta-table정보를 다른곳으로 지정하고 싶을때라고 한다.또한 JobBuilderFactory는 Deprecated되었고 JobBuildeer와 StepBuilder를 사용해야한다. 제일 중요한것은 JobRepositorymeta데이터에 관한 테이블을 저장하는것은 JobReposi..
용어에 대해 정리한 글입니다. 향후 CDC에 대해 자세하게 정리할 것입니다. ETLExtract(추출), Transform(변경), Load(적재)를 뜻하며원천데이터에서 필요한 부분을 Extract 추출하여, Transform(클렌징,형식변환,표준화,통합 등)의 비즈니스룰을 적용한후, 특정 시스템에 Load(적재)하는 방식이다.주로 배치성으로 작업을 하며, 솔루션으로는 개인적으로 아는것은 AWS Glue, Spring Batch로 처리하는 방법이 존재합니다. 하둡의 등장으로 쌓아둘수있어서 쌓아두는걸 먼저하자 ELT하둡의 등장으로 쌓아둘수 있어서 쌓아두는걸 먼저하는 경우가 생겼다고 한다.ELT란 데이터를 먼저 추출 적재한 이후 변환을 하는 프로세스를 의미한다. ELT에서는 데이터 웨어하우스에서 데이터 변..
지연로딩을 하는데 어느 경우에만 즉시로 가져오고 싶은 컬럼이 존재했다. 그런데 이것을 아래와 같이 where: { member, }, relations: ['memberRole'], }); lazy: true 하면은 같이 가져오지 못해 Promise를 받게 된다. 그런데 아래조합으로 하면은 즉시 가져오게 된다. 도대체 왜 그런지 살펴봐야 겠다. eager: false where: { member, }, relations: ['memberRole'], }); 찾아보니 lazy는 항상 Promise를 반환하도록 되어있는거 같다. GPT에도 물어보니 relations와 eager로만 조합되어있지 lazy랑은 조합이 없는거 같다. nest/typeorm과 typeorm의 차이점이 무엇인가? nest/typeor..
이번 글은 사내 CI/CD작업을 하면서 알게 된 점을 적었습니다. 제가 볼려고 알게 된 점을 정리한 글입니다. EC2 인스턴스 접속할 때 홈 디렉토리가 계정별로 다른이유 알게된 이유는 젠킨스로 작업을 하면서 파일 실행을 내부에서 시켜야하는 경우가 존재했습니다. 그런데 이것을 못읽게 되면서 발생하는 문제였습니다. 파일을 찾을 수 없는것입니다. 그래서 찾아보니 Linux시스템에서 홈디렉터리 설정되어있지않는 유저는 ssh접속시 인자없으면 홈 디렉토리는 /home/ec2-user가 됩니다. 왜냐하면 일반적으로 사용자 계정이 생성될 때, 해당 계정의 홈 디렉토리는 /home/계정이름 과 같이 설정이 되기때문입니다. 따라서 자신의 홈 디렉토리로 이동하게 됩니다. 항상 파일위치만 보다가 홈 디렉토리를 확인안하게 되었..
이번글은 Nest JS로 배포를 하면서 겪었던 경험을 적은 글입니다. 단순 기록을 위한 글입니다. Node를 통해 배포를 처음보아서 적었습니다. DockerFile Nest를 사용하면서 DockerFile에서 초기서버 이미지이다. alpine으로 설정하게 되면 bcrypt가 동작안하게 되는경우가있다. 이런 현상은 왜 일어나느냐 저희의 개발환경컴퓨터와 alpine의 내부 구조가 다르기 때문이다. alpine은 가볍게 만들어져서 어느게 없는경우가있다. 그래서 bcrypt경우는 따로 rebuild를 해줘야한다. rebuild로 bcrpyt 패키지를 alpine컴퓨터에 맞춘것이다. install package.json을 통해서 node_modules를 생성하는 명령어이다. build Nest는 TS기반이다. 이..
이번글은 터널링 하는방법을 잊지않기위해 단순 코드 저장입니다. Bastion Host Bastion은 수호자, 보루 요새라는 사전적 의미를 가집니다. 구축한 인프라 또는 네트워크의 입구에서 허용된 사람만 출입할 수 있는 역할을 수행하는 녀석입니다. 즉 맨 입구에서 게이트역할을 하는 서버를 Bastion호스트 또는 Bastion서버 라고 부릅니다. 왜 사용하지? AWS 리소스 구성 후 관리자가 VPC 외부에서 Private Subnet에 접근해야 하는 경우 직접 접근할 수 있는 방법이 없는데, 이 때 Bastion Host를 거쳐서 Private Subnet에 접근할 수 있습니다. 저의 문제상황 로컬에서 Dev 디비는 접근이 가능했지만 QA환경에서는 접근을 못하게되어 DB Connection생겼습니다. 왜..