.pem 파일 형식의 키 페어git bash or mac terminal).pem 파일 형식의 키 페어를 현재 조작하고자 하는 프로젝트 파일의 root 디렉토리에 붙여넣고, (예: 지금 프로젝트의 경우 library-app 에 붙여넣기) .gitignore 에 추가해주기인스턴스 > 연결 버튼을 누르면 나오는 화면에서 SSH 클라이언트 버튼을 누른 후 아래와 같이 실행
chmod 400 "sshkey.pem" 를 입력해서 키를 공개적으로 볼 수 없도록 설정하기 (보안 문제)
인스턴스 > 연결 버튼을 누르면 나오는 화면에서 연결 버튼을 한번 더 누르기
mkdir <생성하고자하는 폴더이름> : <생성하고자하는 폴더이름>의 폴더를 만듦ls : 현재 위치에서 폴더나 파일을 확인하는 명령어cd : 위치 이동 명령어 (.. 로는 한 단계 뒤로 갈 수 있고, cd 뒤에 이동하고자 하는 폴더명을 붙여서 사용하면 해당 폴더로 이동함)rmdir <제거하고자하는 폴더이름> : <제거하고자하는 폴더이름>의 폴더를 제거Git (git clone 으로 코드를 가져오기 위해), Java (서버를 작동시키기 위해), MySQL (데이터베이스의 역할을 수행하기 위해) 을 설치해야 함sudo yum update : 관리자 권한으로 (sudo), yum (리눅스 패키지 관리 프로그램)을 업데이트해주자sudo yum install git : Git 다운로드
sudo yum install java-11-amazon-corretto : Java 다운로드
wget https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm)을 입력 시 현재는 지원이 종료되어서 존재하지 않는 버전이라 잘못된 요청을 뜻하는 400번대 오류가 발생함.https://dev.mysql.com/downloads/repo/yum/에 접속해서 정확한 최신 정보를 확인해야 한다는 것을 확인함
wget https://dev.mysql.com/get/mysql80-community-release-el6-11.noarch.rpm 로 다시 설정해서 다운로드 시도를 해봄
mysql80-community-release-el6-11.noarch.rpm라는 설치파일이 설치된 것이므로 해당 파일을 실행해서 설치해줘야 한다.
sudo rpm -ivh mysql80-community-release-el6-11.noarch.rpm 을 입력해서 설치해주면 아래와 같이 설치된다.
sudo yum install mysql-community-server 를 입력해서 설치하려고 했음에도 실패함. 원인
- 설치를 시도한 MySQL 패키지들은 el6 즉, Red Hat Enterprise Linux 6 용이지만, 현재 OS인 Amazon Linux 2023은 RHEL 9 계열 기반이다.
- 즉, MySQL 패키지들에서는 libssl.so.10, libcrypto.so.10 같은 오래된 라이브러리(EL6 기반) 를 요구하고, 현재 OS에는 libssl.so.3, libcrypto.so.3 같은 최신 라이브러리만 설치돼 있어서 충돌이 발생함
해결방법
cat /etc/os-release로 현재 OS 종류 및 버전 확인
▷ EL6용 MySQL 패키지를 설치하려고 해서 OS와 맞지 않은 것을 확인함sudo dnf install -y https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm: MySQL RHEL 9용 repo 설치하기
☞ RHEL 9 기반인 Amazon Linux 2023과 호환됨sudo dnf clean all,sudo dnf makecache: 메타데이터 삭제sudo dnf install -y mysql-community-server --nogpgcheck: MySQL 8 설치 (GPG 키 인증 생략)sudo systemctl status mysqld로 설치 확인
✩ Amazon Linux 시스템에서는 MySQL 서비스 이름이mysqld라고 함!
sudo systemctl restart mysqld
sudo grep 'temporary password' /var/log/mysqld.log
mysql -u root -p 로 접속 후 6번에서 확인한 비밀번호 넣기ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<비밀번호>';
application.yml 파일의 MySQL 비밀번호 설정도 함께 업데이트해야 함 datasource:
url: "jdbc:mysql://localhost/library"
username: "root"
password: "<비밀번호>"
use library;
create table user
(
id bigint auto_increment,
name varchar(25),
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), -- 0이면 대출중, 1이면 반납됨
primary key (id)
)
git clone https://github.com/SpringPeeps/study.git 으로 클론해서 가져오기
SWAP 설정: 현재 대여해서 사용하고 있는 free tier 서버는 성능이 그렇게 좋지 않아서 빌드나 실행 시 렉이 많이 걸릴 수 있음. 따라서, 메모리가 부족한 경우에는 디스크를 사용해서 실행할 수 있도록 설정해줘야 함!
즉, 원래 프로그램은 RAM에서 실행됨. 그러나 우리가 free tier로 구매한 RAM은 1GB 정도밖에 안됨. 그러므로 RAM이 부족해서 터지는 상황을 방지하기 위해서 메모리가 부족한 경우에는 디스크에서도 실행할 수 있도록 설정함.
# swap 메모리를 할당
sudo dd if=/dev/zero of=/swapfile bs=128M count=16
# swap 파일에 대한 권한 업데이트
sudo chmod 600 /swapfile
# swap 영역 설정
sudo mkswap /swapfile
# swap 파일 사용 가능하도록 하기
sudo swapon /swapfile
# swap 성공 확인
sudo swapon -s

chmod +x ./gradlew, ./gradlew build -x test 명령어로 build를 진행해야 함
library-app-0.0.1-SNAPSHOT.jar로 서버를 시작한다. (해당 파일이 개발한 소스코드를 하나로 합쳐둔 아티펙트에 해당함)
java -jar build/libs/library-app-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev 로 서버 시작
.jar 파일만 실행해도 서버가 바로 시작되는 것임!인바운드 규칙이 바로 서버에 접속할 수 있는 포트 번호를 의미함! 지금은 22번 포트만 열려있으므로 규칙을 편집해줘야 함.


http://<publicIP>:8080/v1/index.html로 접속해서 확인하기
Ctrl + C 로 종료하면 됨!

./gradlew clean 으로 삭제해주기현재 배포된 서버의 문제점
우리가 EC2에 접속을 끊으면 서버도 함께 종료됨
nohup <명령어> & : 리눅스에서 해당 프로그램을 background에서 동작하도록 하는 명령어<명령어> 자리에 서버 시작 명령어를 넣어서, nohup java -jar build/libs/library-app-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev & 를 입력하면 됨!
nohup.out : 현재 background에서 실행중인 서버의 로그가 화면에 찍히는 대신, 이 폴더에 저장되게 됨. ps aux : 현재 실행중인 프로그램(서버) 목록 확인ps aux | grep java : 현재 실행중인 프로그램(서버) 목록 확인
kill -9 <프로그램번호>: 위의 사진에서는 74322, 즉 두번째로 나오는 번호가 프로그램의 번호이다.
nohup.out 파일의 내용물 확인하기방법 1: 파일에 직접 들어가서 내용 읽기vi nohup.out : vi는 리눅스 편집기인 vim을 사용하여 파일을 연다. vim 편집기에서 나가는 방법: Esc + :q + Enter
방법 2: 파일에 들어가지 않고, 현재 접속한 터미널에서 내용 확인cat nohup.out : cat 은 파일에 있는 내용을 전부 다 출력하는 명령어이다.
cat 으로 전체 출력해버리면 한참을 출력만 해야할 것이고, 최신 로그를 확인하기 위해 또 한참을 위로 올려야 할 것이다. 이를 방지하기 위해 tail nohup.out 명령어를 사용해서 최신 몇줄만 출력할 수 있다.
tail -f nohup.out 이라고 옵션을 줘서 실행하면 된다.
DNS 관리툴 버튼을 눌러주기.
설정 버튼 클릭
레코드 수정 버튼 클릭
확인 버튼 클릭 후 저장 버튼 클릭
http://www.backendbase.site:8080/v1/index.html 로 접속하면 들어가져야 함mkdir : 폴더를 만든다. ls : 현재 위치에서 폴더나 파일을 확인한다. ls -l : 조금 더 자세한 정보를 확인할 수 있다. cd : 폴더 안으로 들어간다. cd .. : 상위 폴더로 올라간다. pwd : 현재 위치를 확인한다. rmdir : 비어 있는 폴더(디렉토리)를 제거한다. sudo yum update : 관리자의 권한으로 설치되어 있는 여러 프로그램을 최신화한다. sudo yum install 프로그램_이름 : 관리자의 권한으로 프로그램을 설치한다. sudo systemctl status 프로그램 : 프로그램의 상태를 확인한다. sudo systemctl restart 프로그램 : 프로그램을 재시작한다. chmod : 파일이나 폴더의 권한을 변경한다. ctrl + c : foreground로 실행 중인 프로그램을 중단하는 신호이다. nohup [명령어] & : 명령어를 background로 실행시킨다. rm : 파일을 제거한다. vi : 리눅스 편집기인 vim을 이용해 파일을 연다. cat : 파일에 있는 내용물을 모두 출력한다. tail : 현재 파일의 끝부분을 출력한다. tail -f : 현재 파일의 끝부분을 실시간으로 출력한다. ps aux : 현재 실행 중인 프로그램 목록을 확인한다. ps aux \| grep java : java가 들어가는 프로그램 목록을 확인한다. kill -9 프로그램_번호 : 해당 프로그램을 종료시킨다. ./gradlew build : 프로젝트를 빌드한다. ./gradlew build -x test : 프로젝트를 빌드하는데, 테스트는 생략한다. ./gradlew clean : 현재 빌드된 결과물을 제거한다.