코드캠프 팀프로젝트] 6일차 / 2022-11-03

haengbeok·2022년 11월 4일
0

오전 회의 내용

  1. 등산로
    • 웃긴게 사용자가 좌표 정보를 알아야돼요
    • 시간 더 필요함
  1. 예약 시스템
    • 링크 연결로 진행
    • 대피소 위치를 표기할수 있는 API 명확하게 할 것
  1. API
    • 회원가입/로그인
      • 중복확인 (이메일, 닉네임) API
      • 인증번호 받기 API
      • 성별 라디오 버튼
      • 프로필 이미지는 선택사항
      • 회원가입하면 기본 포인트 1000 point
      • 비밀번호 검증 로직은 프론트에서 해줌
    • 크루보드
      • fetchCrewBoards에 Page 추가해서 9개씩 묶기
      • 날짜 지나면 조회 안되게 로직 추가
      • 성별 라디오 식 → DB 숫자로 바꾸자
      • 성별이 남자만이면 여자가 신청 못하게 막아야함
      • 성별로 조회 필터 일단은 만들어 놓자 (안쓸수도 있음)
      • 약속시간 데이터 나눠서 저장하자(날짜, 시간) - 스트링 타입
      • 입력값은 모두 필수값
      • 글작성 시 500원, 참여 시 200원 (돈있는지 체크 로직)

오늘 할 일

  • ERD 및 Docs 수정 할 것 있으면 하기
  • 개발 서버 배포 이어서 작업

인스턴스 하나에 dev서버, prod서버 다 하려다가 ssl에서 충돌이 나버렸다...
해결 방법을 잘 모르겠어서 dev서버를 다시 만들어서 정보들을 옮기기로 결정했다

개발 서버 배포

1. VPC 피어링

VPC(Virtual Private Cloud)
: 일종의 가상 네트워크 센터
IP 주소 범위 선택, 서브넷 생성, 라우팅 테이블 및 네트워크 게이트웨이 구성 등 가상 네트워킹 환경

VPC Peering(VPC 피어링)
: 서로 다른 VPC간 통신이 가능하도록 연결하는 것을 의미

=> 공개IP를 통해 배포해서 누구나 DB에 접속이 가능하기때문에 VPC 내부에 백엔드 서버를 배포

SQL - 개요 - 수정 - 연결 - 공개IP만 체크 되어있는걸 비공개IP도 체크(개발서버이기때문에 굳이 공개IP 체크를 풀지 않음) - 네트워크 - default - 연결설정 - API 사용 설정 - 자동으로 할당된 IP 범위 사용 - 계속 - 연결 만들기 - 저장

비공개 IP로 로컬 환경에서 접속하려하면 접속이 안된다
why? 외부로부터의 접속은 차단되었기때문에
=> SSH 에서만 접속 가능 (같은 VPC 내에서는 접속 가능)

2. DNS 연결

  1. NS 레코드
    네트워크 서비스 - Cloud DNS - 영역만들기 - 영역이름 작성 - DNS 이름 작성(본인이 구매한 도메인) - 만들기 - 구매한 사이트(가비아)로 이동 - 네임서버 설정 - Cloud DNS의 NS 레코드를 열어 값을 복사해서 넣어주기(맨 뒤 .은 지워주기!) - 소유자 인증 - 적용
  • SOA 레코드 : Start Of Authority의 약자로 DNS 영역을 만들때 기본적으로 등록되는 레코드로써, 관리 권한이 시작되는 곳으로 도메인의 시작점
  • NS 레코드 : NameServer의 약자로 도메인의 네임서버를 지정하는 레코드

터미널 - dig 본인도메인주소 NS 명령어 - 네임서버 변경되었는지 확인

  1. A 레코드
    레코드 세트 추가 - VM인스턴스의 외부IP주소 복사 - A 레코드 유형 선택 - IPv4주소에 복사해 온 값 붙여넣기 - 만들기

터미널 - dig 본인도메인주소 A 명령어 - A레코드 반영되었는지 확인

http://본인도메인주소:3000/graphql 접속되면 성공

3. Load Balancer(로드밸런서)

  • 서버에 가해지는 부하를 분산시켜주는 장치, 클라이언트와 서버 사이에 위치하여 서버의 트래픽을 관리
  1. Compute Engine - 인스턴스 그룹 - 인스턴스 그룹 만들기 - 비관리형 인스턴스 그룹(New unmanaged instance group) 선택 - 이름 작성, 리전: 서울, 네트워크: default, VM인스턴스: 만들어둔 인스턴스 - 만들기

  2. 네트워크 서비스 - 부하분산 - 부하분산기 만들기 - HTTP(S) 부하분산 구성 시작 - 기본값 - 계속 - 이름 작성 - 프론트엔드 구성 - 이름 작성, 프로토콜: HTTP, IP 버전: IPv4, IP 주소: 임시, 포트: 80(HTTP의 기본 포트는 80이다) - 완료
    백엔드 구성 - 백엔드 서비스 및 백엔드 버킷 - 백엔드 서비스 만들기 - 이름 작성, 인스턴스 그룹: 위에서 만든 인스턴스 그룹, 포트번호: 3000, Cloud Cdn 사용설정 체크 해제 - 상태확인 - 상태확인(Health checker) 생성 - 이름 작성, 프로토콜: TCP, 포트: 3000 - 저장 - 상태확인에 지금 만든 헬스체커 선택 - 만들기

Health checker : 로드밸런서가 백엔드 서버 컴퓨터로 부하분산을 할 때,
서버가 죽어있는 컴퓨터로 트래픽을 분산시키면 안되기에
비정상적인 인스턴스를 감지하고 정상적인 인스턴스에만 요청을 보낼수 있도록 확인하는 역할

4. DNS & 로드밸런서 & 인스턴스 연결

  • DNS를 거쳐 로드밸런서로 접속을 할 때에는 80번 포트로 접속
    로드밸런서에서 인스턴스로 나갈때3000번 포트
    => 3000번 포트를 지닌 플레이그라운드 접속이 가능
  1. 네트워크 서비스 - 부하분산 - 로드밸런서로 들어가서 HTTP IP 주소 복사 - 네트워크 서비스 - Cloud DNS - A 레코드 IPv4 주소에 붙여넣기 - 저장

  2. 터미널에서 dig 도메인주소 명령어로 레코드 확인

  3. http://도메인주소:3000/graphql 접속 - 연결 안됨
    why? 로드밸런서가 받고있는 IP 포트가 3000번이 아니라 80번이기 때문에
    http://도메인주소:80/graphql로 접속하면 접속 가능

5. GCP HTTPS 설정

  1. 네트워크 서비스 - 부하분산 - 부하분산 만들기 - HTTP(S) 부하분산 구성시작 - 기본값 - 계속 - 이름작성, 백엔드구성: 만들어둔 서비스 선택 - 프론트엔드 구성 - 이름 작성, 프로토콜: HTTPS, IP버전: IPv4, IP주소: 임시, 포트: 433(HTTPS의 기본포트) - 인증서 - 새 인증서 만들기 - 이름작성 - 생성모드: Google 관리 인증서 만들기(Google SSL 인증서를 사용), 도메인: 본인이 구입한 도메인 주소 - 만들기 - 완료 - 만들기

  2. 만들어진 로드밸런서로 들어가 프론트엔드 인증서 클릭 - 상태가 PROVISIONING 에서 ACTIVE로 바뀔때까지 기다리기(꽤 오래 걸림) - 변경되면 HTTPS IP 주소 복사 - Cloud DNS - A 레코드 IPv4주소값에 붙여넣기 - 저장

  3. https://도메인주소/graphql 접속
    => 주소창에 자물쇠 모양 생기고 접속되면 성공

6. HTTP => HTTPS 리다이렉트

  1. 콘솔 - VPC 네트워크 - IP 주소 - 외부 고정 주소 예약 - 이름 작성, 유형: 전역 - 예약

  2. 네트워크 서비스 - 부하분산 - 부하분산기 만들기 - HTTP(S) 부하분산 구성시작 - 기본값 - 계속 - 백엔드구성 - 만들어둔 서비스 선택 - 프론트엔드 구성 - 이름 작성, 프로토콜: HTTPS, IP버전: IPv4, IP주소: 1번에서 만든 고정IP주소 선택 - 인증서: 만들어둔 인증서 - HTTP-HTTPS 간 리디렉션 사용 설정 체크 - 완료 - 만들기

  3. 만들어진 HTTPS 부하분산기 클릭 - IP 주소 복소 - Cloud DNS - A 레코드 IPv4 주소에 붙여넣기 - 저장

  4. http://도메인주소/graphql 로 접속했을때 자동으로 HTTPS로 리다이렉트 된다면 성공

0개의 댓글