김로원
고양이만도 못한 개발자
김로원
전체 방문자
오늘
어제
  • 분류 전체보기 (60)
    • 프로그래밍 개념 정리 (4)
    • 디버그 기록 and 트러블 슈팅 (5)
    • 프로그래밍 (10)
      • PHP and Laravel (4)
      • JAVA (0)
      • Spring Boot (0)
      • 리액트 react (5)
      • 자바스크립트, 타입스크립트 (0)
      • 데이터베이스 (0)
      • JPA (0)
      • 리눅스 (1)
      • 윈도우 (0)
      • JSP (0)
    • 코딩 테스트 문제 (39)
      • 프로그래머스 (39)
      • 백준 (0)
    • 디바이스 (2)
    • 달리기 (0)
    • 음악 (0)
    • 고양이 로원이 (0)
    • 유요한 정보 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 노운

티스토리

hELLO · Designed By 정상우.
김로원

개발자가 된 집사

Nginx + 도커로 로드밸런싱을 운영에 적용해보자
프로그래밍 개념 정리

Nginx + 도커로 로드밸런싱을 운영에 적용해보자

2024. 3. 5. 12:32
반응형

 

Nginx와 도커로 실제 운영을 해보자

 

현재 저의 웹 사이트는 이렇게 구성되어있습니다

 

 

 

 

 

 

 

 

 

 

 

 

 

그리고보니 모양이 좀 그렇네요

 

사실 로드밸런서라는 것이 진정한 의미를 가지려면

 

두 대 이상의 서버 컴퓨터가 필요하지만

 

저의 경우는 학습 + 무중단 배포를 위해서 구성을 해보았습니다

 

사실 무중단 배포가 가장 큰 의미가 있는 것 같아요

 

한 쪽이 문제가 생기거나 중단이 되어도 서비스가 살아있다면

 

갑자기 연결이 중단되어 당황하는 유저가 없을 것입니다

 

 

 

두 개의 컨테이너를 생성

각 컨테이너는 마음에 드시는 포트 번호로 포트포워딩해서 생성해줍니다

 

예를 들어서 5000:80, 6000:80 이런식으로 만들어줍니다

 

 

Nginx 설정

우분투를 기준으로 설명을 하겠습니다

 

etc/nginx/sites-available 경로의 default 파일을 찾아서 열어줍니다

 

그리고 가장 먼저 upstream을 작성 해줍니다

 

upstream servers {
       least_conn;
       server localhost:5000;
       server localhost:6000;
}

 

servers에는 원하는 이름을 적으시면 되겠습니다

 

여기에서 least_conn은 로드밸런싱이 이루어지는 알고리즘을 설정한 것인데요

 

least_conn의 경우 말 그대로 연결이 적은 곳으로 연결시켜줘라~ 이 말입니다

 

 

아래의 server는 "어떤 server? 응~ localhost:5000; 이야~" 이런 느낌입니다

 

즉 로드밸런싱을 통해 연결시켜줄 서버들을 적어주는 겁니다

 

만약에 여러 대의 서버를 운용한다면 해당 서버의 ip 주소와 포트번호를 입력해주면 되겠죠?

 

 

그리고 이제 server { } 괄호 안에

 

location / {
        proxy_pass http://servers;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
    }

 

이렇게 적어줍니다

 

location / 의 의미는

 

루트 경로 즉 모든 경로에 대하서 해당 블록의 내용을 적용한다는 의미입니다

 

그리고 위에서 작성한 upstream의 이름을 http:// 뒤에 그대로 적어주시면 됩니다

 

IP 주소나 도메인 이름이 아닌 upstream의 네이밍을 적으시면 됩니다

 

 

 

그 아래 header들은 request, 요청에 header 내용을 추가해주는 부분입니다

 

서비스를 만들 시 유저의 IP를 체크하거나, 유효성 검사 시 이부분이 꼭 필효하실 겁니다

 

추가하지 않으면 실제 작업이 진행될 도커 컨테이너에서는 127.0.0.1이라는 로컬 IP 주소가 출력됩니다

 

 

 

 

자 그럼 이제 우분투 서버의 80포트로 접속하게 되면

 

붐!

 

로드밸런싱 완료

 

 

끝이냐구요?

 

 

끝입니다

 

개발하기 참 좋은 시대입니다

 

 

 

 

 

 

아래는 제가 직접 손수 수작업으로 하나부터 열까지 전부 직접 작성한 커뮤니티사이트 입니다

 

신생커뮤니티라서 많이 삭막하지만 들려주시면 고마울 것 같아요!

 

https://tamoim.com

 

타모임

탕비실 물 좀 마셔도 되냐고 물어본 건물 미화원

728x90
반응형
저작자표시 (새창열림)

'프로그래밍 개념 정리' 카테고리의 다른 글

RESTful API란 무엇일까? feat. URI, URL, URN  (0) 2023.02.09
디자인 패턴 - MVC1 과 MVC2 의 차이  (0) 2023.01.17
DI란 무엇 인가에 대하여  (0) 2023.01.14
    '프로그래밍 개념 정리' 카테고리의 다른 글
    • RESTful API란 무엇일까? feat. URI, URL, URN
    • 디자인 패턴 - MVC1 과 MVC2 의 차이
    • DI란 무엇 인가에 대하여
    김로원
    김로원
    개발자가 된 집사

    티스토리툴바