개발/강의

스프링 입문 - (3) 웹 개발 기초 - API 방식

냐냐_ 2021. 8. 28. 14:37
강의명 : 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강사 : 김영한 님
플랫폼 : 인프런
강좌 : 총 28강 / 321분
가격 : 무료

 

- 강의 링크

 

 

 

 

 


 

웹 개발 기초

 

강의에서는 "정적 컨텐츠", "MVC와 템플릿 엔진"을 배운 후

마지막으로 API를 다루었다.

 

 

정적 컨텐츠는 컨트롤러에 등록하지 않은 채 static폴더에 파일을 넣고 주소창으로 접근하면 불러오는 방식이라 생략.

MVC는 뷰 리졸버를 태우는 기존 예제(이 포스팅의 예제)와 중복되어 생략.

API만 정리하기로!

 

 

 

 

 

코드 작성

 

강의에 나온 예제를 하나 다루고, 직접 응용한 예제를 추가로 다루려 한다!

 

 

 

HelloController.java

 

컨트롤러 내부에 Hello라는 클래스를 하나 만든다.

객체를 리턴해 볼 것이므로!

 

    static class Hello {
        private String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

 

Hello 클래스는 String name이라는 하나의 private 필드를 갖고,

자바빈 규약에 따라 getter와 setter를 만든다.

- getter, setter는 직접 코딩할 필요 없이 인텔리제이 기준 alt + insert 단축키를 눌러서 간편하게 만들면 된다.

 

이렇게 함으로서, name이라는 변수에 직접 접근해서 값을 세팅하고 가져오는 것이 아니라

getter, setter 함수를 통해서만 접근할 수 있게 캡슐화하는 것인데-

원리 이해보다는, 그냥 값 세팅용 + 값 불러오는 용으로 만든다고 생각하고 넘어가도 될 듯

 

    @GetMapping("hello-api")
    @ResponseBody
    public Hello helloApi(@RequestParam("name") String name) { //①
        Hello hello = new Hello(); 
        hello.setName(name); //②
        return hello;
    }

 

@GetMapping을 추가한다.

@ResponseBody 어노테이션을 붙여 주어야 뷰를 거치지 않고 데이터를 곧바로 본문(Body)에 실어서 응답(Response)할 수 있다.

 

name 이라는 이름으로 들어온 파라미터(앞의 name)를 name 이라는 변수로 저장한다(뒤의 name).

 

위에 만들어 둔 Hello 클래스(필드는 String name 하나 뿐)의 객체 hello를 만들고,

해당 객체 hello의 필드 name에 파라미터로 받아 온 name값을 심어(setName) 준다.

 

이 기능은 뷰 리졸버를 태우지 않고, 객체 hello 자체를 리턴할 것이다.

- 기존 예제 : return "hello"; (hello라는 이름을 가진 파일 hello.html 을 출력)

- 현재 예제 : return hello; (데이터(객체, 여기서는 Hello 클래스 객체의 이름)를 곧바로 출력)

 

 

 

 

 

실행

 

 

8080포트의 hello-api로 접속하고 (@GetMapping("hello-api"))

쿼리스트링을 통해 banya라는 값을 name 파라미터로 전달하면 (?name=banya)

Hello의 객체 hello의 String name 필드에 던져 준 이름이 심어져서,

json 형태로 리턴된다.

 

 

 

 

 

코드 작성

 

강의에서 다룬 예제와 비슷하지만 필드를 좀더 추가해서 연습한다.

 

 

 

HelloController.java

 

    static class Practice {
        private String name;
        private int age;
        private String address;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }

        public String getAddress() {
            return address;
        }

        public void setAddress(String address) {
            this.address = address;
        }
    }

 

컨트롤러 내에 Practice라는 클래스를 만들었다.

필드는 String name, int age, String address 총 3개이다.

3개 모드에 대한 getter, setter를 만들어 준다.

역시 인텔리제이 기준 alt + insert 단축키 쓰기!

 

    @GetMapping("practice-api")
    @ResponseBody
    public Practice practiceApi(@RequestParam("irum") String name, 
                                @RequestParam("nai") int age, 
                                @RequestParam("juso") String address) {
        Practice practice = new Practice();
        practice.setName(name);
        practice.setAge(age);
        practice.setAddress(address);
        return practice;
    }

 

practice-api 기능을 만든다.

필드 세 개에 대한 파라미터를 모두 전달받아서, Practice 객체에 심기로 한다.

 

로직 파악을 위해 일부러 파라미터명은 이름, 나이, 주소를 소리나는 대로 영어로 썼다. (irum, nai, juso)

위 콩글리쉬로 들어온 파라미터를 제대로 된 영단어명(name, age, address) 변수에 저장해서,

그 변수들을 Practice의 객체 practice에 심어(setter) 리턴한다.

 

 

irum, nai, juso 파라미터를 쿼리스트링으로 전달했더니

name, age, address에 담겨 json형태로 잘 출력되었다.