์ฝํ
์ธ :
- Spring Boot๋ก 5๋ถ ์์ ์น ์๋ฒ๋ฅผ ์์ํ๋ ๋ฐฉ๋ฒ
- 5๋ถ ์์ ํ์ ํ๋ก์ ํธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ
- h2 ๋ฐ์ดํฐ๋ฒ ์ด์ค(๋ฐ ์ฝ๊ฐ์ Hibernate)๋ฅผ ์ฑ์ฐ๋ ๋ฐฉ๋ฒ
- Lombok์ผ๋ก ํ๋ก์ ํธ๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์ ์งํ๋ ๋ฐฉ๋ฒ
- ์ฐ๋ฆฌ๋ ๊ณ์ํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฑ์๋๋ค
- DB์ ์ง๋ฌธํ๋ ๋ฐฉ๋ฒ
- ๋๋ค ํํ์ ๋ฐ streamAPI์ ๋ํ ์ฃผ์ ๊ฒํ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ต ๋งคํ
- ์คํ๋ง ์ปจํ ์คํธ์ ๋ํด ์กฐ๊ธ
- DTO ํจํด
- REST ์ปจํธ๋กค๋ฌ
- ์ฟ ํค ๋ฐ ํค๋
- ์คํ๋ง ๋ถํธ ์ปจํธ๋กค๋ฌ์ ์์ธ ์ฒ๋ฆฌ
- Heroku์์ Spring Boot ํ๋ก์ ํธ๋ฅผ ํธ์คํ ํ๋ ๋ฐฉ๋ฒ
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<java.version>1.8</java.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
<relativePath/><!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<properties> ๋ ์ค์ ์ด๋ฉฐ, ํนํ Java ๋ ๋ฒจ์ด ์ฌ๊ธฐ์ ํ์๋ฉ๋๋ค. <parent>๋ ๋ชจ๋ ์ข
์์ฑ์ด ์ง์ ๋ ๋ฒ์ (2.2.0.RELEASE)๊ณผ ์ผ์นํ๋ ๋ฒ์ ์ผ๋ก ๋ค์ด๋ก๋๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. <์ข
์์ฑ> ์๋ ์์๋ ๋์ผํ spring-boot-starter-web์ด ํฌํจ๋์ด ์์ต๋๋ค. ๋ฒ์ ์ <parent> ์ ์ง์ ๋์ด ์์ผ๋ฏ๋ก ์ฌ๊ธฐ์๋ ํ์ํ์ง ์์ต๋๋ค. Java ํจํค์ง์์๋ ru.java.rush ํจํค์ง๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค . ์์ฑ๋ ํจํค์ง์์ ์ ํ๋ฆฌ์ผ์ด์
ํด๋์ค๋ฅผ ์์ฑ ํ๊ณ ๋ค์ ์ฝํ
์ธ ๋ก ์ฑ์๋๋ค.
package ru.java.rush;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Applications {
public static void main(String[] args) {
SpringApplication.run(Applications.class);
}
}
๋
น์ ๋ฒํผ์ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ๋ฅผ ์์ํ๊ฒ ์ต๋๋ค. ์ฝ์์ ๋ก๊ทธ๊ฐ ๋ํ๋๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
2020-12-05 21:05:27.598 INFO 2546 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2020-12-05 21:05:27.601 INFO 2546 --- [ main] ru.java.java_rush.Applications : Started Applications in 0.971 seconds (JVM running for 1.446)
์ด๋ TomcatWebServer๊ฐ ํฌํธ 8080์์ ์์๋์์์ ์๋ฏธํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด๊ณ http://localhost:8080/์ ์
๋ ฅํด ๋ณด๊ฒ ์ต๋๋ค. ์๋ฒ๋ ์ด๋ค ์ ๋ณด๋ ๋ณด๋ด์ง ์์ผ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ด ํ์๋ฉ๋๋ค.
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Sat Dec 05 21:36:10 MSK 2020
There was an unexpected error (type=Not Found, status=404).
No message available
ํ์ง๋ง ์๋ฒ๋ ์๋ ์ค์
๋๋ค. ์ ํ๋ฆฌ์ผ์ด์
์ ์ค์งํ ๋ค์ ๋ธ๋ผ์ฐ์ ํ์ด์ง๋ฅผ ์๋ก ๊ณ ์น๋ฉด "ํ์ด์ง๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค."๋ผ๋ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค. ์น ์๋ฒ๋ฅผ ํธ์คํ
ํ๋ Java ์ ํ๋ฆฌ์ผ์ด์
์ ์์ฑํ์ต๋๋ค! Spring์ด ์๋ค๋ฉด ๋์ผํ ์์
์ ์ํํ๋ ค๋ฉด 10๋ฐฐ์ ์๊ฐ๊ณผ ์์ฒ ๊ฐ์ ์ ๊ฒฝ์ด ํ์ํฉ๋๋ค! ์ผ๋ฐ์ ์ผ๋ก Spring์ ๊ณต๋ถํ๊ณ ๋๋ ค์ํ์ง ๋ง๊ณ ์ ์ฐจ ๋ชฉํ๋ฅผ ํฅํด ๋์๊ฐ๋ฉด ์ฑ๊ณตํ ๊ฒ์
๋๋ค! ์ด์ ์ฌ๊ธฐ์์ ํ์ต ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋น ๋ฅด๊ฒ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค . ์ด ๊ธฐ์ฌ ์๋ฆฌ์ฆ์ ์ฃผ์ ๋ชฉํ๋ Spring ํ๋ ์์ํฌ์ Spring ๋ถํธ๋ฅผ ๋ฐฐ์ฐ๋ ๊ฒ์ ๋๋ ค์ํด์๋ ์ ๋๋ฉฐ, ์๊ฐ๋งํผ ์ด๋ ต์ง ์๋ค๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ JavaCore์ ๋ํ ์ง์๊ณผ OOP์ ๊ธฐ๋ณธ ๊ฐ๋
(ํด๋์ค, ์ธํฐํ์ด์ค, ์์ ๋ฑ)์ด ์์ผ๋ฉด ์๊ฐ์ด ๋ญ๋น๋ฉ๋๋ค. ์ด ์ง์์ด ์๋๋ผ๋ ์ ๋งํ์ง ๋ง์ธ์. 1~2๊ฐ์๋ง ๊ณต๋ถํ๋ฉด ๋ชจ๋ ๊ฒ์ด ํด๊ฒฐ๋ ๊ฒ์
๋๋ค. ๋ง์คํฐํ ํ ์ฌ๊ธฐ๋ก ๋ค์ ์ค์ธ์. ์ด๋์๋ถํฐ ์์ํด์ผ ํ ์ง ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด ๋ค์์ ์ฝ์ด๋ณด์ธ์. โJava 8. ์ด๋ณด์ ๊ฐ์ด๋. ํ๋ฒํธ ์ดํธ". ์ด ๊ธฐ์ฌ ์๋ฆฌ์ฆ๋ Spring ํ๋ ์์ํฌ ๋ฐ Spring ๋ถํธ์ ๊ดํ ์ฃผ์ ํ๋์ ์ด๊ณ ์ค์ฉ์ ์ธ ์ฃผ์ ๋ฅผ ์๊ฐํฉ๋๋ค. ๊ฐ ๊ธฐ์ฌ์ ํ์์๋ ํ๋์ ์์ ์(๋๋ ์ฌ๋ฌ ๊ธฐ์ฌ์ ๊ฑธ์น ์), ๊ฐ๋จํ ์ค๋ช
๋ฐ ์ด๋ก ์ด๋ ๊ธฐํ ์์ ๋ํ ๋งํฌ๊ฐ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ฃผ์ ์ ๋ํ ์ถ๊ฐ ์ ๋ณด๋ฅผ ๋
๋ฆฝ์ ์ผ๋ก ๊ฒ์ํ๋ ๊ฒ๋ ๊ฐ๋ ฅํ ๊ถ์ฅ๋ฉ๋๋ค. ์ฃผ๊ธฐ๊ฐ ๋๋๋ฉด Spring ํ๋ ์์ํฌ์ Spring ๋ถํ
๊ธฐ์ ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์์ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค ์ ์์ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค. Spring์ด ๋ฌด์์ธ์ง ์ดํดํ๋ ค๋ฉด ์ง๊ธ ๋ฐ๋ก ์ด ๊ฐ๋จํ๊ณ ์ดํดํ๊ธฐ ์ฌ์ด ๊ธฐ์ฌ๋ฅผ ์ฝ์ด๋ณด์ธ์. ๊ฒ์ผ๋ฅธ ์ฌ๋๋ค์ ์ํ Spring. ์ฝ๋๊ฐ ํฌํจ๋ ๊ธฐ๋ณธ, ๊ธฐ๋ณธ ๊ฐ๋
๋ฐ ์์ ์
๋๋ค. . ํด๋น ์ฃผ์ ์ ๋ํ ๋ณด๋ค ์ง์งํ ์ ๋ณด๋ฅผ ์ฐพ๊ณ ์๋ค๋ฉด ๋ค์ ๋ชฉ๋ก์ ํ์ธํ์ญ์์ค. ๋ฒ์ญ๋์์ง๋ง ์ดํดํ๊ธฐ ์ฝ์ง ์์ Habr์ ๊ธฐ์ฌ: Spring Framework๋ ๋ฌด์์
๋๊น? ์ข
์์ฑ ์ฃผ์
์์ ์น MVC๊น์ง Spring MVC: ์น ์ฌ์ดํธ ๋ฐ RESTful ์๋น์ค ๋ง๋ค๊ธฐ ๋ฒ์ญ๋ ๋ฌธ์ , ์ง๊ธ ๋ฌด์์ด ์๋์ง ํ์ธํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋จผ์ ๊ทธ๊ฒ๋ค์ ์ป์ด์ผ ํ๋ฉฐ, ๋ฌผ๋ก ๋ค์ ๋ด์ฉ์ ์กฐ๊ธ์ฉ ์ฝ์ด์ผ ํฉ๋๋ค: Spring in action | Walls Craig (Spring 3) - ๋๋ ์ด ์ฑ
๋ถํฐ ์์ํ์ฌ ์ฒซ ๋ฒ์งธ ์ฅ๋ง ์ฝ์ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค(๋๋จธ์ง๋ ์ด๋ฏธ ์ค๋๋์์ผ๋ฏ๋ก). ์ธํฐ๋ท์์ ๊ฒ์ํ ์ ์์ต๋๋ค. ์ธํฐ๋ท์๋ Spring in action์ ๋ถ๋ถ ๋ฒ์ญ์ด ๋ ๋๊ณ ์์ต๋๋ค | Walls Craig (๋ด 5) - ์ด๋ฅผ ๊ธฐ์ด๋ก ์ฌ์ฉํด ๋ณผ ์ ์์ผ๋ฉฐ ์๋ณธ ์ฑ
์ ํ๋ ์ ํ
์ด์
์ ๊ฐ๋จํ๊ณ ์์ ๊ฐ ์์ต๋๋ค. ์ข์ ๊ธฐ๋ณธ ์ง์ ์์ค ์ต์
์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. Spring 5 for Professionals | Kozmina Yuliana, Harrop Rob - ๋ฌ์์์ด๋ก ์ธํฐ๋ท์์ ๊ฒ์ํ ์ ์์ต๋๋ค. ์ด ์ฑ
์ ๋ฐฉ๋ํ๊ณ ํ๋ฌธ์ ์ด๋ฏ๋ก ๋ ํ์ด์ง๋ฅผ ์ฝ์ ํ์๋ ์ค๋งํ์ง ์์ ๊ฒ์ด๋ฏ๋ก ์ด๊ฒ์ ์ดํดํด์ผ ํฉ๋๋ค. ๊ฐ์ธ์ ์ผ๋ก ์ ๋ ์ด๋ ๊ฒ ํ์ต๋๋ค. ์ฑ
์ ์ผ๋ถ๋ฅผ ์ฝ์ ๋ค์(๋๋ก๋ ๋ ๋ฒ ์ด์) ์ธํฐ๋ท์์ ์ด ์ฃผ์ ์ ๋ํ ์๋ฅผ ์ฐพ์๋ณด์์ต๋๋ค.
GO TO FULL VERSION