브로셔 제작
아키텍쳐
기술적 의사결정
트러블 슈팅
유저 테스트 반영 내용
•
게시글에 이미지(최대 4장, 각 10MB 이내) 첨부
•
작성자 프로필 조회 기능
•
지도 캡처 후 자동 첨부 기능
•
게시글 이미지 첨부 시 리사이징 추가
•
나의 글 조회, 내가 좋아요 한 글 조회 페이지 추가
UT 설문자 선정
이번주 시도 사항
•
Jacoco 56% → 60% // 카카오, 네이버
•
각자 수동 배포, 무중단배포, (+https) 한 번 해보기
•
이미지 파일 리사이즈 - 해상도 조절
•
QueryDsl 적용
게시글 신고
N+1 문제 있는 것 같음
댓글 신고
•
httpOnly 설정으로 보안 강화 → 자바스크립트로 접근이 불가능해지면서 프론트단에서 쿠키 삭제가 불가능함. 적용 x
•
redis 데이터 삭제 문제
◦
access token이 만료된 후 refresh token으로 자동 재발급하지 못하고 403에러가 뜬다.
◦
우리 해킹당했어 ㅠㅠ
•
cd용량이 큰 이미지를 올렸을 때 서버가 느려지면서 버튼을 여러 번 누르면 글이 여러 개 등록됨 > 파일 리사이징으로 용량 큰 이미지를 쳐냄 (근본적인 문제를 쳐냈음 아주 나이스)
•
관리자 게시글 및 댓글 삭제 버튼 추가, 이미지 리사이징 :: 상율님
•
브로셔 내용 정리 :: 정욱님
•
readme 작성 :: 진환님
•
정적 파일 분리 작업 :: 재한님
•
발표 ppt, 대본 작성 :: 예진님
•
영상 제작 :: 진환님
•
부하 테스트 (nGrinder, Jmeter)
•
최종 발표 준비
◦
(녹화)발표자: 김진환
◦
발표자료: 이예진
◦
(실시간) 발표 파트 분배
발표 내용
Jacoco 문서 - 커버리지: 60%
이미지
서버 생성에서 무중단배포까지
1.
AWS EC2 인스턴스 생성
2.
보안그룹 설정
•
인바운드 규칙: 22, 8080, 8081, 6379, 80, 443(https 적용하는 경우) 추가
•
위의 포트에 대해서 IPv4와 IPv6을 열어준다.
3.
탄력적 IP 주소 할당
4.
RDS와 연결
•
보안규칙 EC2와 연결
•
인바운드 규칙 3306 열기
(배포 서버인 경우)
5.
Route 53 도메인에 ip 추가
•
EC2 터미널 접속
(pem 키가 있는 곳으로 이동 후,
EC2 인스턴스 연결 > SSH 클라이언트 > 밑에 ssh~ 복사 후 터미널에 붙여 넣기)
6.
Swap area 설정
•
부족한 메모리를 커버하기 위해 가상 메모리 기법 적용
•
우리의 하드 디스크 일부를 swap area로 쓰면서 메모리 문제를 보완
sudo dd if=/dev/zero of=/swapfile bs=128M count=16
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo swapon -s
sudo vi /etc/fstab
# 파일의 끝에 /swapfile swap swap defaults 0 0 을 추가하고 저장합니다.
Bash
복사
7.
서버 시간 설정
sudo timedatectl set-timezone Asia/Seoul
date # 변경 확인
Bash
복사
8.
Docker 설치
sudo apt update
sudo apt upgrade
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo docker -v # 버전 확인
sudo systemctl enable docker # 실행
sudo service docker start # 활성화
sudo service docker status # 상태 확인
Bash
복사
9.
Nginx 설치
sudo apt install nginx # 설치
sudo service nginx start # 시작
sudo service nginx status # 상태 확인
sudo service nginx restart # 재가동
Bash
복사
10.
Docker-compose 설치
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose -v # 버전 확인
Bash
복사
11.
docker.sock 권한 부여 + docker 로그인
sudo chmod 666 /var/run/docker.sock
Bash
복사
12.
redis를 6379 포트로 도커 이미지로 실행 OR ec2에 redis 설치
•
비밀번호 설정 필요
docker run -v /path/on/host:/data -d --name my-redis -p 6379:6379 redis redis-server --appendonly yes --requirepass [password]
Bash
복사
sudo docker exec -it my-redis redis-cli
# 비밀번호 입력 요청
auth [password]
Bash
복사
13.
수동 배포
# jar파일이 있는 곳에 Dockerfile 생성
FROM openjdk:17
COPY Sappun-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]
# cd 명령어를 통해 도커 파일이 있는 곳으로 터미널 이동
docker build --no-cache -t [도커허브_아이디]/[이미지이름] .
docker images
docker push [도커허브_아이디]/[이미지이름]
# 무중단 배포 적용 안하는 경우 ec2 서버 터미널에서
sudo docker pull [도커허브_아이디]/[이미지이름]
# 환경변수 설정 .env 파일 저장 후 실행
sudo docker -i -t -d --env-file ./[환경변수파일].env -p 8080:8080 [도커허브_아이디]/[이미지이름]
JavaScript
복사
무중단 배포
14.
docker-compose.yml 작성
sudo vim docker-compose.yml
Bash
복사
내용
15.
16.
/etc/nginx에 nginx.green.conf 와 nginx.blue.conf 파일을 생성
sudo vim nginx.green.conf
Bash
복사
내용
실행
./deploy.sh
Bash
복사
•
CI/CD를 적용한 경우
# 중간에 추가
- name: Deploy to prod
if: contains(github.ref, 'develop') || contains(github.ref, 'main')
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST_NAME }}
username: ${{ secrets.USER_NAME }}
key: ${{ secrets.AWS_PRIVATE_KEY }}
port: ${{ secrets.AWS_PORT }}
script: |
docker pull ${{ secrets.DOCKER_USER }}/sappun:latest
chmod 777 ./deploy.sh
./deploy.sh
docker image prune -f
Bash
복사
17.
도메인을 구입하여 https를 적용하는 경우
•
기존 덮어쓰여진 etc/nginx/nginx.conf 파일 삭제
sudo rm nginx.conf
Bash
복사
•
새로 생성
sudo vim nginx.conf
Bash
복사
내용 복사 붙여넣기
•
nginx 재시작
sudo service nginx restart
Bash
복사
•
SSL 적용(certbot 설치)
sudo snap install certbot --classic
sudo certbot --nginx
Bash
복사