2023. 10. 16. 10:50ㆍ프로그래밍/웹 개발
AWS에서 서버를 띄우는 것은 인스턴스의 이미지를 뭘 선택하느냐에 따라 달라지지만 일반적으로는 Ubuntu를 사용한다.
따라서 ubunut 서버를 가상환경(VM)에 띄우고 로컬에서 서버를 띄우는 것을 실습한다.
- 가상환경 선택(VirtualMachine)
도커나 UTM, Parrels와 같은 OS 가상환경을 제공하는 어플리케이션을 사용한다(필자는 Parrels 사용)
- 실습환경
Mac OS 13(Ventura OS)
M1 Air(2020) Intel X
OS를 가상환경에 설치하기 위해서는 Ubunut 공식 사이트에서 iso파일을 다운받아야 한다.
이 때 본인의 운영체제에 맞는 이미지 파일을 다운받아야 설치가 정상적으로 진행된다.
https://ubuntu.com/download/server
Ubuntu에서는 Server와 Desktop 2가지 버전을 제공하고 있는데 Desktop은 GUI로 사용가능하고 Server는 CLI기반인 듯 하다.
나는 어차피 AWS에서 CLI로 서버에 접근하려고 하기 때문에 Server를 다운받는다.
일반적인 OS(Window 등)는 그냥 좌측의 초록색 버튼을 클릭해서 설치하면 되고 필자와 같은 환경(Mac M1칩)이라면 우측의 빨간 박스 버튼을 클릭하고 arm64 파일을 설치하도록 한다.
-ubuntu Linux에 apache 설치 및 서버를 실행하기 위한 파일(.conf, index.html)설정
https://ubuntu.com/tutorials/install-and-configure-apache#1-overview
Guide가 상세하게 나와있다. 위 홈페이지를 참고하면 되지만 중간중간 가이드에서도 제공하지 않는 문제가 몇가지 있긴하다(포트번호 설정, ServerName 미설정시의 Warning log)
sudo apt update
sudo apt install apache2
sudo는 관리자 권한이며 apt는 리눅스에서 실행하는 패키지 인스톨러, 패키지 관리자라고 생각하면 된다(맥의 brew, python의 pip와 같은 역할로 네트워크를 통해 터미널에서 로컬로 필요한 패키지를 다운받는 것)
update는 apt의 상태를 최신으로 업데이트해서 패키지 다운에 지장이 없게끔 하기위함이다.
/경로는 root경로를 뜻한다. 특 저장경로의 가장 첫번째 위치를 뜻한다.
sudo mkdir /var/www/gci
그 다음 해당 폴더로 디렉토리를 이동한 다음 index.html파일을 생성 후 html 코드를 작성한다.
이 때 관리자 권한으로 실행하지 않을 시 파일을 저장할 권리가 없어지므로 sudo를 붙여준다.
cd /var/www/gci
sudo vi index.html
cd /var/www/gci
sudo vi index.html
그런 다음 디렉토리를 이동한다.
웹 서버의 포트번호 및 서버 이름(DNS)과 같은 것들을 설정할 conf파일을 생성해야한다.
아래의 명령으로 디렉토리를 이동시킨다.
cd /etc/apache2/sites-available # 디렉토리 이동
sudo cp 000-defaul.conf gci.conf # default 설정 파일 카피
sudo vi gci.conf # 복사한 파일 열기
DocumentRoot가 default.conf파일을 복사했기 때문에 var/www/html 폴더에 있는 index.html파일로 설정돼있을 것이다.
해당 Root를 아까 생성한 root경로의 /var/www/gci로 변경해주자.
그리고 ServerAdmin은 이메일 주소인데 클라이언트가 서버 사용시에 문제가 있을 경우 연락할 연락망이라고 생각하면 된다.
지금은 전혀 필요없으므로 건들지 않는다.
중요한 부분은 맨위의 이 부분이다.
접속할 포트번호를 설정할 수 있는데 만약 기본 포트번호인 80을 쓰게 된다면 default로 설정된 index.html파일만 주구장창 뜨게 될 것이다. 해당 포트번호로 이미 기본페이지가 설정돼있기 때문이다. 앞에서 설명한 /var/www/html로 디렉토리 설정된 것이 바로 그 때문이다. 따라서 필자는 이 부분을 8070으로 변경했다.
이까지 설정했다면 우선 기본적인 세팅은 끝이 났다.
그렇다면 이제 해당 웹 서버로 접속해보자.
우분투 서버의 기본 정보를 얻기 위해서는 ifconfig라는 명령어를 사용해야 한다.
그러나 우리는 완전 깡통인 ubuntu server를 설치했기 때문에 하나부터 열까지 다 설정해줘야한다.
apt 패키지 관리자를 이용해 net-tools라는 패키지를 설치해줘야 한다.
net stat과 같은 여러가지 네트워크 관련 기능을 제공한다
sudo apt install net-tools # 패키지 설치
ifconfig # 서버 네트워크 정보 확인
저 부분이 현재 ubunt Server에서 실행되고 있는 ip번호이다. 과연 실제로 그 ip가 잘 동작하는지 확인해보자.
로컬 터미널로 와서 위의 ip와 함께 다음과 같이 입력한다
ping 10.211.55.6
ping을 정상적으로 주고 받고 있다. ping이 1초 간격으로 request와 response를 반복하면서 응답이 올텐데 control + Z로 빠져나온다.
sudo a2ensite gci.conf
service apache2 reload
모든 준비가 끝났으니 이제 해당 ip주소로 웹 브라우저를 통해 접속해보자.
포트번호 80으로 접속했을 때는 다음과 같이 /var/www/html에 설정된 index.html로 접속되며 welcome page가 나온다.
아까 설정한 8070으로 접속하면 어떻게 될까?
아마 위 과정을 똑같이 따라했다면 안될 것이다. 왜냐하면 Ubuntu에서 제공한 Configure Apache 문서에서 빠진 부분이 있기 때문이다.
추가로 설정해줘야할 것이 있다.
디렉토리를 이동한 후 설정파일을 수정해줘야한다.
cd /etc/apache2/
sudo vi ports.conf
원래는 Listen 80만 있었을 것이다. 따라서 포트번호 리스너를 위와 같이 추가해줘야 한다.
설정을 바꾼 다음 다시 service apache2 reload를 통해 서버를 재실행하면 정상 동작함을 알 수 있다.
재실행할때 아마도 ah00558: 경고문이 뜰 것인데 동작하는데는 크게 문제가 없으나 명시적으로 ServerName을 명시하라는 뜻이다.
cd /etc/apache2
sudo vi apache2.conf
맨 아래줄에 다음과 같이 추가해준다.
Ubuntu에서는 아까 생성한 gci.conf파일에 추가하라고 돼있지만 해당 방법으로는 해결되지 않음.
ServerName 명시를 요구하는 이유는 나중에 하나의 ubuntu서버에서 여러개의 포트번호로 실행될 때 서버를 구분하기 위함인지 우선은 명시적으로 입력하라는 경고문이 뜬다.
service apache2 reload
다시 서버를 재실행하면 경고문 없이 될 것이다.
'프로그래밍 > 웹 개발' 카테고리의 다른 글
[Express] 어플리케이션 레벨 미들웨어와 라우터 레벨 미들웨어 (0) | 2023.10.29 |
---|---|
Spring Boot 서버를 AWS에 배포하기(프리 티어/무료) (2) | 2023.10.23 |
[Spring-Boot] 쿼리메서드 사용 시 주의점 및 네이밍 방법 (0) | 2023.08.20 |
[Spring-Boot] gradle 프로젝트 리소스 파일 수정 후 변경사항 적용 안되는 문제 해결 (0) | 2023.08.19 |
Intellij로 spring boot 프로젝트 설치부터 생성까지 (0) | 2023.08.17 |