BackEnd/Spring

Spring_국비_Day86

Leo.K 2022. 7. 5. 14:34

이후에 스프링 부트를 사용하게 되면 모든 의존성 주입이 자동으로 이루어지게 된다. 하지만 처음으로 스프링을 학습할 때는 이 xml파일을 통해 무슨 객체가 생성이 되고, 의존성이 어떻게 주입되는지 이해를 하고 사용하기 위해서 적응이 되기 전까지는 수동으로 생성해서 직접 의존성을 주입해준다.

기본적으로 생성자 주입과 세터 주입방법이 있다. 이론상으로는 생성자 주입이 속도적인 면에서 조금 더 빠르고 효율적이라고 한다. 쉽게 생각해보자. 객체를 생성할 때 가장 먼저 실행되는 것이 무엇인가? 맞다 생성자가 먼저 실행되고, 그 내부에 있는 멤버변수에 접근하기 위해 세터메서드를 실행한다. 

하지만 생각해보면 스프링에서 생성하는 객체는 소스코드가 드러나진 않지만, 싱글톤의 구조를 가지고 있다. 가장 처음 프로젝트를 실행할 때를 제외하고는 초기에 생성한 객체를 이후에는 추가적인 객체 생성없이 사용할 수 있기 때문이다. 쉽게 말해 효율성이 비교되는 순간은 가장 초기에 실행되는 속도 차이일 뿐이니 정밀한 시간 제어가 필요한 상황이 아니라면 둘 중에 선호하는 방법을 사용하면 된다.

[ 편리하게 requestMapping을 작성하는 방법 ]

사용자의 요청에 따른 작업을 테이블 혹은 기능 별로 구분하기 위해서 추가로 폴더를 만들어서 구분지었더니 URL이 아래와 같이 복잡하게 들어오고, 모든 메소드에 이런식으로 작성을 해야한다. @RequestMapping("/member/list.do")

그렇다면 해당 컨트롤러에 공통적으로 들어오는 URL이 "/member/"라면 클래스 레벨에서 먼저 지정할 수 있다. 이 방법을 사용하면 클래스 레벨에서 공통적인 URL을 지정하고, 각각의 메소드에서는 간단하게 생략하여 사용할 수 있다.

 

[ Model의 사용법 ]

포워딩 시에는 데이터를 넘긴다. 

리다이렉트시에는 파라미터로 사용한다. 

비즈니스로직에서 가공한 데이터를 DispatcherServlet에 전달하기 위해서는 DispatcherServlet이 제공한 Model에 데이터를 담아서 반환한다고 했다. 이는 포워드를 하는 경우이고, 만약 redirect를 하는 경우 model을 사용하면 파라미터로 사용하게 된다. 이는, 파라미터가 너무 많을 때, model에 담아서 전송하는 것이 효율적이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    //로그인
    @RequestMapping("login.do")
    public String login(String m_id, String m_pwd, @RequestParam(value="url", required = falseString url, Model model) {
 
        //String url   = request.getParameter("url");
 
        //3. m_id에 해당되는 회원정보 가져오기
        MemberVo user = member_dao.selectOne(m_id);
 
        if(user == null) {
            //response.sendRedirect("login_form.do?reason=fail_id"); 와 같은 효과이다.
            //model을 통해서 DS로 전달된 데이터는 redirect시에는 parameter로 처리한다.
            model.addAttribute("reason""fail_id");
            return "redirect:login_form.do";
        }
 
        //m_pwd 체크
        if(user.getM_pwd().equals(m_pwd)==false) {
            
            //response.sendRedirect("login_form.do?reason=fail_id&m_id=m_id"); 와 같은 효과이다.
            model.addAttribute("reason""fail_pwd");
            model.addAttribute("m_id", m_id);
            return "redirect:login_form.do";
        }
cs

 

[ Spring JSON Converter 사용법 ]

Spring에 json-converter 환경 설정 파일과 메이븐 라이브러리를 추가해주면 스프링이 자동으로 데이터를 json으로 변경해준다. 추가해야할 라이브러리는 아래와 같다. 

 

1. [ map을 json으로 만들기 ]

아래와 같이 코드만 작성해도, 위에서 추가한 라이브러리가 자동으로 바꾸어 준다.

1
2
3
4
5
6
7
8
9
10
11
//Map -> JSON
@RequestMapping("map_to_json.do")
@ResponseBody
public Map map_to_json() {
    Map map = new HashMap();
    map.put("addr""서울시 마포구 노고산동");
    map.put("tel""010-111-1234");
    map.put("place_name""거구장");
    
    return map;
}
cs

[map결과]

 

2. [ 객체를 json으로 만들기 ] -> PersonVo

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//PersonVo
public class PersonVo {
    String name;
    int    age; 
    String tel;
    
    public PersonVo() {
        // TODO Auto-generated constructor stub
    }
 
    public PersonVo(String name, int age, String tel) {
        super();
        this.name = name;
        this.age = age;
        this.tel = tel;
    }
 
    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 getTel() {
        return tel;
    }
 
    public void setTel(String tel) {
        this.tel = tel;
    }
}
//JSONController
//PersonVo Object -> Json
@RequestMapping("/object_json.do")
@ResponseBody
public PersonVo object_to_json() {
    PersonVo vo = new PersonVo("일길동"20"010-111-1234");
    
    return vo;
}
cs

[객체 결과]

 

3. [ 배열 또는 리스트를 json으로 바꾸기 ]

[배열]

1
2
3
4
5
6
7
8
//자바Array -> JSON : 배열 =>[]
@RequestMapping("/array_json.do")
@ResponseBody
public String [] array_to_json() {
    String [] sido_array = {"서울""경기""부산""목포"};
    
    return sido_array;
}
cs

[배열 결과]

[어레이리스트]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//자바ArrayList -> JSON : 배열 =>[]
@RequestMapping("/arraylist_json.do")
@ResponseBody
public List arraylist_to_json() {
    
    List list = new ArrayList();
    list.add("사과");
    list.add("참외");
    list.add("수박");
    list.add("딸기");
    list.add("포도");
    
    return list;
}
cs

[어레이리스트 결과]

 

4. [혼합하기]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//혼합형식의 값
@RequestMapping("/mix_json.do")
@ResponseBody
public Map mix_to_json() {
    
    String [] sido_array = {"서울""경기""부산""목포"};
    
    List list = new ArrayList();
    list.add("사과");
    list.add("참외");
    list.add("수박");
    list.add("딸기");
    list.add("포도");
    
    Map map = new HashMap();
    map.put("sido", sido_array);
    map.put("list", list);
    
    
    return map;
}
cs

[혼합 결과]

'BackEnd > Spring' 카테고리의 다른 글

Spring_Transaction_국비_Day89  (0) 2022.07.08
Spring_AOP_국비_Day87  (0) 2022.07.06
SpringFileUpload_국비_Day86  (0) 2022.07.04
SpringMVC_DB_국비Day84  (0) 2022.06.30
SpringMVC_Parameter_국비_Day83  (0) 2022.06.29