티스토리 뷰

Back End/Spring

[Web MVC] API 만들기 - 1

5_Clock 2023. 3. 6. 23:04
반응형

API란?

우선 Controller를 만들기 전에 API라는 개념을 알아야한다.

API라고 하면 다들 Rest API를 떠올릴 것이다. 그럼 API중 Rest API는 뭘까?

REST API란?
API 또는 애플리케이션 프로그래밍 인터페이스는 애플리케이션이나 디바이스가 서로 간에 연결하여 통신할 수 있는 방법을 정의하는 규칙 세트입니다. REST API는 REST(REpresentational State Transfer) 아키텍처 스타일의 디자인 원칙을 준수하는 API입니다. 이러한 이유 때문에 REST API를 종종 RESTful API라고도 합니다.

출처: https://www.ibm.com/kr-ko/cloud/learn/rest-apis

위의 설명을 좀 더 간단하게 설명하자면 서로간 데이터나 정보를 주고 받을때 정해진 형식이라고 할 수 있다.

예를 들어 네이버에서 검색 정보를 가져오는 것 또한 rest api의 한 형태이다.

(물론, UI를 통해서 네이버는 포탈의 형식으로 이쁘게 꾸며놓았다고 생각하면 된다.)

 

개발을 하다보면 라이브러리를 통해서 제공을 해주는 것들이 있는데 한번 해보면.. api가 얼마나 소중한지 알 수 있다.

 

Controller

컨트롤러의 기능 중 하나는 위의 http의 형식으로 API를 만들 수 있게 해주는 것이 있다.

URL을 통해서 http request를 요청하게 되면, 숨겨진 로직을 통해서 response를 보내주게 된다.

스프링 내부적으로는 컨트롤러를 통해 API를 호출하면 다음과같이 내부적으로 동작하게 된다.

@WebServlet(name = "frontControllerServletV5", urlPatterns = "/front-controller/v5/*")
public class FrontControllerServletV5 extends HttpServlet{

	// ...

	@Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        Object handler = getHandler(request);
        if(handler == null){
            response.setStatus(HttpServletResponse.SC_NOT_FOUND);
            return;
        }

        MyHandlerAdapter adapter = getHandlerAdapter(handler);

        Map<String, String> paramMap = createParamMap(request);
       
        ModelView modelView = adapter.handle(request, response, paramMap);

        String viewName = modelView.getViewName();
        MyView view = new MyView("/WEB-INF/views/"+viewName+"jsp");

        view.render(modelView.getModel(), request, response);
    }
    
    // ...
}

 

스프링 내부적으로 일어나는 일을 코드로 보면 다음과 같이 볼 수 있다.

 

이것을 스프링 부트 프레임워크를 통해서 사용하게 되면 다음과 같이 간단하게 사용할 수 있다.

@Controller
@RequestMapping("/springmvc/v3/members")
public class SpringMemberControllerV3 {

    private final MemberRepository memberRepository = MemberRepository.getInstance();

    @GetMapping("/new-form")
    public String newForm(){
        return "new-form";
    }

    @PostMapping("/save")
    public String save(
            @RequestParam("username") String username,
            @RequestParam("age") int age,
            Model model) {

        Member member = new Member(username,age);
        memberRepository.save(member);

        model.addAttribute("member", member);
        return "save-result";
    }

    @GetMapping
    public String members(Model model) {
        List<Member> members = memberRepository.findAll();

        model.addAttribute("members", members);
        return "members";
    }
}

 @GetMapping, @PostMapping, @PutMapping 등의 어노테이션을 통해서 반복되는 로직을 간단하게 처리하였고, webapp/WEB-INF에 경로를 어노테이션의 변수로 넣어주면 된다.

 

참고: 인프런 스프링MVC 1편 - 백엔드 웹개발 핵심 기술

728x90
반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함
250x250