์ด๋ฒ ํฌ์คํ ์์๋ Spring Framework๋ก Web Server๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ค๋ค๋ณด๊ฒ ์ต๋๋ค.
๋จผ์ , ์ดํด๋ฆฝ์ค๋ฅผ ์คํํด ์ค๋๋ค.
์ดํด๋ฆฝ์ค๋ฅผ ์คํํ๋ฉด ๋์ค๋ ์ฒซ ํ๋ฉด์์, ์๋จ ๋ฉ๋ด Help -> Eclipse Marketplace๋ฅผ ํด๋ฆญํด ์ค๋๋ค.
Eclipse Marketplace ์ฐฝ์ด ์ด๋ฆฌ๋ฉด, ๊ฒ์์ฐฝ์ Spring Tools ๋๋ STS๋ฅผ ์ ๋ ฅํฉ๋๋ค.
Spring Tools๋ฅผ ๊ฒ์ํ๋ฉด, ์ฌ๋ฌ ํญ๋ชฉ์ด ๊ฒ์์ด ๋ฉ๋๋ค.
๊ทธ ์ค์์ ๋ค๋ชจ ๋ฐ์ค๊ฐ ๊ฐ๋ฅดํค๋ 2๊ฐ์ง ํญ๋ชฉ์ ๋ํด ์ ์ ์์๋ณด๊ณ ๋์ด๊ฐ๋๋ก ํ๊ฒ ์ต๋๋ค.
Spring Tools 4 (aka Spring Tool Suite 4) 4.25.0 release
์ด์
์ด๋ฌํ ์ด์ ๋ก Spring Tools 4๋ฅผ ์ ํํ์ฌ ์ค์นํ๋๋ก ํ๊ฒ ์ต๋๋ค.
Imstall ๋ฒํผ์ ๋๋ฌ์ฃผ๋ฉด ๋ฉ๋๋ค.
Install ๋ฒํผ์ ๋๋ฅธ ํ ์ค์น ์ต์ ์ ๊ธฐ๋ณธ ์ค์ ์ผ๋ก ํ๊ณ ๋์ด๊ฐ๋๋ค.
๋ผ์ด์ ์ค ์กฐ๊ฑด์ ๋์ํด์ฃผ๊ณ Finish ๋๋ฌ์ฃผ๋ฉด ๋ฉ๋๋ค.
์ข์ธก ํ๋จ์ ๋ณด๋ฉด ์ค์น๊ฐ ์งํ๋๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์๊ฐ์ด ๋ค์ ๊ฑธ๋ฆฝ๋๋ค.
์ค์น๋ฅผ ์งํํ๋ค ๋ณด๋ฉด ํด๋น ํ๋ฉด์ด ๋ํ๋ ์ ์์ต๋๋ค.
Trust Authorities๋ Eclipse์ ๊ฐ์ IDE์์ ํ๋ฌ๊ทธ์ธ์ด๋ ์ํํธ์จ์ด๋ฅผ ์ค์นํ ๋ ๋ํ๋๋ ๋ณด์ ๊ด๋ จ ์ค์ ์ ๋๋ค.
์ด ๊ณผ์ ์์ ์ค์นํ๋ ค๋ ์ํํธ์จ์ด๊ฐ ์ ๋ขฐํ ์ ์๋ ์ถ์ฒ์์ ์จ ๊ฒ์ธ์ง๋ฅผ ํ์ธํ๊ณ , ํด๋น ์ถ์ฒ(์ธ์ฆ ๊ธฐ๊ด, CA)๋ฅผ ์ ๋ขฐํ ์ง๋ฅผ ๋ฌป๋ ์ ์ฐจ์ ๋๋ค.
์ ๋ขฐํ ์ ์๋ ์ถ์ฒ์ผ ๊ฒฝ์ฐ
์ถ์ฒ๊ฐ ๋ถ๋ช ํํ ๊ฒฝ์ฐ
์ฐ๋ฆฌ๊ฐ ์ค์นํ๋ Spring Tools 4์ ๊ฐ์ ๊ณต์์ ์ธ ํ๋ฌ๊ทธ์ธ์ด๋ Eclipse Marketplace์์ ์ ๊ณต๋๋ ๋๊ตฌ๋ ์ผ๋ฐ์ ์ผ๋ก ์ ๋ขฐํ ์ ์๋ ์ธ์ฆ ๊ธฐ๊ด์ ์ํด ์๋ช ๋ฉ๋๋ค.
๋ฐ๋ผ์ Trust๋ฅผ ์ ํํ๊ณ ๋์ด๊ฐ๋๋ก ํ๊ฒ ์ต๋๋ค.
๊ทธ ๋ค์์ผ๋ก ๋ํ๋ ์ ์๋ ํ๋ฉด์ ๋๋ค.
Trust Artifacts๋ ์ํํธ์จ์ด ์ค์น๋ ๋ฐฐํฌ ์ ๋ํ๋๋ ๋ณด์ ๊ฐ๋ ์ค ํ๋๋ก, ์ํํธ์จ์ด ํจํค์ง๋ ํ๋ฌ๊ทธ์ธ(์ฆ, "artifacts")์ด ์ ๋ขฐํ ์ ์๋ ์ถ์ฒ์์ ์ ๊ณต๋์๋์ง ํ์ธํ๋ ๊ณผ์ ์ ์๋ฏธํฉ๋๋ค.
์ด ์ฉ์ด๋ ๋ณดํต ๊ฐ๋ฐ ํ๊ฒฝ์ด๋ ํจํค์ง ๊ด๋ฆฌ ์์คํ ์์ ์ฌ์ฉํ๋๋ฐ, ์ํํธ์จ์ด์ ๋ฌด๊ฒฐ์ฑ๊ณผ ์ถ์ฒ์ ์ ๋ขฐ์ฑ์ ๋ณด์ฅํ๋ ๋ฐฉ์์ผ๋ก ํ์ฉ๋ฉ๋๋ค.
์ฐ๋ฆฌ๋ Eclipse๋ Spring Tools์ ๊ฐ์ ๊ณต์ ๋ ฅ ์๋ ์ถ์ฒ์์ ๋ค์ด๋ก๋ํ๊ธฐ ๋๋ฌธ์ artifacts๋ ์ ๋ขฐํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ด๋ฒ์๋ Trust๋ฅผ ์ ํํ๊ณ ๋์ด๊ฐ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ค์น๊ฐ ์๋ฃ๋๋ฉด ํ๋ฌ๊ทธ์ธ์ ์ ์ฉํ๊ธฐ ์ํด eclipse๋ฅผ ์ฌ์์ ํ ๊ฒ์ด๋๋ ์๋ด ๋ฉ์ธ์ง๊ฐ ๋ํ๋ฉ๋๋ค.
์ง๊ธ ๋ค์ ์์์ ๋๋ฌ์ eclipse๋ฅผ ์ฌ์์ ํด์ฃผ๋ฉด Spring Tools 4 ์ค์น๊ฐ ์๋ฃ ๋ฉ๋๋ค.
eclipse๋ฅผ ์ฌ์์ํ ํ, File -> New -> Other๋ฅผ ์ ํํฉ๋๋ค.
๊ฒ์์ฐฝ์ Spring์ ์
๋ ฅํ๊ณ , Spring Starter Project๊ฐ ์๋์ง ํ์ธํฉ๋๋ค.
Spring Starter Project๋ฅผ ์ ํํ๊ณ Next๋ฅผ ํด๋ฆญํ์ฌ ํ๋ก์ ํธ ์์ฑ ๊ณผ์ ์ ์์ํฉ๋๋ค.
ํ์ํ ํ๋ก์ ํธ ์ค์ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๋ ํ๋ฉด์ด ๋ํ๋ฉ๋๋ค.
Service URL: Spring Initializer ์๋น์ค URL ์
๋๋ค.
Name: ํ๋ก์ ํธ ์ด๋ฆ (์: demo)
Type: ์ดํ๋ฆฌ์ผ์ด์
๋น๋ ํ์
Packaging: Packaging ํ์
Java Version: ์๋ฐ ๋ฒ์
Language: ์ฌ์ฉ ์ธ์ด
Group: ๊ทธ๋ฃน ์์ด๋
Artifact: ์ํฐํฉํธ ์์ด๋
Version: ๋ฒ์ ์ ๋ณด
Description: ์ดํ๋ฆฌ์ผ์ด์
์ค๋ช
Package: ํจํค์ง ์ ๋ณด
์ฒ์์๋ ๊ธฐ๋ณธ ์ค์ ๊ฐ์ด ์์ผ๋ฏ๋ก ์ ๋ ๊ธฐ๋ณธ ์ค์ ๊ฐ์ผ๋ก ์ฌ์ฉํ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ค์ ์ ๋ฐ๊พธ๊ณ ์ถ์ผ๋ฉด ๋ฐ๊ฟ๋ ๋ฌด๋ฐฉํฉ๋๋ค.
์๋ฐ ๋ฒ์ ์ ๋ช
๋ นํ๋กฌํํธ ์ฐฝ์์ java -version
์ ์
๋ ฅํ๋ฉด ๋์ต๋๋ค.
๋ง์ฝ ๋์ค์ง ์๊ฑฐ๋ ํ๋ก์ ํธ ์ค์ ๋ชฉ๋ก์ ๋ง๋ ๋ฒ์ ์ด ์๋ค๋ฉด Oracle ํํ์ด์ง์ ์ ์ํ์ฌ JDK ํ์ผ์ ๋ค์ด๋ก๋ํ๋ฉด ๋ฉ๋๋ค.
๐พ JDK ๋ค์ด๋ก๋ โฌ ๏ธ ํด๋ฆญ
์ค์ ์ ๋ง์น ํ Next๋ฅผ ํด๋ฆญํ์ฌ ๋ค์์ผ๋ก ๋์ด๊ฐ๋๋ค.
Spring Web์ ์ ํํ์ฌ Spring Boot ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์๋๋ก ์ค์ ํ ํ Finish๋ฅผ ๋๋ฌ ๋ง๋ฌด๋ฆฌ ํฉ๋๋ค.
ํ๋ก์ ํธ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ๋ง๋ค์์ผ๋ฉด, ์ด์ ์น์๋ฒ๋ฅผ ์คํํ๊ฒ ์ต๋๋ค.
๋จผ์ , ์น ์์ฒญ์ ์ฒ๋ฆฌํ ์ปจํธ๋กค๋ฌ๋ฅผ ์์ฑํ๊ฒ ์ต๋๋ค.
์ข์ธก์ ๋ณด์ด๋ ํ๋ก์ ํธ ํด๋ ๋ชฉ๋ก์์ src -> main -> java -> com.example.demo๋ฅผ ์ ํํฉ๋๋ค.
์ ์ด๋ฏธ์ง์ ๋ณด์ด๋ ๊ฒฝ๋ก๋ก ๋ค์ด๊ฐ๋ ๋ฌด๋ฐฉํฉ๋๋ค.
์ด ํ ์ฐํด๋ฆญ์ ํ ๋ค์์ New -> Class๋ฅผ ํด๋ฆญํด์ค๋๋ค.
๊ทธ๋ฌ๋ฉด ์์ฑํ ํด๋์ค์ ์ต์ ์ ์ค์ ํ๋ ํ๋ฉด์ด ๋์ค๊ฒ ๋ฉ๋๋ค.
์ ๋ ๋ค๋ฅธ ๋ถ๋ถ์ ๊ฑด๋๋ฆฌ์ง ์๊ณ ํ์ผ ์ด๋ฆ๋ง HelloController๋ก ์์ฑํด์ค ๋ค Finish ๋ฒํผ์ ๋๋ฌ ์๋ฃํ๊ฒ ์ต๋๋ค.
package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
//๊ธฐ๋ณธ ๊ฒฝ๋ก
@GetMapping("/")
public String hello() {
//์น์๋ฒ ์คํ์ ํ์ด์ง์ ๋ํ๋ ๋ฌธ๊ตฌ
return "Hello, Spring Boot!";
}
}
์ดํ์ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํด์ฃผ๊ณ ์ ์ฅํด์ฃผ๋๋ก ํฉ๋๋ค.
๊ทธ ๋ค์์ ํด๋์์ DemoApplication.java ํ์ผ์ ์ฐํด๋ฆญ ํ ๋ค์์ Run As -> Spring Boot App์ ํด๋ฆญํ์ฌ ์๋ฒ๋ฅผ ์คํํฉ๋๋ค.
ํ๋ก์ ํธ ์์ฑ๋จ๊ณ์์ ํ๋ก์ ํธ ๋ช ์ ์ ์ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ์ค์ ํ์๋ค๋ฉด, ํ์ผ ์ด๋ฆ์ด ๋ค๋ฅผ ์๋ ์์ต๋๋ค.
ํ๋ก์ ํธ ์์ฑ ์งํ src -> main -> java -> com.example.demo ๊ฒฝ๋ก์ ์๋ ์ฒซ ํ์ผ์ ์คํํ๋ฉด ๋ฉ๋๋ค.
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
์ ์ฝ๋์ ๋น์ทํ ๋ด์ฉ์ผ๋ก ์์ฑ๋์ด ์์ ๊ฒ ์ ๋๋ค.
๐ ์ด์ ๋ง์ง๋ง ์ ๋๋ค!
์น ๋ธ๋ผ์ฐ์ ์์ URL ๊ฒ์ ์ฐฝ์ http://localhost:8080 ์ ์ ๋ ฅํ ํ Hello, Spring Boot! ๋ฉ์ธ์ง๊ฐ ์ถ๋ ฅ์ด ๋๋ค๋ฉด, ์ฑ๊ณต์ ์ผ๋ก ์น์๋ฒ๋ฅผ ์คํ์ํจ ๊ฒ ์ ๋๋ค.
ํฌ์คํ ์ ๋ฐ๋ผ์ ์น์๋ฒ๋ฅผ ์คํ์ํค๋ค ๋ณด๋ฉด ๋ง์ฃผ์น ์ ์๋ ์๋ฌ๊ฐ ๊ฐํน ์์ต๋๋ค.
import getting started ontent has encounted a problem
toolchaindownloadFailedexception: no installed toolchains match and toolchain download repostrories have not been configured.
์๋ฌ ๋ฉ์ธ์ง๋ฅผ ์ดํด๋ณด๋ฉด Eclipse๋ Maven์์ Toolchain ๊ด๋ จ ์ค์ ์ด ์ ๋๋ก ๋์ด ์์ง ์์์ ๋ฐ์ํ๋ ๊ฒ์ ๋๋ค. ํนํ, Maven์ด๋ Gradle ๊ฐ์ ๋น๋ ๋๊ตฌ๊ฐ ํน์ JDK ๋๋ Toolchain์ ์ฐพ์ง ๋ชปํ ๋ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๋ ํ์ํ JDK ๋๋ ํน์ ๊ฐ๋ฐ ๋๊ตฌ๊ฐ ์ค์น๋์ง ์์๊ฑฐ๋, ๋ค์ด๋ก๋ ์ค์ ์ด ๋์ด ์์ง ์์์ ๋ฐ์ํ ์ ์์ต๋๋ค.
๋๋ถ๋ถ์ JDK ๋ฒ์ ์ด ๋ง์ง ์์์ ๊ทธ๋ฐ ๊ฒ ์ ๋๋ค.
๋ค๋ชจ ๋ฐ์ค๊ฐ ๊ฐ๋ฅดํค๋ ๋ถ๋ถ์ ํ์ธํ ํ ์ซ์์ ๋ง๋ ๋ฒ์ ์ผ๋ก ์ค์นํ๋ฉด ๋ฉ๋๋ค.
ToolchainDownloadFailedException: No locally installed toolchains match and toolchain download repositories have not been configured.
java.lang.reflect.InvocationTargetException
์ด ์๋ฌ๋ ๋๋ถ๋ถ JDK ๋ฒ์ ์ผ๋ก ์ธํด ๋ฐ์ํฉ๋๋ค.
์ค์ ์ ๋ง๋ JDK๋ฅผ ์ค์นํด์ฃผ๋ฉด ๋ฉ๋๋ค.
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
ํน์๋ผ๋ Java ์ฝ๋ ์ค ํด๋น ๋ถ๋ถ์์ ์๋ฌ๊ฐ ๋ฐ๊ฒฌ๋์๋ค๋ฉด, Spring Web ๊ด๋ จ ์์กด์ฑ์ด ํ๋ก์ ํธ์ ์ถ๊ฐ๋์ง ์์๊ฑฐ๋, Gradle์ด ์์กด์ฑ์ ์ ๋๋ก ๋ค์ด๋ก๋ํ์ง ๋ชปํ ๊ฒฝ์ฐ์ ๋๋ค.
implementation 'org.springframework.boot:spring-boot-starter-web'
์ด ๊ฒฝ์ฐ ๋ค๋ชจ ๋ฐ์ค๊ฐ ๊ฐ๋ฅดํค๋ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ฃผ๋ฉด ๋ฉ๋๋ค.
์ด๊ฒ์ผ๋ก Spring Framework๋ฅผ ํ์ฉํ ์น์๋ฒ ์คํํ๊ธฐ๋ฅผ ๋ง์น๊ฒ ์ต๋๋ค.
์น์๋ฒ๋ฅผ ํ์ฉํ์ฌ ๋ค์ํ ์ฃผ์ ์ ๊ฐ๋ฐ์ ํ๋ฉด์, ์ค๋ ฅ์ ๋์ฑ ํค์ ๋๊ฐ์๊ธธ ๋ฐ๋๋๋ค.
๊ฐ์ฌํฉ๋๋ค. ๐