공부거리

  • 라우팅 테이블
  • ICMP는 핑을 위한 프로토콜(?)
  • NAT Gateway
  • Internet GateWay
  • Bastion
  • shell 스크립트 문법
  • 리눅스 Logger
  • flyway

next-step 2주차 강의

  • USE 방법론
  • 서버간 통신할때는 private ip로 하기. 공인 IP로 하게되면 인터넷으로 나갔다가 다시 들어오게됨.(비효율적임) 베스천에선 인터넷이라고 착각하게됨. 보안그룹이 복잡해짐.
  • bastion 서버를 나둔 이유는 DDOS같은 공격이 발생하더라도 접근할 수 있는 통로가 여전히 확보되어있다.
  • 가용성 : 시스템이 서비스를 정상적으로 제공할 수 있는 상태
  • 성능이 우수하다 = Users(동시접속자 수) , TPS(처리속도)), Time(응답속도))
  • Active User는 요청을 계속해서 보내는 사용자, Concurrent user 응답으로 받은 페이지를 계속해서 보는 사용자
  • 처리량 : 일정시간동안 얼마나 많이 처리할 수 있는지. Stress Test를 수행. Scalue out, Scale up으로 대응한다. 단일 사용자에 대한 응답속도가 느려진다면 scale up. 부하가 많아질 경우 응답속도가 느려진다면 scale out을 수행한다.
  • 부하 테스트 종류
    • smoke. 최소한의 부하로, 테스트 시나리오 오류를 검증. VUser 1 ~ 2로 구성.
    • load : 피크타임 트래픽을 계속해서 요청한다.
    • stress : 점진적으로 부하가 증가시킨다. 문제가 발생할때까지 부하를 증가 시킨다. 실제는 한번에 요청이 들어오는데 stress는 점진적으로 요청이 들어온다
  • 부하 테스트 종료
    • k6 : 시나리오 기반 테스트가 가능하다
  • 성능 목표를 우선 정해야 한다!!!
  • 실제 사용자가 접속하는 환경
  • 부하 테스트에서는 클라이언트 내부 처리시간이 배제되어 있음을 염두해 두어야한다.

배포 Shell Script 예시

 1#!/bin/bash
 2
 3## 색상 변수 설정
 4
 5txtrst='\033[1;37m' # White
 6txtred='\033[1;31m' # Red
 7txtylw='\033[1;33m' # Yellow
 8txtpur='\033[1;35m' # Purple
 9txtgrn='\033[1;32m' # Green
10txtgra='\033[1;30m' # Gray
11
12echo -e "${txtylw}=======================================${txtrst}"
13echo -e "${txtgrn}  << 스크립트 🧐 >>${txtrst}"
14echo -e "${txtylw}=======================================${txtrst}"
15
16## 변수 설정
17PROJECT_PATH=/home/ubuntu/nextstep/infra-subway-deploy
18
19## 프로젝트 경로로 이동
20function changeDirectoryToProject() {
21  echo -e "${txtgrn}>> Move to Project Directory${txtrst}"
22  cd $PROJECT_PATH
23
24}
25
26
27## 저장소 pull
28function pull() {
29  echo -e ""
30  echo -e "${txtgrn}>> PULL main BRANCH ${txtrst}"
31  git pull origin main
32}
33
34## gradle build
35function build() {
36  echo -e ""
37  echo -e "${txtgrn}>> BUILD${txtrst}"
38  ./gradlew clean build
39}
40
41
42## 프로세를 KILL 하는 명령어
43function killProcess() {
44  echo -e ""
45  echo -e "${txtgrn}>> KILL PROCESS${txtrst}"
46  PID=$(lsof -ti tcp:8080)
47  if [ -z "${PID}" ]
48    then
49      echo "> NO RUNNING PROCESS IN PORT 8080"  
50    else
51      echo -e "KILL ${PID}"
52      kill -9 "${PID}"
53  fi
54}
55
56## 애플리케이션을 실행
57function run() {
58  echo -e ""
59  echo -e "${txtgrn}>> RUN APPLICATION ${txtrst}"
60
61  JAR_PATH=$(find $PROJECT_PATH/build/libs/*jar)
62  JAR_NAME=$(basename "$JAR_PATH")
63  echo -e "Jar name is ${JAR_NAME}"
64
65  nohup java -jar -Dspring.profiles.active=prod ./${JAR_NAME} 1> ./subway.log 2>&1  &
66}
67
68changeDirectoryToProject;
69pull;
70build;
71killProcess;
72run;

@brainbackdoor 안녕하세요. 동규님.

nginx.conf 파일을 수정하고 image Build를 했었어야 했는데 그냥 기존의 image로 컨테이너를 생성했었습니다. ㅠㅠ

이 문제를 해결하는 과정에서 한가지 질문 사항있습니다.

Q. 아래 작성한 nginx.conf의 172.17.0.1:8080은 어떤 서버인가요??

upstream app {
    server 172.17.0.1:8080;
  }

listen 443을 처리하는 server의 proxy_pass를 보면 app의 server가 172.17.0.1:8080이 아닌 localhost:8080가 되어야 하는것 처럼 보이는데 혹시 중간에 제가 놓치고 있는 서버가 있는지 궁금합니다. (localhost:8080이라 생각한 이유는? reverse proxy가 443 포트로 오는 request를 받아서 실제로 구동중인 서버로 forwarding 해야하므로 )

server {
    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/92soojong.p-e.kr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/92soojong.p-e.kr/privkey.pem;

    # Disable SSL
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    # 통신과정에서 사용할 암호화 알고리즘
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;

    # Enable HSTS
    # client의 browser에게 http로 어떠한 것도 load 하지 말라고 규제합니다.
    # 이를 통해 http에서 https로 redirect 되는 request를 minimize 할 수 있습니다.
    add_header Strict-Transport-Security "max-age=31536000" always;

    # SSL sessions
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    location / {
      proxy_pass http://app;
    }
  }

docker run -it –rm –name certbot
-v ‘/etc/letsencrypt:/etc/letsencrypt’
-v ‘/var/lib/letsencrypt:/var/lib/letsencrypt’
certbot/certbot certonly -d ‘92soojong.o-r.kr’ –manual –preferred-challenges dns –server https://acme-v02.api.letsencrypt.org/directory

_acme-challenge.92soojong.o-r.kr ckl5NpVO6Uqr-1ckGKKG_VHMa1R1-aeubGEzWl6VOVM

cp /etc/letsencrypt/live/92soojong.o-r.kr/fullchain.pem ./ cp /etc/letsencrypt/live/92soojong.o-r.kr/privkey.pem ./