본문 바로가기

DevOps12

오라클 클라우드(OCI) 자율 운영 데이터베이스 연결하기 이번에 개인 프로젝트를 진행하면서 무료로 사용할 수 있는 오라클 클라우드의 자율운영 데이터베이스(오라클 DB)를 사용하게 되었습니다. 인텔리제이에서 개발하면서 내부 테이블 확인 등 쿼리를 날릴 수 있도록 데이터베이스 연동이 필요하다고 생각하였고 이를 위해 했던 삽질들을 기록하게 됐습니다. 여기서는 Database를 생성하는 과정이 아닌 생성후 DB 연결과정만 다룹니다. 삽질1, OCID를 통해 연결하기 AWS에서 RDS로 DB를 연결할때 사용했던 것 처럼 OCID가 DB의 EndPoint 주소라고 생각했고 다음과 같이 Host에 OCID를 적고 User 정보를 입력했더니 연결에 실패했었습니다. 검색해보니 Oracle에 연결할 때 전자 지갑이라는 것이 필요하다는 것을 알게 되어 전자 지갑으로 연결하는 방법.. 2022. 9. 28.
Oracle Cloud에서 HTTP 포트 열기 Oracle Cloud를 사용해서 웹 서비스를 만들경우 기본적으로 ICMP, SSH만 열어놓기 때문에 HTTP, HTTPS 요청은 거부하게 됩니다. 이를 해결하기 위해서 Oracle cloud에서 HTTP, HTTPS를 제공하기 위해 해당 포트를 여는 방법을 정리해보겠습니다. 먼저, 오라클 클라우드 콘솔로 접속합니다. 네트워크 관련 설정을 위해 가상 클라우드 네트워크(VCN)로 이동합니다. 현재 인스턴스가 속해있는 VCN을 선택해서 들어갑니다. (따로 설정하지 않았다면 기본으로 생성되어있는 것 한개만 존재합니다.) VCN에 들어가면 좌측에 리소스에 네트워크 보안 그룹으로 이동합니다. 새로운 규칙을 생성하기 위해 "네트워크 보안 그룹 생성" 버튼을 눌러 새로운 보안 그룹을 생성합니다. 네트워크 보안그룹에 .. 2022. 9. 25.
Docker-compose 실행시 .env 파일을 읽어오는 중에 Permission Denied 에러 프로젝트 진행을 위해 Oracle Cloud(Ubntu 20.04)에서 docker-compose 파일을 작성하던 중 다음 에러가 발생했습니다. ... File "/snap/docker/1779/lib/python3.6/site-packages/dotenv/main.py", line 54, in _get_stream with io.open(self.dotenv_path, encoding=self.encoding) as stream: PermissionError: [Errno 13] Permission denied: './.env' .env 파일에 접근하는데 권한이 부족하다는 메세지를 확인해서 처음에는 chmod 명령을 사용해 .env 파일에 모든 권한을 부여했습니다. chmod 777 .env 하지만 여.. 2022. 9. 25.
jenkins를 사용하여 배포중 EC2 인스턴스가 터지는 증상 발생 해결법 CI/CD 파이프라인을 구축한후 EC2 인스턴스에 배포 후 프로젝트를 진행중에 권한이 있는데도 불구하고 계속 다음과 같이 접근거부가 되었습니다. 인스턴스를 재부팅하면 해결되었지만 배포할때마다 계속 서버가 내려간다면 서비스가 힘들어지므로 원인을 찾아보았습니다. 그래서 배포 중에 인스턴스 상태를 모니터링으로 확인해보았는데 배포가 진행될때 CPU 사용률이 99.9%에 도달하는 것을 확인할 수 있었습니다. 왜 이렇게 많이 트래픽이 발생했는지 확인해보았는데 현재 인프라 구성이 다음과 같이 되어있었는데 MySQL 컨테이너가 너무 많은 리소스를 차지하고 있었습니다. 인스턴스는 현재 메모리로 부족해서 스왑메모리로 처리하려고 했으나 스왑 메모리를 처리하는 kswapd0 프로세스가 너무 많은 CPU를 사용하여 인스턴스가 .. 2022. 8. 27.
무중단 배포 적용하기 이번에 프로젝트를 진행하면서 기능 구현이 빈번하게 일어나면서 사용중에 서버가 다운되는 현상이 자주 발생하였습니다. 이러한 사용중 불편함을 해소하고자 무중단 배포를 적용하여 사용 중에 서비스를 사용하지 못하는 상황을 막기 위해 도입하기로 결정했습니다. 무중단 배포란? 먼저, 무중단 배포 이전에 배포란 무엇일까요? 배포란 새로 개발된 코드를 패키징하여 서버에 새로운 버전의 애플리케이션을 실행시키는 행위를 의미합니다. 배포시에 새로운 버전의 애플리케이션을 실행하기 위해 기존에 존재하던 애플리케이션을 종료해야 하는데 이 과정에서 사용자에게 서비스가 되지 않는다면 사용자들은 불편함을 느끼게 될 것입니다. 이런 상황을 피하기 위해 서비스를 중단하지 않고 배포하는 행위인 무중단 배포를 하게 되었습니다. 무중단 배포는.. 2022. 8. 24.
웹 사이트에 HTTPS 적용하기 여태까지 진행한 프로젝트들에서는 HTTP로만 통신을 진행했었는데 HTTP는 따로 설정을 해주지 않아도 사용할 수 있어 편하게 사용할 수 있지만 데이터를 평문으로 주고받기 때문에 애플리케이션이 보안에 취약한 상태가 됩니다. HTTPS를 사용하지 않고 HTTP를 사용할 경우 다음과 같은 보안 문제가 발생할 수 있습니다. Sniffing(스니핑) TCP/IP를 통해 통신하는 방식은 여러 경로(스위치, 라우터)를 거쳐서 전송되기 때문에 평문으로 전송하는 패킷은 중간에 도청이 가능해집니다. 해커가 위장하는 경우 확인할 방법이 없음 HTTP의 경우 요청을 보내는 상대가 누구인지 확인하는 처리를 하지 않습니다. 이는 누구든지 요청이 가능하다는 것을 의미합니다. HTTP만으로는 의미없는 요청을 수신하지 않는다거나 특정.. 2022. 8. 19.
Github actions + Jenkins를 통한 자동 배포 구현 AWS EC2에서 Docker로 Jenkins 실행 이전에 Github Actions를 이용해 CI를 구성했습니다. https://yongc.tistory.com/22 도커 허브에 올린 도커 이미지를 통해 자바 애플리케이션을 배포해봅시다. AWS EC2 인스턴스 생성하는 과정과 접속하는 과정은 생략하고 접속한 상태라고 과정하고 적겠습니다. 환경은 Ubuntu 18.04 에서 진행합니다 먼저 패키지 저장소를 최신으로 업데이트합니다. sudo apt-get -y update EC2에 도커를 설치합니다. sudo apt-get -y install docker.io EC2에서 docker 명령을 사용할때마다 root 권한을 이용하여 실행할 필요가 없도록 docker 그룹에 유저를 추가합니다. sudo userm.. 2022. 8. 14.
JIB을 이용한 컨테이너 배포 JIB 이란? 애플리케이션을 컨테이너화할 경우 보통 Dockerfile에 애플리케이션을 실행시킬 수 있는 내용을 정의하고 docker build를 통해 도커 이미지로 생성합니다. 자바 애플리케이션의 경우 애플리케이션을 빌드해서 jar 혹은 war 형태로 만든 후 Dockerfile을 작성해서 빌드된 결과물을 실행시키는 동작을 하도록 할 것입니다. 즉, 자바 빌드와 도커파일 빌드의 두번의 과정이 일어난다고 할 수 있습니다. 다음 그림의 첫번째는 자바 빌드와 도커파일 빌드를 두번하는 형태고 두번째는 Jib을 사용하는 빌드 흐름입니다. 위와 같이 Jib을 사용하면 프로젝트를 빌드함과 동시에 컨테이너 이미지까지 만들어서 원하는 레포에 푸시해 줄 수 있습니다. ./gradlew jib Jib 설정하기 jib을 사.. 2022. 8. 2.