[우아한테크코스] 7월 7일 TIL

2 minute read

[CD] Nginx를 활용한 무중단 배포

  • Rolling Deployment
    두 대 이상의 서버를 돌리면서 사용자에게 중단이 없게 하는 것
    1. 서버 1을 로드 밸런서에서 뺀다.
    2. 서버 1에 배포
    3. 서버 1을 다시 로드 밸런서에 넣는다.
    4. 서버 2 빼고, 배포하고, 다시 넣고
      전체적인 속도가 느리다.
  • Blue/Green Deployment
    실제 서비스 중인 환경(Blue), 새롭게 배포할 환경(Green)을 세트로 준비해서 배포하는 것
    서버를 그대로 본떠 하나의 서버를 만들고 새로운 서버 전체를 업데이트한다. 기존 서버에 연결된 연결을 새로운 서버의 연결로 변경한다.

  • nginx의 구성
    엔진엑스 80(http), 443(https) 할당
    spring boot1: 8081, spring boot2:8082

[CI] Jenkins를 사용한 자동 배포환경 구축

  1. build.gradle에 추가
    task print() {
     doLast{
         println "github push complete"
     }
    }
    
  2. jenkins 설치
  • macos 내 설치
    brew install jenkins-lts
    brew start jenkins-lts
    
  • docker 사용 시
    • docker에 jenkins image pull
        docker pull jenkins/jenkins 
      
    • docker에 받은 image 실행
        docker run --platform linux/amd64 --name local-jenkins -p 32769:8080 -d jenkins/jenkins:lts
      

      계속 안되면 docker restart jenkins로 해결..

  1. jenkins 시작되면 유저 생성하고 시작..
  2. enter an item name 입력하고 Freestyle project 클릭하고 시작
  3. github url 따와서 소스 코드 관리 repository url에 연결
  4. username에 내 이름이랑 password 입력
  5. add 하면 credentials에 입력한거 뜨고 branches to build에 브랜치 연결
  6. 빌드 유발 GitHub hook trigger for GITScm polling 선택
  7. build execute shell에 ./gradlew clean print 설정
  8. 빌드 후 조치에 이메일 추가 가능
  9. 이후 github repository랑 Jenkins hook url 연결 -> webhooks에 payload에 http://jenkins url(local이면 안됨, ngrok 사용, Content type: application/json)/github-webhook/, just the push event 클릭,
  10. build now 클릭하면 빌드 수행
  11. console output에서 빌드 출력문 확인 가능

참고

[Network] network layer

IP 주소란

서로 다른 인터넷이 가진 호스트를 구별하기 위한 자신만의 주소

  • IPv4
    32비트의 이진수, 8비트씩 4부분으로 나누어 십진수 표현
    사설 IP로는 실제 인터넷에 접속할 수 없다.
    인터넷을 사용할 때 공유기나 라우터는 공인 IP를 할당받는다.
    공인 IP가 사설 IP로 변환해주며 통신을 가능하게 해준다.
    이렇게 하는 이유는 IPv4 자원의 고갈을 막기 위해서이다.
    모든 인터넷을 IP로 하기에는 부담이 되므로 사실은 서로 다른 사설망에서는 같은 IP주소를 사용할 수 있도록 하는 것이다.
    공유기는 인터넷에 접속하려는 장비에게 랜덤으로 한정된 수량의 사설 IP주소를 할당하고 이 장비들이 하나의 IP로 통신하도록 하는 것이다.
    클래스 ABCDE로 나누어서 사용된다.

  • IPv6
    128비트의 이진수, 16비트씩 8개도 나누어 16진수로 표현
    사설 IP로도 부족할 것 같아서 나온 것
    패킷 크기 확장, 흐름제어 기능 지원, 인증 및 보안 기능, 이동성(물리적인 위치에 제한받지 않음)

  • 인터넷 연결
    인터넷에 접속할 때는 IP주소의 설정이 필요하다.
    DHCP로 공유기에서 자동으로 IP 설정을 해주면 문제가 없지만 서버로 사용하거나 고정 IP 설정을 하려 하면 넷마스크나 게이트웨이같이 정ㅎ솩한 주소를 알아야 한다.

서브넷이란

IP 주소에서 네트워크 영역을 부분적으로 나눈 부분 네트워크이다.
네트워크 장치 수에 따라 효율적으로 IP를 사용하기 위해 만들어진 것이다.

  • 서브넷 마스크
    서브넷을 만들 때 사용하는 것으로 서브넷 마스크를 통해 IP의 Network ID와 Host ID를 분리한다.
    IP 주소 = Network Prefix + Subnet Number + Host Number
    Subnet mask는 IP 주소와 AND 연산해 Network의 정보를 걸러내려 하는 것으로 32bit의 이진수이다.
    32비트로 구성된 IP주소에서 1은 네트워크 영역, 0은 호스트 영역으로 구분된다.
    넷마스크 주소가 255.255.255.0으로 표시되고 IP 주소가 192.158.5.20이면 네번째 부분인 256개의 호스트를 하나의 네트워크로 묶는다는 의미를 가진다.
    네트워크주소는 192.168.5.0으로 최하위값을 할당하고, 브로드캐스트는 192.168.5.255로 최상위 값을 할당한다.
    여기서도 네트워크를 더 나누고 싶으면 서브넷 마스크 주소를 바꾸면 된다. 마스크 주소가 255.255.255.128이 되면 0~127, 128~255로 나누어진다.

게이트웨이란

서로 다른 네트워크가 통신하기 위해 지나는 입구이다. 1번이나 254번을 할당한다.

누가 나누어서 할당해주나? AWS?

참고