사용자 정의 변수 소개 변수의 종류 MySQL의 변수는 누가 생성하는지에 따라 시스템 변수와 사용자 변수로 구분된다. 변수의 적용 범위가 MySQL 전체인지 아니면 커넥션 범위인지에 따라서 글로벌 변수와 세션 변수로 나뉘기도 한다. 또한 동적으로 서버의 중단 없이 변수를 변경할 수 있는지에 따라 동적 변수와 정적 변수로 구분되기도 한다. 사용자 정의 변수는 말그대로 사용자 변수이면서, 해당 커넥션에서만 유효한 세션 변수이고, 언제든지 값을 변경할 수 있기 때문에 동적 변수로 볼 수 있다. 사용자 정의 변수의 사용 하나의 커넥션에서 정의된 사용자 변수는 다른 커넥션과 공유되지 못하고 해당 커넥션에서만 사용할 수 있다. MySQL의 사용자 변수 이름은 @로 시작한다. 사용자 정의 변수에 할당할 수 있는 값의..
MySQL의 파티션 파티션이란 MySQL 서버의 입장에서는 데이터를 별도의 테이블로 분리해서 저장하지만 사용자 입장에서는 논리적인 하나의 테이블로 사용할 수 있게 하는 기능을 의미한다. 파티션을 사용하는 이유 하나의 테이블이 너무 커서 인덱스의 크기가 물리적인 메모리보다 훨씬 큰 경우 단일 INSERT나 SELECT를 빠르게 처리할 수 있다. 파티션을 나누면 인덱스도 각각 생성되기 때문에 작은 인덱스 크기로 인해 메모리에서 빠르게 쿼리 작업을 진행할 수 있다. 데이터 특성 상 주기적인 삭제 작업이 필요한 경우 효율적으로 관리할 수 있다. 로그 데이터가 대표적인 예시다. 파티션의 INSERT, UPDATE INSERT INSERT 되는 칼럼 중 파티션 키인 칼럼을 이용해 파티션 표현식을 평가하고, 해당 파..
Nginx 소개 Nginx는 널리 쓰이는 웹 서버 중 하나입니다. 동적 처리를 주로 담당하는 WAS(Web Application Server)와는 다르게 웹 서버(Web Server)는 정적 자원에 대한 응답을 내려주는 역할을 가지고 있는데요. Nginx는 정적 자원의 처리 외에도 proxy 서버의 역할이나, reverse proxy 서버의 역할 등 여러방면에서 높은 활용도를 보여줍니다. 여기서는 Nginx가 CodeDeploy Agent에 의해 두 WAS간의 스위칭 역할을 담당하도록 구성해 보겠습니다. Nginx 설치와 설정 먼저 Nginx를 설치하겠습니다. EC2에 ssh로 접속하여 다음 커맨드를 수행합니다. sudo yum install nginx 그럼 설치가 되는 듯 하였으나, 다음과 같이 Ama..
CodeDeploy 소개 전 시간에 이어 다음으로는 Github Actions 에서 CodeDeploy 에게 S3에 있는 jar 파일을 가져가서 담당한 배포 그룹의 EC2에 배포해 줘! 라는 명령을 내릴 수 있도록 구성해 보겠습니다. 먼저 CodeDeploy에 대해 간단하게 소개하자면, 애플리케이션 배포를 자동화하는 AWS 의 배포 서비스입니다. EC2, AWS Lambda 와 같은 서비스에 배포를 할 수 있고, 현재위치 배포나 블루/그린 배포와 같은 무중단 배포를 지원합니다. 한 번 구축해 놓으면 이후로는 배포가 매우 간편하고 AWS 콘솔을 통해 제어하면서 배포 과정을 확인할 수 있기 때문에 많은 분들이 이 서비스를 이용하여 배포 플로우를 구축합니다. 조금 더 자세한 설명은 CodeDeploy 레퍼런스..
개요 안녕하세요! 이번 시리즈에서는 제목에서와 같이 Github Actions 와 CodeDeploy, 그리고 Nginx 를 사용하여 하나의 서버에서 최소 규모의 무중단 배포를 진행하는 방법에 대해 정리해보려고 합니다. 관련 코드는 Github 저장소 에서 확인하실 수 있습니다. 전체 흐름도 CI/CD 와 같이 인프라, 배포 환경을 구축하기 위해서는 내가 만들고자 하는 전체 그림을 숙지하는 것이 가장 중요하다고 생각합니다. 그래야 진행삽질 중에 막혔을 때 어느 부분이 문제일지 빠르게 유추해 볼 수 있기 때문입니다. 이 그림이 지금부터 하나씩 만들어 볼 배포 플로우입니다. Github Actions에서 프로젝트 빌드 후, jar 파일을 압축해서 S3에 업로드합니다. 이어서 CodeDeploy에게 S3에 있..