본문 바로가기
Spring

1) 스프링부트로 웹 서비스 출시하기 - 1. SpringBoot & Gradle & Github 프로젝트 생성하기

by 향로 (기억보단 기록을) 2017. 12. 24.
반응형

많은 웹 서비스 구축하기 강좌들이 Python, NodeJS, Ruby, PHP만 다루고 있습니다.
국내에서 가장 많이 사용하는 언어인 Java로 웹서비스 구축 강좌는 본적이 없습니다.
Java는 대부분 로컬에서 CRUD & localhost:8080으로 게시판 구축하기가 전부였습니다.
그러다보니 웹 서비스를 시작하는 많은 분들이 Java가 아닌 스크립트 언어로만 진행하십니다.
분명 국내 웹 환경이나 자료들이 Java & Spring이 많음에도 다른 스크립트 언어들로 시작하는 것은 이런 강좌가 없어서 그럴수 있다고 가정했습니다.

그래서 Java & Spring으로 웹 서비스 구축하기 시리즈를 시작하게 되었습니다.

개발환경

기본적으로 Git & Github을 써보신걸 가정하고 진행하겠습니다.
만약 Git을 한번도 안써보셨다면, 생활코딩의 Git 강좌를 보고 시작하시는걸 추천드립니다.

프로젝트 개발 환경은 다음과 같습니다.

  • IDE : IntelliJ IDEA Ultimate
  • Git Tools : Source Tree
  • OS : Mac OS X
  • SpringBoot 1.5.9
  • Java8
  • Gradle

글 사이사이 캡쳐들이 윈도우 & Eclipse 쓰시는 분들과 조금 차이가 있을수 있습니다.
이점 감안 부탁드립니다.

커리큘럼

큰 틀에선 아래 커리큘럼에 맞춰 진행합니다.

모든 프로젝트 코드는 Github 에 있습니다.
각 커리큘럼의 코드는 브랜치로 관리합니다.


(feature/1은 1과정의 코드가 있습니다.)

  1. SpringBoot & Gradle & Github 프로젝트 생성하기
  2. SpringBoot & JPA로 간단 API 만들기
  3. SpringBoot & Handlebars로 화면 만들기
  4. AWS EC2 & AWS RDS 운영 환경 구축
  5. EC2 수동 배포해보기
  6. TravisCI & AWS CodeDeploy로 CI환경 구축하기
  7. Nginx & SSL 설치 및 무중단 배포 구축하기
  8. Google GSuite & AWS로 도메인, Email 할당 받기

진행함에 따라 조금씩 변경이 있을수도 있습니다.
(책이 아닌 블로그의 장점!?)
내용을 수정하거나, 추가되거나, 삭제되거나 등이 발생할 수 있습니다.
언제든지 변경할 수 있기 때문에, 문제를 발견하신 분들은 가감없이 댓글이나 PR을 부탁드리겠습니다.

그럼 첫번째 과정을 시작하겠습니다.


1. SpringBoot & Gradle & Github 프로젝트 생성하기

1-1. SpringBoot & Gradle 프로젝트 생성하기

IntelliJ 혹은 Eclipse로 스프링부트 프로젝트를 생성합니다.

project1

IntelliJ에서 스프링부트는 Spring Initializr 을 선택하시면 됩니다.

Eclipse는 Spring Starter를 선택하시면 됩니다.

project2

저는 기본 패키지를 com.jojoldu로 했지만, 여러분은 다른 이름으로 하셔도 됩니다.
빌드툴은 Maven이 아닌, Gradle을 선택합니다.

Tip)
Maven을 선택하셔도 무방합니다만, 최근 Gradle이 4.x대로 버전업하면서 빌드속도가 대폭 개선됐으며,
다양한 Task를 쉽게 생성가능해서 많은 프로젝트에서 도입중입니다.
이번 기회에 시작해보시는것도 좋을것 같습니다.

project3

  • Core의 Lombok
  • Web의 Web
  • SQL의 JPA, H2
  • OPS의 Actuators

를 선택합니다.

project4

프로젝트 위치를 지정후, 완료(Finish) 버튼으로 프로젝트 생성을 완료합니다.

프로젝트 생성이 끝나면 Gradle의 설정파일인 build.gradle은 아래와 같은 형태가 됩니다.

build.gradle

buildscript {
    ext {
        springBootVersion = '1.5.9.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'

group = 'com.jojoldu'
version = '0.0.1'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}


dependencies {
    compile('org.springframework.boot:spring-boot-starter-actuator')
    compile('org.springframework.boot:spring-boot-starter-data-jpa')
    compile('org.springframework.boot:spring-boot-starter-web')
    runtime('com.h2database:h2')
    compileOnly('org.projectlombok:lombok')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

자동생성된 패키지명이 조금 길기 때문에 src/main/java/com/jojoldu 아래의 springwebservice 패키지명을 webservice로 변경하겠습니다.

project5

webservice 패키지 아래에 있는 SpringWebserviceApplication.java 파일로 Application.java로 변경하겠습니다.
그리고 추가로 webservice 패키지 아래에 web이란 패키지를 생성해서 WebRestController.java 파일을 생성하겠습니다.

project6

WebRestController에는 다음과 같은 코드가 있습니다.

@RestController
public class WebRestController {

    @GetMapping("/hello")
    public String hello() {
        return "HelloWorld";
    }
}

다들 아시겠지만 @RestController@ResponseBody를 모든 메소드에서 적용해줍니다.
hello 메소드의 결과는 "HelloWorld" 라는 문자열을 JSON 형태로 반환하게 됩니다.
자 그럼 이 프로젝트를 실행해보겠습니다.

Application.java 를 실행합니다.

project7

그리고 브라우저에서 localhost:8080/hello 로 접속합니다.

project8

이렇게 간단하게 Rest API가 호출됨을 확인할 수 있습니다.
간단한 Hello World 프로젝트 구축이 되었습니다.

1-2. Github 연동하기

이번엔 방금 생성한 이 프로젝트를 Github 와 연동해보겠습니다.

Git 연동의 경우 IntelliJ를 사용하지 않고, Source Tree를 사용하겠습니다.

(Mac에서 Eclipse 쓰시는 분들이 계실수 있기 때문입니다.)

Tip)
보통 SI프로젝트에선 SVN을 많이들 사용하시는데, 개인프로젝트나 자사 서비스를 운영하는 곳에선 대부분 코드 관리를 Git으로 진행합니다.
Git은 DVCS라고해서 코드 관리를 로컬저장소와 원격저장소 양쪽에서 관리할 수 있다는 장점이 있습니다.
(SVN은 원격저장소밖에 없습니다.)
더군다나 굳이 코드 관리용 서버를 구축할 필요 없이 Github를 사용하면 바로 원격 저장소를 사용할 수 있기 때문에 무조건 Git을 사용하는게 더 낫다고 생각하셔도 됩니다.

Git + Source Tree

만약 본인의 개발환경이 Window + Eclipse라면 이전에 작성한 블로그 글을 참고하시면 됩니다.

Git 사이트에 접속하셔서 본인의 운영체제에 맞는 설치 파일을 받아 설치합니다.

설치가 끝나시면 item2와 같은 터미널을 열어 git init을 입력합니다.

git1

그럼 프로젝트가 Git 프로젝트로 전환된 것을 확인할 수 있습니다.
이후, Source Tree 사이트에서 설치파일을 받아 설치합니다.
실행하신뒤 New.. -> Add Exisiting Local Repository 를 클릭합니다.

git2

생성한 본인의 프로젝트를 선택하신후 Open 버튼을 클릭합니다.

git3

그럼 로컬 Git은 연동이 되었습니다.
원격 저장소인 Github와 연동을 진행하겠습니다.

Github 연동하기

Github 사이트로 접속해서 본인의 저장소를 생성합니다.

git4

생성 페이지에 접속하시면 본인의 프로젝트 명과 동일한 이름으로 Repository name을 등록합니다.
(달라도 문제는 없지만 이왕이면 같은 이름이 구분하기 쉽겠죠?)

git5

생성하시면 링크만 있는 페이지가 나옵니다.

git6

HTTPS 주소를 복사합니다.
(여기선 https://github.com/jojoldu/spring-webservice.git가 됩니다.)

이를 로컬의 프로젝트와 연동하겠습니다.
Source Tree에서 프로젝트를 선택후 상단 메뉴바의 Repository -> Repository Settings... 를 선택합니다.

git7

remote 탭을 클릭 -> add 버튼을 클릭합니다.

git8

아래를 참고하시어 각 입력값을 채웁니다.

git9

(remote name은 origin을 표준으로 사용하기 때문에 origin을 입력하시면 됩니다.)

Github과 연동은 끝났습니다.
이제 첫번째 커밋을 진행하겠습니다.
진행하기에 앞서!
Git에서 관리하지 않는 대상들을 제거하겠습니다.

프로젝트 내부에 .gitignore 파일을 생성합니다.

git10

그리고 아래 내용을 그대로 복사해서 붙여넣겠습니다.
아래는 보통 표준적으로 프로젝트에서 제거하는 .gitignore 내용입니다.
각 IDE에서 프로젝트가 생성되면 자동으로 생성되는 파일들은 굳이 Git으로 관리할 필요가 없기 때문에 Git 체크대상에서 제외합니다.

.gradle
/build/
!gradle/wrapper/gradle-wrapper.jar
/out

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
nbproject/private/
build/
nbbuild/
dist/
nbdist/
.nb-gradle/

.gitignore 파일 생성마저 끝났으면 이제 진짜 커밋과 푸시를 진행하겠습니다.

git11

하단의 push 체크박스를 체크한 뒤 Commit 버튼을 클릭하시면!

git12

이렇게 커밋과 푸시가 된 것을 확인할 수 있습니다.
본인의 Github 주소로 방문 해보시면!

git13

코드가 올라간 것을 확인할 수 있습니다.

이미 Git을 아시는 분들은 10분이면 끝날 내용이라고 생각합니다.
크게 부담이 없으셨을것 같습니다.
다음시간에는 SpringBoot & JPA로 간단한 CRUD 서비스를 진행하겠습니다.
감사합니다!


반응형