스프링부트) 요청과 응답 로직

35 Isaiah·2025년 6월 17일

스프링부트

목록 보기
9/12

클라이언트 측에서 GET 요청을 한다. 이 요청은 톰캣을 거쳐 스프링 부트 애플리케이션으로 전달된다.

이때, 스프링 부트의 디스패처 서블릿 DispatcherServlet 이 요청을 받아 이를 처리할 컨트롤러와 해당 메서드를 찾는다.

응답은 JSON, XML 등 데이터 포맷인 경우, 메시지 컨버터가 작동한다.

HTML 등 뷰 템플릿이 필요한 경우, 뷰 리졸버 View Resolver 가 템플릿 엔진을 통해 HTML 문서를 생성, 클라이언트에게 반환한다.

GET 방식과 URL 주소 설계

@Controller
public class GetApiController {

🤔뭐가 다른가?
@Controller 스프링프레임워크 안에 '뷰리졸브'가 해당 경로의 파일을 찾아 반환한다.

@ResponseBody 데이터를 반환하도록 하는 역할 (메서드 앞에 어노테이션으로 표시)

@RestController 둘을 합친 것
GET 방식으로 요청을 하면 처리하는 메서드를 만들어 두어야 한다.

http://localhost:8080/hello

    @GetMapping("/hello")
    @ResponseBody
    public String hello() {
        return "index";
    }

http://localhost:8080/qs1?name=둘리

    @GetMapping("/qs1")
    public String qs1(@RequestParam(name = "name") String name) {
       return "응답받은 name키값의 값은 = " + name;
    }

http://localhost:8080/qs2?name=둘리&age=10
기본값이 "0" 처럼 문자열로 표시해도 내부에서 버퍼드리더가 문자열을 읽어 파싱해준다.

    @GetMapping("qs2")
    public String qs2(@RequestParam(name = "name") String name,
                        @RequestParam(name = "age",
                                required = false, defaultValue = "0") int age) {

        System.out.println("name : " + name);
        System.out.println("age : " + age);

        return "name="+name+"&age="+age;
    }

http://localhost:8080/qs3?name=둘리&age=10&groupId=com.tenco

    @GetMapping("/qs3")
    public String qs3(@RequestParam(name = "name")String name,
                      @RequestParam(name = "age")Integer age,
                      @RequestParam(name = "groupId")String groupId) {

        System.out.println("name:"+name);
        System.out.println("age:"+age);
        System.out.println("groupId:"+groupId);

        return "name:"+name + "&age:"+age +"&groupId:"+groupId;
    }

http://localhost:8080/qs4
new User 객체를 문자열로 변환 시키기 위해서 반드시 @Getter 가 있어야 한다.
Object (서버 측) 응답시킬 때 잭슨이나 Gson이 필요한데 내부에서 MappingJackson2HttpMessageConverter 동작하고 있다.

    @GetMapping("/qs4")
    @ResponseBody
    public User helloObject() {
        return new User("마이콜", 20);
    }
    // 내부 클래스
    @AllArgsConstructor
    @Getter
    class User {
        private String name;
        private Integer age;
    }

http://localhost:8080/qs5?a=둘리&b=10&c=com.tenco
Map 방식으로 동적으로 들어오는 키와값을 받아서 처리해 보자.

    @GetMapping("/qs5")
    @ResponseBody
    public String qs5(@RequestParam Map<String, String> data) {

        StringBuffer sb = new StringBuffer();
        data.entrySet().forEach(entry -> {
            System.out.println(entry.getKey() + " = " + entry.getValue());
            sb.append(entry.getKey()+"="+entry.getValue()+"\n");
        });

        return sb.toString();
    }
profile
개발자 지망생

0개의 댓글