# 개발 환경 만들기
## 미션
---
스프링 부트 개발 환경을 만들고, "헬로 월드"를 출력하시오.

## 개념
---
#### 스프링 부트 음식점을 창업하려면
요리에 필요한 가게를 준비해야한다. 크게 다음의 3가지가 필요하다.

- JDK: 자바 코드의 번역과 실행을 담당
- IDE: 개발 생산성을 높히는 프로그램(이클립스, 인텔리제이, STS, NetBeans, ...)
- 프로젝트: 실제 동작하는 코드 묶음
그럼 하나씩 개발 환경을 준비해보자.

## 실습
---
#### JDK 설치 for Windows
기존 JDK가 있는지 확인하자. 윈도우에서 명령 프롬프트를 실행한 뒤, `java -version`을 수행한다.

설치된 JDK가 없는 것을 확인 후, "Adopt OpenJDK 8" 버전을 설치한다. 상황에 따라 다른 버전을 사용해도 되나, 되도록 LTS 버전을 추천한다. 2022.01.03 현재 17버전까지 나와있다. (다운로드 페이지: https://adoptium.net/)

다운로드 완료 후, 설치를 진행한다. 설정값은 모두 기본 값으로 한다. 설치 완료 후 명령 프롬프트(cmd)를 재실행한 뒤, `java -version`을 입력하자. 설치 버전이 출력되면 성공이다.

#### JDK 설치 for Mac
터미널 창에 `java -version`을 실행하여 JDK 설치 여부를 확인한다.

설치된 JDK가 없다면, "Adopt JDK 8" 설치를 진행하자. 이를 위해, Homebrew를 먼저 설치한다. 해당 도구를 사용하면, 다양한 프로그램를 터미널 명령어로 설치할 수 있다. 구글링해서 알아서 잘 설치한다. (Homebrew 사이트: https://brew.sh/index_ko)

Homebrew 설치 완료 후, 다음 명령어를 통해 "Adopt OpenJDK 8"을 설치한다.

설치 완료 후, 다시 `java -version`을 입력한다. 설치 JDK의 버전이 출력되면 성공!

#### IDE 설치
"인텔리제이"를 구글링하여 다운로드 페이지(https://www.jetbrains.com/ko-kr/idea/download)로 이동한다.

파일 다운로드 후, 설치를 진행한다. 되도록 기본 설정으로 진행한다. 설치 완료 후, "IntelliJ IDEA"를 실행하면 다음 창이 뜬다.

#### 프로젝트 만들기
스프링 부트 프로젝트는 https://start.spring.io 에서 생성한다. 왼쪽 영역에서 프로젝트 기본 설정을, 오른쪽 영역에서 필요한 라이브러리를 추가할 수 있다.

설정을 마치고 하단 GENERATE 버튼을 클릭하면 프로젝트 파일이 받아진다. 다운로드 완료 후 압축을 푼 뒤, 인텔리제이로 프로젝트를 열자.

처음 프로젝트를 여는 경우, 상황에 따라 2~10분 가량 대기해야한다. 외부 라이브러리 다운로드 및 인덱싱 시간이 필요하기 때문.

인덱싱 완료 후 스프링 부트를 실행하면, 스프링 부트 서버에 접속할 수 있다.

#### 헬로 월드!
"헬로 월드" 페이지를 보기 위해, `src/main/java/resources/hello.html` 파일을 만든다.
```
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>헬로 월드!</h1>
</body>
</html>
```
서버를 재시작하고, 브라우저를 통해 localhost:8080/hello.html을 접속하자. "헬로 월드"가 나온다면 성공!

#### build.gradle
Gradle로 작성된 스프링 부트 설정은 build.gradle 에 작성된다. 여기서 스프링 부트 및 JDK 버전이 지정된다. 자신의 개발환경에 맞게 값을 지정하면 된다.
```
plugins {
id 'org.springframework.boot' version '2.6.6' // 스프링 부트 버전(변경 가능)
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17' // JDK 버전(각자 설치된 자바 버전에 맞게 지정. Java 8은 1.8)
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-mustache'
implementation 'org.springframework.boot:spring-boot-starter-web'
runtimeOnly 'com.h2database:h2'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
}
```
## 🔥 구글링 훈련하기
---
다음 키워드를 구글링하여, 스스로 정리 및 문서화 하시오.
- 자바 JDK란
- 자바 maven gradle
- 이클립스 sts 인텔리제이