/*
*
* 자바웹개발워크북의 내용을 정리하기 위한 포스팅입니다.
*/
Amazon의 AWS를 이용해서 데이터베이스나 파일업로드, 실제 배포를 진행해보도록 하겠습니다.
1. 자바 웹 개발 환경만들기
AWS의 가장 대표적인 서비스중에는 EC2라는 가상머신 서비스가 있습니다.
EC2는 다양한 운영체제를 가진 서비스를 제공하여 원하는 서버환경을 구성할수 있습니다.
EC2 생성과 접속
AWS의 EC2를 이용하기위해서는 EC2서비스에 인스턴스를 생성해주어야합니다.
신규생성은 [인스턴스 시작] 메뉴에서 원하는 운영체제를 선택할수있습니다. 이때 EC2는 항상 비용이 발생할수있으므로 간단한 실습은 처음가입할때 사용할수있는 '프리티어'로 이용가능한 항목을 선택합니다.
애플리케이션 및 OS이미지는 'Amazon Linux..'을 선택합니다.
인스턴스유형은 t2.micro를 선택합니다.
인스턴스를 시작하는 과정중에 외부에서 접속할때 필요한 보안키를 생성할수있는 화면이 보이게됩니다.
[새 키 페어생성]을 선택하면 '키 페어 이름'을 지정하는 부분이 나오는데 이는 나중에 파일이름이 되므로 기억해두어야 합니다.
생성된 키는 자동으로 다운로드됩니다.
계속해서 [인스턴스 시작]을 진행하면 EC2인스턴스가 생성됩니다.
API서비스를 위한 보안정책 변경
API서비스를 제공하기 위해서는 외부에서 호출가능한 80이나 8080포트등을 열어두어야만 접속이 가능하게 됩니다.
이를 위해서 생성한 인스턴스의 상세정보 중에 보안부분을 수정해야 합니다.
보안그룹 정보를 보면 '인바운드(외부에서 들어오는 연결)규칙'과 '아웃바운드(외부로 나가는 연결)규칙'으로 구성되어 있는데,
기본적으로 22번포트(SSH 터미널 연결)만이 존재합니다.
인바운드 규칙을 편집해서 80포트와 8080포트를 외부에서 사용할수있도록 지정합니다.
외부에서 데이터를 보내는 '아웃바운드 규칙'도 마찬가지로 수정해줍니다. 아웃바운드는 기본적으로 서버에서 모든 포트나 프로토콜로 전송할수 있도록 기본 설정되어있습니다. 80포트와 8080포트를 추가합니다. 완료하면 아래와 같이 표기됩니다.
터미널 연결
EC2에 만들어둔 Linux를 이용하려면 Putty와 같은 Windows용 SSH연결 프로그램을 이용하는것이 편리합니다.
하지만 mac환경에서는 맥터미널을 이용해 인스턴스에 접속할수 있습니다. 맥터미널로 인스턴스접속하기
정상적으로 로그인이 완료되면 다음과 같은 화면을 보게됩니다.
JDK11설치
만들어진 EC2환경에는 JDK가 없거나 JDK8인 경우가 많으므로 개발환경과 동일하게 Amazon의 Coretto JDK11버전을 설치합니다.
기존에 JDK버전이 있는지 확인하고 필요하다면 'yum remove..'를 이용해서 삭제하도록 합니다.
[ec2-user@ip-17xxxxxxxxxx ~]$ yum list java*11* 명령어로 설치가능한 JDK11목록을 확인합니다.
다음 명령어로 JDK11을 설치합니다.
[ec2-user@ip-17xxxxxxxxxx ~]$ sudo yum install java-11-amazon-corretto.x86_64
설치후에는 java -version 명령어로 설치된 정보를 확인할수 있습니다.
프로젝트 실행 확인
EC2서버에 JDK설치가 완료되었다면 최대한 간단하게 스프링부트를 이용하는 프로젝트를 작성합니다. 그리고 이를 EC2에서 실행해보고 문제가 발생하진않는지 확인합니다.
프로젝트를 새로 생성했다면 resource > static > index.html파일을 만들고 아래와 같이 작성합니다.
!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>INDEX PAGE</h1>
</body>
</html>
실제 컨트롤러의 동작여부도 확인하기 위해서 controller패키지를 추가하고 SampleController를 추가합니다.
@RestController
@RequestMapping("/api/sample")
public class SampleController {
@GetMapping("/getArr")
public String[] getArr() {
return new String[]{"AAA", "BBB", "CCC"};
}
}
우선, 작성된 코드들이 로컬환경에서 잘 동작하는지 확인합니다.(localhost:8080, localhost:8080/api/sample/getArr 실행)
AWS에서 프로젝트 실행확인
AWS에서 스프링부트로 작성된 프로젝트를 실행하는 가장 쉬운 방식은 프로젝트를 실행가능한 jar파일로 빌드해서 실행하는 방식입니다.
이를위해 로컬환경에서 작성하는 프로젝트를 jar파일로 빌드하고 해당 파일을 EC2에서 가져다가 실행하거나,
프로젝트의 빌드자체를 EC2환경에서 진행하는 방법을 사용할수 있습니다.(안전한건 EC2서버에서 빌드하고 실행하는 방식)
우리는 깃허브로 프로젝트를 인터넷으로 올리고 EC2에서 깃을 이용해 빌드해서 실행하는 기초적인 방법을 사용하겠습니다.
상단 메뉴의 VCS > share Project on GitHub를 통해 생성 후 깃허브에 공유된 프로젝트의 주소를 클론해서 보관해둡니다.
EC2환경에서는 다음의 명령어로 깃프로그램을 설치합니다.
[ec2-user@ip-17xxxxxx ~]$ sudo yum install git
깃설치 후 프로젝트를 실행할수 있는 폴더를 다음과같이 mkdir로 생성하고 해당폴더로 이동합니다. 폴더명은 webtest로 하겠습니다.
깃을 이용해 프로젝트를 클론하고 코드를 EC2로 복사합니다.
[ec2-user@ip-17xxxxxxx webtest]$ git clone https://github.com/사용자ID/리포지토리명.git
복사하면 깃허브상의 프로젝트 이름으로 폴더가 생성됩니다. 복사후에는 gradlew파일을 실행하기위해 프로젝트 폴더 내부로 이동합니다.
후에 './gradlew build'를 통해서 Gradle을 실행하기위한 내려받기를 진행합니다.
[ec2-user@ip-17xxxxxxxxxx webtest]$ ls
markm
[ec2-user@ip-17xxxxxxxxxx webtest]$ cd markm
[ec2-user@ip-17xxxxxxxxxx markm]$ ls
build.gradle gradle gradlew gradlew.bat settings.gradle src
[ec2-user@ip-17xxxxxxxxxx markm]$ ./gradlew build
최초 실행에는 몇분정도의 시간이 소요되지만 이후에는 './gradlew jar'와 같이 jar파일만을 생성해서 시간을 단축할수 있습니다.
빌드할때 테스트를 생략하고싶다면 ./graldew build --exclude-task test로 지정해서 시간을 단축할수 있습니다.
빌드가 실행된후에는 'build'폴더 아래 'libs'폴더로 이동합니다.
[ec2-user@ip-17xxxxxxxxxx markm]$ cd build
[ec2-user@ip-17xxxxxxxxxx build]$ cd libs
[ec2-user@ip-17xxxxxxxxxx libs]$
libs폴더에는 다음과 같이 2개의 파일이 존재합니다.
[java -jar jar파일명]으로 프로젝트를 실행합니다.
프로젝트가 정상적으로 실행되는 결과는 로컬환경에서 브라우저를 통해 확인합니다.
브라우저에서 EC2인스턴스의 퍼블릭 IPv4 DNS값과 포트번호를 통해서 확인할수 있습니다.
http://ec2-xx-xxx-xxx-x.us-east-2.compute.amazonaws.com:8080/
http://ec2-xx-xxx-xxx-x.us-east-2.compute.amazonaws.com:8080/api/sample/getArr
'개발 > JAVA' 카테고리의 다른 글
사업자 등록번호 검증 로직 (0) | 2023.07.20 |
---|---|
[자바웹개발워크북] 9. API서버와 JWT (0) | 2023.02.16 |
[자바웹개발워크북] 8-1. 소셜 로그인 (0) | 2023.02.15 |
[자바웹개발워크북] 8. 스프링시큐리티 (0) | 2023.02.13 |
[자바웹개발워크북] 7. 파일업로드 처리 (0) | 2023.02.09 |