반응형

1. 개요

 - Git에서 관리하던 Gradle 프로젝트를 Clone한 후 빌드 시 org.gradle.wrapper.GradleWrapperMain가 발생하였다.


2. 원인

 - org.gradle.wrapper.GradleWrapperMain 패키지 클래스는 gradle-wrapper.jar 파일 내의 패키지이다. 이 파일이 프로젝트 내에 없었고, 그로 인해 위 클래스를 찾지 못해 발생한 에러였다. 어디선가 누락이 된것이다. 

 - 기본적으로 gradle-wrapper.jar는 '프로젝트 루트 디렉토리/gradle/wrapper' 경로에 있는데, 에러가 발생했던 프로젝트에는 이 파일이 누락되어 있었다.

gradle-wrapper.jar


3. 누락은 어디서?

 - 필자의 경우 gitignore에 *.jar 가 있었고, 그로인해 누락되었다. gitignore의 default 코드에 작성되어있어 신경을 쓰지 못한 것이 화근이었다.

gitignore


4. 해결

 - gradle.wrapper.jar파일을 gradle/wrapper 경로에 넣어주면 된다. 필자의 경우 다른 프로젝트에 있는 jar파일을 가져왔지만, 아래 링크를 통해 다운받아도 무관하다.

https://mvnrepository.com/artifact/org.gradle/gradle-wrapper/5.2.1

 

 

 

반응형
반응형

1. 개요

  • AWS 서버에 스프링 부트 프로젝트를 jar파일 배포한다.

2. 준비

  • Amazon Linux 2 서버
  • Spring Boot + gradle 프로젝트
  • JDK 설치
  • Git 설치 및 Source Clone

3. JDK 설치

  • 프로젝트를 배포하기 전 AWS 서버에 JDK를 설치해야합니다. SpringBoot의 build.gradle 파일의 sourceCompatibility를 확인해봅시다. sourceCompatibility는 현재 프로젝트에 호환된 Java 버전을 의미합니다.

프로젝트 java 버전 확인

 

  • 필자의 경우 java 1.8 이므로 aws서버에 openJDK 1.8 버전을 설치를 위해 다음 명령어를 입력하겠습니다.
 sudo yum install -y java-1.8.0-openjdk-devel.x86_64

 

  • 설치가 완료되었다면 인스턴스의 Java 버전을 8로 변경해야합니다. 다음 명령어를 입력 후 인스턴스에 적용할 java 버전의 번호를 입력합니다.
sudo /usr/sbin/alternatives --config java

자바 버전 선택

  • 필자의 경우 방금 설치한 java 버전만 있고, Selelction이 1로 지정되어 있으므로 입력창에 1을 입력합니다.
  • 설정이 완료되면 서버의 java 버전을 확인합니다.
java -version

자바 버전 확인

  • 설정한 Java 버전이 조회된다면 스프링 부트 jar 배포에 대한 기본적인 준비는 끝났습니다.이제 배포를 해봅시다!

4. Git 설치 및 Clone

  • 프로젝트 파일이나 빌드된 파일을 AWS 서버로 전송 해야합니다. 이 과정에 대해 채택할 수 있는 방법은 FTP가 될수도 있지만 필자의 경우 Git Clone을 통해 프로젝트 파일을 AWS 서버에서 받은 후 서버 내에서 빌드를 하는 방식을 채택했습니다.
  • 다음 명령어를 입력해 AWS 서버에 git을 설치 및 확인합니다.
sudo yum install git // git 설치
git --version //git 설치(버전) 확인

git 설치버전 확인

  • 설치가 완료되면 clone 될 디렉토리를 생성한다. 필자의 경우 홈 디렉토리 기준으로 "app" 폴더를 생성하여 그 안에 git에서 clone한 소스를 넣겠습니다.
mkdir ~/app  //app 폴더생성

 

  • 폴더 생성이 완료되면 본인의 깃허브 웹페이지에서 주소를 복사합니다.

Clone할 url 복사

  • AWS 서버에 다음 명령을 입력하여 clone을 진행합니다.
git clone 복사한 주소

 

  • clone이 정상적으로 완료되면 app 폴더 안에 프로젝트 소스들이 들어갔을겁니다. 이제 배포를 진행할 차례입니다.

5. 배포

  • 프로젝트 경로로 들어가 다음 명령어를 입력해 jar 빌드합니다.
./gradlew bootjar

 

  • build가 완료되면 자동적으로 build/libs 폴더 내에 "프로젝트 명/버전.jar" 형식으로 파일이 생성됩니다. 배포는 간단합니다. 이 파일을 실행시켜주면 됩니다. 스프링 부트는 jar 파일 빌드 시 tomcat 서버가 내포된 형태로 빌드되기 때문에 별도의 tomcat 서버가 필요없습니다.
java -jar jar파일 명

jar 파일 실행

  • 배포가 완료되었습니다. 배포된 서버로 접속하기 위해 '퍼블릭 DNS:포트'를 입력해봅시다.
  • 퍼블릭 DNS는 AWS 인스턴스 상세정보로 들어가면 확인할 수 있으며 포트는 배포 로그의 마지막 부분에서 확인할 수 있습니다.

퍼블릭 DNS

 

  • 짜잔~ 다음과 같이 정상적으로 접속이 되었습니다.

배포된 어플리케이션 접속 성공 화면

 

  • 만약 접속이 되지 않으신다면 AWS내에 설정한 보안 그룹에 해당 포트가 오픈되어있는지 확인해봅시다. 필자의 경우 해당 포트가 열려있지 않아 최초에 접속이 되지 않았습니다.
  • 인스턴스 세부정보 > 보안 > 인바운드 규칙에 8090포트를 추가해줍시다.
    인바운드 규칙 추가

6. 마치며...

  • Git 연동 및 클론, 빌드, AWS 배포를 해보았습니다. 되게 간소하게(?) 진행했지만 AWS 서버에 배포를 해본건 처음이라 감회가 새로웠다. 다음 목표는 Jenkins를 연동하여 git commit이 있을 때 자동으로 AWS 서버에 수정된 코드가 배포되도록 하는 것이다. 이 작업이 끝나면 본격적인 서버 로직을 작업할것이다
반응형

'AWS' 카테고리의 다른 글

[AWS] Window / 프리티어로 EC2 서버 생성  (2) 2021.10.20
반응형

1. 개요

 - gradle 프로젝트를 생성한다.

 - build.gradle을 작성하여 의존성을 주입한다.

 

2. Gradle 프로젝트 생성

 2.1. new / Spring Starter Project 선택

Spring Starter Project

 2.2. 프로젝트 초기 설정 입력

프로젝트 초기 설정 입력

 - Type을 Gradle, Java Version을 8로 선택 및 프로젝트 초기 설정 입력 후 Next를 선택한다.

 

2.3. 스프링 부트 프로젝트 설정

스프링 부트 프로젝트 설정

 - Web / Spring Web을 선택하고, Spring Boot Version은 임의로 2.4.4를 선택한다. 스프링 부트 버전은 build.gradle에서 수정이 가능하다.

 

 2.4. gradle 프로젝트 생성 완료

프로젝트 구조

 - 다음과 같은 구조로 프로젝트가 생성되었다.

 

3. build.gradle 작성

 

 3.1. build.gradle

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
buildscript{
    ext{
        springBootVersion = '2.1.7.RELEASE'
    }
    repositories{
        mavenCentral()
        jcenter()
    }
    dependencies{
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
 
group = 'com.ssk'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
 
 
repositories{
    mavenCentral()
}
 
dependencies{
    compile('org.springframework.boot:spring-boot-starter-web')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}
cs

 - build.gradle 파일은 말 그대로 gradle을 통해 빌드될 수 있도록 하는 설정파일이다.

 - 프로젝트 기본 설정, 의존성 주입, 플러그인, 레포지토리 설정 등의 정보가 들어있다.

 - ext는 전역변수를 설정하겠다는 의미이며, 10번째 라인을 보면 스프링 부트 그레들 플로그인의 2.1.7.RELEASE를 의존성으로 받겠다는 의미이다.

 - repositories는 저장소를 의미하며, mavenCentral은 메이븐 중앙 레포지토리, jcenter는 mavenCentral 저장소의 문제점을 개선한 레포지토리이다. 일반적으로 위처럼 이 두가지 저장소 정보를 넣어준다.

 - dependencies는 의존성을 추가하는 부분이다.

 - 13 ~ 16 라인의 플러그인들은 자바와 스프링을 사용하기 위한 필수 플러그인들이므로 필히 추가해야 한다.

 

 3.2. build.gradle 실행

build.gradle 실행

 - build.gradle 우클릭 / Gradle / Refresh Gradle Project를 선택하여 build.gradle을 실행한다.

 - 정상적으로 실행되었다면 프로젝트 라이브러리에 의존성이 추가된 것을 확인할 수 있다.

 

4. 에러 리포트

 4.1. could not run phased build action using connection to gradle distribution 에러

 

 첫번째 솔루션. project / properties / Gradle / 설정 변경

 - Gradle user home 및 java home 경로를 명시적으로 기입해준다.

 

 두번째 솔루션. build.gradle 소스 문제

  - 위 문제로도 해결이 되지 않아 코드 확인 중 plugin 관련 코드를 sourceCompatibility 아래에 적어놨던 것을 뒤늦게 확인했다. plugin 코드들을 sourceCompatibility 하위에 적어뒀다면 위 예제처럼 위로 올리면 해결된다.

반응형

+ Recent posts