Spring Framework tutorial 1

문주은·2022년 10월 28일
0

1. Maven VS Gradle

  1. Maven & Gradle
  • 빌드 관리 도구
  • 필요한 라이브러리를 모두 호출하고 빌드하는 라이브사이클 통합 관리하는 툴

  1. Maven
    maven 구성
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>    
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.2</version>
    <relativePath/> <!-- lookup parent from repository -->    
  </parent>    
  <groupId>com.example2</groupId>    
  <artifactId>demo-maven</artifactId>   
  <version>0.0.1-SNAPSHOT</version>    
  <name>demo-maven</name>    
  <description>Demo project for Spring Boot</description>    
  <properties>        
    <java.version>11</java.version>    
  </properties>    
  <dependencies>        
    <dependency>            
      <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter</artifactId>        
    </dependency>         
    <dependency>            
      <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        
    </dependency>    
  </dependencies>     
  <build>        
    <plugins>            
      <plugin>                
        <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            
      </plugin>        
    </plugins>    
  </build> 
</project>
  1. gradle
    gradle 구성
plugins {    
id 'org.springframework.boot' 
version '2.5.2'    
id 'io.spring.dependency-management' 
version '1.0.11.RELEASE'    
id 'java'} 
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11' 
repositories {mavenCentral()} 
dependencies {implementation 'org.springframework.boot:spring-boot-starter'
testImplementation 'org.springframework.boot:spring-boot-starter-test'} 
test {useJUnitPlatform()}

2. Spring Boot tutorial

1) Spring boot 접속

2) IntelliJ 접속하여 Import

3) HelloController.java

package hello.hellospring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {

    @GetMapping("hello")
    public String hello(Model model){
        model.addAttribute("data","hello!");
        return "hello";
    }
}
  • @GetMapping("hello") : 웹 브라우저에서 localhost:8080/hello 요청 시, 컨트롤러에 "hello" mapping 값과 매핑되어 GET method 실행 (GETMapping = GET method)

  • return "hello" : 컨트롤러에서 리턴값으로 문자열을 반환하면, templates의 html 파일 중 hello.html 파일을 불러옴

4) build

[ Windows 인 경우 ]

  • terminal에서 gradlew.bat build
  • build 시, 현재 디렉터리 밑에 build 폴더 생성
  • cd build/libs
  • 생성된 jar 파일 확인 가능
  • java -jar hello-spring.jar : 빌드된 jar 파일 실행

[ 이후 서버 배포시 ]

  • 위에서 빌드한 hello-spring.jar 파일만 복사해서 서버에 넣기
  • 위처럼 jar 파일 실행 java -jar hello-spring.jar
  • 서버에서 spring 실행 가능

[ 만약 빌드가 잘 안되는 경우 ]
./gradlew,bat clean build : 완전히 새롭게 빌드

5) 정적 컨텐츠

  • resources/static/hello-static.html 생성
  • hello-static.html 에 값 입력
  • http://localhost:8080/hello-static.html 로 접속

  • 컨트롤러에 우선적으로 hello-static 파일 찾고
  • 없으면 resources/static 에서 찾은 파일을 반환하는 순서

6) MVC & template engine

Model : 모델에다 화면에 필요한 것들을 담아서 넘겨주는 역할
View : 화면에 보여주는 일
Controller : 내부 로직

  • Controller
package hello.hellospring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {

    @GetMapping("hello-mvc")
    public String helloMvc(@RequestParam(value="name", required=true) String name, Model model){
        model.addAttribute("name", name);
        return "hello-template";
    }
}

// @RequestParam 은 기본적으로 required=true가 default로
// client에서 url 호출 시, http://www......?key=value 입력
  • View
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p th:text="안녕하세요.+ ${name}" ></p>
</body>
</html>
  • p 태그에 해당하는 내용은 ${key} 값으로 불러오고
  • html 파일을 바로 보기 위해선 <p> ... </p> ... 에 내용 입력하면 웹에서 파일 바로 불러올 수 있다.

http://localhost:8080/hello-mvc?name=spring!!! : ? 뒤에 RequestParam 내용 입력하면 해당 내용을 받아서 출력됨

7) API

  • Controller
@Controller
public class HelloController {

    @GetMapping("hello-api")
    @ResponseBody
    public Hello helloApi(@RequestParam("name") String name){
        Hello hello = new Hello();
        hello.setName(name);
        return hello;
    }

    // 객체 생성
    static class Hello{
        private String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
}
  • view를 거치지 않고(=html을 거치지 않고) parameter 값 그대로 출력(개발자 모드를 보면 확인 가능)
  • @ResponseBody : HTTP의 BODY에 문자 내용을 직접 반환
  • http://localhost:8080/hello-api?name=je!! : 실행하면 json 으로 반환되는 것을 확인 가능
profile
Data Engineer

0개의 댓글