※ mac os 기준이며, IDE는 Intellij 기준으로 작성했습니다.
회사에서 로컬환경 설정하면서, 정리했던 내용입니다.
1] 자바 설치
# ------ bash를 통한 brew 설치 ------
$ bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
# ------ mac 계정 password 입력후 / Enter ------
Password:
......
......
==> Installation successful!
==> Homebrew has enabled anonymous aggregate formulae and cask analytics.
Read the analytics documentation (and how to opt-out) here:
https://docs.brew.sh/Analytics
No analytics data has been sent yet (or will be during this `install` run).
==> Homebrew is run entirely by unpaid volunteers. Please consider donating:
https://github.com/Homebrew/brew#donations
==> Next steps:
- Run `brew help` to get started
- Further documentation:
https://docs.brew.sh
# ------ brew가 잘 설치되었는지 확인 ------
$ brew
# ------ brew 로 Open Jdk-zulu Version Update 진행 ------
$ brew tap homebrew/cask-versions
# ------ Update 확인 ------
$ brew search zulu
==> Casks
zulu zulu11 zulu13 zulu7 zulu8 zulufx
# ------ brew로 java8 Open JDK 설치 ------
$ brew install zulu8
$ mac 계정 password 입력
installer: Package name is Zulu 8.52.0.23
installer: Installing at base path /
installer: The install was successful.
🍺 zulu8 was successfully installed!
zulu java jdk설치가 완료되었다.
- 참고: https://firework-ham.tistory.com/65
(Oracle jdk가 유료화가 되었으므로, Zulu는 open jdk의 무료 배포판을 만들어주는 가장 공신력 있는 회사)
2] Docker 설치
마찬가지로, brew를 통해 설치할 수 있다.
(참고: https://kamang-it.tistory.com/entry/Docker-%EC%84%A4%EC%B9%98-Mac%ED%8E%B8)
3] Spring Boot 생성
- https://start.spring.io/ <- 프로젝트 생성 지원 페이지
위의 initializr 페이지를 통해 원하는 version 및 Dependencies를 선택하여 쉽게 신규 프로젝트를 생성할 수 있다.
- Gradle Project / 2.4.11 / java 8 / Spring Web만 추가하여 샘플코드가 작성된 프로젝트를 생성하였다.
- 설정 완료후, 아래의 [GENERATE]를 클릭하면 zip파일이 다운로드되는데, 압축을 풀어서 원하는 위치에 폴더를 이동시킨다.
- 그리고 IDE를 통해 프로젝트를 열어준다. (Intellij 같은 경우에는 자동으로 gradle 프로젝트 정보를 읽어와서 빌드 및 환경을 구성해준다. 시간이 조금 걸림)
- Project Metadata 설명
- Group: 프로젝트를 식별해주는 고유아이디이다. 보통 도메인명을 적는다
- Artifact: 빌드 결과물(jar)의 이름을 정한다.
- Name: main method가 들어있는 기본 Application Class가 된다. (예) hello 입력시, HelloApplication.java로 생성됨)
- Description: 프로젝트 상세설명
- Package name: 기본으로 설정되는 package 경로를 입력한다.
- Packaging: 배포형태 설정 (jar, war)
- Java: 사용 Java version
4] 포트설정 및 Spring Boot 구동
1) 외부설정 파일
spring boot에서는 기본적으로 내장서버가 Tomcat - 8080포트가 default로 내장되어있고 구성되어있다. 아무런 설정값이 없는 경우, default에 따른다.
포트 변경 필요시에는 src/main/java/resources의 application.properties (외부설정 파일)에 값을 입력해주면 된다.
# application.properties
# 한줄로 나열 (프로젝트 생성시 기본)
server.port=8080
spring.mvc.view.suffix=/WEB-INF/jsp/
spring.mvc.view.prefix=.jsp
-----------------------------------------------------------------------------------------------
# application.yml 사용하는 경우
# 같은 네이밍그룹으로 묶어서 표현
server:
port: 8080
spring:
mvc:
view:
suffix: /WEB-INF/jsp/
prefix: .jsp
(?) 두개를 동시에 생성해둔다면? application.properties가 우선한다. (이 두개를 동시에 사용할 일은 거의 없을듯..)
외부 설정과 관련한 spring boot 공식 Document이다. 필요할 것이 있으면 참고
참고: https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html
2) 컴파일할 자바버전 설정
1번에서 자바설치가 정상적으로 되었다면, IDE를 통해 자바 컴파일러로 스프링부트를 구동하기위해 설정이 필요하다.
=> Add Configuration을 눌러서 창이뜨면 왼쪽위에있는 [+]버튼을 눌러서 Spring Boot 항목을 찾아서 눌러주자.
= Runtime환경을 설정하는 부분이다.
1] Main Class 설정
2] Use classpath of module (패키지)
3] JRE (자바 런타임 환경을 선택) => [3) IDE(Intellij)에 Zulu OpenJDK설정] 참조
(나머지는 설정값을 사용해보지 않음..)
3) IDE(Intellij)에 Zulu OpenJDK설정
- Intellij 상단에 File > New Projects Settings > Structure for New Projects 메뉴 클릭
- 좌측메뉴에 Platform Settings > SDKs 클릭후, [+]를 눌러서 Add JDK... 클릭
- [/Library/Java/JavaVirtualMachines/zulu-8.jdk] 경로 선택
- OK 버튼 클릭 (추가완료)
(!) 혹시 jdk 추가를 했는데도 gradle project가 동작하지 않는다면, 아래 그림의 Gradle JVM을 설정해주자.
4) Spring Boot 구동
설정이 완료되었다면, 아래와 같이 main Method에 System.out.println("Hello, Java"); 를 작성해보자.
(!) application.properties에 테스트할때, 8081로 설정했음.
=> Tomcat initialized with port(s): 8081 (http)
5] Docker로 Local Database 세팅
# mysql 버전(5.7.18 기준) / mysql image가 없으면, 자동으로 Download를 진행한다.
# mysql docker container 생성 & 실행
$ docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --name ep-mysql -v /Users/me/test/mysql:/var/lib/mysql mysql:5.7.18 --character-set-server=utf8 --collation-server=utf8_general_ci
# 이후에
$ docker stop ep-mysql (컨테이너 시작)
$ docker start ep-mysql (컨테이너 중단)
# 명령어를 통해서 제어가 가능하다.
$ docker ps -a (실행중인 컨테이너 목록)
$ docker exec -it ep-mysql bash (mysql 컨테이너에 bash shell로 접속)
- DB Tool로 접속 가능
- HOST: localhost:3306
- ID/PW: root / root (도커 run 생성시, 설정가능)
6] Spring Boot - mysql 연동 및 Docker 실행
1) build에 필요한 Dockerfile 생성
- 프로젝트 최상위폴더에 Dockerfile 이름으로 파일을 생성하여 아래의 docker build 코드를 입력한다.
Dockerfile 예제
FROM azul/zulu-openjdk:8
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} epdev-app.jar
ENTRYPOINT ["java","-jar","/epdev-app.jar"]
(마찬가지로 docker 환경에서도 zulu openjdk java8을 적용시킨다)
2) docker image 생성 및 실행
(!) docker로 jenkins를 생성하여, 로컬환경에서 docker를 통해 프로젝트를 자동으로 빌드&배포할 수 있는 방법은 아래 링크를 참고한다.
- 참고: https://xggames.tistory.com/20
# ------ Docker에 띄우기 위한 GradleBuild + image 생성 ------
# 1] 프로젝트를 gradle wrapper로 build
$ /Users/me/test/ep-java-exam/gradlew clean build
# (혹시나 위의 clean build가 안된다면, 그냥 build를 해보자)
# 2] docker image 빌드
# 사용법: docker build [OPTIONS] PATH | URL | -
# docker build -f [프로젝트에 생성한 Dockerfile] -t [image Alias] [프로젝트 root경로]
$ docker build -f /Users/me/test/ep-java-exam/Dockerfile --no-cache -t ep-springboot /Users/me/test/ep-java-exam/
# (실행이 안된다면, Docker Desktop을 실행했는지 확인해보기)
# 3] 새로운 image 빌드로 인한 미사용 image 정리
$ docker rmi $(docker images -f "dangling=true" -q)
# =========================================================================================
$ /Users/me/test/ep-java-exam/gradlew clean build && docker build -f /Users/me/test/ep-java-exam/Dockerfile --no-cache -t ep-springboot /Users/we/wemakeprice/ep-java-exam/ && docker rmi $(docker images -f "dangling=true" -q)
# =========================================================================================
# ------ 도커 이미지 추가내용 확인 ------
=> $ docker images
# ==========================================
# REPOSITORY TAG IMAGE ID CREATED SIZE
# ep-springboot latest 6a9ac8b4e71f 4 seconds ago 289MB
# azul/zulu-openjdk 8 7c44729920e9 4 weeks ago 249MB
# mysql 5.7.18 44a8e1a5c0b2 3 years ago 407MB
# ==========================================
# ------ Docker 컨테이너 추가 & 실행 (mysql container가 선행으로 실행중이여야 함) ------
# 사용법 : docker run [OPTIONS] [IMAGE]
$ docker run --rm -d --name ep-web -p 8080:8080 --link ep-mysql:ep-mysql ep-springboot
# Redis Container 연결 추가할 경우, 위의 실행명령어에 [--link ep-redis:ep-redis] 추가.
# (실행이 안된다면, mysql Docker 컨테이너가 구동중인지 확인해보기)
# [OPTIONS]
# --rm : docker 컨테이너가 중단되면, 해당 컨테이너를 삭제한다.
# -d : background 환경에서 컨테이너가 실행
# -p : 포트연결 (포트:바인드)
# -link : 다른 컨테이너 연결 (컨테이너명:외부에서의 접근 domain alias)
(!) 위의 내용중 3번의 명령어중에 dangling이라는 키워드가 있는데, 컨테이너 이미지중 <none>이라고 표시되는 이미지가 있다. 이름이 없는 이러한 이미지들을 댕글링(dangling)이라고 한다.
'JAVA' 카테고리의 다른 글
Java - Jackson (0) | 2021.09.30 |
---|---|
Java - Enum (0) | 2021.09.15 |
Java - 자바 객체 지향의 원리와 이해(개념정리) - 2편 (0) | 2021.02.24 |
Java - 자바 객체 지향의 원리와 이해(개념정리) - 1편 (0) | 2021.02.08 |
Java - lambda와 Stream (0) | 2021.02.04 |