7. 배포하기

2024. 2. 7. 04:14· 강의/자바-스프링부트-서버개발
목차
  1. 1. EC2에 접속하여, 리눅스 명령어 다루기
  2. 1-1. 빌린 가상 서버에 접속하기
  3. 1-2. 리눅스 명령어 활용하기
  4. 2. 가상 환경(EC2) 에 배포를 위한 프로그램 설치
  5. 3. 빌드와 실행, 접속
  6. 3-1. Swap 설정
  7. 3-2. SpringBoot Tomcat
  8. 3-3. 웹 UI 접속
  9. 4. 서버 상시 켜놓기
  10. 4-1. foreground와 background
  11. 4-2. Background에 서버 실행
  12. 4-3. Background에 돌아가고 있는 서버 확인 / 종료
  13. 5. 가비아를 이용한 도메인 구입, DNS 적용
반응형

 

다음은 글은 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 

 

You could try using --skip-broken to work around the problem

yum 패키지 관리자 update 중 발생 해당 에러가 뜨는 경우가 있다. You could try using --skip-broken to work around the problem 원인 : 이러한 문제는 패키지 간의 충돌로 인해 발생한다. 조치 방법은 충돌나는 패

jinhos-devlog.tistory.com

 

- 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가 발생하면 다음 블로그를 확인하자.

https://jinhos-devlog.tistory.com/entry/MySQL-8-Community-Edition-%EC%84%A4%EC%B9%98-%EC%A4%91-%EC%98%A4%EB%A5%98 

 

MySQL 8 Community Edition 설치 중 오류

Error: Problem: conflicting requests - nothing provides libcrypto.so.10()(64bit) needed by mysql-community-server-8.0.11-1.el7.x86_64 - nothing provides libssl.so.10()(64bit) needed by mysql-community-server-8.0.11-1.el7.x86_64 - nothing provides libcrypto

jinhos-devlog.tistory.com

  • 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주소 -> 확인

반응형
저작자표시 (새창열림)
  1. 1. EC2에 접속하여, 리눅스 명령어 다루기
  2. 1-1. 빌린 가상 서버에 접속하기
  3. 1-2. 리눅스 명령어 활용하기
  4. 2. 가상 환경(EC2) 에 배포를 위한 프로그램 설치
  5. 3. 빌드와 실행, 접속
  6. 3-1. Swap 설정
  7. 3-2. SpringBoot Tomcat
  8. 3-3. 웹 UI 접속
  9. 4. 서버 상시 켜놓기
  10. 4-1. foreground와 background
  11. 4-2. Background에 서버 실행
  12. 4-3. Background에 돌아가고 있는 서버 확인 / 종료
  13. 5. 가비아를 이용한 도메인 구입, DNS 적용
'강의/자바-스프링부트-서버개발' 카테고리의 다른 글
  • 6. 배포 준비하기
  • 5. JPA 연관관계, 지연로딩 (책 요구사항 구현)
  • 4. JPA 사용하기 / 트랜잭션(Transaction)
  • 3. 역할의 분리와 스프링 컨테이너
dog-pawwer
dog-pawwer
성장 중 🌱🌱
dog-pawwer
지노개발일기
dog-pawwer
전체
오늘
어제
  • 분류 전체보기 (117)
    • FrontEnd (4)
      • Android (4)
    • BackEnd (22)
    • Cloud (15)
    • Trouble Shooting (2)
    • Computer Science (52)
      • CS 개인 공부 (19)
      • 알고리즘 (코딩테스트) (1)
      • 프로그래밍언어론 (15)
      • 분산시스템 (5)
      • 정보처리기사 (개인공부용) (3)
    • 강의 (18)
      • 자바-스프링부트-서버개발 (8)
      • UMC (Study) (9)
      • 스프링 부트와 JPA (1)
    • 🚨ERROR (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • GitHub

공지사항

인기 글

태그

  • kakao
  • RestAPI
  • oauth
  • 오어스
  • 카카오 로그인
  • 9-0
  • 스프링부트
  • springboot
  • 카카오 로그인 구현
  • java
  • 카카오

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
dog-pawwer
7. 배포하기
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.