-
[Spring Boot2] 스프링 부트2로 애플리케이션 개발: 환경설정[IT] 공부하는 개발자/JAVA 2020. 7. 11. 12:29
목차
인프라 셋업
JDK 14 설치 (By Homebrew)
$ brew update $ brew tap adoptopenjdk/openjdk $ brew cask install adoptopenjdk14 $ java -version
home brew 사용자는 위와 같이 JDK14 를 설치한다.
oracleJdk는 오라클에서 직접 다운로드로 설치만 가능하다. https://www.oracle.com/java/technologies/javase-downloads.html
IDE 설치 (IntelliJ)
JetBrain 사의 IntelliJ를 추천한다. Spirng Boot와 IntelliJ는 궁합이 좋다.
나는 이 포스팅을 작성하며 ULTIMATE 2020.1.3 버전으로 업그레이드 했다.
MySql 설치 & 권한 부여 (mac)
brew로 버전 명시 없이 mysql을 설치하면 8.xx 버전이 설치된다.
$ brew install mysql $ brew services start mysql $ mysql -uroot -p -hlocalhost -P3306
mysql 에 root 권한으로 접속한 후 데이터베이스를 만들고, dba 유저를 만들어 권한을 부여해주었다.
-- Database create database king; -- User create user 'dba'@'localhost' identified by 'king@'; grant all privileges on king.* to 'dba'@'localhost';
그리고 workbench 가 있으면 편하므로 없다면 같이 설치해준다.
$ brew cask install mysqlworkbench
POSTMAN 설치
$ brew cask install postman
필수는 아니지만, API 테스트 할 때 무척 유용한 툴이다.
프로젝트 셋업
스프링 io에 들어간 후, 아래 창에서 원하는 대로 옵션을 선택한다.
빌드 속도가 더 빠르고 버전 커스텀이 가능한 Gradle 을 선택해주었고 언어로는 Java, 버전은 가장 최신 버전인 14를 선택해주었다.
웹 애플리케이션을 개발할 것이므로 패키징은 War로 선택한다.
GENERATE 를 클릭하여 압축파일이 다운로드 된다.
사용하는 IDE툴, 여기에서는 인텔리제이를 열어준다. Open 클릭.
다운받은 폴더 안의 build.gradle 파일을 선택하여 오픈하면 아래와 같이 물어보는 창이 뜨는데, Open as Project 를 선택한다.
그리고 프로젝트 최상단의 build.gradle 을 열어, 아래와 같이 디펜던시를 추가했다.
dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-groovy-templates' implementation 'org.springframework.boot:spring-boot-starter-web' compile 'mysql:mysql-connector-java' compile 'com.google.guava:guava:29.0-jre' compile 'org.springframework.boot:spring-boot-starter-thymeleaf' compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind' compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.10' compile group: 'org.apache.commons', name: 'commons-collections4', version: '4.4' compileOnly 'org.projectlombok:lombok' developmentOnly 'org.springframework.boot:spring-boot-devtools' annotationProcessor 'org.projectlombok:lombok' testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' } testCompile 'org.spockframework:spock-core:1.2-groovy-2.5' testCompile 'org.spockframework:spock-spring:1.2-groovy-2.5' }
그리고 내 프로젝트에 필요한 디펜던시들을 추가해준다.
'mysql:mysql-connector-java' > MySql DB 에 Access 하기 위하여 필요한 디펜던시
compile 'org.springframework.boot:spring-boot-starter-thymeleaf' > 템플릿 엔진으로 thymeleaf 를 사용한다compile 'com.google.guava:guava' > Preconditions 을 통해 로직 Validation 을 간단하게 처리하도록 해주는 Google API
'org.projectlombok:lombok' > Lombok 애노테이션은 각종 config 설정을 무척 편리하게 도와준다
annotationProcessor 'org.projectlombok:lombok' > Lombok AnnocationProcessorcommon-lang3, commons-collection4 > NPE 를 피하면서 String의 value 비교, Collection empty 여부 등을 간단히 할 수 있는 라이브러리
fasterxml.jackson.core > Json 파일을 편리하게 가공할 수 있다.
그리고 설정 - Build, Execution, Deployment - Compliler - Annotation Processors 에서 Enable annotation processing 을 활성화시켜준다.
그리고 src - main - resources 에서 application.properties 파일을 열어 아래와 같이 DB Access 정보를 넣어준다.
# server port server.address=localhost server.port=8080 # mysql spring.jpa.show-sql=true spring.jpa.database=mysql spring.datasource.url=jdbc:mysql://localhost:3306/king?useSSL=false&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&useUnicode=true&serverTimezone=UTC spring.datasource.username=dba spring.datasource.password=king@ spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
show-sql = true 로 해두면, db에 실행되는 sql 쿼리가 콘솔에 찍히기 때문에 편리한 디버깅을 할 수 있다.
datasource.url 에 붙은 useSSL, allowPublicKeyRetrieval 등의 옵션은 mysql 버전 8이상을 사용하고 있기 때문에 필요한 옵션들이다.접속 포트, 데이터베이스명, 접속 유저 ID &PW 정보 등을 properties 파일에 넣어준다.
참고로 properties 파일은 공백도 문자로 인식하므로, 공백을 넣지 않도록 주의한다.
이제 구동을 위해 메인 Application.class 를 열어보자.
클래스 상단에 @SpringBootApplication 애노테이션이 붙어 있는데,이 클래스가 앞으로 개발하면서 모든 패키지의 최상위에 있어야 하는 메인 클래스라는 뜻이다. 그래야 스프링부트가 자원낭비 없이 다른 컴포넌트를 스캔하지 않고 바로 애플리케이션을 구동할 수 있다.
RUN 버튼을 클릭해 애플리케이션을 구동시켜보자.
참고로 스프링 부트는 톰캣이 내장되어 있어서 내가 톰캣 셋업을 하지 않아도 자동으로 톰캣을 구동시킨다. 로그에서 Apache Tomcat/9.0.36 이 구동된 것을 볼 수 있다.
애플리케이션이 잘 돌고 있다.
브라우저로 localhost:8080 에 접속하면 아래 같은 에러 페이지가 나온다.
"/" 에 맵핑이 되어있지 않기 때문에 그렇다.
여기까지 기본 셋업이 끝났다.
'[IT] 공부하는 개발자 > JAVA' 카테고리의 다른 글
[Java Stream] GroupingBy 를 이용한 그룹화 예시 소개 (3) 2021.02.15 [Json] gson, Jackson 컨버터의 null 필드 처리 방법 (0) 2020.10.31 [JAVA Collections API] 자료구조 요약: 구조/성능/용도 (3) 2019.10.28 [디자인패턴] 자바 싱글톤 Vs 스프링 싱글톤 패턴의 차이점 (1) 2019.09.28 [JAVA 메모리 트러블 슈팅] 콘솔에서 JVM Heap 메모리 추적하기 : jstat, jmap (2) 2019.09.10