본문 바로가기
spring boot

스프링 웹 개발 기초

by Euisaac 2025. 4. 3.

목차

    1. 정적 컨텐츠

    정적 컨텐츠는 파일을 그대로 웹브라우저에 내려 주는 것으로, 스프링 부트는 정적 컨텐츠 기능을 자동으로 제공

     

    resources/static 폴더에 있는 hello-static.html 파일을 작성하면 정적파일이 그대로 반환됨

     

    정적 컨텐츠 작동원리

    1. 웹브라우저에서 localhost:8080/hello-static.html 로 접속 시 내장 톰캣 서버가 요청을 받음
    2. 이 요청을 우선 스프링 컨테이너에게 전달하지만, hello-static 관련 컨트롤러가 없는 것을 확인
    3. resources/static/hello-static.html 파일을 찾고 이를 반환해줌

    2. MVC와 템플릿 엔진

    서버에서 프로그래밍해서 html을 동적으로 변형하여 클라이언트에게 전달

     

    MVC: Model, View, Controller

    웹 애플리케이션을 역할에 따라 나눠서 개발하는 방식으로, 유지보수성과 확장성이 뛰어남

    Model: 데이터들을 저장, 처리

    View: 사용자에게 보여질 화면 생성하고, 사용자 입력 컨트롤러로 반환

    Controller: 사용자의 입력을 처리하고, 필요한 Model을 호출해 데이터를 조회하거나 수정한 후, 해당 데이터를 View에 전달

     

        @GetMapping("hello-mvc")
        public String helloMvc(@RequestParam(value = "name") String name, Model model) {
            // @RequestParam("name")은 요청 URL에서 name 파라미터를 받아오는 역할
            // required= false로 설정 시, 파라미터 값 없으면 null을 반환
            // 'String name'은 요청에서 받은 'name' 파라미터 값을 저장
            
            model.addAttribute("name", name); // 'name' 값을 모델에 추가하여 뷰에서 사용 가능하게 함
            // "name"은 뷰에서 사용할 변수 이름
            // 두 번째 'name'은 URL에서 전달된 파라미터 값
            
            return "hello-template";
    <html xmlns:th="http://www.thymeleaf.org">
    <body>
    <p th:text="'hello ' + ${name}">hello! empty</p>
    </body>
    </html>

     

    html이 변환된 것을 확인할 수 있다.

     

    MVC와 템플릿 엔진 동작원리

    1. 웹 브라우저에서 localhost:8080/hello-mvc?name=spring 와 같은 URL을 요청
    2. 웹 브라우저에서 보낸 요청은 내장 톰캣 서버로 전달되고, 톰캣 서버는 스프링 컨테이너에 전달
    3. 스프링 컨테이너는 helloController에서 helloMvc 메소드를 호출
    4. @RequestParam을 통해 name 파라미터 값 (spring)을 추출하여 모델에 추가하고, hello-template 뷰 이름을 반환
    5. 컨트롤러에서 문자열을 리턴하면, viewResolver가 호출되어 templates/문자열.html 파일을 찾음
    6. 이후 thymeleaf 템플릿 엔진이 html을 변환하고 결과를 브라우저에 전달

    viewResolver: 뷰 이름을 실제 뷰 템플릿으로 변환하는 역할

    컨트롤러에서 반환한 뷰 이름을 바탕으로 실제 뷰 파일을 찾고, Thymeleaf와 같은 템플릿 엔진을 사용하여 실제 HTML 페이지로 변환

     

     

    3. API

    json 데이터 구조 포맷으로 클라이언트에게 데이터를 전달

    ResponseBody 문자 반환

        @GetMapping("hello-string")
        @ResponseBody   //템플릿 엔진 사용하지 않고 body 부에 데이터 직접 반환
        public String helloString(@RequestParam("name") String name) {
            return "hello " + name;
        }
    }

    HTML 코드 없이 문자 그대로 작성된 것을 확인할 수 있다.

    이전 방식들은 뷰라는 템플릿을 조작하는 방식이었지만, 이 방식은 responsebody 통해 데이터를 직접 반환

     

    ResponseBody 객체 반환

        @GetMapping("hello-api")
        @ResponseBody
        public Hello helloApi(@RequestParam("name") String name) {
            Hello hello = new Hello();
            hello.setName(name);
            return hello;       //문자가 아니라 객체를 반환, 객체가 반환되면 json 방식으로 데이터를
                                // 만들어서 HTTP응답에 반환하는게 default
    	                           //json은 key : value 형식으로 구성, 중괄호({})로 둘러쌓아 표현
        }
    
        static class Hello {
            private String name;
    
            public String getName() {       //프로퍼티 접근 방식
                return name;
            }
    
            public void setName(String name) {
                this.name = name;
            }
    
        }

    프로퍼티: 클래스의 필드(멤버 변수)를 외부에서 접근하고 수정할 수 있도록 해주는 방법

    Getter 메서드: 프로퍼티의 값을 읽어오는 메서드

    Setter 메서드: 프로퍼티의 값을 설정(수정)하는 메서드

     

    API 동작원리

    1. 웹 브라우저에서 loclahost:8080/hello-api URL을 요청
    2. 웹 브라우저에서 보낸 요청은 내장 톰캣 서버로 전달되고, 톰캣 서버는 스프링 컨테이너에 전달
    3. 스프링 컨테이너는 helloController에서 hello-api 메소드를 호출
    4. responseBody 어노테이션으로 인해 HTTP 응답 본문(body)에 데이터 자체를 반환
    5. 이전의 viewResolver가 동작하는 대신 HttpMessageConverter가 동작
      • 단순 문자라면 stringconverter가 동작하여 문자열 반환
      • 객체라면 jsonconverter가 동작하여 객체를 json 스타일로 변환하여 반환

    'spring boot' 카테고리의 다른 글

    스프링 부트 프로젝트 환경 설정  (0) 2025.04.02