본문 바로가기
[ Developer ]/MongoDB

[MongoDB] 몽고디비 이용한 간단 웹 메모장

by 김현섭. 2016. 7. 6.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
Spring-Data-MongoDB 메모장 구현 해보기

MVC를 이용해서 메모장을 구현한다
간단하게 패키지를 web으로 Controller를 잡고 DAO로 가서 MongoDB와 연동을 시킨다

우선 패키지를 생성하고 DAO의 인터페이스를 구성한다



DAO에서 가지는 기능을 모두 정의해줬다
그런 후 구현 클래스인 MemoDAOForMongoDB를 생성해서 구현 클래스로 정의한다


기능을 하나씩 정의해준다 이전에 진행 했던 MongoDB를 사용하는 로직과 동일하게 사용하면 된다


Insert와 Update, Remove는 간단하게 구현이 되었다

*Insert, Update, Remove
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
    @Override
    public void insertMemo(String memo) {
        Map<StringString> memoMap = new HashMap<StringString>();
        
        memoMap.put("memo", memo);
        
        mongoTemplate.insert(memoMap, "memo");
    }
 
    @Override
    public void updateMemo(String id, String memo) {
        Criteria criteria = new Criteria("_id");
        criteria.is(id);
        
        Query query = new Query(criteria);
        Update update = new Update();
        update.set("memo", memo);
        
        mongoTemplate.updateMulti(query, update, "memo");
    }
 
    @Override
    public void removeMemo(String id) {
        Criteria criteria = new Criteria("_id");
        criteria.is(id);
        
        Query query = new Query(criteria);
        
        mongoTemplate.remove(query, "memo");
    }
cs

이제 전체 메모 리스트를 가져오는 getMemoList와 메모의 상세 정보를 가져오는 getMemo를 구현하면 된다
Map<String, String>으로 선언이 되었지만 가져올 때의 문제로 Map으로만 다시 재 정의를 해준다


*MemoList, MemoDetail
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    @Override
    public List<Map> getMemoList() {
        
        return mongoTemplate.find(new Query(), Map.class"memo");
    }
 
    @Override
    public Map getMemo(String id) {
        
        Criteria criteria = new Criteria("_id");
        criteria.is(id);
        
        Query query = new Query(criteria);
        
        return mongoTemplate.findOne(query, Map.class"memo");
    }
cs


이제 DAO로직은 완성되었다 이젠 Web 패키지에서 MemoController를 이용해서 URL을 잡아준다


컨트롤러는 위와 같이 작성되면 된다 그리고 나서 컨트롤러에서 추가적으로 등록, 수정, 삭제하는 Action을 처리하는
로직을 작성해준다


*Controller
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
@Controller
public class MemoController {
    
    private MemoDAO memoDAO;
    
    public void setMemoDAO(MemoDAO memoDAO) {
        this.memoDAO = memoDAO;
    }
 
    @RequestMapping("/write")
    public ModelAndView viewWritePage() {
        ModelAndView view = new ModelAndView();
        
        view.setViewName("write");
        
        return view;
    }
    
    @RequestMapping("/list")
    public ModelAndView viewListPage() {
        ModelAndView view = new ModelAndView();
        
        List<Map> memoList = memoDAO.getMemoList();
        
        view.setViewName("list");
        view.addObject("list", memoList);
        
        return view;
    }
    
    @RequestMapping("/detail/{id}")
    public ModelAndView viewDetailPage(@PathVariable String id) {
        ModelAndView view = new ModelAndView();
        
        view.setViewName("detail");
        view.addObject("memo", memoDAO.getMemo(id));
        
        return view;
    }
    
    @RequestMapping("/doWrite")
    public String doWriteMemoAction(@RequestParam String memo) {
        
        memoDAO.insertMemo(memo);
        
        return "redirect:/list";
    }
    
    @RequestMapping("/doUpdate")
    public String doUpdateMemoAction(@RequestParam String id, @RequestParam String memo) {
        
        memoDAO.updateMemo(id, memo);
        
        return "redirect:/list";
    }
    
    @RequestMapping("/doDelete/{id}")
    public String doDeleteMemoAction(@PathVariable String id) {
        
        memoDAO.removeMemo(id);
        
        return "redirect:/list";
    }
    
}
cs


이제 컨트롤러를 위해 applicationContext를 수정한다


위의 컨트롤러와 DAO만을 추가해주면 된다
이제는 JSP를 간단하게 생성하여 구현을 해본다


write.jsp는 간단하게 작성한다


작성을 완료하고 submit 버튼을 누르면 doWrite로 가서 데이터를 입력할 것이다
이제 List 페이지를 작성한다
taglib이 필요하므로 taglib prefix="c"를 추가해준다


그리고 forEach를 이용해서 메모를 출력해주면 된다


이제는 내용을 클릭해서 들어올 detail을 생성하면 된다


디테일에서 textarea로 보여주고 수정하거나 삭제를 할 수 있다

List 페이지를 볼 수 있다



클릭하면 상세 페이지를 보여준다



수정을 하고 수정버튼을 누르면 수정된 List로 변경된다

또한 리스트에서 작성 버튼을 통해서 메모를 작성할 수 있다