JavaRush /Java Blog /Random-KO /Spring์€ ๋ฌด์„ญ์ง€ ์•Š๋‹ค, Spring Boot๋กœ 5๋ถ„ ์•ˆ์— ์›น ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•

Spring์€ ๋ฌด์„ญ์ง€ ์•Š๋‹ค, Spring Boot๋กœ 5๋ถ„ ์•ˆ์— ์›น ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
์ฝ˜ํ…์ธ :
  1. Spring Boot๋กœ 5๋ถ„ ์•ˆ์— ์›น ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•
  2. 5๋ถ„ ์•ˆ์— ํ•™์ƒ ํ”„๋กœ์ ํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•
  3. h2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(๋ฐ ์•ฝ๊ฐ„์˜ Hibernate)๋ฅผ ์ฑ„์šฐ๋Š” ๋ฐฉ๋ฒ•
  4. Lombok์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•
  5. ์šฐ๋ฆฌ๋Š” ๊ณ„์†ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ฑ„์›๋‹ˆ๋‹ค
  6. DB์— ์งˆ๋ฌธํ•˜๋Š” ๋ฐฉ๋ฒ•
  7. ๋žŒ๋‹ค ํ‘œํ˜„์‹ ๋ฐ streamAPI์— ๋Œ€ํ•œ ์ฃผ์ œ ๊ฒ€ํ† 
  8. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‘๋‹ต ๋งคํ•‘
  9. ์Šคํ”„๋ง ์ปจํ…์ŠคํŠธ์— ๋Œ€ํ•ด ์กฐ๊ธˆ
  10. DTO ํŒจํ„ด
  11. REST ์ปจํŠธ๋กค๋Ÿฌ
  12. ์ฟ ํ‚ค ๋ฐ ํ—ค๋”
  13. ์Šคํ”„๋ง ๋ถ€ํŠธ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
  14. Heroku์—์„œ Spring Boot ํ”„๋กœ์ ํŠธ๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ๋ฐฉ๋ฒ•
๋จผ์ € Maven ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ด๋ณด์ž . pom ํŒŒ์ผ ์— ๋‹ค์Œ ์ข…์†์„ฑ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค .
<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 - ๋Ÿฌ์‹œ์•„์–ด๋กœ ์ธํ„ฐ๋„ท์—์„œ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ฑ…์€ ๋ฐฉ๋Œ€ํ•˜๊ณ  ํ•™๋ฌธ์ ์ด๋ฏ€๋กœ ๋‘ ํŽ˜์ด์ง€๋ฅผ ์ฝ์€ ํ›„์—๋„ ์‹ค๋งํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ฏ€๋กœ ์ด๊ฒƒ์„ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ ์ €๋Š” ์ด๋ ‡๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฑ…์˜ ์ผ๋ถ€๋ฅผ ์ฝ์€ ๋‹ค์Œ(๋•Œ๋กœ๋Š” ๋‘ ๋ฒˆ ์ด์ƒ) ์ธํ„ฐ๋„ท์—์„œ ์ด ์ฃผ์ œ์— ๋Œ€ํ•œ ์˜ˆ๋ฅผ ์ฐพ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค.
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION