본문 바로가기
공부/Spring

[Spring][인프런 스프링 입문] 웹 개발 기초

by 웅대 2022. 12. 28.
728x90
반응형

본 포스팅은 김영한 강사님의 인프런 강의 "스프링 입문"을 정리한 포스팅으로 강의 자료에서 사용한 자료를 사용했음을 밝힙니다.

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard

 

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com

 

스프링에서는 기본적으로 mvc라는 디자인 패턴을 사용한다.

 

과거에는 데이터베이스에도 접근하고 정보를 가공하는 것과 같은 일들을 분리하지 않고 view에서 모든 것을 처리하곤 했다.

 

이러한 방식의 문제점을 해결하기 위해서 관심사를 나누어 mvc라는 디자인 패턴이 등장했다.

 

mvc는 model, view, controller를 의미하는데 쉽게 말하면 역할 별로 나누었다고 보면 된다.

 

model은 정보를 가공하고 view는 데이터를 받아서 화면에 보여주고 controller는 model과 view 사이에서 중재한다.

 

이러한 mvc 패턴을 스프링에서는 어떻게 구현하는지 공부해보려 한다.

 

@Controller
public class HelloController {
    @GetMapping("hello")
    public String hello(Model model){
        model.addAttribute("data","hello");
        return "hello";
    }
}

스프링에 controller라는 것을 알려주려면 @Controller라는 어노테이션(Annotation)을 달아주어야 한다.

 

GetMapping이라는 어노테이션은 경로를 생각하면 된다.

 

로컬에서 기본 주소는 localhost:8080인데 localhost:8080/hello를 주소창에 입력하면 위 코드에서 hello 함수가 실행되는 것이다.

 

model의 addAttribute는 key-value 쌍으로 모델에 저장을 하고 view에서는 key값을 바탕으로 value를 가져올 수 있다.

 

그리고 hello를 반환하고 있는데 이건 단순 문자열이 아니라 view를 반환하는 것이다.

 

resources:templates 디렉토리 내부에서 hello라는 이름을 가지는 view 파일을 찾아서 반환한다.

 

이러한 과정을 그림으로 보면 다음과 같다.

또한 정적 컨텐츠 기능 또한 존재한다.

 

위 그림처럼 바로 view 파일을 주소창에 입력한다면 컨트롤러가 없다면 resources:static 디렉토리 내부에서 해당 view 파일을 찾아서 보여준다.

 

쿼리 스트링을 사용해서 view에 값을 전달할 수도 있다.

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

RequestParam이라는 어노테이션을 사용하면 된다.

 

localhost:8080/hello-mvc?name=chulsoo

 

이렇게 url에서 쿼리 스트링을 사용하면 value가 helloMvc 함수의 인자로 들어가게 되고 이를 사용해서 모델에 넣어주면 된다.

 

API

 

지금까지는 return 값에 해당하는 이름의 view를 찾아서 반환하는 형식이었다면 view가 아니라 진짜 문자열 혹은 객체를 반환하는 방법도 존재한다.

 

ResponseBody라는 어노테이션을 사용하면 된다.

 

@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name){

    return "hello"+name;
}

ResponseBody라는 어노테이션과 함께 문자나 객체를 반환하면 된다.

 

RespobseBody의 원리는 다음과 같다.

 

728x90
반응형

댓글