Server, Android, Python, Information Security
Server, Android, Python, Information Security(Sangwoon Park)
정보보안과 개발에 관심이 있는 대학생입니다. 성취감을 위해 매년 대회 수상 한 개씩을 목표로 하고 있고, 아직까지는 성공적입니다. 안드로이드 개발을 주로 하고 있고, 간단한 유틸리티를 개발할 때는 파이썬을 주로 사용합니다. 최근에는 Spring Boot를 주로 활용하여 백엔드 서버 개발도 하고 있습니다. 생활 속에 산재하는 반복작업은 못보는 성격이라 개발자지망생의 명예를 걸고 어떻게든 프로그램으로 해결하려고 아둥바둥하고 있습니다. 수상내역 - 2017 공군 해킹방어대회 전체 순위 3위 우수상 - 2018 공군 창의혁신 아이디어 해커톤 순위 2위 최우수상 - 2019 한이음 공모전 한국정보산업협회장상 - 2020 제7회 소프트웨어 개발보안대회 행정안전부 장관상 보유자격 - 정보처리산업기사(18.06) - 정보보안산업기사(18.06) - 리눅스마스터 2급(15.12)

개요

구분

팀프로젝트 (2020 제7회 소프트웨어개발보안경진대회)

개발인원

3명 (졸음 감지센서 개발 1, 수집 서버 및 API서버(백앤드) 개발 1, 프론트 개발 1)

프로젝트 개발 기간

20.8(2일)

소스

성과

2020 제7회 소프트웨어개발보안경진대회 행정안전부장관상(우수상)

시연 영상 링크 및 설명

  • https://youtu.be/5onWKiN6sK4

  • 첫번째로 IOT 센서 시연입니다. 졸음 감지와 방지 경보 발생, 데이터 전송 기능을 보여드리겠습니다. 먼저 HTTPS 통신을 통해 디바이스를 인증하여 토큰을 발급받습니다. 그리고 가속도 센서와 머신러닝으로 졸음을 감지하여 데이터를 전송합니다.

  • 두번째로 API 서버 시연입니다. 신뢰성있는 데이터를 유지하기 위해 센서에 인증 토큰을 발급합니다. 데이터 수집입니다. JWT 토큰의 유효성을 확인하고 DB에 기록합니다. 좌표를 주소 문자열로 변환하기 위해 네이버 지오코딩 API를 사용했습니다. 이 과정들은 HTTPS로 암호화 됩니다. 웹사이트를 통해 DB에 반영된 모습을 보고 계십니다.

  • 세번째로 시각화 웹사이트와 OPEN API 시연입니다. 여기는 대시보드입니다. 졸음 운전 누적순위 졸음 운전 레벨, 졸음운전 전국 현황 지도를 볼 수 있습니다. 여기는 상세페이지 입니다. 연도, 월별, 시간대별, 지역별로 데이터를 조회하여 시각화합니다. 그래프와 표로 시각화하고 있습니다. OPEN API 문서화 페이지 입니다. 이를 통해 요청 데이터와 응답데이터 형식을 확인하고 테스트할수 있습니다.

서비스 요약

  • 안전에 관련된 서비스를 기획하는 동시에 보안성도 충족하도록 설계하였음.
  • 제7회 소프트웨어 개발보안 경진대회에 출전하여 행정안전부 장관상을 받음.

기능

  • 졸음운전을 감지하여 사용자를 깨우고 데이터를 수집
  • 졸음운전 데이터를 실시간으로 수집하여 통계자료로 가공하고 제공하는 서비스
  • 지역별 졸음 빈도, 시간별 졸음 빈도, 졸음 발생 시간과 위치 데이터 제공
  • 실시간 졸음 빈도를 졸음 레벨로 계산하여 시각화
  • OPEN API 형태로 데이터를 제공하고 API문서를 제공.

사용 기술

  • 졸음감지 센서의 하드웨어는 NVDIA Jatson Nano(하드웨어) + GPS센서 + 카메라모듈 + 가속도센서.
  • 졸음감지 센서의 로직은 파이썬으로 pynmea2, GPIO, urlib, ssl, smbus, OpenCV 사용.
  • 졸음감지 센서와 수집 서버의 통신은 센서의 인증 문제를 해결하기 위해 JWT 토큰을 사용.
  • 종단간 암호화를 위해 HTTPS 적용.
  • 수집 및 통계 API서버는 AWS EC2 컨테이너에 스프링 부트를 기반으로 개발된 자바 어플리케이션.
  • JWT 토큰과 HTTPS 통신 등을 위해 Spring Security 모듈을 적극활용하였고 Spring Data JPA(ORM)을 사용하여 DB를 제어.
  • Swagger를 사용하여 REST API에 대한 문서를 제공
  • 프론트는 지도 시각화를 위해 Kakao Map API를 사용.

기여

역활

  • 팀장
    • 서비스 기획과 시스템 설계를 주도하였음.
    • 서비스에 대한 PT를 담당하였음.
  • 더미 데이터 수집 및 가공
    • 공공데이터포털에 있는 교통 데이터를 가공하는 스크립트를 작성
    • 이를 통해 300여건의 데이터를 얻음.
  • 수집 서버 및 API서버(백앤드) 개발자
    • 데이터베이스 설계 및 ORM 라이브러리를 사용하여 구현
    • 수집 서버 및 API서버 설계 및 구현
    • 수집 서버와 센서간 통신 인증 구현
    • Swagger를 활용한 API 문서 제작
  • 프론트 개발 지원
    • REST API 요청 후 응답 JSON 데이터 사용 가이드라인 제공
    • 응답 JSON 데이터를 Kakao MAP API에 적용

내가 사용한 기술

  • 개발환경
    • Windows 10 1909 x64
    • IntelliJ Professional 2020.2
    • Amazon Linux1(AWS EC2)
  • 기술
    • JDK8
    • Spring Boot 2
    • MariaDB
    • H2
    • Spring data JPA
    • Gradle
    • Git, Github
    • JUnit
    • Retrofit
    • Naver Reverse Geocoding API

개발 과정

1) 수집, 통계 데이터 가공, 웹서버

  • REST API 서버와 웹서버는 JAVA8 환경의 SpringBoot2를 기반으로 개발. WAS는 톰캣.
  • Spring Security 모듈을 적용하여 JWT 토큰을 사용하였음. 토큰은 센서와 수집서버간의 통신 중 인증문제를 해결하기 위해 사용함. 네트워크 상 토큰 이동 중 노출을 막기위해 SSL 통신을 적용하였음.

2) 데이터 수집 데이터베이스

  • DB에는 테스트와 제출을 위해 2가지를 사용할 것인데 H2와 MariaDB를 사용.
  • H2는 메모리 DB이므로 개발 중 빠른 테스트를 위해 사용하고, MariaDB는 AWS 환경에서 서버를 돌릴 때 사용.
  • 기본적인 라이브쿼리 취약점을 피하기 위해 Spring Data JPA 모듈을 사용하였음. SQL 매핑으로 직접 DB를 다루지 않고 ORM을 통해 DB를 다뤘음. DB 설계또한 Relation 기반이 아닌 ORM에 맞는 도메인 주도 개발을 적용하려 노력하였음.

3) 개발환경과 배포 환경

  • 개발 중에는 Windows 10 1909 x64 환경에서 IntelliJ Professional 2020.2를 사용하였음.
  • 빌드도구로는 Gradle을 사용했음.
  • GitHub를 통해 AWS EC2 인스턴스에 배포하였음.

4) 좌표로 주소 문자열 변환

  • GPS 좌표를 주소로 변환하기 위해 Naver Reverse Geocoding API를 사용하였음.
좋아요 0
    댓글 0