[Study-Next Step] 3장. 개발 환경 구축 및 웹 서버 실습 요구사항

3장을 시작하기 위해서는 원격 서버가 필요하다.
네이버 클라우드에서 1년동안 무료 서버를 신청할 수 있다는 이야기를 듣고, 아래 글을 참고하여 원격 서버를 신청하였다.
https://essencedrain.tistory.com/2

원격 서버도 신청하였으니 본격적으로 실습을 시작한다.

목표

로컬 개발 환경에 설치한 HTTP 웹 서버를 물리적으로 떨어져 있는 원격 서버에 배포해 정상적으로 동작하는지 테스트한다.

1. 계정 추가 및 sudo 권한 할당

AWS EC2로 실습을 진행할 경우에는 이미 계정이 추가되어 있기 때문에 이 단계를 Skip해도 되지만, 나는 네이버 클라우드의 원격 서버로 실습을 진행할 것이므로 별도 작업을 통해 개인별 계정을 추가해야한다.

1.1. 개인별 계정 추가

adduser [사용자명] 형식으로 계정을 추가한다.

sudo adduser newuser

계정 이름, 비밀번호까지 설정을 완료했다.
신규 계정에 몇가지 개인정보를 입력할 수 있는데 입력하고 싶지 않으면 Enter를 누르면 된다.

1.2. 추가한 계정에 sudo 권한을 실행할 수 있도록 권한 추가

sudo 권한을 사용하기 위해서는 ① 계정을 sudo 그룹에 추가하거나 ② /etc/sudoers 디렉토리의 파일에 계정을 추가해야된다.

책에는 ②번 방법을 사용하도록 힌트가 나와있다. 따라서, ②번 방법을 진행해본다.

sudoers 파일은 root 계정으로 수정해야하므로, root 계정으로 전환 후 sudoers 파일을 Open한다.

vi /etc/sudoers

'# User privilege specification' 항목에 신규 계정을 추가한다.

아래 명령어를 사용하여 신규 계정이 sudo 권한을 사용할 수 있는지 확인한다.

sudo date

현재 시각이 표시되는 것 확인 완료!!

2. 각 계정별 UTF-8 인코딩 설정해 한글 이슈 해결

2.1. 시스템 전체 계정에서 인코딩 설정

Ubuntu에서 한국어 Locale을 설정하는 방법에는 3가지가 있다.

  • locale-gen 이용
    : sudo locale-gen ko_KR.EUC-KR ko_KR.UTF-8
  • dpkg-reconfigure
    : sudo dpkg-reconfigure locales
  • /etc 아래의 locale 설정 파일 수정

나는 locale-gen으로 Locale을 설정했다.

2.2. 각 계정별 인코딩 설정

계정 별로 인코딩을 다르게 사용하고 싶은 경우 해당 수순을 진행한다.
우선, 각 계정 디렉토리의 .bash_profile에 다음 설정을 추가한다.
처음 접근 시에는 .bash_profile이 존재하지 않을 수 있으니, vi .bash_profile 명령어로 파일 생성 후 아래 설정을 추가한다.

LANG="ko_KR.UTF-8"
LANGUAGE="ko_KR:ko:en_US:en"

완료되면 source .bash_profile 명령을 실행하여 설정한 내용을 시스템에 반영한다.
env 명령어를 통해 반영 여부를 확인할 수 있다.

3. JDK, 메이븐 설치

3.1. JDK 다운로드

JDK GitHub에 접속하여 ".tar.gz" 확장자를 가진 JAVA 소스 파일의 링크를 복사한다.
(링크 주소: https://github.com/frekele/oracle-java/releases/download/8u212-b10/jdk-8u212-linux-x64.tar.gz)

Terminal에서 아래 명령어를 사용하여 JDK를 다운로드한다.

wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" [복사 URL]

ls 명령어를 통해 jdk-8u212-linux-x64.tar.gz 파일이 다운된 것을 확인한다.

아래 명령어로 다운로드 한 파일의 압축만 풀면 설치는 완료된다.

tar -xvf [파일명]

JDK 파일 관리를 위해 압축 해제한 파일을 /usr/lib/ 하위로 이동시킨다.

3.2. JDK 환경 변수 설정

계정 디렉토리의 .bash_profile 파일에 아래 문구를 추가하여 JAVA_HOME/bin 디렉토리를 PATH로 설정한다.

export JAVA_HOME=/usr/lib/[압축 해제 파일명]
export PATH=$PATH:$JAVA_HOME/bin

완료되면 source .bash_profile 명령을 실행하여 설정한 내용을 시스템에 반영한다.
java -version 명령어를 통해 설치 여부를 확인할 수 있다.

3.3. 메이븐 다운로드

Maven 사이트에 접속하여 ".tar.gz" 확장자를 가진 메이븐 파일의 링크를 복사한다.
(링크 주소: https://dlcdn.apache.org/maven/maven-3/3.8.3/binaries/apache-maven-3.8.3-bin.tar.gz)

Terminal에서 아래 명령어를 사용하여 메이븐 파일을 다운로드한다.

wget [복사 URL]

ls 명령어를 통해 apache-maven-3.8.3-bin.tar.gz 파일이 다운된 것을 확인한다.

아래 명령어로 다운로드 한 파일의 압축만 풀면 설치는 완료된다.

tar -xvf [파일명]

메이븐 파일 관리를 위해 압축 해제한 파일을 /usr/lib/ 하위로 이동시킨다.

3.4. 메이븐 환경 변수 설정

계정 디렉토리의 .bash_profile 파일에 아래 문구를 추가하여 MAVEN_HOME/bin 디렉토리를 PATH로 설정한다.

export JAVA_HOME=/usr/lib/[압축 해제 파일명]
export PATH=$PATH:$JAVA_HOME/bin

완료되면 source .bash_profile 명령을 실행하여 설정한 내용을 시스템에 반영한다.
mvn -version 명령어를 통해 설치 여부를 확인할 수 있다.

4. Git 설치, clone 및 빌드

Git 설치 및 저장소를 clone 한다.

4.1. Git 다운로드

아래 명령어를 실행하여 Git을 설치한다.

sudo apt install git

git --version 명령어를 통해 설치 여부를 확인할 수 있다.

설치가 완료되면 Git에 Push할 때 사용할 이름과 메일 주소를 설정한다.

  • git config --global user.name [이름]
  • git config --global user.mail [메일 주소]

4.2. Git 프로젝트 다운로드

아래 명령어를 실행하여 Git으로부터 원하는 프로젝트를 다운로드 받는다.

git clone [URL 주소]

다운로드한 프로젝트는 /root 하위에 배치되어있다.

프로젝트 관리를 위해 아래의 수순을 추가로 진행하였다.

① 1.1에서 추가한 계정 디렉토리에 workspace 디렉토리 생성
② 다운로드한 프로젝트를 workspace 하위로 이동
③ 1.1에서 추가한 계정으로 소유자 변경
: chown [사용자명]:[사용자 그룹명] -R [파일명]

4.3. 메이븐 빌드

Git에서 다운받은 프로젝트 디렉토리로 이동한 후 mvn clean package 명령을 실행하여 프로젝트를 빌드한다.
(빌드가 완료되면 BUILD SUCCES가 출력된다.)

빌드가 완료되면 아래 명령어를 실행하여 JAVA를 컴파일한다.
PORT는 1024보다 큰 숫자 중 자신이 원하는 숫자로 지정한다.

java -cp target/classes:target/dependency/* [패키지명.메인 클래스명][PORT] &

예) java -cp target/classes:target/dependency/* webserver.WebServer 8080 &

curl http://127.0.0.1:[PORT] 를 실행하여 Hello World 메시지를 확인하면 성공이다.

5. 방화벽 설정

방화벽으로 인해 외부에서의 접근이 불가능할 수 있다.
아래 블로그의 ufw 명령어를 사용하여 방화벽을 해제한다.
http://webdir.tistory.com/206

네이버 클라우드의 원격 서버를 사용하면 ACG에 기본 방화벽 정보가 설정되어있기 때문에 Custom이 필요하지 않으면 이 과정은 Skip해도 된다.
(주의!! 외부에서의 접속이 필요하므로 서버의 공인IP가 존재해야 한다.)

나중에 사용하게 될 수 있으니 방화벽 관련하여 간단한 내용만 기재해봤다.

5.1. UFW 활성화

UFW는 기본적으로 비활성화 상태이기 때문에 아래 명령어로 활성화 시킨다.

sudo ufw enable

sudo ufw status verbose 명령어를 통해 UFW 상태를 확인할 수 있다.

5.2. 기본 정책

UFW의 기본 정책은 아래와 같다.

  • deny : 들어오는 패킷에 대해서는 전부 거부
  • allow : 나가는 패킷에 대해서는 전부 허가

추천 방화벽 정책은 아래와 같다.

  • sudo ufw enable
  • sudo ufw allow from [IP주소] to any port 22 proto tcp
  • sudo ufw allow 23/udp
  • sudo ufw allow 80/tcp
  • sudo ufw allow 3306/tcp
  • sudo ufw status

추가한 설정을 삭제하고 싶을 경우에는 ufw delete [Rule Number] 명령어를 사용한다.

5.3. 외부 접속 가능 여부 확인

브라우저에서 http://[공인IP]:[PORT] 를 입력하여 Hello World 확인

6. 소스코드 재배포

4.2에서 다운로드 받은 프로젝트의 소스를 수정하여 GitHub 저장소에 push한다.

6.1. 화면 출력 문구 수정

Hello World는 RequestHandler.java에 기재되어 있다.
Hello World 문구를 Hello Java World로 수정한 후 Git에 Commit/Push한다.

6.2. 실행중인 웹 서버 종료

ps -ef | grep [문자열] 명령어로 4.3에서 실행한 웹서버의 프로세스 아이디(PID)를 찾는다.
아래 명령어를 통해 조회한 프로세스를 종료한다.

kill -9 [PID]

6.3. Git 변경사항 업데이트

6.1의 작업으로 인해 Git 저장소에 변경이 발생했으니, 아래 명령어로 4.2에서 받은 프로젝트를 업데이트 해준다.

git pull origin master

프로젝트가 최신 상태로 업데이트 되었으면 4.3 과정을 실행하여 6.1의 수정 내용을 확인한다.

좋은 웹페이지 즐겨찾기