스프링 1

letsbebrave·2022년 8월 28일
0

spring

목록 보기
1/3
post-thumbnail

Spring Initializer

스프링 부트 기반
https://start.spring.io/

maven project
gradle project
필요한 라이브러리와 빌드하는 라이프사이클까지 다 관리해주는 툴 (버전 설정과 라이브러리 가져오기)
라이브러리 의존관계 관리 -> 의존 관계인 모든 라이브러리 가져옴

ex. 스프링 부트 라이브러리
spring-boot-starter :

  • spring-boot : spring-core
  • spring-boot-starter-logging : logback, slf4j

ex. 테스트 라이브러리
spring-boot-starter-test :

  • junit : 테스트 프레임워크


^ gradle 들어가면 있음

구조


main :
java : 실제 패키지와 소스 파일들
resources : 실제 자바 코드들을 제외한 xml이나 설정 파일들
test : 테스트 코드들이 있음

Cause: error: invalid source release: 17

해당 에러는 start.spring.io에서 생성한 프로젝트의 java version이 17로 되어 있어, 내가 설치한 JDK version 11과 일치하지 않아 발생한 것.

start.io에서 java version을 11로 설정해줘야 함

main

Tomcat이라는 WebServer 내장하고 있어서 spring boot 띄워줌

package haein.haeinspring;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HaeinSpringApplication {

	public static void main(String[] args) {
		SpringApplication.run(HaeinSpringApplication.class, args);
	}

}

동작 환경

  • 컨트롤러에서 리턴값으로 문자 반환 시 viewResolver가 화면 찾아서 처리
  • resources:templates/ + {viewName} + .html
@Controller
public class HelloController {

    @GetMapping("hello")
    public String hello(Model model){
        model.addAttribute("data", "hello!!");
        return "hello"; // resources > templates > hello.html 찾음
    }

}

서버 배포 시

웹 개발 시 참고 사이트

spring 공식 사이트
https://docs.spring.io/spring-boot/docs/2.1.7.RELEASE/reference/html/boot-features-developing-web-applications.html
https://docs.spring.io/spring-boot/docs/current/reference/html/features.html

스프링을 이용한 웹 개발 - 3가지 방법

정적 컨텐츠

서버에서 하는 것 없이 파일을 웹 브라우저에 그대로 내려줌

MVC와 템플릿 엔진

과거에 JSP, PHP 등이 템플릿 엔진
서버에서 프로그래밍해서 동적으로 HTML 내려주는 것
MVC : model-view-controller 패턴
서버에서 HTML 변형해서 내려줌

API

JSON이라는 데이터 구조 포멧으로 클라이언트한테 데이터 전달하는 방식
API로 데이터만 내려주면 클라이언트에서 화면을 그려줌
서버끼리 통신할 때도 API 방식으로 함

1. 정적 컨텐츠


hello-static이란 컨트롤러 없으면 static/hello-static.html에서 파일 찾음

2. MVC와 템플릿 엔진

  • MVC : Model, View, Controller
    Model ?
    View : 화면과 관련된 일
    Controller : 비즈니스 로직과 관련된 일

템플릿 엔진을 Model, View, Controller로 쪼개서 View를 템플릿 엔진으로 HTML을 조금 더 프로그래밍하고 랜더링한 것을 클라이언트한테 전달

@Controller
public class HelloController {

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

}

3. API

문자열로 응답할 때

@Controller
public class HelloController {
	
    @GetMapping("hello-string")
    @ResponseBody // HTTP의 Body에 "hello " + name을 바로 넣어주겠다는 뜻
    public String helloString(@RequestParam("name") String name){
        return "hello " + name;
    }

}

객체로 응답할 때
JSON 방식으로 데이터 만들어서 HTTP 응답에 반환

@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;
        }
    }

}


@ResponseBody가 있으면 viewResolver 대신, HttpMessageConverter가 동작

  • StringConverter : 단순 문자일 때
  • JsonConverter : 객체일 때 -> JSON 스타일로 바꿈 -> 요청한 웹 브라우저한테 보내줌

정리
=> HttpMessageConverter를 통해 JSON 스타일로 바꿔서 반환!
View 없이 바로 Http Response에 넣어서 반환

profile
그게, 할 수 있다고 믿어야 해

0개의 댓글