EC2 인스턴스에 프로젝트 build 방법 익히기

  • build 하기 전에 EC2에 설치돼 있는 MySQL에 테이블과 필드 생성해놓기
  • build 하기 전에 MySQL을 백그라운드에서 실행해놓기 (sudo systemctl start mysql)
  • build 하기 전에 MySQL이 사용할 port 3306을 인스턴스 보안 그룹의 인바운드 규칙에 생성해놓기

1. 

프로젝트 디렉토리에서 실행

./gradlew build

- gradlew build 명령어를 사용해 gradlew를 실행 한다.

- 앞에 붙는 .은 현재 디렉토리를 뜻한다. (무언가의 실행할 때의 명령어로 봐도 무방)

- gradlew의 ew는 excute wrapper의 줄임


> 이때 Permission denied가 나온다면 gradlew 파일의 실행권한이 없는 것으로 

chmode +x gradlew 명령어로 파일에 실행권한을 부여한 다음 다시 build 명령어 실행

  • chmode > change mode
  • + > 권한부여 명령어
  • x > excute의 x

잠시 후 해당 문구가 출력 된다면 이후의 글은 볼 필요 없다.


2.

build가 실패할 때의 대처

  1. root project > [여기에 스크린샷과 같이 문구들이 나와준다면 일단은 진행이 되는 상태]
  2. root project > [여기에 아무 문구가 나오지 않는다면 빌드 실패의 징조]

위의 2번 또는 다음 스크린샷과 같은 상태에서도 멈춰있게 된다면 그 역시 build가 실패할 징조이다.


이유는 ?

- RAM이 부족하기 때문, 프리티어로 생성한 인스턴스이기에 프로젝트의 용량이 커진다면 이와같이 build에 실패할 수 있다. 다음글을 보고 실제 RAM이 아닌 SWAP 기능을 이용해 적은 메모리로도 build를 성공시킬 수 있도록 설정해보자.

 

2024.06.16 - [Java/배포해보자] - EC2 Swap 기능 활용 (feat. build 실패)

 

EC2 Swap 기능 활용 (feat. build 실패)

EC2의 Swap 기능이란 ? EC2 인스턴스에 내 프로젝트를 빌드할때 실패를 경험함과 동시에 해결하기 위해 알게된 기능이다.Swap은 일반적으로 메모리 부족 상황에서 시스템의 안정성을 유지하기 위해

subray.tistory.com

 

 

 

 

 

EC2의 Swap 기능이란 ? 

EC2 인스턴스에 내 프로젝트를 빌드할때 실패를 경험함과 동시에 해결하기 위해 알게된 기능이다.

Swap은 일반적으로 메모리 부족 상황에서 시스템의 안정성을 유지하기 위해 사용되는 기능이다. 
물리적인 RAM이 부족할 때 사용되는 가상 메모리 공간을 의미한다.

가령 1초에 1의 일을 처리하는 RAM이 있을 때, 1초에 2의 일을 요구받으면 과부하가 발생할 수 있다. 이 때, RAM이 1초에 처리하는 일의 절반을 실제 디스크 공간 (HDD 또는 SSD)에 임시로 저장한 후, RAM이 이전 작업을 완료하면 해당 임시 데이터를 다시 불러와 처리함으로써, 느리지만 과부하 없이 작업을 완료할 수 있게 한다.

 

1. 권장 Swap 공간 확인하기

- 내가 사용하는 인스턴스 유형인

t2.micro는 RAM이 1GB이다.

그렇기에 권장 스왑 공간인 2GB까지만 늘려주도록 하자.

명령어 free로 실제 RAM의 크기를 확인할 수 있다. (980420KB)

 



2. swapfile 생성하기

 

sudo dd if=/dev/zero of=/swapfile bs=128M count=16

- 위 명령어 통해 swapfile 생성하기

  1. dd > [Data Duplicator] unix 계열 시스템에서 데이터를 복사하거나 변환하는 명령어
  2. if > [Input File] /dev/zero[각주:1] 지정
  3. of > [Output File] /swapfile 지정
  4. bs > [Block Size] swapfile의 크기 지정
  5. count > swapfile의 개수

풀어보자면 dd 명령어에 'if=/dev/zero' 옵션을 사용해 '/dev/zero' 장치에서 0으로 채워진 데이터를 읽어와 'of=swapfile' 옵션으로 지정한 파일에 해당 데이터를 복사한다. 이때 bs를 통해 적절한(내 프로젝트의 규모에 따라) swapfile의 크기를 지정해주고 count를 통해 swapfile로 지정한 Block의 개수를 지정해 총 사용량 용량을 맞춰준다. (지금은 2GB)

 

이렇게 생성된 Swapfile들이 RAM과 같은 역할을 해주게 되는 것.



3. swapfile 권한설정

사용 설정

- sudo chmod 600 /swapfile로 사용자의 읽기 권한 (Read): 숫자 4 + 쓰기 권한 (Write): 숫자 2 = 6을 지정해주자.

- sudo mkswap /swapfile 만들어둔 /swapfile을 swapfile의 영역으로 지정해주자.


4. 활성화 정보 확인

 

 

- sudo swapon -s를 입력해 내가 지정한 swapfile의 용량으로 설정됐는지 확인하자.


Swap 설정 완료 후 다시 build 해보기 !

2024.06.16 - [Java/배포해보자] - [배포 4] 프로젝트 build

 

[배포 4] 프로젝트 build

EC2 인스턴스에 프로젝트 build 방법 익히기build 하기 전에 EC2에 설치돼 있는 MySQL에 테이블과 필드 생성해놓기build 하기 전에 MySQL을 백그라운드에서 실행해놓기 (sudo systemctl start mysql)build 하기 전

subray.tistory.com

 


그렇다면 부족한 RAM을 Swap으로 해결하는 것이 항상 해답일 수 있을까 ?

 

Swap 공간은 RAM 보다 접근 속도가 느리기 때문에 실제 RAM 보다 성능이 떨어질 수 있어 실질적인 대안책은 아니다. 정교한 Swap 설정을 통해 메모리 부족으로 인한 시스템 다운을 방지하는 용도로 사용하는 것이 현명하다.

 

지금은 우리가 대규모 서버나 데이터베이스 서버를 운용하는 것이 목적이 아닌, 프로젝트 build를 성공해보는 것이 목적이기 때문에 사용했다. 추후 실제 서비스되는 프로그램에서의 사용은 조금 더 신중해야할 것 같다.
  1. Unix 및 Unix 계열 시스템에서 사용되는 가상 장치(Virtual Device) 중 하나이다. 이 장치는 데이터를 읽을 때마다 항상 0(제로) 바이트만 반환한다. [본문으로]

EC2 인스턴스에 프로젝트 clone 방법 익히기


1. SSH 생성하기

EC2 인스턴스에 접근할 때도 SSH를 사용했듯, 내 github에 안전하게 접근하고 앞으로 편리하게 프로젝트를 가져오기
위해 SSH를 등록해놓으면 편하다.

 

1. 생성 위치로 이동

 

cd ~/.ssh

- 위 명령어로 /home/ubunbtu/.ssh[각주:1]

위치로 이동한다. (여기서 앞에 존재하는 물결표시/home/ubuntu 를 의미한다)


2. SSH 생성

 

ssh-keygen -t ras -C "이메일주소"

- ssh-keygen 명령어로 생성시작, -t로 SSH 유형 선택 (rsa 선택함, ED25519 등도 선택가능) -C[각주:2]에 메일 입력


키의 저장 위치 및 저장 이름 지정, 입력 않고 Enter키로 기본 위치에 기본 이름으로 저장

 


SSH에 접근하기 위한 암호지정, 현재는 Enter 키로 지정 없이 넘어간다.


비밀번호 재입력 역시 Enter


 

- 생성과 동시에 이렇게 randomart 키가 나타나게 된다. 이는 복잡한 키를 사용자가 편하게 알아봐 키의 무결성을 확인하기 위해 사용된다.[각주:3]


이로써  비밀키(id rsa)와 공개키 (id rsa.pub) 가 생성된다.


2. github에 SSH 입력하기

1. 생성한 SSH 복사

- cat[각주:4]  명령어로 생성한

SSH 공개키 출력 및 복사

 

cat id_rsa.pub


2. SSH 등록하기

 - 순서대로

Settings > SSH and GPG Keys > New SSH key 를 통해 등록해준다.

 

 

 

 

 

 

 


clone 해오기

 

 

 

 

 

 

1. 가져올 Repository의 SSH 클론 주소 복사

- git@github.com:사용자이름/저장소이름.git 이기 때문에 복사없이 추후에 그냥 입력해도 무방하다.

 

 

 

 

 

 


2. clone 하기

git clone git@github.com:사용자이름/저장소이름.git

3. 선택지 선택

- yes로 clone 진행

- (fingerprint[각주:5])

 



추가적으로.. (workspace 만들어 프로젝트 관리하기)

 

1. mkdir(make directory) 명령어로 ~(위에서도 언급했듯 /home/ubuntu를 뜻함) 하위에 workspace를 생성

 

2. mv 설치디렉토리위치/프로젝트디렉토리명 ~/workspace

예시)
mv ~/.ssh/my_project ~/workspace

 

  1. 유닉스 및 리눅스에 SSH 관련 파일을 저장하는 표준 디렉토리이다. [본문으로]
  2. Comment / 여기서는 말 그대로 주석으로 사용돼 현재 생성하는 SSH의 사용용도를 사용자가 구분하기 위해 입력하는 용도이다.
    추후 SSH 키의 마지막에 해당 이메일이 나타나게돼 구분할 수 있다. [본문으로]
  3. 같은 SSH 타입과 같은 주석을 사용했다면 항상 같은 randomart가 생성되기 때문에 해당 그림?을 통해 키가 변경되진 않았는지 아니면 내가 사용하려는 키가 맞는지를 편하게 확인하기 위해 생성된다고 한다. 지금 당장 프로젝트 한개를 clone 해보려는 입장에서는 사용하지 않을 기능. [본문으로]
  4. concatenate (연쇄시키다), 파일의 내용을 터미널에 출력하는 명령어 [본문으로]
  5. fingerprint란 해시함수에 공개키를 적용시켜 얻은 '지문'으로 선택지에서 fingerprint를 선택할 경우 서로의 '지문'을 대조해 공개키의 일관성이 유지되고 있는지 직접확인한 다음 clone 할 수 있게 해준다. (서로 같은 공개키 즉, id_rsa.pub를 갖고 있기 때문에 '지문'의 대조가 가능함) [본문으로]
목표 설정
  • AWS를 이용한 백엔드 프로젝트 배포
배포 방식 
  • AWS의 EC2를 이용해 배포
    • EC2 - "Elastic Compute Cloud"의 약어로, 아마존 웹 서비스(Amazon Web Services, AWS)에서 제공하는 클라우드 컴퓨팅 서비스이다. EC2를 사용하면 가상 컴퓨팅 환경을 생성하고 실행할 수 있다.
EC2 >  AWS에서 가상의 컴퓨터 환경을 빌려다 쓰는 것

 

배포 순서

1. EC2 를 이용해 EC2 인스턴스 생성 (클래스를 이용해 인스턴스 생성하듯 EC2 드가서 인스턴스 생성하자)

1 - 1. 보안 그룹 및 키 페어 설정 (보안 그룹은 인스턴스에 대한 인바운드 및 아웃바운드 트래픽을 제어)

  • 인스턴스에 액세스할 수 있는 IP 주소 범위
  • 포트 및 프로토콜
  • 키 페어 생성(인스턴스에 접근하기 위해 사용되는 프로토콜로 SSH 또는 RDP 같은 원격 액세스를 뜻함)

2024.06.03 - [Java/배포해보자] - 1. EC2 를 이용해 EC2 인스턴스 생성

 

1. EC2 를 이용해 EC2 인스턴스 생성

EC2 인스턴스 생성 방법 익히기인스턴스 이름 생성 방법AMI 선택 방법     1.EC2 콘솔의 첫 화면에서 인스턴스 시작 버튼 클릭       2.인스턴스의 이름 지정- 인스턴스명을 보고 어떠한 용도

subray.tistory.com


2. 인스턴스 연결 (인스턴스의 운영 체제에 액세스해 필요한 소프트웨어(내 프로젝트)를 설치하거나 구성하자)

  • SSH 또는 RDP를 사용해 연결

2024.06.08 - [Java/배포해보자] - 2. EC2 인스턴스 연결 (puTTY 이용)

 

2. EC2 인스턴스 연결 (puTTY 이용)

EC2 인스턴스 연결 방법 익히기puTTY를 이용한 연결방법- 리눅스를 통하면 간편하게 접속이 가능하지만 나는 윈도우즈를 사용하기 때문에 puTTY를 이용해 접속해 보자.- EC2 인스턴스 생성

subray.tistory.com


3. 애플리케이션 설치 및 설정

  • 웹 서버
  • DB
  • 애플리케이션 서버 등의 소프트웨어 설치 및 구성

2024.06.09 - [Java/배포해보자] - [배포 3] 애플리케이션 설치 및 설정

 

[배포 3] 애플리케이션 설치 및 설정

EC2 인스턴스에 필요한 애플리케이션 설치 및 설정 방법 익히기git 설치2024.06.09 - [Java/배포해보자] - [배포 3] 애플리케이션 설치 및 설정_EC2에 git 설치 [배포 3_git 설치] 애플리케이션 설치 및 설정

subray.tistory.com


4.프로젝트 clone

  • github에서의 clone 해오기

2024.06.16 - [Java/배포해보자] - [배포 4] 프로젝트 clone

 

[배포 4] 프로젝트 clone

EC2 인스턴스에 프로젝트 clone 방법 익히기1. SSH 생성하기EC2 인스턴스에 접근할 때도 SSH를 사용했듯, 내 github에 안전하게 접근하고 앞으로 편리하게 프로젝트를 가져오기 위해 SSH를 등록해놓으면

subray.tistory.com


5. 프로젝트 build

2024.06.16 - [Java/배포해보자] - [배포 4] 프로젝트 build

 

[배포 4] 프로젝트 build

EC2 인스턴스에 프로젝트 build 방법 익히기build 하기 전에 EC2에 설치돼 있는 MySQL에 테이블과 필드 생성해놓기build 하기 전에 MySQL을 백그라운드에서 실행해놓기 (sudo systemctl start mysql)build 하기 전

subray.tistory.com

 

EC2 인스턴스 생성 방법 익히기

  • 인스턴스 이름 생성 방법
  • AMI 선택 방법

 

 

 

 

 

1.

EC2 콘솔의 첫 화면에서 인스턴스 시작 버튼 클릭

 

 

 

 

 


 

 

2.

인스턴스의 이름 지정

- 인스턴스명을 보고 어떠한 용도로 쓰이는지 알아볼 수 있도록 유니크한 명명규칙을 정해주는 것이 좋다

 


 

 

 

 

3.

AMI(Amazon Machine Image) 선택

- Windows 보단 오랜 기간 서버 환경의 구성에 사용돼 안정성과 신뢰성을 보장받고 커널의 유연성으로 인해 여러 서버 환경에 맞게 사용자 정의할 수 있는 이유로 유닉스 또는 리눅스 기반을 선택하는데 AWS에서는 리눅스의 배포판인 Ubuntu가 가장 많이 사용된다.

 

 

 

 


 

 

4 - 1.

새 키 페어 생성을 눌러 키 페어 생성 창을 띄우기



 

4 - 2.

키 페어 유형 선택

- ED25519를 선택

(이전엔 소인수 분해 문제에 기반하여 동작하는 RSA만 존재했으나 2011년 이후 타원 곡선 암호학에 기반한 ED25519 알고리즘이 출시되어 더 작은 키 크기로도 높은 보안 수준을 제공하여 리소스 사용량을 줄이고 봉나을 강화했다)

 

키 파일 유형 선택

- .pem을 선택

(pem >  Unix 및 Linux 사용,

  ppk > 주로 puTTY와 같은

Windows용 SSH 클라이언트에서 사용)

 

키 페어의 RSA는 레거시 시스템과의 호환성을 위해,
또는 특정 보안 정책을 준수하기 위해 여전히 선택되기도 한다.

 

5.

네트워크 설정

- SSH 트래픽 허용을 위치 무관으로 해 누구나 접근 가능하게 설정했으나 본인만 접근하게 하고 싶다면 내 IP로 설정

- HTTPS 및 HTTP에서도 접근 가능하도록 트래픽 허용에 체크했다.

 

+ 보안 그룹 생성과 동시에

스크린샷의 우측위 편집을 눌러

게시글과 같이 인바운드 규칙을

미리 편집해놓으면 편하다.

(인스턴스 생성 후 수정해도 무방)


 

 

 

 

 

 

 

 

 

 

 

 

 

6.

인스턴스 생성

및 성공

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


키 페어 설정에 있어 함께 알아두면 좋을 정보

 

이와 같이 AMI가 Windows 일 경우

ED25519는 선택할 수 없다.

 

그럼 AMI가 Windows 일 때

RSA 라면 ?? 똑같은 SSH 방식인데 사용이 안돼야 하지 않나 ?


이와 같이 RSA는 키 페어를 사용해 관리자 암호를 복호화해서 Windows 인스턴스에 접근할 수 있게 해준다.

 


 

2024.06.08 - [Java/배포해보자] - 2. EC2 인스턴스 연결 (puTTY 이용)

 

2. EC2 인스턴스 연결 (puTTY 이용)

EC2 인스턴스 연결 방법 익히기puTTY를 이용한 연결방법- 리눅스를 통하면 간편하게 접속이 가능하지만 나는 윈도우즈를 사용하기 때문에 puTTY를 이용해 접속해 보자.- EC2 인스턴스 생성

subray.tistory.com

 

EC2 인스턴스 연결 방법 익히기

  • puTTY를 이용한 연결방법

- 리눅스를 통하면 간편하게 접속이 가능하지만 나는 윈도우즈를 사용하기 때문에 puTTY를 이용해 접속해 보자.

- EC2 인스턴스 생성 시 키 페어 유형을 pem으로 했다면 ppk로 변경하고시작 하자. 

2024.06.08 - [Java/배포해보자] - 키 페어 유형 변경(puTTYgen 이용)


 

 

 

 

 

1.

puTTY 실행 후 키 불러오기

- 화면과 같이 Auth의 Credencials를 찾아 들어가

Private key fila for authentication에 .ppk 확장자의 키 페어를 넣어준다.

 

 

 

 

 

 


2.

AWS 에서 내 인스턴스의 퍼블릭 IPv4 주소 가져오기

- 이를 통해 외부(내 컴퓨터) 에서 해당 인스턴스에 접속하거나 통신할 수 있다.



3.

인스턴스에 접근할 세션명 정해 저장하기

- 해당 인스턴스에 접속할 때 계속해서 설정해줄 필요 없이 세션명을 정해 저장해놓으면 앞으로 해당 세션명으로 접근이 가능하다.

  • puTTY의 Session으로 들어간다.
  • Host Name에 퍼블릭 Ip를 넣어준다.
  • Saved Sessions에 해당 인스턴스에 접근할 때 사용할 세션명을 넣고 Save 한다.

 


 

 

 

 

 

4.

저장한 세션을 바탕으로 접속하기

- 저장한 세션명을 선택 후 Open

 

 

 

 

 

 


 

 

 

 

5.

인스턴스 접속 확인

- 명령어창이 뜨게 되면 login as :에

ubuntu 입력(AMI를 ubuntu로 했기 때문)

 

접속 성공 확인

+ Recent posts