Dev 84

[Docker] 도커 환경에서 실행되는 Nodejs 애플리케이션

// index.js const express = require('express') const PORT = 8080; const HOST = '0.0.0.0'; const app = express() app.get('/', (req, res =>{ res.send('Hello World') } app.listen(PORT, HOST); console.log(`Running on http://${HOST}:${PORT}`) 이런 간단한 nodejs 애플리케이션이 도커환경에서 실행될 수 있도록 해보자. 즉, nodejs 앱을 만든 후, 그를 실행하기 위한 도커 이미지 생성 후 컨테이너에서 앱이 실행되도록 해볼 것이다. 1. 먼저 Node.js 앱을 만든다. // index.js const express = ..

Dev/DevOps, Infra 2021.01.28

[Docker] 도커 이미지 생성

도커 이미지란 도커 컨테이너를 만들기 위해 필요한 설정이나 종속성들을 가지는 소프트웨어 패키지이다. 참고한 한 블로그에서는 이미지를 붕어빵 도면, 컨테이너는 이 붕어빵 도면을 통해 만든 붕어빵 틀로 비유한다. 그러면 이 붕어빵 틀로 만든 붕어빵들은 어떤 환경이든, 우리나라에서 만들어지든, 미국에서 만들어지든,.. 같은 규격으로 동일하게 만들어질 것이다. 이러한 도커 이미지는 [Docker] 도커의 기본 이해에서 에서 적었듯이 이미 다른 사람이 만들어 놓은 이미지를 도커 허브에서 pull받아서 이용할 수도 있고, 직접 도커 이미지를 만들 수도 있고, 이 직접 만든 이미지를 도커 허브에 업로드 할 수도 있다. 나만의 도커 이미지를 어떻게 생성할 수 있을까? 1. 우선 도커 이미지를 만들기 위한 설정 파일인 ..

Dev/DevOps, Infra 2021.01.28

[Docker] 기본 도커 클라이언트 명령어 알아보기

1. 도커 이미지 내부에 파일 시스템 구조를 보는 명령어 $ docker run [이미지 이름] ls docker: 도커 Client 언급 run: 컨테이너 생성 및 실행 [이미지 이름]: 해당 컨테이너를 생성하기 위한 이미지 ls: 현재 디렉터리의 파일 리스트를 출력 ※ 현재 ls가 있는 이 4번째 자리는 원래 이미지가 가지고 있는 시작 명령어를 무시하고 이 4번째 명령어를 실행하게 한다. ※ 위의 명령어를 입력했을 때 excutable file not found. 라는 에러가 발생할 수도 있다. 이는 이미지 파일 스냅샷에 ls를 사용가능하게 하는 파일이 없기 때문이다. 2. 현재 실행중인 컨테이너들을 나열하는 명령어 $ docker ps docker: 도커 Client 언급 ps: process st..

Dev/DevOps, Infra 2021.01.27

[Docker] 도커의 기본 이해

도커란 한 마디로 정의하긴 어렵지만 컨테이너를 사용하여 응용프로그램을 더 쉽게 만들고, 배포하고, 실행할 수 있도록 설계된 도구. 즉, 컨테이너 기반의 오픈소스 가상화 플랫폼이며 생태계 핵심은 도커 이미지는 프로그램을 실행하는데 필요한 설정이나 종속성을 가지고 있으며, 도커 이미지를 이용해서 컨테이너를 생성하며, 도커 컨테이너를 이용하여 프로그램을 실행한다. 도커 사용의 흐름 도커 Client(CLI)에서 명령어를 입력하면 -> 도커 Server로 명령 요청이 가고, 처리된다. 예를 들어 docker run hello-world 명령어가 도커 Client에 입력이 되면 => 도커 Server는 이미지 Cache 보관 저장소에 해당 이미지가 있는지 찾아본다. 만약 캐시 보관 장소에 hello-world 이..

Dev/DevOps, Infra 2021.01.27

[DevOps] CI/CD

DevOps DevOps란 개발(Development)과 운영(Operation)의 합성어로, 개발과 운영을 하나로 합쳐서 일하는 철학, 도구, 환경, 문화 등의 조합을 나타낸다. 개발부터 배포까지 모든 단계에 자동화와 모니터링을 도입해서 더 짧은 개발 주기, 더 많은 배포 빈도, 안정적인 소프트웨어를 배포하자는 목표를 가지고 있다. 위의 설명을 보면 '자동화'와 '모니터링'이 필요한 것 같다. 그래서 데브옵스는 서버 구성, 배포, 테스트에 있는 반복작업을 최대한 자동화하여 배포 리소스를 줄이는 것이 시작이다. 데브옵스를 실천하는 방식은 여러가지가 있고, 그 중 One-Step 빌드와 배포가 있다. 빌드(Build)란 여러 개발자가 개발한 소스 코드 파일을 통합하고, 실제 동작 가능한 독립적인 S/W 변..

Dev/DevOps, Infra 2021.01.15

[NGINX] EC2에 nginx 설치 및 세팅

첫 번째 프로젝트로 진행한 SAFU 웹 서비스 을 배포하기 위해 서버 구축을 하려하며, '서버 단위의 로드 밸런서' 아키텍쳐 중 애플리케이션 서버가 (일단은)하나인 아래의 구성으로 진행하고자 한다. 순서는 1. EC2 배포 및 inbound 설정 2. ACM 에서 SSL 인증서 발급 3. ELB 생성 및 리스너 세팅 4. Route53의 도메인과 ELB의 인스턴스 DNS 연결 5. EC2에 nginx 설치 및 세팅 으로 진행 될 것이다. 이번에는 5. EC2에 nginx 설치 및 세팅 에 대해 정리해보고자 한다. NGINX란 서버 인스턴스에는 클라이언트의 요청을 처리해주는 서버 소프트웨어가 필요하다. 서버 소프트웨어는 크게 웹 서버와 웹 애플리케이션 서버(WAP; Web Application Server..

Dev/DevOps, Infra 2021.01.15

[RDS] 데이터베이스 서버 생성과 접속

첫 번째 프로젝트로 진행한 SAFU 웹 서비스 을 배포하기 위해 서버 구축을 하려하며, '서버 단위의 로드 밸런서' 아키텍쳐 중 애플리케이션 서버가 (일단은)하나인 아래의 구성으로 진행하고자 한다. [EC2] AWS를 이용한 서버 환경 이해 및 구축에 정리해둔 를 보면 단일서버의 여러 단점으로 인해 애플리케이션과 데이터베이스 서버를 분리하는 구조가 나왔다. 그리고 서버 단위의 로드 밸런서는 이런 구조로 되어 있다. 여기서 RDS로 데이터베이스 서버를 만들어보고자 한다. 1. Amazon RDS(Relational Database Services) Amazon RDS는 클라우드에서 관계형 데이터베이스를 간편하게 설정, 운영, 확장 할 수 있는 서비스이다. 이는 매우 비싸다. (프리티어는 RDS 단일 AZ(..

Dev/DevOps, Infra 2021.01.13

[CloudFront] CloudFront에 S3 버킷 배포하고 SSL Certificate설정

첫 번째 프로젝트로 진행한 SAFU 웹 서비스 의 client side를 배포하고자 한다. 순서는 1.ACM 에서 SSL 인증서 발급 2. S3를 이용한 정적 웹 사이트 호스팅 3. CloudFront에 S3 버킷 배포하고 SSL Certificate설정 4. Route 53에서 도메인 연동 으로 진행 될 것이다. 이번에는 3. CloudFront에 S3 버킷 배포하고 SSL Certificate설정에 대해 알아보고자 한다. CloudFront에 대해 배운 개념 정리와 앞서 CloudFront 웹 배포 생성 후 앞서 생성한 S3와 연결하는 것을 진행해보도록 하겠다. 1. 이해해야하는 개념 CDN(Contents Delivery Network)의 개념과 동작 원리에 대해서는 아직 공부가 더 필요하다.. 일..

Dev/DevOps, Infra 2021.01.12

[S3] S3를 이용한 정적 웹 사이트 호스팅

첫 번째 프로젝트로 진행한 SAFU 웹 서비스 의 client side를 배포하고자 한다. 순서는 1.ACM 에서 SSL 인증서 발급 2. S3를 이용한 정적 웹 사이트 호스팅 3. CloudFront에 S3 버킷 배포하고 SSL Certificate설정 4. Route 53에서 도메인 연동 으로 진행 될 것이다. 왜 CloudFront와 Route53을 사용하는가? ([ACM] 도메인 주소 생성 및 AWS Certification에 적어놓은 것을 다시 가져오자면) 왜냐면 SAFU 웹 서비스 을 배포단계에서 막혔던 부분이 sameSite issue였는데, 이유는 HTTPS 프로토콜을 사용하지 않아서 sameSite = none을 설정하더라도 역시 쿠키가 보내지지 않기 때문이다. 그래서 로그인 후에도 세션..

Dev/DevOps, Infra 2021.01.12

[Route 53] Route53의 도메인과 DNS 연결

첫 번째 프로젝트로 진행한 SAFU 웹 서비스 을 배포하기 위해 서버 구축을 하려하며, '서버 단위의 로드 밸런서' 아키텍쳐 중 애플리케이션 서버가 (일단은)하나인 아래의 구성으로 진행하고자 한다. 순서는 1. EC2 배포 및 inbound 설정 2. ACM 에서 SSL 인증서 발급 3. ELB 생성 및 리스너 세팅 4. Route53의 도메인과 ELB의 인스턴스 DNS 연결 5. EC2에 nginx 설치 및 세팅 으로 진행 될 것이다. Domain Name System이 뭐고, DNS의 구성 및 동작 원리 등은 매우 복잡하다. 그래서 다른 포스트에서 이에 대해 정리하고자 하며, 지금 해당 포스트에서는 4. Route53의 도메인과 ELB의 인스턴스 DNS 연결 에 대해서만 정리하고자 한다. 제목에 EL..

Dev/DevOps, Infra 2021.01.10