본문 바로가기
데브코스 웹 백엔드

Public Cloud(AWS) -> On-premise(홈서버) 구축 전환

by J-rain 2024. 12. 18.

오랜만에 포스팅입니다 약4개월..?

 

이번포스팅은 데브코스 최종 프로젝트인 'urdego 어데고?!'를 Public Cloud에서 On-premise 전환 과정에 대해서 다뤄볼려 합니다.

 

 

1. 왜 Aws 대신 홈서버로 구축하는가? 

  • 마침 노트북을 맥북프로로 갈아타면서 쉬고있는 윈도우 놑북이 존재했다 ㅎㅎ
  • aws ec2(t2.medium)를 이용하여 팀프로젝트에서 공용으로 사용하였는데 3주? 안된 기간을 사용하였는데도 성능대비 비용이 너무너무 순식간에 차는것을 볼 수가 있었다..

프로그래머스 측에서 크레딧있는 aws 계정을 너무 늦게줘서 개인계정으로 올렸다...ㅠㅠ

  • 프로젝트 최종 발표날에 데모를 진행하는데 70~80명이 한번에 접속하고 이것저것 눌러보니 cpu 사용률이 100%가 되더니 서버가 죽어버렸다. (t2.medium은 vCPU=2 RAM=4.0 이였다ㅜㅜ)

데모 중간 질문들..

그렇다 하나의 ec2안에 다섯개정도의 서비스와 모니터링까지 넣다보니 거의 접속과 동시에 터져버렸다 ㅋㅋㅋㅋㅋㅋㅋㅋ..

아키텍처 v1

원래는 쿠버네티스 도입하고 여러 인스턴스로 마스터노드와 워커노드로 시스템을 분리하고 각 서비스들을 개별 pod로 관리할 생각이였으나 도저히 기간내에 마무리 할 수 있을것 같지가 않아서 급하게 하나의 인스턴스에 모든 서비스를 넣고 돌렸던게 이슈였다.

백엔드 팀원들과 처음 구상했던 아키텍처

거의 한달 안되는 기간안에 이걸 하려했다니 욕심이 과하긴했다..?

사실 홈서버로 간다해도 대용량 트래픽을 일반 가정용 공유기가 견뎌내는것도 이상하지만 그냥 먼저 비용문제를 최우선으로 잡고 구축해보려한다 ㅜㅜ -> nas를 선택하는 방법도 있지만 돈드니 pass

 

어쨌든 이러한 이유들로인해서 홈서버를 선택하게 되었다!!

 

하지만 홈서버라는것이 장점만 있는 것은 아니다.

  • 우리집 아이피 노출에 대한 위험성 그리고 두려움
  • 클라우드에 비해서 네트워크가 안정적이지 않고, 속도 또한 보장되지 않을 수 있음
  • 우리집 아이피 주소로 DDOS공격 받게 된다면, 당해낼 재간이 없음 -> 최근 lol판에서 이슈거리

 

2. 홈서버를 위해 해야할일

  • 포트포워딩
  • 운영체제 선택 및 설치
  • 외부접속

크게보면 이정도인것 같다.

 

2-1. 포트포워딩: 집에 인터넷이 들어오면 이를 공유기에 연결시키고, 이 공유기는 유선을 통해 내가 사용하는 PC , TV 등이 연결될 수도있고 무선Wifi를 통해 여러 기기들이 연결될 수 있다.

이 각각 연결된 기기들은 공유기를 통해 각각의 사설 IP (private ip)를 발행받게된다.

그래서 외부에서 내가 설치할 서버에 요청을 보내기 위해서는 아래와 같은 순서의 작업들이 필요하게 된다.

  • 외부에서 내가 설치한 서버를 찾기 위해 가장 먼저 우리집 IP 와 포트가 필요하다. 일단 지금은 기본적으로 80포트라고 가정해보자.
  • IP를 통해 우리집까지 요청이 찾아왔는데, 가장 먼저 맞이하는 친구가 공유기이다.

가정집이기에 인터넷 제공업체(ISP)인 KT 공유기를 통해 연결된 기기가 많기때문에 이들중 어디로 요청을 보내야 할지에 대한 설정이 필요한데 이게 포트포워딩이다. 그래서 포트포워딩을 통해 윈도우 노트북으로 연결 시켜줘야 한다.

포트포워딩은 만약 80포트로 요청이 온다면 공유기에 할당되어 있는 설정에 따라 사설 IP 들중 특정 IP를 가진 특정 포트로 요청을 전달해주는 작업인 셈이다.

드디어 내 서버는 80포트에 맞는 요청을 받을 수 있게 되었지만..? 이 상황에서 문제가 될 수 있는 사항들이 있다.

 

ex1) "내 아이피(public ip)"는 가정집의 경우 일반적으로 유동IP이기에 자주 바뀌지는 않겠지만 어쨌든 바뀔 수 있다.

 

ex2) 내 서버(노트북)가 공유기에 연결이 되어있지만 내 서버가 껐다 켜지거나(Wifi 연결오류 등), 공유기가 재시작 되거나 등등의 이유로 할당받는 내부IP(private IP)가 얼마든지변경될 수 있는 상황이 생긴다.

kt 문의 게시판 글

 

ex1)의 경우 Public IP는 개수가 한정되어있는 만큼 고정IP를 사용하기 위해서는 역시 돈을 내야한다 ㅋ. 우리집은 KT통신사를 사용하는데 결과적으로 일반 가정용인터넷에서는 고정IP 사용이 불가하고 kt 오피스넷이라는 별도의 제품을 사용해야하는데 이거는 개인 인터넷도 아니기 때문에 가족결합도 안되고 비용도 비싸고 고정IP를 사용하려고 인터넷요금만큼의 가격을 추가로 지불해야 하므로 pass 

고정 아이피는 불가능한 것 같고 또 다른 방법을 생각해보자

DDNS 사용하기 (Dynamic DNS)

유저가 내 홈페이지(서버)에 접속을 할때는 도메인을 통해 접속 할 것이다.

그리고, 내 서버(노트북)는 현재 내 아이피(Public IP 주소)를 알고있다.

그렇다면 내 서버가 주기적으로 아이피를 DNS(Domain Name System)에 최신화를 해준다면 IP가 유동이여도 잠깐의 다운타임은 있겠지만 접속에 문제가 없지 않을까? 개념으로 작동하는 것이 DDNS이다.

그런데 일단은 문의 게시판 글에도 보면 공유기 재부팅경우 제외하고는 Public IP가 거의 변경되지 않는다고 하니 다음에 불편하면 설정해보자,,,

 

ex2)의 경우 wifi를 끄고 다시 키기만해도 할당받는 private ip는 달라지기에 ex1의 경우보다 급선무이다. 다행히 private ip는 ISP가아닌 공유기에서 발행해주는 것이기 때문에 공유기 설정에서 쉽게 설정할 수 있다.

즉, 고정 private ip를 할당해서 내 서버(노트북)랑 연결해주면 된다. 기본원리는 기기마다 있는 네트워크장치의 mac주소(고유주소)를 확인해서 공유기 설정을 통해 고정된 private ip를 할당해주는 것이다. -> 축구선수의 고유등번호 부여하는 개념

KT 공유기에 접속하기 위해서는 인터넷주소창에 172.30.1.254 를 입력하면된다. 

접속하여 LAN 연결설정에 들어가면 수동 IP 할당 설정을 볼 수 있다.

여기서 타겟 MAC주소는 내 서버인 윈도우 노트북에서 주소를 확인한다. 상태정보에 접속단말정보를 보면 알 수도 있지만 연결되어있는 단말이 너무 많아서 뭐가 내 윈도우 노트북인지 모르겠다 ㅎㅎ;;

Physical Address가 타겟 MAC주소인데 주의할건 -하이폰이 아닌 : 콜론으로 작성해야 할당된다 ㅜㅜ 이걸로 30분은 날린듯

할당 IP는 * DHCP가 사용범위 1~127사이인 172.30.1.1 ~ 172.30.1.127  사이에서 무작위로 private ip를 할당했었기에  할당받지 않은 아무 IP주소를 작성해서 고정으로 사용하면 된다. 나는 27로 설정했다.

잘 할당된 모습!

 

이제 남은것은 포트 포워딩 설정하는 방법이다. 이미 내 서버의 사설IP를 고정했기에 포트포워딩은 쉬워진다.

- 외부 포트: 외부에서 접속을 위한 포트 지정

- 내부 IP주소: 연결할 기기의 IP주소 (위에서 할당한 IP주소 입력)

- 내부 포트: 연결할 기기의 내부 접속 포트 입력

 

- 소스 IP주소: 만약 1.1.1.1 로 설정하면, 이 1.1.1.1 IP를 가진 클라이언트만 포트 포워딩을 통해 내부 서버에 접근할 수 있음

- 소스 포트: 만약 80 로 설정하면 , 클라이언트가 출발포트 80으로 보냈을 경우의 요청만 허용

소스 IP주소 & 소스 포트를 이용하면 외부에서 접속할 클라이언트의 IP 주소를 제한하여 허가된 장치만 내부 네트워크에 접근 가능하도록함 주로 회사 외부에서 특정 공인IP 주소만 접근 허용하려고 할때 많이 쓰는 방식  둘다 비워두면 기본적으로 모든 IP 주소모든 출발 포트에서의 접근을 허용

나는 일단 두개정도 설정해뒀는데 우선 다른 백엔드 팀원들도 내 서버(노트북)로 SSH 접속이 가능하도록 포트를 열어둬야 하기에 ssh기본 포트인 22로 설정해두었고 다른 하나는 80포트로 들어오는거는 내부 8080 웹서비스로 가도록 설정 해두었다. 나중에 프론트 3000이나 백엔드 8000등등 설정하면 될것 같다.


 

2-2. 서버pc는 보통 Linux운영체제를 많이 선택한다. 오픈소스에다 cli방식이라 화면구현에 들어가는 리소스를 절약할 수 있기에 효율적이다. 나는 USB를 준비해서 Ubuntu Server 24.04.1 LTS 이미지를 다운했다.

https://ubuntu.com/download/server

 

https://ubuntu.com/download/server

 

ubuntu.com

 이때 부팅이 가능한 USB로 만들려면 Rufus를 사용하면 된다. 포터블유형으로 설치말고 실행하는걸 추천

https://rufus.ie/ko/

 

Rufus - 간편한 방법으로 부팅 가능한 USB 드라이브 만들기

Rufus는 USB 키/펜드라이브, 메모리 스틱 등과 같은 부팅 가능한 USB 플래시 드라이브를 포맷하고 생성하는 데 도움이 되는 유틸리티입니다. Rufus는 작은 크기에도 불구하고 필요한 모든 것을 제공

rufus.ie

 

완료됐으면 미리 초기화해둔노트북에 usb를 꽂고 전원을 킨다. 이때 F2 연타하면서 BIOS에 진입한다. (제조사마다 다름)

부트 우선순위에 윈도우가 먼저있어서 전원을 키면 윈도우로 실행하기에 우선순위를 UEFI: SanDisk, Partition 1과 위치를 변경해주고 저장후 다시 부팅!

 

이제 우분투 서버를 설치하면서 각종 설정이 나오게된다, network설정, ssh설정 등등등

172.30.1.27 로 잘 할당된 모습

나중에 어댑터하나 사서 유선LAN 으로 갈아타야겠다 ㅜ

 

OpenSSH 서버를 설치하면 다른 장치에서 SSH (Secure Shell)를 통해 서버에 원격으로 접속이 가능해진다.

 

이제 우분투 서버 설치를 완료했다. 우분투 서버 설치시 기본 용량이 100GB로 되어있을텐데 설정에서 400GB로 늘려줬다

 

 

2-3 외부접속: ssh를 이용할건데 앞서 말했듯이 public IP 주소를 이용해서 접속하는것 자체가 우리집 ip 주소가 노출된다.

ssh jra1n@172.30.1.27

 

맥북으로 private ip로 접속한결과

 

private ip로 같은 네트워크 상에서는 접근이 가능하기에 위와같이 집에서 맥북으로 서버 노트북으로 접근이 가능하지만 결국 다른 네트워크를 사용하는 팀원이나 일반 사용자들이 서버에 접속하려면 public ip를 사용할 수 밖에 없기에 노출된다..!

 

공인 IP를 아예 감추기 위해선 VPN을 구성하거나 Cloudflare 같은 솔루션을 사용해야하는데 각각의 장단이 존재하기에 일단 임시방편으로 DNS에서 도메인을하나 구입해서 공인IP가아닌 도메인을 통해 접속가능하도록 하려한다. 도메인으로 가린다해도 명령어하나면 공인IP 알수있음 ㅠㅠ

 

대학 친구 두명이나 다니고 있는 대한민국 도메인 점유율 1위 기업 갓비아에서 구입을 했다ㅎ 매달 두번의 놀금이 존재하는 미친 기업

그중 싸고 마음에드는 urdego.site를 신청 후 갓비아의 친절한 설명을 보고 진행하면..!

 

두둥! 이제 서버에서 나머지 팀원들의 계정을 만들어서 공유하면 끝..!

 

 

참고로 구축한 서버 노트북은 항상 켜둬야 하기에 덮개를 닫아도 노트북이 대기모드에 진입하지 않도록 설정해줘야한다.

https://dontdiethere.tistory.com/27

 

우분투 노트북 덮개 닫아도 대기모드에 진입하지 않게 설정하기

서버로 사용중인 노트북이 대기모드로 진입해 중단이 되면 안되겠죠 노트북 덮개를 닫아도 전원이 계속 유지될 수 있도록 간단하게 설정을 바꿀 수 있습니다. 먼저 /etc/systemd/logind.conf 파일을 루

dontdiethere.tistory.com

이글 참고ㅎ

'데브코스 웹 백엔드' 카테고리의 다른 글

Servlet  (0) 2024.08.09

댓글