Skill Up/우아한테크캠프 Pro 4기

[우아한테크캠프 Pro 4기] 8주차 미션 - 안정적인 서비스 만들기

2022. 7. 28. 11:40

1단계 - 화면 최적화

1. Redis 적용하기

  • Cache(@Cacheable, @CachePut, @CacheEvict) - https://mangkyu.tistory.com/179
  • docker에 redis를 설치했기 때문에 접속은 docker exec -it [redis] bash 를 먼저 하고 작업
    • redis client 접속 : redis-cli
    • cache 데이터 조회 : keys *
    • cache 데이터 삭제 : del [keyid]
  • local NOAUTH Authentication required 오류 → docker desktop에 나오는 유저 정보를 application.properties에 입력함
    • redis://default:redispw@localhost:55000

2. Reverse Proxy 개선하기

  • nginx.conf 파일을 수정하여 1) gzip 압축, 2) cache, 3) TLS, HTTP/2 설정을 적용

1) gzip 압축

http {
  gzip on; ## http 블록 수준에서 gzip 압축 활성화
  gzip_comp_level 9;
  gzip_vary on;
  gzip_types text/plain text/css application/json application/x-javascript application/javascript text/xml application/xml application/rss+xml text/javascript image/svg+xml application/vnd.ms-fontobject application/x-font-ttf font/opentype;
}

2) cache

http {
  ## Proxy 캐시 파일 경로, 메모리상 점유할 크기, 캐시 유지기간, 전체 캐시의 최대 크기 등 설정
  proxy_cache_path /tmp/nginx levels=1:2 keys_zone=mycache:10m inactive=10m max_size=200M;

  ## 캐시를 구분하기 위한 Key 규칙
  proxy_cache_key "$scheme$host$request_uri $cookie_user";

    server {
        location ~* \.(?:css|js|gif|png|jpg|jpeg)$ {
            proxy_pass http://app;

            ## 캐시 설정 적용 및 헤더에 추가
            # 캐시 존을 설정 (캐시 이름)
            proxy_cache mycache;
            # X-Proxy-Cache 헤더에 HIT, MISS, BYPASS와 같은 캐시 적중 상태정보가 설정
            add_header X-Proxy-Cache $upstream_cache_status;
            # 200 302 코드는 20분간 캐싱
            proxy_cache_valid 200 302 10m;    
            # 만료기간을 1 달로 설정
            expires 1M;
            # access log 를 찍지 않는다.
            access_log off;
        }
    }
}    

3) TLS, HTTP/2 설정

http {
  server {
    listen 80;
    return 301 https://$host$request_uri;
  }
  server {  
  listen 443 ssl http2;

    ssl_certificate /etc/letsencrypt/live/[도메인주소]/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/[도메인주소]/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; 
  }
}
  • HTTP2.0은 SSL 계층 위에서만 동작합니다.

 

2단계 - 스케일 아웃 (with ASG)

1. Launch Template 작성하기

4) 배포 명령어 설정 이슈

  • 업로드한 deploy.sh에 gradlew 빌드 과정도 포함되어 있는데 최초 생성된 인스턴스에 java가 설치되어 있지 않아 배포시 오류발생
#!/bin/bash

sudo apt-get update
sudo apt install unzip 
curl "<https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip>" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

sudo -i -u ubuntu aws s3 cp s3://nextstep-camp-pro/[자신의스크립트] /home/ubuntu
sudo -i -u ubuntu chmod 755 /home/ubuntu/[자신의스크립트] 
sudo -i -u ubuntu /bin/bash /home/ubuntu/[자신의스크립트]
  • 해당 참고용 스크립트의 중간에 sudo apt-get -y install openjdk-8-jdk 추가

2. Auto Scaling Group 생성

2) 네트워크 설정 이슈

  • 서브넷을 선택했으나 새로 생성한 인스턴스들에 public ip가 생성되지 않는 이슈 → 전후 관계는 확실치 않으나 기존 public 서브넷에 대해 퍼블릭 IPv4 주소 자동 할당 활성화 설정

3) 로드밸런서 생성 이슈

  • 가이드에서는 새 로드 밸런서 생성해서 사용하라 되어 있었으나, 실제 생성시 설정이 맞지 않아 정상동작하지 않는 이슈 T_T
  • Auto Scaling 그룹 생성 과정에서 진행하지 말고 로드 밸런싱 콘솔에서 신규로 생성해서 쓰도록 하자
  • 다르게 생성되었던 부분은 체계와 가용 영역(새로 생성시 체계가 internet 으로 되어 DNS 이름역시 internet- 으로 생성됨)

4) DNS 설정 이슈

  • 기존 연결된 IP 정보는 삭제하고 CNAME에 위의 DNS이름을 추가

 

[추가] 페이징, Replication

  • @Bean 어노테이션 관련 Overriding bean definition for bean ~ 이슈가 있어 관련 설정 추가함
    • spring.main.allow-bean-definition-overriding=true
  • Replication 테스트 참고 : https://wave1994.tistory.com/177
  • DatabaseConfig.java 관련해서 인수테스트가 터지는 이슈가 있었음
    • 원인은 @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
    • @Profile("!test") 로 해결!
  • DB가 바뀌면서 데이터가 없었던 것과 관련하여 테이블 생성부터 기존 데이터 mysqldump, aws간의 scp, docker scp 방법 정리
    • https://kssong.tistory.com/2
    • https://devpouch.tistory.com/114
    • https://daechu.tistory.com/22
    • https://ict-nroo.tistory.com/40
반응형
'Skill Up/우아한테크캠프 Pro 4기' 카테고리의 다른 글
  • [우아한테크캠프 Pro 4기] 회고
  • [우아한테크캠프 Pro 4기] 7주차 미션 - 레거시 코드 리팩토링
  • [우아한테크캠프 Pro 4기] 6주차 미션(3) - 로깅, 모니터링
  • [우아한테크캠프 Pro 4기] 6주차 미션(2) - 부하테스트
프리미99
프리미99
train hard, big dream
프리미99
Rabbit in the Moon
프리미99
  • 분류 전체보기 (52)
    • Skills (20)
      • Java & Spring (7)
      • Framework (0)
      • Network (0)
      • Database (5)
      • Algorithm (7)
    • Skill Up (29)
      • dlwlrGOGO (7)
      • 우아한유스방 3기 (7)
      • 우아한테크캠프 Pro 4기 (15)
    • Tools (1)
      • Git (0)
      • IDE (1)
    • Project (0)
      • Spring 게시판 프로젝트 (0)
    • Review (2)
      • Seminar (2)
      • BOOK (0)

공지사항

최근 글

최근 댓글

전체
오늘
어제

블로그 메뉴

  • github
  • 글쓰기
  • 관리자
hELLO · Designed By 정상우.
프리미99
[우아한테크캠프 Pro 4기] 8주차 미션 - 안정적인 서비스 만들기
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.