다음은 글은 infrean의 "자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]" 강의의 학습 목적으로 작성된 것입니다. 강의의 디테일한 내용이나, 코드 등은 빠져있을 수 있습니다.
1. EC2에 접속하여, 리눅스 명령어 다루기
1-1. 빌린 가상 서버에 접속하기
방법 1) 다운로드 받은 키 페어 (pem키)를 이용하기
1. 우리가 접속하려는 EC2의 IP 주소
2. 다운로드 받은 키 페어
3. 접속하기 위한 프로그램 (git bash 혹은 mac terminal)
바로 접속을 시도하면, 다음과 같이 에러가 뜬다...
이유는 키 페어의 권한이 디폴트로 모두 허용되어있다. 본인 말고는 모두 거부하도록 바꿔주자.
% chmod 400 file.pem
이제 다시 EC2에 접속해 보자!
% ssh -i file.pem ec2-user@3.34.91.237
( 위에서 봐뒀던 퍼블릭 IPv4 주소 👆)
그러면 "Are you sure you want to continue connecting (yes/no/[fingerprint])?"라고 물어본다.
yes 라고 대답하면, 비둘기가 맞이해줄 것이다.
방법 2) AWS 콘솔을 활용하기
콘솔을 사용하면 훨씬 쉽다ㅎ
1. 연결
2. 연결
3. 끝.
1-2. 리눅스 명령어 활용하기
( 자세한 것은 유닉스프로그래밍 강의를 들어보자.. 몇 가지 간단한 명령어만 소개해보겠당)
- mkdir : 폴더를 만드는 명령어
- ls : 현재 위치에서 폴더나 파일을 확인하는 명령어
- cd : 폴더 안으로 들어가는 명령어
- pwd : 현재 위치를 확인하는 명령어
- rmdir : 비어 있는 폴더를 제거하는 명령어
2. 가상 환경(EC2) 에 배포를 위한 프로그램 설치
1) 코드를 가져오기 위한 git
2) 우리가 만든 서버를 구동할 java
3) 데이터베이스의 역할을 할 MySQL
하위 명령어들은 Amazon Linux 2 기반의 EC2 인스턴스에서 실행될 수 있습니다.
- 패키지 관리자 yum 업데이트
- sudo yum update : 시스템의 모든 설치된 패키지를 최신 상태로 업데이트한다.
(sudo는 관리자 권한으로 (강제로) 실행, yum은 리눅스 패키지 관리 프로그램 이다.)
(mac os의 homebrew와 비슷한 패키지 관리자 이다.)
* 만약에 update 과정에서 error가 발생하면 다음 블로그를 확인하자.
https://jinhos-devlog.tistory.com/entry/You-could-try-using-skip-broken-to-work-around-the-problem
- git 설치
- sudo yum install git : Git을 설치합니다. (이후에 y (답변 yes) 라고 대답해야 한다.)
sudo yum install git -y : 이 과정을 한 번에
- java 설치
- sudo yum install java-버전숫자-amazon-corretto (-y) : Amazon Corretto JDK를 설치한다.
- MySQL 설치
- wget mysql_주소.rpm : MySQL RPM 파일을 다운로드한다.
mysql주소에는 MySQL RPM 파일의 다운로드 주소가 들어가야 한다. - sudo rpm -ivh [mysql_주소.rpm] : 다운로드한 MySQL RPM 파일을 설치합니다.
[mysql_주소.rpm]은 m 까지만 치고 [tab] 눌러주면, 자동완성 가능하다. - sudo yum install mysql-community-server : MySQL Community Server를 설치한다.
# mysql 8.0 .
wget https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm
sudo rpm -ivh mysql80-community-release-el7-5.noarch.rpm
# mysql .
sudo yum install mysql-community-server -y
* 만약에 update 과정에서 error가 발생하면 다음 블로그를 확인하자.
- sudo systemctl status mysqld : 설치 확인
현재 상태는 "inactive" -> 활성화 시켜줘야 한다.
- sudo systemctl restart mysqld : MySQL 서비스를 재시작합니다. (활성화)
- sudo cat /var/log/mysqld.log | grep "A temporary password" : MySQL 로그에서 임시 비밀번호를 찾는다.
비밀번호 찾기에서 이메일을 통해 임시비밀번호를 주는 것과 비슷하다. - mysql -u root -p : MySQL에 루트 사용자로 로그인합니다.
- ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY "비밀번호"; : 비밀번호 변경
정책 : 8자리 이상, 대문자와 소문자의 혼용, 특수문자의 사용 등을 요구한다.
주의 :이 때 변경한 비밀번호는 스프링 프레임 워크의 application.yml 파일의 dev profile의 datasource.password 에도 적용해주어야 한다!
-> 필요한 테이블 생성한다.
3. 빌드와 실행, 접속
% git clone [github 저장소 주소]
% cd [해당 directory]
3-1. Swap 설정
무료 버전 서버의 성능이 좋지가 않다.
메모리가 부족할 경우에는, 디스크를 사용할 수 있도록 해주는 설정
기본적으로 RAM을 사용하지만, 과부하의 경우 일부 DISK를 사용하게 해준다.
# swap 메모리 할당 (128M * 16 = 2GB)
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
빌드
(최초 1회)
# gradlew를 사용할 수 있도록 설정
chmod +x ./gradlew
# (x) gradle을 이용해 우리 프로젝트를 빌드. 이때 테스트를 돌리지 않는다.
./gradlew build -x test
# (해당 코드 입력) gradle을 이용해 우리 프로젝트를 빌드한다. 테스트도 돌린다.
./gradlew build
# 빌드된 프로젝트를 실행!
java -jar build/libs/~~SNAPSHOT.jar --spring.profiles.active=[프로파일명]
~~SNAPSHOT.jar 은 cd build/libs에서 확인 가능
우리의 [프로파일명]은 dev
3-2. SpringBoot Tomcat
Jar 파일을 실행했을 뿐인데 서버가 동작하는 이유는 Spring Boot에 톰캣이 내장되어있기 때문이다.
스프링 부트는 내장된 톰캣(Tomcat) 서버를 기본으로 제공한다.
이는 스프링 부트 애플리케이션을 실행할 때 별도의 외부 서버 구성이 필요없도록 도와준다.
Tomcat
: WAS(웹 어플리케이션 서버)의 종류 중 하나로 요청이 들어오면, 그 요청을 약속된 형식에 맞추어 스프링에 전달해준다.
(이전에는 스프링과 톰캣을 각각 설치하고 설정해주었어야 한다.)
-> SpringBoot의 편리함!!!
3-3. 웹 UI 접속
http://[인스턴스의 퍼블릭 IPv4 주소]:8080/v1/index.html 로 접속!!
그러나, 계속 로딩이 돌기만 한다..ㅠㅠ
인스턴스 -> 보안 탭 -> 보안그룹 클릭 -> 인바운드 규칙 편집 클릭 -> 규칙 추가
ip주소로 접속 가능!
실행중인 서버 중단
ctrl + c
빌드된 프로젝트 제거 명령어
./gradlew clean
🚨 한 가지 문제 : EC2의 터미널 창을 꺼버리면, 서버가 같이 꺼진다.....ㅠㅠ
4. 서버 상시 켜놓기
4-1. foreground와 background
쉽게 말해, 화면에 켜놓은 것이 foreground, 컴퓨터 내부적으로 실행 중인 프로세스가 background..
Foreground에서 실행 중인 작업은 사용자와의 상호 작용에 중점을 두고 있고,
Background에서 실행 중인 작업은 주로 시스템이나 서비스의 부수적인 동작을 수행한다.
4-2. Background에 서버 실행
% nohup [명령어] &
: background로 동작하게 만드는 명령어
% nohup java -jar build/libs/library-app-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev &
와 같은 식으로 쳐주면 된다.
주의 : 파일 안에 nohup.out 파일이 현재 gradle, src등의 파일과 같은 선상에 놓이게 된다.
cd .. 한 번 쳐주고 하자.
% nohup java -jar library/build/libs/library-app-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev &
ls를 확인하고 nohup.out 파일이 있으면 현재 백그라운드로 서버가 켜진 상황이다.
(로그가 이 파일 안에 작성된다.)
4-3. Background에 돌아가고 있는 서버 확인 / 종료
ps aux : 현재 실행중인 프로그램 목록을 확인할 수 있다.
ps aux | grep java : 현재 실행중인 프로그램 중 java가 들어가는 프로그램을 확인한다.
kill -9 프로그램번호 : 해당 프로그램을 종료시킨다. (2번 째 줄에 있는 46360이 프로그램 번호이다.)
---
nohup.out 파일 내용 체크하기
vi nohup.out : 편집기 열기
cat nohup.out : 터미널에 바로 출력
tail nohup.out : 파일 끝부분 출력
tail –f nohup.out : 파일 끝부분 실시간으로 출력
5. 가비아를 이용한 도메인 구입, DNS 적용
1. 가비아 회원 가입
2. 도메인 검색 후 원하는 것 구매 (5~10분 후 'My 가비아' 에서 구매 내역 확인 가능)
원하는 기간으로 변경
네임 서버 설정은 '가비아 네임서버 사용' 그대로 둘 것
3. 구매 내역 -> 관리 -> DNS 정보 -> DNS 관리 -> 설정 -> 레코드 수정 -> 레코드 추가
타입A, 호스트 www, 값/위치 IP주소 -> 확인