전체 글 211

[PostgreSQL] Logical Replication로 데이터 Migration하기

개요PostgreSQL의 Logical Replication 기능을 사용하여 다른 PostgreSQL DB로 데이터 Migration 하기  Logical Replication이란?Logical Replication은 PostgreSQL의 데이터베이스 간에 특정 테이블의 변경 사항을 동기화할 수 있는 기능이다. 기존의 Physical Replication과 달리, 테이블 단위(또는 테이블 그룹 단위)로 데이터 변경 사항을 추출하여 이를 다른 PostgreSQL 서버에 전송한다. 이를 통해 전체 데이터베이스가 아닌 일부 테이블만 복제할 수 있다. Logical Replication은 WAL (Write-Ahead Logging)을 decoding하여 테이블의 변경 사항을 추출하는 방식으로 동작한다. Pos..

letsencrypt 무료 SSL 인증서 생성하기 (AWS/Route53)

개요 사이드 프로젝트를 진행하다 https 환경이 아닌 탓에 테스크 진행이 지연되거나 복잡해지는 경우가 생겼다. 인스타그램 API 연동을 해야하는데 callback uri에 https prefix가 강제된다거나 (ngrok로 해결), url 클립보드 복사 테스트를 진행하지 못하는 등 불편한 점들이 자꾸 생기길래 이를 해결하기위해 인증서 발급 과정을 진행했다. 그냥 사서 하면 되는거 아닌가요? -> 와일드 카드 인증서 기준 년 60 ~ 80 만원을 사용할 용기가 나지 않았다. AWS Certificate manager는 무료지 않나요? -> 추가적인 elb, ec2 구축이 강제되기에 이또한 비용이었다. Step 1. Certbot 설치 brew install certbot ( mac으로 진행했기에 brew..

순열, 중복순열, 조합, 중복조합 (Java)

1. 순열(Permutation) 서로 다른 n개중에 r개를 선택하여 정렬하는 경우의 수 정렬은 r개를 택하여 일렬로 배열하는 경우를 말한다. [1, 2, 3]과 [3, 2, 1]은 다른 것. static boolean[] visited; static int[] result; public static void main(String[] args) { int[] arr = {1, 2, 3}; int r = 2; visited = new boolean[arr.length]; result = new int[r]; permutation(arr, 0, r); } public static void permutation(int[] origin, int depth, int r) { if (depth == r) { for..

[AWS/Lambda] 외부 라이브러리 import (python/paramiko)

개요 S3에 파일이 업로드 되면 해당 객체의 Key 정보를 활용해 AI 학습서버의 스크립트를 실행시키는 부분을 담당했다. Python의 paramiko 라이브러리를 사용하여 스크립트를 실행, 이 과정에서 필요한 외부 라이브러리를 Lambda에 추가하는 과정을 작성해보았다. 1. 외부 라이브러리 다운로드 AWS Lambda 런타임에서 외부 라이브러리를 사용하려면 로컬에서 코드/라이브러리 파일을 zip으로 압축하여 업로드해 사용한다. (처음에는 받아드리지 못했다. 진짜..? 너가 안해줘...? 이런 반응이었다.) 먼저 zip 파일로 코드/라이브러리를 압축할 때 최상위 폴더 경로는 다음 표를 참고하자 로컬에 python 폴더를 생성한 뒤, paramiko 라이브러리를 다운로드 받아주자. 다운로드 받을 코드/라..

오라클 19c 설치 (REHL 8) with RPM

요구사항 프로젝트 수행 중 AWS에 있는 RDS를 설치형 RDB로 변경해서 진행해야하는 요구사항이 있었다. 우리가 사용하는 RDS는 MariaDB인데, 고객사가 보안정책 상 Oracle을 사용해야한다 해서 설치하게 되었다. (JPA만세) 우여곡절이 정말 많았던 설치. Oracle은 처음이여서 처음보는 에러와 난관에 2~3일은 걸린 듯하다. 나중에 내가 다시 보기위해 포스트를 한다. 만약 처음부터 설치하고 싶은 사람은 Docs 참고하길 바란다. 백엔드 개발자라면 DB설치도 할 수 있어야한다고 생각한다 1. REHL 8에서 누락된 compat-libca1, compat-libstdc++-33 패키지 설치 yum install -y http://mirror.centos.org/centos/7/os/x86_64..

AWS RDS(MariaDB), MongoDB 운영 데이터를 개발로 이관하기

요구사항 AWS에 구성된 MariaDB(RDS), MongoDB 운영DB 데이터를 개발로 이관(백업)하자 제약사항 MariaDB(운영)는 Private Subnet에 존재해서 로컬에서 직접 접근이 불가하다. MariaDB(개발, 운영)은 RDS로 서비스 중이므로 서버 명령어를 직접적으로 실행시킬 수 없다. 이관 시 새로운 스키마/DB를 개발 DB에 미리 생성하고, 생성한 스키마/DB에 운영 데이터를 이관해야한다. 작업 시작 빠르게 처리해야만 하는 Task여서 여러가지 방법을 비교하거나 고려하지는 못했다. 더 좋은 방법이 있을 것 같지만, Task를 진행하는 순간에는 아래 방법이 가장 빠르다고 판단했다. 나는 운영DB에서 데이터를 로컬로 백업한 다음, 다시 개발 DB에 넣어주는 플로우를 선택했다. (모든 ..

Dockerfile 명령어 정리

Docker file FROM 베이스 도커 이미지 지정(흔히 OS, 프로그래밍 언어환경의 이미지를 선택) 반드시 한 번 이상 입력해야하며 Dockerfile 최상단에 위치합니다. FROM openjdk:8 FROM FROM : 공식 이미지는 Docker Hub 참조 RUN 쉘 커맨드를 도커 이미지에서 실행. 이미지 빌드 과정에서 필요한 cmd를 실행하기 위해 사용 RUN mkdir volume RUN npm install --silent RUN apk add binutils RUN ["executable", "param1", "param2"] RUN LABEL 도커 이미지에 메타데이터를 추가할 수 있습니다. key-value pair 형태입니다. docker inspect 명령어로 생성한 LABEL을 확..

MariaDB 명령어 정리 (테이블/유저/백업/복구)

테이블 관리 [테이블 생성] create database 디비명; [테이블 삭제] SET FOREIGN_KEY_CHECKS = 0; /*foreingkey 제약조건 비활성화*/ set @tables = null; select group_concat(table_schema, '.', table_name) into @tables from information_schema.tables where table_schema = '스키마명'; set @tables = concat('drop table ', @tables); prepare stmt from @tables; execute stmt; deallocate prepare stmt; SET FOREIGN_KEY_CHECKS = 1; /*foreingkey 제약..

쿠버네티스 - 도커와 쿠버네티스

들어가기 앞서.. 해당 포스트는 "쿠버네티스 인 액션"을 공부하며 중요하다고 생각되는 내용을 정리한 것입니다. 학습 목표 도커 컨테이너 플랫폼의 이해와 쿠버네티스의 아키텍처에 대해 학습한다. 도커 컨테이너 플랫폼 도커는 컨테이너를 여러 시스템에 쉽게 이식 가능하게 하는 최초의 컨테이너 시스템이다. 애플리케이션뿐만 아니라 라이브러리, 종속성, 심지어 운영체제 파일시스템까지도 도커를 실행하는 다른 컴퓨터에 애플리케이션을 프로비저닝하는 데 사용할 수 있다. 도커로 패키징된 애플리케이션을 실행하면 함께 제공된 파일시스템 내용을 정확하게 볼 수 있다. 어떤 환경이라도 같이 패키징된 파일시스템만 사용할 수 있다.(호스트 파일시스템을 못본다는 말은 아님.) 도커는 컨테이너 이미지가 여러 이미지에 공유되고 재사용될 수..

쿠버네티스 - 컨테이너/가상머신 차이

들어가기 앞서.. 해당 포스트는 "쿠버네티스 인 액션"을 공부하며 중요하다고 생각되는 내용을 정리한 것입니다. 학습 목표 쿠버네티스는 애플리케이션을 격리하는 기능을 제공하기 위해 리눅스 컨테이너 기술을 사용한다. 쿠버네티스를 공부하기 전 컨테이너 기본 개념과 가상머신과의 차이를 이해한다. 컨테이너 구글 클라우드의 설명을 빌려 컨테이너를 정의하자면 아래와 같다. 컨테이너는 소프트웨어 서비스를 실행하는 데 필요한 특정 버전의 프로그래밍 언어 런타임 및 라이브러리와 같은 종속 항목과 애플리케이션 코드를 함께 포함하는 경량 패키지입니다. - 컨테이너에서 실행되는 프로세스는 다른 모든 프로세스와 마찬가지로 호스트 운영체제 내에서 실행된다. (프로세스가 별도의 운영체제에서 실행되는 가상머신과 다르다.) - 그러나 ..