광고2


MQTT통신을 이용한 메신저와 자연어 처리, IOT장치 제어 - 1 by uikyo93

대부분의 프로그래밍 언어에 라이브러리가 있는 MQTT를 이용하여 사람들 간의 의사소통을 하는 메신저 기능과 Python을 이용한 자연어 처리기능을 더하여 IOT 장치를 제어하는 기능을 직접 구현하며 나아가 사용자가 이용한 IOT 장치 정보를 이용하여 행동 패턴을 이용한 사용자 알림 서비스를 구축한다.



 프로젝트 전체 구상도



메신저 기능을 위한 프런트엔드 및 벡엔드 개발

스프링 프레임워크(Spring Framework)NoSQLMongoDB를 사용한 MVC 방식으로 벡엔드를 구성하고 MQTTCSS3, JQuery 등을 이용한 사용자 인터페이스 구성을 통해 프런트엔드 개발도 배운다.

 

 

스프링 프레임워크(Spring Framework)

- 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로서 스프링이라고도 불린다.

- 동적인 웹사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있다.

- 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준 프레임워크의

기반기술이다.

 

MongoDB

- NoSQL DBMS의 한 종류이다.

- MongoDBNoSQL로 분류되는 크로스 플랫폼 도큐먼트 지향 데이터베이스 시스템이다.

- MySQL처럼 전통적인 테이블-관계 기반 RDBMS가 아니며 SQL을 사용하지 않는다.

- RDBMS와 같은 높은 레벨의 트랜잭션이 제공되지 않기 때문에 데이터의 읽기 쓰기도 빠르다.

 

MQTT

    - MQTTMessage Queue Telemetry Transport 의 약자이며, 최근 IOT에서 자주 사용하는 통신 프로토콜이다.

    - 지금까지의 HTTP, UPnP, CoAP 등의 프로토콜을 사용할시 방화벽 때문에 포트를 여는 작업이

     필요하였지만 MQTT를 메시지전송의 중개자(Broker)로 사용함으로써 위와 같은 작업을 하지

     않아도 된다.

    - 게시자 (Publisher) 중개자에 연결하여 콘텐츠 게시

    - 구독자 (Subscriber) 중개자에 연결하여 콘텐츠를 구독

    - 중개자 (Broker) 콘텐츠를 구독자에게 전달




스프링 MVC 프로젝트 구성



1
2
3
4
5
6
7
8
9
10
11
12
13
    <!-- https://mvnrepository.com/artifact/org.eclipse.paho/org.eclipse.paho.client.mqttv3 -->
<dependency>
    <groupId>org.eclipse.paho</groupId>
    <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
    <version>1.2.0</version>
</dependency>
    
<!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-mongodb -->
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb</artifactId>
    <version>1.10.7.RELEASE</version>
</dependency>
cs

프로젝트에서 중요한 의존성주입 두가지
























로그인과 회원가입 페이지


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public boolean userLogin(UserDto user) {
        String login_id = user.getId();
        String login_password = user.getPassword();
        
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        Query query = new Query();
 
        query.addCriteria(Criteria.where("_id").is(login_id));
        List<UserDto> get_pass = mongoTemplate.find(query, UserDto.class);
        
        String temp_get_pass = get_pass.get(0).getPassword();
        boolean login_result = passwordEncoder.matches(login_password, temp_get_pass);
            
        return login_result;
    }
cs

사용자 로그인시 암호화된 비밀번호와 비교하는 소스




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public boolean userLogin(UserDto user) {
        String login_id = user.getId();
        String login_password = user.getPassword();
        
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        Query query = new Query();
 
        query.addCriteria(Criteria.where("_id").is(login_id));
        List<UserDto> get_pass = mongoTemplate.find(query, UserDto.class);
        
        String temp_get_pass = get_pass.get(0).getPassword();
        boolean login_result = passwordEncoder.matches(login_password, temp_get_pass);
            
        return login_result;
    }
cs

회원가입시 비밀번호를 암호화하는 소스




친구목록과 채팅방의 화면

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
@RequestMapping(value = "/addfriend", method = RequestMethod.GET)
    public ModelAndView addFriend(HttpSession session, ModelAndView model, WebRequest request) {    
        ModelAndView mv = new ModelAndView();
 
        FriendDto new_friend = new FriendDto();
        
        new_friend.setFriendid(request.getParameter("friend_id"));
        new_friend.setUserid(session.getAttribute("login").toString());
    
        boolean checkFriend = userDao.checkId(request.getParameter("friend_id"));
        boolean haveFriend = friendDao.checkFriend(new_friend);
        
            if (!haveFriend) {
                 mv.addObject("message""이미 친구등록 되어있습니다.");
                
            } else if (!checkFriend) {
                 friendDao.addFriend(new_friend);
                 
                 mv.addObject("message""친구등록에 성공했습니다.");
                
            } else if (checkFriend) {    
                 mv.addObject("message""존재하지 않는 아이디입니다.");        
 
            }
            mv.setViewName("main");
            List<FriendDto> friendList = new ArrayList<FriendDto>();
            friendList = friendDao.showFriend(session.getAttribute("login").toString());
            mv.addObject("list", friendList);
            return mv;
    }
cs

친구를 등록할때 사용되는 소스












덧글

댓글 입력 영역


구글 광고2


통계 위젯 (화이트)

00
1
191091

광고