오늘도 배우자!

귀찮음에 배움을 멀리하지 않기를...

Develop/Server

SpringBoot Controller, Service, DAO 이해 - Controller(3)

리다양 2019. 3. 25. 19:23

이제 Controller 관련 마지막 글이 될 것 같습니다~~!!

이후에는 Service, Mapper 등을 구현하는 시간을 가져볼게요!! ㅎㅎ

 

지난 글에서 @RequestParam 으로 넘어온 변수를 처리하는 방법을 알아봤는데요 여기서 만약에 전달 받아야 할 파라미터가 3개 4개 혹은 그 이상을 받아야 할 경우에 무한정 @RequestParam 어노테이션으로 처리하기에는 메서드가 너무 길어지고 지저분해 질 것 같다는 생각에서 이번 글을 시작해볼게요 ^~^

 

우리는 자.바. 라는 언어를 사용하고 있으니 Class 를 적절히 사용해봐야겠죠?? 어떻게 사용하느냐!!!

넘어오는 파라미터를 Class 멤버 변수로 받을 수 있으면 너무너무 좋지 않을까요?? 그런 기능을 지원했으면 좋겠다... 라고 생각하신 분들에게, 혹은 그런 방법을 생각 못하셨던 분들에게 딱 도움이 될 글이 될것같네요!!

 

우선 데이터 관련 Class 부터 만들어보겠습니다.

 

1. VO(Value Object) 생성

이름에서부터 알 수 있다시피 값을 가지는 객체입니다. 이렇게만 말하면 느낌이 오지 않으니 코드로 살짝 넘어가볼게요!!

public class User {
    private int userId;
    private String userName;

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }
} 

요렇게 User 관련 데이터를 담당할 객체를 생성해줍니다.

여기서 get / set 메서드를 Spring 프레임워크에서 자동으로 호출해서 값을 넣어주는데요 여기 관련해서는 밑에서 다루도록 하겠습니다.

 

2. Controller 에 생성해둔 VO 로 값 받기

@RequestMapping(value = "/getUserInfo")
public String getUserInfo(User user, Model model) {
    int userId = user.getUserId();
    String userName = user.getUserName();
    model.addAttribute("userId", userId);
    model.addAttribute("userName", userName);
    return "userInfo";
}

@RequestParam 의 지옥을 벗어나는 순간인데요!!! 위와 같이 설정하면 클라이언트에서 변수명을 "userId", "userName" 으로 전달해주면

@RequestParam("userId"), @RequestParam("userName") 등과 같이 받는 것이 아닌 미리 생성해둔 User 객체로 받게 됩니다.

 

어떻게 동작하느냐, 여기서 User 객체를 만들때 구현해 둔 get / set 메서드가 중요한데요, 저렇게 User user 로 파라미터를 설정해두면 스프링 프레임워크 내부적으로 클라이언트가 전달한 변수 "userId", "userName" 이라는 이름의 변수를 get / set 해주는 메서드를 찾아서 자동으로 매핑해줍니다.

 

정리를 하자면~! 

1. 클라이어트가 "userId", "userName" 을 전송합니다.

2. Controller 는 해당 url 에 대한 처리기능을 가진 메서드를 호출하고 해당 메서드 내에 넘어온 파라미터를 처리할 기능이 구현되어 있는지 확인 합니다.

(위의 경우 User 객체로 변수를 받겠다 라고 설정해놨으니, User class 내부에 같은 이름을 가진 변수를 설정하는 메서드가 있나 확인합니다.)

 

즉 "userId", "userName" 으로 변수가 넘어왔으니 User 클래스 내에 setUserId, setUserName 이라는 이름을 가진 메서드를 실행하고 값을 자동으로 지정해줍니다. 

 

그러니 우리는 "클라이언트가 넘겨 줄 변수명을 멤버 변수명으로 가진 Class 만들어 그걸로 데이터를 처리하면 된다" 입니다.

 

오늘은 Controller 에서 객체로 값을 넘겨받는 것을 해보았는데요 이제 내가 편한 방식대로 값을 받는 법을 알았으니

내가 원하는대로 데이터를 처리하기위해 다음시간에는 Service로 찾아올게욤!!!!