본문 바로가기
TIL

Node.js 복습 (5) ( https )

by 황민도 2024. 7. 13.

내일배움캠프 스파르타 코딩클럽

 

[ 도메인 연결 ]

 

< 1. 가비아 접속 >

우측 하단 [ 관리 ] 클릭


네임서버 [ 설정 ] 클릭



< 2. AWS Route53 접속 >

 

DNS 관리 [ 호스팅 영역 생성 ] 클릭


도메인 이름을 가비아 도메인 네임 [ mdstart.shop ] 입력 후 [ 호스팅 영역 생성 ] 클릭


유형 NS(Name sever) 로 생성된 레코드를 볼 수 있다.


< 3. 가비아 입력 >

1. 위 AWS Route53 레코드에서 생성된 라우팅 대상을 가비아 호스트 명에 1차부터 4차까지 그대로 입력해준다.

대신 주의사항은 복사 붙여넣기 할때 라우팅 대상의 맨 끝부분 . 은 빼고 복사 후 붙여 넣어준다.

 

2. 소유자 인증을 완료해준다.

3. 맨 하단 [ 적용 ] 클릭

위와같은 화면이 출력된다.

 


< 4. whatsmydns.net 접속 >

 

1. 화면 좌측 상단에 도메인 네임 [ mdstart.shop ] 입력, 유형 선택창 [ NS ] 선택, [ Search ] 클릭

상당한 시간이 소요되고 이때 로드 밸런서 작업을 해야한다. 

2. 시간이 한참 지나 다시 [ 새로고침 ] 하여 확인을 하면

3. 상단 같이 gabia 로 되어있는 것은 하단 처럼 awsdns 로 모두 변경 된다.

 


< 5. AWS Route53 재접속 >

DNS 관리 [ 호스팅 영역 ] 클릭


[ 호스팅 영역 이름 ] 링크 클릭


우측 중앙 [ 레코드 생성 ] 클릭


중앙 [ 별칭 ] 활성화

1. [ Application/Classic Load Balancer에 대한 별칭 ] 선택

2. [ 아시아 태평양(서울) ] 선택

3. 아래에서 생성했던 [ 로드 밸런서 DNS 이름 ] 선택

4. 우측 하단 [ 레코드 생성 ] 선택


< www 사용시 >

 

아래내용은 정상동작하지 않습니다. 하단 빨간색 글 보다 아래인 글 처럼 하여야 정상 동작 합니다.

우측 중앙 [ 레코드 생성 ]  클릭


1. subdomain 값을 [ www ] 로 입력

2. 레코드 유형을 [ CNAME - 다른 도메인 이름과 일부 AWS 리소스로 트래픽 라우팅 ] 선택

3. 값에 [ 도메인 값 ] 입력

위와 같이 하였는데 CNAME 은 정상 동작하지 않음을 확인함 


1. 정상동작을 위한 편집을 하기위해 편집할 [ 레코드 이름 ] 을 체크

2. 우측 사이드 바 [ 레코드 편집 ] 클릭

3. 위와 같이 처음 레코드 생성했을 때 처럼 동일하게 설정해주고

4.  subdomain 값 만 [ www ] 로 입력

5. [ 저장 ] 클릭

이렇게 완료 하면 모두 완료 된다.

 

 

 


[ 로드 밸런서 , https]

 

 

< 로드 밸런서 >

 

원래 목적 :

로드 밸런서는 네트워크 트래픽을 여러 서버로 분산시켜주는 장치이다.

트래픽이 특정 서버 하나에 집중되면 해당 서버의 성능 저하나 다운타임이 발생할 수 있다.

이를 방지하기 위해, 로드 밸런서는 들어오는 요청을 서버에 고르게 분배하여 각 서버의 부하를 최소화 하고

시스템의 가용성과 성능을 향상시킨다.

예를 들어, 로드 밸런서는 1번, 2번, 3번 서버가 있을때  각 서버로 트래픽을 순차적으로 또는 부하에 따라 분배하여

효율적인 자원 활용을 도와준다.

 

우리 목적 :

aws 에서 로드밸런서가 제공하는 유용한 기능중 하나가 https 로 서비스를 제공할 수 있게 인증서를 제공해주는 기능제공

 

 

< 1. aws EC2 접속 >

좌측 사이드 바 로드 밸런싱 내의 [ 로드밸런서 ] 클릭


우측 상단 [ 로드 밸런서 생성 ] 클릭


로드 밸런서 유형 중 Application Load Balancer [ 생성 ] 클릭


기본 구성 내의 로드 밸런서 이름 기입


< 2. 잠시 다른 새 페이지 EC2 접속하기 >

좌측 사이드 바 인스턴스 내의 [ 인스턴스 ] 클릭


인스턴스 중앙 부분 가용 영역 확인하기


< 3. 다시 원 페이지 돌아오기 >

매핑 가용 영역을 확인 한 영역과 일치한 것 [ ap-northeast-2c ] 체크, 나머지 1개는 [ ap-northeast-2a ] 체크

주의 : 

예전에는 4가지 모두 체크해도 상관 없었으나

2024년 초에 aws IP 정책이 변경되면서 IP 하나 생성 할때마다 추가적인 요금이 발생함

그래서 최소한으로 선택해주는 것을 권장


 

보안 그룹 하단 설명중 [ 새 보안 그룹을 생성 ] 클릭

 


< 4. 보안 그룹 생성 페이지 >

위와 같이 보안 그룹 이름,  설명  기입


좌측 하단 [ 규칙 추가 ] 클릭 을 두 번 하여 위와 같이 규칙을 두 개 생성

 

1. 유형 선택 : 첫번째는 [ HTTP ], 두번째는 [ HTTPS ] 를 선택

2. 소스 선택 : 둘 다 [ Anywhere-IPv4 ] 선택


우측 하단 [ 보안 그룹 생성 ] 클릭


< 5. 다시 원 페이지 돌아오기 >

1. 우측 중앙 [ 새로고침 ] 클릭

2. [ default ] 삭제

3. 생성한 보안 그룹 [ sparta-node-alb-sg ] 선택


1. 좌측 하단 [ 리스너 추가 ] 를 클릭 하여 위와 같이 만들고

2. 리스너 창 내의 대상 그룹 선택을 위해 하단 [ 대상 그룹 생성 ] 클릭


< 6. 대상 그룹 생성 페이지 >

유지

 

[ 대상 그룹 이름 ] 기입 후 나머지 유지


상태 검사 경로 :

대상 그룹과 연결 되어있는 EC2 인스턴스가 정상적으로 존재하는지 확인하기 위한 경로

위와같이 [ /health-check ] 기입

import express from 'express';
import 'dotenv/config';
import { SERVER_PORT } from './constants/env.constant.js';
import { apiRouter } from './routers/index.js';
import errorHandler from './middlewares/error-handler.middleware.js';
import { HTTP_STATUS } from './constants/http-status.constant.js';
import logMiddleware from './middlewares/log.middleware.js';

const app = express();

app.use(express.json());

app.use(logMiddleware);

app.get('/health-check', (req, res, next) => {
  res.status(HTTP_STATUS.OK).json({ message: "I'm healthy" });
});

app.use('/', apiRouter);

app.use(errorHandler);

app.listen(SERVER_PORT, () => {
  console.log(`${SERVER_PORT}번 포트로 서버가 열렸습니다.`);
});

위와 같은 코드로 status(200) 을 응답하게 끔 작성을 하면 된다.


우측 하단 [ 다음 ] 클릭


1. 좌측 상단 인스턴스 [ 체크 박스 ] 체크

2. 중앙 선택한 인스턴스를 위한 포트 입력 (현재 코드로 사용하는 서버 포트) [ 3000 ] 입력

3. 중앙 [ 아래에 보류 중인 것으로 포함 ] 클릭

3. 하단 대상이 위와 같이 추가 되면 [ 대상 그룹 생성 ] 클릭


< 7. 다시 원 페이지 돌아오기 >

 

1. 우측 대상 그룹 선택 창 [ 새로고침 ] 클릭

2. 앞전에 HTTP 대상 그룹 생성 했던 [ 대상 그룹 이름 ] 을 위와 같이 HTTP, HTTPS 둘 다 선택


인증서 부분 하단 [ 새 ACM 인증서 요청 ] 클릭


< 8. 인증서 요청 >

좌측 사이드 바 [ 인증서 나열 ] 클릭 후 우측 상단 [ 요청 ] 클릭


우측 하단 [ 다음 ] 클릭


1. [ 도메인 이름 ] 입력

2. [ 이 인증서에 다른 이름 추가 ] 클릭

3. 위와 같이 입력 하면 * 부분에 어떠한 입력이 들어오던 사용할 수 있게끔 설정 할 수 있다.


우측 하단 [ 요청 ] 클릭


 

[ 인증서 ID 모자이크 부분 ] 링크 클릭


우측 중앙 [ Route 53 에서 레코드 생성 ] 클릭


설명 :

현재 도메인이 내 소유가 맞는지 검증하기 위해서 이 도메인에 유형 CNAME 이라는 것을 추가 할 수 있는지 없는지 검증

 

우측 하단 [ 레코드 생성 ] 클릭


생성 후 좌측 사이드 바 [ 인증서 나열 ] 클릭 후 대기

어느 정도 시간이 지나 인증서 [ 새로고침 ] 클릭시 발급됨을 확인 할 수 있다.


< 9. 다시 원 페이지 돌아오기 >

 

1. 인증서 [ 새로고침 ] 클릭

2. 앞전에 발급한 인증서 [ 도메인 이름 ] 클릭


나머지 모두 변경 할 것 없이 우측 하단 [ 로드 밸런서 생성 ] 클릭


1. 좌측 사이드 바 로드 밸런싱 내의 [ 로드 밸런서 ] 클릭

2. 상태 프로비저닝 중 표시 확인 후 대기

3. 시간이 어느정도 지난 후 로드 밸런서 [ 새로고침 ] 클릭


 

1. [ 로드 밸런서 이름 ] 체크

2. 하단 세부정보 바로 우측에 [ 리스너 및 규칙 ] 클릭

3. 하단에 위와 같은 리스너 및 규칙이 표시 되면 기본작업 하단에 있는 대상 그룹으로 전달 아래

[ sparta-node-alb-tg ] 링크 클릭

1. 하단 등록된 대상 상태 확인에 [ Healthy라고 표시 되어야 정상적으로 동작함을 의미함

( 현재 도메인 및 포트를 제대로 사용하지 않고 있는 상태라 Unhealthy 로 표시 되고 있다. )


1. 좌측 사이드 바 로드 밸런싱 내의 [ 로드 밸런서 ] 클릭

2. 우측 하단 DNS 이름 [ 복사 ] 클릭

3. 인터넷 주소창에 붙여넣고 /health-check 까지 기입 한다면

app.get('/health-check', (req, res, next) => {
  res.status(HTTP_STATUS.OK).json({ message: "I'm healthy" });
});

 

위 코드로 인해 message: "I'm healthy" 가 표시 될 것이다.

 

 

 

'TIL' 카테고리의 다른 글

TypeScript 강의 (2) ( tsconfig.json, .d.ts )  (0) 2024.07.16
TypeScript 강의 (1)  (0) 2024.07.16
Node.js 복습 (4) ( dotenv, express )  (0) 2024.07.10
Node.js 복습 (3) ( 서버 시작 )  (0) 2024.07.09
Node.js 복습 (2) ( app.js, mongooseSchema )  (0) 2024.07.05