(Virtual Private Cloud)
VPC virtual private cloud. Default vac 설정이 되어있는 컴퓨터는 방화벽이 필요없이 서로간에 연결이 가능하다 - 이때 사용되는 IP 가 내부 IP
밖에서 들어오기 위해 필요한 아이피가 외부 IP 이다
하지만 GCP 에서의 로드 밸런서 역할은 여기서 끝이 아니다. GCP 에서는 로드밸런서를 활용하여 https 즉 인증서 역할을 해준다. 클라이언트로 접속하는 유저들의 보안을 안전하게 책임져 주는 역할을 같이 해준다.
https/http
syn => syn + ack => ack
1. 클라이언트는 closed 상태, 서버는 listen 상태입니다.
2. 클라이언에서 서버로 연결을 요청하기 위해 syn 을 보낸다.
3. 서버에서 잘 받았으면, 잘 받았다는 ACK 데이터와 함께 SYN 데이터를 보낸다.
4. 여기서 서버는 SYN_RCV 상태로 변경된다.
5. 서버로 부터 ACK + SYN 을 받는다.
6. 클라이언트는 ESTABLISHED 상태로 바뀐다.
7. ACK 데이터를 서버로 보낸다
8. 서버도 ESTABLISHED 상태로 바뀐다.
도커스웜, 메소스, 쿠네티스 등등 도커를 관리해주는 역할을 한다, 일반적으로 가장 많이 사용되는 도커 관리자는 쿠버네티스이고 GCP도 쿠버네티스를 이용한다.
그럼 왜 도커 관리자가 필요한 것일까?
위 작업들을 쿠버네티스가 기본적으로 롤링베포를 통해서 실행시켜주고, 롤백까지도 해준다. 또한 자동 확장도 기본적으로 들어가 있다, 쿠버네티스가 자동 확장 하는 단위는 파드이다.
PODS 존재하는데, 파드안에 mysql 데이터 서버를 만들어 줄 수 있다. GCP 에서 데이터 베이스 서버를 만들어 줄때 내부 IP로 만들어 줘야 하는것 같다. 데이터 서버는 외부 IP 를 만들어 주면 노출이 될 가능성이 있기 때문에 내부 IP를 만들어주고 백엔드 서버와 연결해 준다. 이렇게 연결된 백엔드 서버가 외부 IP를 통해서 클라이언트와 연결이 가능한 것이다. 하지만 보통의 경우, 데이터 서버를 더욱 안적하게 유지 하기 위해서 GCP 안에 만들어져 있는 SQL을 사용한다. Redis, ElasticSearch 도 마찬가지로 GCP 안에서 따로 만들어줄수 있기 때문에, 이를 이용하는것이 더욱 안전하다고 볼 수 있다.
헬스체커가 확인을 하는 과정에서 오류가 났다. http에서 받아오는 경로중 rest-api 를 통해서 요청되는 경로 부분에서 http 방식으로 요청을 보내면 응답이 와야 하는데, 우리가 만들어놓은 백엔드에서는 ('/') 경로가 존재하지 않으니 응답이 없을수 밖에 없음. 그래서 우리 백엔드 서버에 임의로 하나 만들어줘야 했다. 멘토님 말로는 경로 수정을 해도 버그인지 아니면 의도적인지는 모르지만 경로 수정을 하고 난 후에도 계속 ('/') 로 인식한다고 해서 백엔드 서버를 건드려 주는게 더 확실해보인다고 한다.
수정후 오류가 없어지고 연결에 성공.
Apache JMeter 를 사용해서 무중단 배포가 이루어지는 확인해보자~!
Apache JMeter 의 몇가지 주요 기능들...
쓰레드 그룹 - https에서 post 요청을 보내서 서버를 부하시켜보자, 쓰레드들의 수 (사용자의 수), Ramp-up (단위: 초), 초단위로 보내는 요청의 수를 만든다.
HTTP 요청 - 요청을 보내는 쿼리문을 작성하는 곳
결과들의 트리 보기 - 요청이 잘 들어갔는지, 무중단 배포가 잘 이루어 졌는지 확인한다.
요약 보고서 - 평균적인 요청 속도가 기록되어 있다, 최소값, 최대값, 표준편차 등등
HTTP 헤더 관리자 - 요청이 json 타입으로 보내질수 있도록 설정해주는 부분.
아래 리스트는 서버 부하 테스트 도구들이다.
이 전체 부분을 자동화 하는 것이 CI/CD 가 되겠다. 잣
git add .
git commit -m '무중단배포'
git push origin master
docker-compose -f docker-compose.prod.yaml build
docker-compose -f docker-compose.prod.yaml push
gcp Kubernetes 접속
set image
이부분을 자동화 하는 것이 CI/CD 부분이다.
git push 를 하면 자동으로 배포까지 완료되게 만들어준다.
이부분을 살짝 수동적으로 바꾸면, 마지막 부분을 한번 더 최종적으로 검증후 배포가 진행되게 만들 수 있다.
만들어진 html 을 토대로, 각각의 부분을 세분화 해서 api 를 구현할 것인지에 대한 상세 설명서.
깃에서
리포지토리 안에
지금까지는 마스터에서 해주었지만 이제부터는 develop 브랜치를 따로 만들어서 사용한다.
디벨롭에서 피처 브랜치를 딴다- 즉 기능을 담당하는 브랜치를 만든다.
디벨롭 브랜치 아래에 피처 브랜치
피처들
철수: 게시글 등록 - 철수는 브랜치를 따는데 feature-boardwrite
영희: 상품등록 - 영희도 브랜치를 따는데 feature-productwrite
훈이: 결제하기 - 훈이도 브랜치는 딴다 feature-payment
피처를 만들어 놓은것을 디밸롭에 다 합친다.
이제 디밸롭이 준비되었다면, 배포를 준비한다. 여기서 바로 마스터 브랜치로 합치는것이 아니라 릴리스 브랜치를 따로 만들어서 이동시켜 준다.
realease branch - 여기서는 api 를 더 만드는게 아닌 버그를 찾아서 수정하고 업데이트만 해주는 과정을 해주는것이 암묵적인 룰이다.
마지막으로 master branch 로 합쳐서 -> 마스터 브랜치를 배포한다.
배포를 하면서 문제가 생기면 hotfix branch 가 필요로 한다. 버그가 critical 하다면 마스터 브랜치에서 핫픽스 브랜치를 따서, 파일을 그대로 가지고 이동을 하고, hotfixes 에서 고치고 다시 바로
어디서 브랜치를 땃느냐가 중요하다. 어디서 따오냐에 따라 복사가 다르게 된다고 생각하면 된다.
git logs
git remote -v