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포트로 접속하게 되면
붐!
로드밸런싱 완료
끝이냐구요?
끝입니다
개발하기 참 좋은 시대입니다
아래는 제가 직접 손수 수작업으로 하나부터 열까지 전부 직접 작성한 커뮤니티사이트 입니다
신생커뮤니티라서 많이 삭막하지만 들려주시면 고마울 것 같아요!
'프로그래밍 개념 정리' 카테고리의 다른 글
RESTful API란 무엇일까? feat. URI, URL, URN (0) | 2023.02.09 |
---|---|
디자인 패턴 - MVC1 과 MVC2 의 차이 (0) | 2023.01.17 |
DI란 무엇 인가에 대하여 (0) | 2023.01.14 |