Search

7. 생애 최초 배포하기

1. EC2에 접속하는 방법을 알아보고, EC2에 접속해 리눅스 명령어를 다뤄본다.
2. 개발한 서버의 배포를 위해 환경 셋팅을 리눅스에서 진행하고, 실제 배포를 진행한다.
3. foreground와 background의 차이를 이해하고 background 서버를 제어한다.
4. 도메인 이름을 사용해 사용자가 IP 대신 이름으로 접속할 수 있도록 한다.

EC2에 접속해 리눅스 명령어 다뤄보기

이제 지난 시간에 빌린 컴퓨터에 접속해보자!

1) 다운로드 받은 키 페어 (pem키) 를 이용하는 방법
2) AWS 콘솔을 활용해 접속하는 방법

[1] 다운로드 받은 키 페어를 이용하는 방법

1) 접속하려는 EC2의 IP 주소
2) 이전 시간에 다운로드 받았던 키 페어(이거 키 페어 설정하면 자동으로 다운로도 됨. 다운로드 폴더가면 있음)
3) 접속하기 위한 프로그램 (git CLI 혹은 Mac terminal)
그전에 빌린 키페어의 권한이 현재 열려 있어서 키페어의 권한을 닫아주는 작업을 해주자
chmod 400 경로/키페어이름.pem
Bash
복사
이렇게 해주면 키페어의 권한이 보안처리 되서 접속이 가능하다
만약 보안처리 안된채로 접속을 시도하면
이렇게 경고가 난다
이제 접근하는 명령어를 친다
ssh –i 경로/키페어이름.pem ec2-user@IP
Bash
복사
이거 그냥 ssh -i 까지 치고 그 옆으로 키페어를 드래그해서 넣으면 된다
그리고 다시 옆에 ec2-user@ 까지 치고 인스턴스 설명에 있는 사설 ip복사한거 옆에 붙여넣어주자
ssh –i /Users/lannstark/studying-developer.pem ec2-user@43.201.84.217
Bash
복사

[2] AWS 콘솔을 활용하는 방법

가장 기본적인 5가지 리눅스 명령어를 알아보자!

mkdir : 폴더를 만드는 명령어 mkdir folder1 ls : 현재 위치에서 폴더나 파일을 확인하는 명령어 ls –l : 조금 더 자세한 정보를 확인할 수 있다!
Bash
복사
만약 d가없으면 파일

folder2 / folder3 2개의 폴더를 추가로 만들고 folder2 안으로 들어가자!

mkdir folder2 mkdir folder3 ls folder2 폴더 안으로 들어가는 명령어 cd folder2 현재 위치를 확인하는 명령어 pwd 상위 폴더로 올라가는 명령어 cd.. 비어 있는 폴더를 제거하는 명령어 rmdir rmdir folder3
Bash
복사
ec2-user로 접속하면 시작하는 위치
mkdir folder1
folder1 폴더를 만든다.
cd folder1
folder1 폴더로 들어간다.
pwd
현재 위치를 출력한다. /home/ec2-user/folder1
cd ..
상위 폴더로 이동한다.
ls 또는 ls -l
현재 위치에 있는 폴더 및 파일 목록을 출력한다.
rmdir folder1
folder1을 제거한다.

배포를 위한 프로그램 설치하기

우리가 설치할 프로그램 목록

1) 코드를 가져오기 위한 git
2) 우리가 만든 서버를 구동할 java
3) 데이터베이스의 역할을 할 mysql

리눅스에서 스프링 서버 배포를 위한 프로그램을 설치하자!

sudo yum update
Bash
복사

[1] git 설치

sudo yum install git
Bash
복사

[2] java 설치

sudo yum install java-17-amazon-corretto -y java -version
Bash
복사

[3] mysql 설치

mysql8버전의 정보를 갖고온다 wget https://dev.mysql.com/get/mysql80-commnuity-release-el7-5.noarch.rpm 파일을 설치 sudo rpm -ivh mysql80-community-release-el7-5.noarch.rpm mysql 설치 sudo yum install mysql-community-server
Bash
복사
상태확인 sudo systemctl status mysqld
Bash
복사
sudo cat /var/log/mysqld.log | grep “A temporary password”
Bash
복사
mysql8의 임시 비밀번호를 확인하는 명령어
mysql –u root –p
Bash
복사
MySQL에 접속하는 명령어

임시 비밀번호를 변경하자!

ALTER user ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY “비밀번호”; ALTER user ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY “Abcd1234!;
Bash
복사

profile도 함께 변경해주어야 한다!

git을 다시 한 번 사용해 원격 저장소를 최신화 해주자!

[3] MariaDB 셋팅

sudo yum install -y mariadb105-server 잘 설치 됐는지 버전 체크 mysql --version MariaDB 서비스 확인 sudo systemctl status mariadb
Bash
복사
지금 설치는 잘됐는지 아직 활성화 되지 않았다는 뜻
MariaDB 서비스 시작 및 활성화 sudo systemctl start mariadb sudo systemctl enable mariadb sudo systemctl restart mariadb
Bash
복사
이제 동작하게 됐다!
접속
MariaDB 접속 sudo mysql -u root -p 접속하거 비번바꿔줘도 됨. 'new_password'에 비번바꿔주기. 테스트생월일 FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
Bash
복사
application.yml에 dev 비번도 맞춰서 변경해주면된다.
git을 다시 한 번 사용해 원격 저장소를 최신화 해주자!

Mysql 설치가 끝났으니, 데이터베이스 및 테이블을 설정하자!

create database library; user library; create table user ( id bigint auto_increment, name varchar(20), age int, primary key (id) ); create table book ( id bigint auto_increment, name varchar(255), primary key (id) ); create table user_loan_history ( id bigint auto_increment, user_id bigint, book_name varchar(255), is_return tinyint(1), primary key (id) ); show tables;
Bash
복사

빌드와 실행, 그리고 접속

가장 먼저 코드를 가져와야 합니다!

코드를 가져오자!

git clone [github 저장소 주소]
git clone https://github.com/studying-developer/library-app.git
Bash
복사

이제 빌드를 하고 실행을 할건데..!

현재 우리가 사용하고 있는 컴퓨터는 성능이 그렇게 좋지 않아, 빌드나 실행시 렉이 많이 걸릴 수 있다.
따라서, 메모리가 부족한 경우 디스크를 사용할 수 있도록 설정해주자!

Swap 설정

원래 RAM을 사용해야 하지만, 일부 DISK를 사용하게 해준다.
스왑(Swap) 메모리는 시스템의 물리적 메모리(RAM)가 부족할 때 사용되는 가상 메모리 공간이다. 하드 디스크나 SSD에 스왑 파일 또는 스왑 파티션을 만들어 사용한다. 스왑 메모리는 실제 RAM보다 속도가 느리지만, 시스템의 안정성을 높이고 메모리 부족 시 시스템이 멈추지 않도록 돕는다.
# swap 메모리를 할당한다 (128M * 16 = 2GB) sudo dd if=/dev/zero of=/swapfile bs=128M count=16 # 스왑 파일에 대한 권한 업데이트 sudo chmod 600 /swapfile # swap 영역 설정 sudo mkswap /swapfile # swap 파일을 사용할 수 있도록 만든다. sudo swapon /swapfile # swap 성공 확인 sudo swapon -s
Bash
복사
우선 프로젝트 폴더로 들어가야한다
cd 내려받은폴더이름
Bash
복사

빌드를 준비하자!

ls 치고 gradlew 있는지 확인
Bash
복사
chmod +x ./gradlew
Bash
복사
gradlew를 사용하기 위해 실행할 수 있도록 설정한다.

빌드

./gradlew build -x test
Bash
복사
gradle을 이용해 우리 프로젝트를 빌드한다. 이때 테스트를 돌리지 않는다.
./gradlew build
Bash
복사
gradle을 이용해 우리 프로젝트를 빌드한다. 테스트도 돌린다.

빌드된 프로젝트 실행하기

java -jar build/libs/library-app-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev
Bash
복사
빌드된 우리의 프로젝트를 실행시킨다!
와~~!

Jar 파일을 실행만 했는데 서버가 동작한다!

Spring Boot에서는 톰캣이 내장되어 있어 가능하다!

톰캣

웹 애플리케이션 서버 (Web Application Server, WAS)의 한 종류
요청이 들어오면 그 요청을 약속된 형식에 맞추어 스프링에 전달해준다!

이제 서버가 실행되었으니 웹 UI에 들어가보자

http://제공된AWS퍼블릭IPv4:8080/v1/index.html
근데 보안때문에 접근안된다
이렇게 규칙추가. ip는 전체허용으로 해놨는데 내 ip만 넣어도됨.
와 접속된다!!!
사용자 등록도 되고
목록도 나옴

실행중인 서버 중단하기

ctrl + c
Bash
복사
무언가를 중단하는 신호

빌드된 프로젝트 제거하기

./gradlew clean
Bash
복사
현재 빌드되어 있는 결과물을 제거한다.
근데 큰 문제가 있다.
aws 창을 닫으면 서버도 같이 닫힌다는 점..

종료되지 않는 실행

AWS EC2 접속을 종료해도 서버는 실행되어야 한다!

foreground vs background

foreground

우리가 보고 있는 프로그램
문서를 보고 있다면, PDF 프로그램이 foreground 프로그램
인프런 강의를 보고 있다면, 브라우저가 foreground 프로그램

background

우리가 보고 있지 않은데 실행중인 프로그램
컴퓨터에서 조용히 돌아가고 있는 백신이 background 프로그램
음악을 틀고, 게임을 한다면 음악 재생 프로그램이 background 프로그램이다.

background로 동작하게 만드는 명령어

nohup [명령어] &
Bash
복사
nohup java -jar build/libs/library-app-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev &
Bash
복사
보면 nohup.out 파일이 생기는데 원래 실행시키면 나오는 로그들이 저기파일로 간거다.
근데 git 프로젝트에 들어가기에는 애매해서 상위폴더에서 만들어주는게 좋다.
지금 위치에선 제거해주자

파일을 제거하는 명령어

rm : 파일을 제거하는 명령어 rm nohup.out
Bash
복사

그렇다면 background로 동작하는 서버를 어떻게 끌까?

작업관리자 명령어

현재 실행중인 프로그램 목록을 확인할 수 있다. ps aux 현재 실행중인 프로그램 중 java가 들어가는 프로그램을 확인한다. ps aux | grep java
Bash
복사

종료 명령어

해당 프로그램을 종료시킨다 kill -9 프로그램번호
Bash
복사
이제 상위폴더에서 nohup.out 파일 생성되게
cd ../ nohup java -jar javaServerStudy/build/libs/library-app-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev &
Bash
복사

파일의 내용물을 확인해보자!

1) 파일에 직접 들어가 내용물을 읽는 방법
2) 파일에 들어가지 않고, 현재 접속한 터미널에서 내용물을 확인하는 방법

파일에 직접 들어가는 명령어

리눅스 편집기인 vim을 사용하여 파일을 연다. vi nohup.out
Bash
복사
esc 누르고 :q 치면 vi편집기에서 나가진다
Bash
복사
파일에 있는 내용물을 모두 출력하는 명령어 cat nohup.out cat 파일 내용물의 양이 많지 않고, 실시간 업데이트가 잘 되지 않는 파일을 확인할 때
Bash
복사
tail 현재 파일의 끝 부분을 출력하는 명령어 tail nohup.out
Bash
복사
tail –f : 현재 파일의 끝 부분을 실시간으로 출력해준다! tail –f nohup.out
Bash
복사

가비아를 이용한 도메인 구입, DNS 적용

우선 가비아에 회원가입을 해야 합니다!

메인 페이지 > My 가비아

레코드 기록

타입 : A

이 이름을 주어지는 IP (43.201.84.217)로 연결해줘!

호스트 : www

나중에 www.도메인이름:8080 으로 접속할 수 있게 된다!
http://www.studying-developer.shop:8080

혹시 접속이 잘 안된다면, AWS 보안 그룹을 확인하자!

정리

1. EC2에 접속하는 방법을 알아보고, EC2에 접속해 리눅스 명령어를 다뤄본다.
2. 개발한 서버의 배포를 위해 환경 셋팅을 리눅스에서 진행하고, 실제 배포를 진행한다.
3. foreground와 background의 차이를 이해하고 background 서버를 제어한다.
4. 도메인 이름을 사용해 사용자가 IP 대신 이름으로 접속할 수 있도록 한다.
리눅스 명령어 정리
mkdir : 폴더를 만드는 명령어 mkdir folder1 ls : 현재 위치에서 폴더나 파일을 확인하는 명령어 ls –l : 조금 더 자세한 정보를 확인할 수 있다! cd : 폴더 안으로 들어가는 명령어 cd folder2 cd .. : 상위 폴더로 올라가는 명령어 pwd : 현재 위치를 확인하는 명령어 mdir : 비어 있는 폴더(디렉토리)를 제거하는 명령어 rmdir folder3 관리자의 권한으로 설치되어 있는 여러 프로그램을 최신화한다. sudo yum update 관리자의 권한으로 프로그램을 설치한다. sudo yum install 프로그램이름 sudo systemctl status 프로그램 : 프로그램의 상태를 확인한다. sudo systemctl status mysqld sudo systemctl restart 프로그램 : 프로그램를 재시작한다. sudo systemctl restart mysqld chmod : 파일이나 폴더의 권한을 변경한다. gradlew를 사용하기 위해 실행할 수 있도록 설정한다. chmod +x ./gradlew foreground로 실행중인 프로그램을 중단하는 신호 ctrl + c 명령어를 background로 실행시킨다. nohup [명령어] & rm : 파일을 제거하는 명령어 rm nohup.out vi : 리눅스 편집기인 vim을 사용하여 파일을 연다. vi nohup.out cat : 파일에 있는 내용물을 모두 출력하는 명령어 cat nohup.out tail : 현재 파일의 끝 부분을 출력하는 명령어 tail nohup.out tail –f : 현재 파일의 끝 부분을 실시간을 출력해준다! tail –f nohup.out ps aux : 현재 실행중인 프로그램 목록을 확인할 수 있다. 현재 실행중인 프로그램 중 java가 들어가는 프로그램을 확인한다. ps aux | grep java kill -9 프로그램번호 : 해당 프로그램을 종료시킨다. ./gradlew build : 프로젝트를 빌드한다. ./gradlew build –x test : 프로젝트를 빌드하는데, 테스트는 생략한다. ./gradlew clean : 현재 빌드된 결과물을 제거한다.
Bash
복사

*참고