[TIL] 스프링 입문 TIL - 26/04/08

신여원·2026년 4월 8일

내일배움캠프

목록 보기
3/15

오늘 할 일

공부한 내용

@Controller

  • 해당 클래스가 Controller의 역할을 수행할 수 있도록 함
  • Spring MVC는 효율적 API 처리를 위해 Front Controller 패턴을 만들어냄
  • API 마다 파일을 만들 필요가 없고, 유사한 성격의 API를 하나의 Controller로 관리함

@GET, @POST, @PUT, @DELETE
각각의 HTTP Method에 매핑되는 어노테이션

@GetMapping("/api/get")
@ResponseBody
public String get() {
    return "GET Method 요청";
}

@RequestMapping
중복되는 URL을 단축시켜줌

@Controller
@RequestMapping("/api")
public class HelloController {
    @GetMapping("/hello")
    @ResponseBody
    public String hello() {
        return "Hello World!";
    }
    @GetMapping("/get")
    @ResponseBody
    public String get() {
        return "GET Method 요청";
    }
    @PostMapping("/post")
    @ResponseBody
    public String post() {
        return "POST Method 요청";
    }
    @PutMapping("/put")
    @ResponseBody
    public String put() {
        return "PUT Method 요청";
    }
    @DeleteMapping("/delete")
    @ResponseBody
    public String delete() {
        return "DELETE Method 요청";
    }
}

정적 페이지와 동적 페이지

  • 정적 페이지
    /resources/static/파일이름.html
    • SpringBoot 서버에 html 파일을 바로 요청하면 해당 html 파일을 static 폴더에서 찾아서 반환해줌
    • Controller를 통해서도 반환 가능하지만, 이미 완성된 정적 html 파일을 Controller를 통해 반환할 필요는 없음
      		@GetMapping("/static-hello")
      		public String hello() {
      			return "hello.html";
      		}
      		```
  • Redirect
    - 템플릿 엔진(thymeleaf)을 적용한 상태에서 static 폴더의 html 파일을 Controller를 통해서 처리하고 싶다면 redirect 요청을 문자열로 반환하면 요청이 재수행 되면서 static 폴더의 파일을 반환할 수 있음
    			@GetMapping("/html/redirect")
    			public String htmlStatic() {
    				return "redirect:/hello.html";
    			}
    	
  • 동적 페이지
    /resources/templates/파일이름.html
    • static 폴더에 있는 html 파일을 바로 호출하는 방법이 가장 간단하지만
    • 외부 브라우저에서 바로 접근하지 못하게 하고 싶거나 특정 상황에 Controller를 통해서 제어하고 싶다면
    • templates 폴더에 해당 정적 html 파일을 추가하고 해당 html 파일명인 "파일이름" 문자열을 반환하여 처리할 수 있음 (.html은 생략 가능!)
    • 동적 페이지 처리 과정
      1. Client의 요청을 Controller에서 Model로 처리
      2. Template engine(Thymeleaf)에게 View, Model 전달
        • View: 동적 HTML 파일
        • Model: View에 적용할 정보들
      3. Template engine
        • View에 Model을 적용 -> 동적 웹페이지 생성
      4. Client(브라우저)에게 View(동적 웹 페이지, HTML)를 전달 해줌

데이터를 Client에 반환하는 방법

  • 프론트엔드와 백엔드가 각각 따로 발전하면서 -> 느슨하게 결합하는 방식 채택
  • 서버가 직접 뷰(html/css)를 반환하기 보다는 요청에 맞는 특정한 정보만 반환하는 것을 선호함
  • JSON 데이터를 요청하는 API를 통해 브라우저에서 html을 조작하여 반영하는 식으로 진행 예정

    JSON 데이터를 반환하는 법

  • 템플릿 엔진(Thyemleaf)가 적용된 SpringBoot에서는 Controller에서 문자열을 반환하면 templates 폴더에서 해당 문자열의 .html 파일을 찾아 반환해줌
    -> 따라서, html 파일이 아닌 JSON 데이터를 브라우저에 반환하고 싶다면 해당 메서드에 @ResponseBody 어노테이션을 추가해줘야함
    - @Controller에서는 return 값이 기본적으로 "HTML 파일 이름"으로 해석됨
    - @ResponseBody가 있다면, Spring이 View를 찾는 게 아니라, 그냥 데이터를 그대로 응답으로 보내라는 것으로 해석함
    		@ResponseBody
    		@GetMapping("/json")
    		public Star test() {
     		return new Star("Robbie", 95);
    		}
    	```
  • 반환값이 String인 경우
    Java는 JSON 타입을 지원하지 않기 때문에 JSON 형태의 String 타입으로 변환해서 사용해야함
  • 반환값이 String 외 자바 클래스인 경우
    "Java 객체 -> JSON으로 변환"
    Spring에서 자동으로 Java의 객체를 JSON으로 변환해줌

@RestController
@Controller + @ResponseBody

  • @RestController를 사용하면 해당 클래스의 모든 메서드에 @ResponseBody 어노테이션이 추가되는 효과를 부여할 수 있음

Jackson이란

Jackson 라이브러리
: JSON 데이터 구조를 처리해주는 라이브러리

  • Object를 JSON 타입의 String으로 변환해줄 수 있음
  • JSON 타입의 String을 Object로 변환해줄 수 있음
  • Spring이 Jackson과 관련된 API를 제공함으로써, 직접 소스 코드를 작성하여 JSON 데이터를 처리하지 않아도 자동으로 처리할 수 있다.
  • 직접 JSON 데이터를 처리해야할 때는 Jackson 라이브러리의 ObjectMapper를 사용할 수 있음
  • Object to JSON
    - Object를 JSON 타입의 String으로 변환하기 위해서는 해당 Object의 get Method가 필요함
@Test
@DisplayName("Object To JSON : get Method 필요")
void test1() throws JsonProcessingException {
    Star star = new Star("Robbie", 95);

    ObjectMapper objectMapper = new ObjectMapper(); // Jackson 라이브러리의 ObjectMapper
    String json = objectMapper.writeValueAsString(star);
    // objectMapper의 writeValueAsString 메서드를 사용하여 변환할 수 있음
    // 파라미터에 JSON으로 변환시킬 Object의 객체를 주면 됨

    System.out.println("json = " + json);
}
  • JSON to Object
    - JSON 타입의 String을 Object로 변환하기 위해서는 해당 Object에 기본 생성자와 get 혹은 set 메서드가 필요함
@Test
@DisplayName("JSON To Object : 기본 생성자 & (get OR set) Method 필요")
void test2() throws JsonProcessingException {
    String json = "{\"name\":\"Robbie\",\"age\":95}"; // JSON 타입의 String

    ObjectMapper objectMapper = new ObjectMapper(); // Jackson 라이브러리의 ObjectMapper

    Star star = objectMapper.readValue(json, Star.class);
    // objectMapper의 readValue 메서드를 사용해 변환
    // 첫 번째 파라미터는 JSON 타입의 String, 두 번째 파라미터에는 변환할 Object의 class 타입을 줌
    System.out.println("star.getName() = " + star.getName());
}

문제 & 오류

내일 할 일

profile
경북대학교 컴퓨터학부

0개의 댓글