NHN Toast Cloud 가이드

toast-logo

본 글은 단국대학교의 2020년 서버 스터디에서 Toast 서버를 지원받아서 구축부터 개발, 배포환경을 구축해본 경험을 토대로 작성하였다. 원래는 이전 블로그에 시리즈(?)처럼 연재를 했었는데, 이번에 블로그 이사하는 김에 한 포스트에 기본적인 설명서의 느낌으로 다시 게시한다.

클라우드 서비스 시장의 생태계는 압도적으로 Amazon AWS가 점유하고 있다. EC2, Lambda 등의 정말 세부적이고 devOps에 최적화된 선두주자이기에 대부분의 서버 인프라를 aws로 구축하는 경우가 많다. Toast Cloud는 내 클라우드 공부의 첫 번째 재료(?)였는데, 생각보다 편하고 꽤 많은 서비스 (KB금융그룹, EBS, CJ ENM, GS SHOP, 요기요 등 국내 위주) 에서 사용중인 클라우드였다.

이제 본격적인 NHN Toast Cloud 가이드를 시작한다.
기본적으로 Instance에는 Ubuntu를 사용하였다.

1. Instance 생성

t11

토스트 프로젝트를 생성한다.
필자의 경우는 학교측에서 1인당 프로젝트 1개를 지원해주었다.

t12

메뉴에서 우측의 Compute - Instance를 선택한다.

t13

서비스 활성화 확인.

t14

Instance - 관리에 들어가서 인스턴스를 생성한다.

t15

원하는 운영체제가 설치된 이미지를 선택한다.
사용할 이미지에 따라 인스턴스 타입(flavor)이 달라지므로 가장 먼저 이미지를 선택한다.
필자의 경우 교수님이 정해준 Ubuntu 선택.

t16

인스턴스 정보를 입력한다.
인스턴스 타입은 과금이 결정되니 사용 목적과 OS를 잘 고려해서 선택한다.
필자의 경우 Standard 1를 선택했으나 CPU, 메모리가 턱없이 부족해서 m2.c2m4로 변경..
(메모리가 2GB 이하인 경우 가상머신 사용을 포기해야할 정도로 느리다..)

t17

인스턴스가 속할 보안 그룹을 지정한다.
인스턴스 1개는 여러 보안 그룹에 속할 수 있다.

t18

SSH(포트 22)는 Putty의 접속을 위해,
RDP(포트 3389)는 Windows 원격 접속(가상머신) 사용을 위해서 입력했다.

t19

예약 스크립트는 인스턴스의 첫번째 부팅이 완료된 후 네트워크 설정 등 초기화 과정이 끝나면 실행된다. 예약 스크립트는 root 권한으로 실행된다.

t110

인스턴스 생성을 누르는 순간 입력한 정보에 따라서 과금이 시작되니 최종 확인 후 생성하도록 한다.

2. Floating IP 생성 및 인스턴스 연결

Floating IP는 클라우드 플랫폼의 등장으로 생긴 개념이다.
클라우드 내에서 가상머신이 인터넷, 외부망에 접근하기 위해 배정받는 IP이다.

Floating IP를 통해 사용자가 외부망에서 클라우드 플랫폼의 가상머신에 접근할 수도 있고,
반대로 가상머신에서 외부망으로 접근할 수 있다.
Fixed IP(가상머신 생성될 때 자동 배정)와 달리 자유롭게 재할당도 가능하다.

t21

Instance - 플로팅 IP에서 플로팅 IP를 생성한다.

t22

인스턴스와 같이 플로팅 IP를 생성하면 과금된다. (인스턴스 연결하지 않아도 과금)

t23
인스턴스와 플로팅 IP를 연결한다.

t24

연결할 인스턴스를 선택하고 플로팅 IP와 인스턴스를 연결한다.

이제 해당 Floating IP로 Putty, VM 등에서 플랫폼에 접근할 수 있다.

3. Putty 연결

t31
PuTTY Key Generator (Putty 설치 시 같이 설치됨)를 실행한다.
연결할 인스턴스의 키페어(.PEM File)을 Load한다.
파일 선택 시 파일 타입을 모든 파일로 선택해야 .PEM 파일이 보인다.
t32
Save private key로 .ppk 파일 변환
t33
Session에 Host name을 입력한다.
여기서 Error가 발생했다.
Host Name에 IP 주소만 입력하면 오류가 발생한다.
에러 내용과 해결은 마지막에 언급하겠다!
t34
Connection - Data 에서 Auto-login username을 root/ubuntu/main 으로 설정
t35
Connection - SSH - Auth 에서 변환한 .ppk 파일을 로드

PuTTY 연결 정보는 Session에서 Saved Sessions에 저장해놓으면 다음부터 쉽게 연결할 수 있다. (더블클릭하면 연결)

—– Error —–

t36
Host Name을 IP로만 설정하고 접속 시
PuTTY Fatal Error : No supported authentication methods available (server sent: publickey)
오류가 발생한다.
t37
이는 ubuntu의 host로 접속한다는 정보를 명시하지 않았기 때문인데
Host Name을 ubuntu@serverIP 형식으로 입력 후 접속하면 문제가 해결된다.

이를 해결하기 위해서 keygen의 문제인지, PuTTY가 문제인지, 키페어가 문제인지 아무리 구글링하고 찾아도 답이 나오지 않았는데 TOAST Handbook 내용을 보니 Host Name에 저런 형식으로 입력하라는 내용이 뻔히 적혀있어서 어이없는 내 실수임을 자책했다 :(

4. Ubuntu Desktop 설치, Windows에서 연결

Ubuntu Desktop 설치

Ubuntu Desktop 설치 방법이다.

PuTTY의 Terminal로 인스턴스에 접속한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 아래 명령어를 이용해서 apt-get업데이트
sudo apt-getupdate

# 아래 명령어를 이용해서 xubuntu-desktop설치
sudo apt-getinstallxubuntu-desktop

# 아래 명령어를 이용해서 xrdp 설치
sudo apt-getinstallxrdp

# 아래 명령어를 이용해서 xorgxrdp 설치
sudo apt-getinstallxorgxrdp

# MaxSessions 값 변경 및 항목 주석 처리
sudo vi/etc/xrdp/sesman.ini
#[Security]항목의 TerminalServerUsers=tsusers, TerminalServerAdmins=tsadmins 주석 처리 MaxSessions 값을 50에서 100으로 변경

# xrdp 서비스가 자동으로 실행되도록 설정
sudo systemctl enablexrdp

이제 sudoer 등록(사용자 등록)만 남았다.

1
2
3
4
5
6
7
8
9
10
11
12
13
# 아래 명령어를 이용해서 사용자 추가
sudo adduser“사용자ID”

# 아래 명령어를 이용해서 sudoers 등록
sudo visudo

# 파일이 열리면 rootALL=(ALL:ALL)ALL부분 다음 라인에 위에서 추가한 사용자를 동일하게 추가
“사용자ID”ALL=(ALL:ALL)ALL

# Ctrl+O 후 파일명을 sudoers로 변경 후 저장
(overwrite하겠냐고 물어보면 Y입력)

# 저장 후 Ctrl+X로 빠져나옴

이로서 Ubuntu Desktop 설치와 사용자 등록이 끝난다.

Windows 원격 데스크톱에서 Ubuntu Server 연결

41
원격 데스크톱 연결 프로그램을 실행한다.
42
컴퓨터 항목에 인스턴스에 연결된 Floating IP를 입력하고 연결한다.
43
추가한 사용자 ID와 password를 입력 후 연결하면 Ubuntu로 접속된다.

macOS 사용자의 경우 CoRD와 같은 클라이언트를 사용해 접속한다.

5. GCC 설치

Ubuntu desktop 또는 Putty에서 터미널을 열어 GCC 최신 버전을 설치한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
gcc --version
# 현재 gcc 버전을 확인한다.

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
# GCC 상위 버전이 저장되어 있는 저장소를 추가하고 업데이트한다.

sudo apt-get install gcc-9
# GCC 9를 설치한다.

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 20
sudo update-alternatives --config gcc
# GCC 9 기본 컴파일러 설정

gcc --version
# 최종 GCC 버전 확인

이렇게 gcc 설치 후 vi 에디터로 간단한 코드를 구현하였는데 컴파일 과정에서 에러가 발생했다.
51
fatal error : stdio.h: No such file or directory
stdio.h에 대한 라이브러리가 설치되지 않아서 인식하지 못한다.

1
sudo apt-get update && sudo apt-get install build-essential

gcc build 관련 필수 라이브러리를 설치하면 해결된다.

6. 개발환경(OpenJDK, Eclipse, VS Code) 구축

OpenJDK 설치 (Oracle 라이선스 변경으로 OpenJDK 대체)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 아래 명령어로 JDK8 인스톨
sudo apt-get install openjdk-8-jdk

# 인스톨 완료 후 아래 명령어로 Java version확인
java-version

# Java버전이 여러 개 설치된 경우 아래 명령어를 통해 default버전 선택
sudo update-alternatives --config java

# Java환경 변수 설정 / .profile파일을 vi로 열어 다음 내용 추가
export JAVA_HOME=“/usr”
export PATH=“$JAVA_HOME/bin:$PATH

# 저장 후 아래 명령어 수행하여 .profile파일 갱신
source.profile

Eclipse 설치

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 터미널에서 아래 명령어로 firefox 인스톨
sudo apt-get install firefox

# 브라우저에서 http://www.eclipse.org/ 로 접속한 후 [다운로드] 메뉴 클릭

# 최신 버전인 Eclipse IDE YYYY-MM항목에서 Download Packages 링크 클릭
Java EE또는 Java Developers중 선택하여 64 bit 링크 클릭하여 다운로드

# 터미널에서 Downloads 폴더 이동 후 다음 명령어를 이용하여 압축 해제
(폴더 이동 명령어: cd)
tar xvfz ”다운받은 이클립스 파일명”

# 다음 명령어를 이용하여 /opt(추가 패키지를 설치할 때 사용하는 공간) 디렉토리로 이동 sudo mv eclipse /opt

# 다음 명령어를 이용하여 X윈도우를 위한 바로가기 생성
sudo vi /usr/share/applications/eclipse.desktop 후 다음 내용 추가 후 저장

[Desktop Entry]
Encoding=UTF-8
Name=Eclipse
Comment=Eclipse IDE
Exec=/opt/eclipse/eclipse
Icon=/opt/eclipse/icon.xpm
Terminal=false
Type=Application
Categories=Development
StartupNotif=true

이렇게 하면 Eclipse 설치 및 바로가기 생성까지 완료된다.

이후 샘플 코드를 작성하고 실행한다.

X윈도우에서 Applications > Development > Eclipse 실행 후
프로젝트를 추가해서 java 파일을 작성한다.
61
정상적으로 작동된다.

VS Code (Visual Studio Code) 설치

  • 브라우저에서 https://code.visualstudio.com/Download 로 접속한 후 Debian, Ubuntu
    항목 클릭

  • 최신 버전의 deb파일 다운로드
    code*.deb파일을 다운로드 하여 저장

  • 터미널에서 Downloads 폴더 이동 후 다음 명령어를 이용하여 설치
    sudo dpkg -i ”다운받은 Visual Studio Code 설치파일”

  • 만약 missing dependencies 문제가 발생하면 다음 명령어 실행
    sudo apt-finstall

  • /usr/lib/x86_64-linux-gnu 폴더로 이동하여 다음 명령어 실행하여 2개의 파일 백업

    1
    2
    sudo cp libxcb.so.1 libxcb.so.1.bak
    sudo cp libxcb.so.1.1.0 libxcb.so.1.1.0.bak
  • 파일 백업 후 다음 명령어 실행

    1
    2
    sudo sed -i 's/BIG-REQUESTS/_IG-REQUESTS/'/usr/lib/x86_64-linux-gnu/libxcb.so.1
    sudo sed -i 's/BIG-REQUESTS/_IG-REQUESTS/'/usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0
  • 두 파일을 /usr/share/code 폴더에 복사

    1
    sudo cp libxcb.so.1 libxcb.so.1.1.0 /usr/share/code
  • Applications Menu > Development > Visual Studio Code 실행

이로써 개발환경 구축을 위한 OpenJDK, Eclipse, VS Code 설치가 끝났다.

7. 이미지 생성

이미지를 생성하면 새 인스턴스를 기존 인스턴스로 복제할 수 있다.
지금까지 인스턴스에 개발 환경 구축까지 완료했으니, 저장해놓은 이미지를 새 인스턴스 생성시의 세팅에서 적용하면 된다.

고스트로 윈도우 이미지를 만들어서 윈도우 복원에 사용하는 것과 비슷하다.

이제 이미지 생성 방법이다.

이미지를 생성하기 위해서는 대상 인스턴스가 Shutdown 상태여야 한다.

t71
인스턴스 관리에서 대상 인스턴스를 선택한 후 종료시킨다.

t72
종료 재질문에 확인해준다.

t73
셧다운이 확인되었다면 이미지 생성 버튼을 누른다.

t74
인스턴스를 확인하고 이미지 이름을 설정한 후 확인해준다.

t75
인스턴스 > 이미지에 들어가서 이미지가 생성되고 있는지 확인할 수 있다.
생성에는 다소 시간이 걸린다.

이로써 이미지 생성이 끝났다!

8. Ubuntu 웹서버(nginX) 구축

웹 서버 종류에는 Apache, Nginx 등등이 있지만
아파치 점유율을 무섭게 따라잡고 있다는 엔진엑스를 설치해보기로 했다.

보안정책 수정

t81

우선 토스트에서 보안정책 수정이 필요하다.

클라이언트가 HTTP(인터넷 브라우저)로 서버에 접속하면 80포트로 접속하게 되는데,
수신에서 80포트 보안을 열어놓지 않으면 접속되지 않기 때문에 웹 서버가 무의미해진다.

nginX 설치

이제 Ubuntunginx를 설치한다.
apt-get 방식과 소스코드를 내려받아서 컴파일하는 2가지 방식이 있지만 편의를 위해 apt-get 설치를 이용하겠다.

1
sudo apt-get install nginx

위 명령어로 nginx를 설치 후

1
nginx -v

nginx 버전을 확인한다.
이로서 nginx 설치는 끝났다.

우선 nginx 사용 시의 알아둬야할 명령어이다.

1
2
3
4
5
6
7
8
9
10
# 시작
$ sudo service nginx start
# 재시작
$ sudo service nginx restart
# 중지
$ sudo service nginx stop
# 상태
$ sudo service nginx status
# 설정 reload
$ sudo service nginx reload

nginX 서비스를 시작하고 플로팅IP를 통해 브라우저로 서버를 접속해보면
Welcome to nginx! 페이지가 나올 것이다.

Nginx 기본 설정은 익스트림 매뉴얼의 포스트의 도움을 많이 받았는데, 정말 잘 설명되어 있어서 참고하면 좋겠다.

9. Ubuntu FTP 서버 설치와 사용

우분투의 기본 FTP 서버인 vsftpd를 설치하고 이용해보자. vsftpd에서 vsVery Secure을 의미한다. 기존 FTP 서버의 보안 취약점을 보완했기 때문에 붙여졌다.

1
2
sudo apt-get update
sudo apt-get install vsftpd

설치는 끝났다. 이제 vsftpd의 기본 설정값 중 몇 가지를 변경해야 한다. 설정파일 vsftpd.conf 을 편집하자.

1
sudo vi /etc/vsftpd.conf

보안을 위해 익명 사용자는 사용할 수 없도록 해야한다.

anonymous_enable 파라미터 값이 NO 인지 확인한다. 익명 사용자 접속을 허용하려면 YES로 바꿔주면 된다.

파일 읽기 뿐만 아니라 파일 쓰기도 가능하게 해야한다.

write_enable=YES 라인을 찾아서 주석 표시 #을 제거하자.

기본 설정을 마쳤다. 변경사항을 적용하기 위해서 vsftpd 서비스를 재시작하자.

1
sudo service vsftpd restart

이제 vsftpd를 사용할 수 있는 사용자를 추가할 차례이다. testuser 사용자를 추가해보자.

1
sudo adduser testuser

비밀번호 입력을 하고, Full Name[] 부터는 그냥 엔터 키를 치고 넘어가고 Y를 입력하면 된다.

FTP 서버 쪽에서 준비할 작업은 모두 끝났다. 이제 파일질라를 사용하거나 윈도우 탐색기의 ftp를 이용해서 접속할 수 있다. 이때 FTP의 사용자 ID와 패스워드는 adduser에서 추가한 사용자의 정보로 로그인하면 된다.

가이드를 마치며

Toast Handbook Guide를 베이스로 Ubuntu 관련 구글링을 참고하여 서버 스터디에서 선두주자를 맡았다. 현재도 학교에서 대여중인 토스트 서버를 사용하고 있는데, 아직까지 불편한 점을 느낀 적은 딱히 없고, 사용할 때마다 NHN의 기술력에 놀라곤 한다. NHN Toast 클라우드 센터가 국내에는 판교에 있다고 한다. 가고싶다