MVC(Model, View, Control)패턴의 정의

MVC란 Model View Controller의 약자이다. 즉, 애플리케이션의 구성요소를 Model, View, Controller로 구분지어 개발함으로써 표현계층과 데이터를 처리하는 로직을 분리한다. 이 과정을 통해 중복적인 코딩을 미연에 방지 할 수 있으며 재사용성을 높일 수 있는 디자인 패턴이다. 애플리케이션의 흐름제어나 사용자의 처리요청은 컨트롤러에 집중되도록 고안되어 있다. 일반적으로 웹 애플리케이션 개발에 널리 사용된다. MVC 패턴이 가지는 구조는 다음과 같다.


위 그림에서 보이듯, 사용자는 Controller를 조작하고, Controller는 Model을 이용하여 데이터를 가져온다. 해당 데이터를 기반으로 시각적인 표현에 대한 기능을 수행하는 View를 컨트롤하여 사용자에게 실질적으로 전달된다.


 Web과 MVC

  1. 사용자가 웹사이트에 접속한다. (Uses)
  2. Controller는 사용자가 요청한 웹페이지를 서비스 하기 위해서 모델을 호출한다. (Manipulates)
  3. 모델은 데이터베이스나 파일과 같은 데이터 소스를 제어한 후에 그 결과를 리턴한다.
  4. Controller는 Model이 리턴한 결과를 View에 반영한다. (Updates)
  5. 데이터가 반영된 VIew는 사용자에게 보여진다. (Sees)
(발췌된 내용 입니다. 출처 : https://opentutorials.org/course/697/3828)


◐ Codelgniter와 MVC

Controller

사용자가 접근 한 URL에 따라서 사용자의 요청사항을 파악한 후에 그 요청에 맞는 데이터를 Model에 의뢰하고, 데이터를 View에 반영해서 사용자에게 알려준다. 

Model

일반적으로 CI의 모델은 데이터베이스 테이블에 대응된다. 이를테면 Topic이라는 테이블은 topic_model이라는 Model을 만든다. 그런데 이 관계가 강제적이지 않기 때문에 규칙을 일관성 있게 정의하는 것이 필요하다.

View

View는 클라이언트 측 기술인 html/css/javascript들을 모아둔 컨테이너이다. 

(발췌된 내용 입니다. 출처 : https://opentutorials.org/course/697/3828)


위에 출처로 남겨진 링크로 이동하면 동영상 강의로 잘 설명되어 있다.

날씨에 대한 정보를 제공해주는 서비스들은 다양하다.

개발하는 애플리케이션에서 사용하고자 하는 목적에 따라 활용한다면 좋은 자료가 될 것이라 생각되어

관련 정보들을 종합해서 실질적으로 개발에 유용 할 만한 좋은 사이트들을 간추려서 정리했다.


회사 및 API명 

 URL

설명 

케이웨더 날씨 API

http://api.kweather.co.kr/

 - 국내 3,800개 읍/면/동 단위 현재날씨 및 시간별/주간 예보 콘텐츠 (기상청 예보/ 케이웨더 예보 선택적 제공 가능)

 - 국내 교통/레저/스포츠 지점에 대한 11개 테마 날씨 콘텐츠

 - 1일 5000개까지 비상업적인 용도로는 무료로 사용 할 수 있다.

 - 개인적으로 사용하기에 편리한 REST API 구조를 가지고 있기에 추천하는 방식. 설명도 잘 되어있는 것 같다.

 웨더아이 날씨 API

http://www.weatheri.co.kr

 - web, email, mobile phone 등 다양한 매체를 통해 기상정보와 기상콘텐츠를 고객에게 제공

 - 현재 한국관광공사, 이마트, 네이버, 연합뉴스, SK텔레콤, 삼성물산 등 다양한 기업에 기상정보 서비스를 제공하고 있을 정도로 양질의 기상 예측 정보 및 콘텐츠를 생산

HAMweather Aeris API

http://www.hamweather.com/support/documentation/aeris/

 - 해외 사이트라서 국내 서비스에는 개발 효율이나 서비스 질에 불편함이 다소 없지 않아 있을 것으로 염려된다. JSON을 통해 서비스 받을 수 있다. 

기상청 날씨정보

http://www.kma.go.kr/weather/lifenindustry/sevice_rss.jsp 

 RSS, 날씨 위젯 등에 대한 서비스를 제공한다.

OpenWeatherMap API

http://openweathermap.org/API

 - 40,000개 이상의 기상 관측소의 데이터 기반으로 업데이트 된 70,000도시의 현재 날씨 정보를 제공한다.

 - 사용예시 : http://api.openweathermap.org/data/2.5/forecast?lat=35&lon=125

 - 지오코딩을 활용한 도시이름으로 날씨 검색이 가능하며 7일 가량의 일기예보를 제공한다.

 - 강수량, 구름, 온도 등의 정보를 포함한 날씨 지도 제공이 가능

 연도별오존경보발령현황

(안전행정부)

http://data.seoul.go.kr/openinf/sheetview.jsp?infId=OA-2229 

 서울시 연도별 오존 경보발령 횟수, 일수, 최대농도 정보를 제공

 야후 날씨정보

https://developer.yahoo.com/weather/ 

 야후에서 개발한 SQL인 YQL을 사용하여 서비스를 사용 할 수 있다.


'Develop Issue > Open Source, API' 카테고리의 다른 글

Google OTP 개발하기  (0) 2024.08.06
git merge 취소하기  (2) 2020.06.01
네이버 Map, 카카오 Map, Google Map API 비교  (1) 2019.09.23

기본적인 웹서버는 Apache, PHP, MySQL로 구성이 되어있다. 이를 줄여서 APM서버라고도 부른다.

리눅스 환경에서 APM을 설치하기 위한 절차는 다음과 같다.


1. 우선 아파치를 설치한다.

$ sudo apt-get install apache2


2. 이후 MySQL 클라이언트와 서버를 설치한다.

$ sudo apt-get install mysql-server mysql-client

아래 이미지와 같이 root에 대한 정보를 입력하라고 뜨면 절차대로 입력한다.


3. MySQL이 모두 설치 되었으면 PHP를 설치하는 단계로 넘어간다
$ sudo apt-get install php5 php5-common

4. Apache와 PHP를 연동해주는 작업을 한다.

$ sudo apt-get install libapache2-mod-php5


5. MySQL와 PHP를 연동해주는 작업을 한다.
$ sudo apt-get install php5-mysql

6. 모든 설치작업을 완료하였다. 정상적인 시스템 인프라가 동작하도록 apache와 mysql을 재시작해주는 작업을 해준다.
$ sudo /etc/init.d/apache2 restart
$ sudo /etc/init.d/mysql restart

7. apache서버와 mysql서버가 정상적으로 동작하는지 확인해 본다. 상태가 LISTEN로 양호하게 동작한다면 웹서버의 구축이 성공적으로 완료된것이다.
$ sudo netstat -atp | grep apache2 
$ sudo netstat -atp | grep mysqld

8. php와 apache의 연동을 확인한다. 웹호스트의 루트 디렉터리 경로는 일반적으로 /var/www에 위치해 있다. 해당 경로에 phpinfo.php를 만들고, 아래와 같은 내용을 적은 후, 저장해준다. 해당 PHP메소드는 설치된 PHP에 대한 정보를 테이블형태로 출력해주는 메소드이다. 해당 경로로 정상적으로 접속된다면, 설치를 성공적으로 완료했음을 알 수 있다.
$ sudo gedit /var/www/phpinfo.php

<?php
	phpinfo(); 
?>



군집화(Clustering)와 분류(Classification)의 차이는

입력 데이터가 배정 될 수 있는 클래스의 갯수의 정의에 따라 달라진다.


군집화는 클래스의 갯수가 복수개이며 미리 정해져 있지 않다.

예를들어 영상처리와 같이 사진을 통한 색상의 분류 등은 어떤 사진이냐에 따라 그 클래스의 개수가 동적이기 때문에

클래스의 개수가 정해져 있지 않다.


분류는 미리 정해진 클래스의 개수대로 유사한 클래스에 입력데이터가 배정된다.

예를들어 미리 Centroid에 대한 정의를 기반으로 입력데이터 대한 분류를 처리하는 K-means 알고리즘,

혹은 사용자가 직접 손으로 작성한 문자를 인식하여 어떤 문자인지 판별하는 기계학습 알고리즘은

입력데이터가 할당받은 클래스가 미리 정의되어 있으므로 "분류"이다.

리눅스에서의 스칼라 기반 스파크 프로그램을 패키징하여 단독 애플리케이션으로 동작하는 jar파일을

만드는 방법이 아직 온라인 상에서 찾기 힘든 것 같다. 그래서 내가 직접 써본다


우선 리눅스에서 SBT를 설치해야 한다.

SBT는 Simple Build Tool의 약자로, scala 프로젝트의 빌드를 간단하게 수행할 수 있도록 도와주는 툴이다.

만약 아직 설치가 안되있다면 아래 리눅스 명령어로 설치하면 된다. 설치 관련된 방법은 여러가지지만..

echo "deb https://dl.bintray.com/sbt/debian /" | sudo tee -a /etc/apt/sources.list.d/sbt.list
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 642AC823
sudo apt-get update
sudo apt-get install sbt

SBT에 대한 준비가 완료되었다면,

스파크 어플리케이션을 만들기 위한 패키지를 디렉터리 형식으로 만든다

그래서 프로젝트의 최상위 디렉터리에서 find .을 수행했을 때 다음과 같은 예제의 형태로 나와야한다.

ubuntu@ip-172-31-17-38:~/spark/bigdata$ find . . ./simple.sbt ./src ./src/main ./src/main/scala ./src/main/scala/SimpleApp.scala

위 출력문 중에 중요한 것이 simple.sbt라는 파일이다.

이 파일을 통해 빌드 시 옵션 등을 지정해 줄 수 있다.

simple.sbt의 내용을 살펴보면 다음과 같다.

name := "Simple Project" version := "1.0" scalaVersion := "2.11.7" libraryDependencies += "org.apache.spark" %% "spark-core" % "1.5.2"

대강 버전에 대한 명시만 자신의 개발환경에 맞추어 수정해 주면 된다.

그리고 빌드를 수행한다.

sbt package

위 명령어를 통해 빌드가 시작된다.

성공적으로 빌드가 완료되었다면, 생성된 jar 패키지 파일의 경로가 출력된다.

이 jar 패키지 파일을 만듦으로써 하나의 스파크 단독 애플리케이션이 완성된 것이다.


이제 spark-submit을 이용하여 이 애플리케이션을 실행시킬 수 있다!

ubuntu@localhost:~/spark/bigdata$ /home/ubuntu/spark/bin/spark-submit --class "SimpleApp" --master local[4] /home/ubuntu/spark-1.2.0-bin-hadoop2.4/bigdata/target/scala-2.11/simple-project_2.11-1.0.jar

가끔은 윈도우에서의 빌드 환경을 구축하는 것이 너무나도 까다로울 때가 있다. (뭘 개발하든, 개발환경을 차리면 반은 했다는 생각이 들정도)

간단한 프로젝트라면 이렇게 리눅스 환경에서 간단하게 프로그램을 짜고 빌드하는 것도 좋은 방법인 것 같다.



딱 두가지만 알면 된다.

//DB 연결

$connect = mysql_connect('localhost','DB계정명','DB암호');

$db = mysql_select_db('DB명',$connect);


위 예제를 통해 $db는 지정된 옵션의 데이터베이스로 연결된 객체가 된다.

이제 다음과 같은 소스로 마음껏 데이터베이스의 정보를 가져오거나 쓸 수 있게된다.


//쿼리문 전송 및 가져오기

$sql = "select *from board where name='admin'";

$result = mysql_query($sql,$connect);


//출력

$fileds = mysql_num_fields($result);

while($row = mysql_fetch_row($result)){

echo $row[0].$row[1].$row[2];

}

$sql 변수는 쿼리를 담는 전용 변수로 지정해 두었다.

INSERT라면 굳이 //출력 이하의 부분을 수행 할 필요는 없다.

하지만 데이터베이스로부터 정보를 가져와서 레코드단위로 읽어내리는 작업은 //출력 이하의 내용을

활용하면 아주 쉽게 가져올 수 있다. while문 한번 당 레코드 한줄을 읽어내려가는 것이며, 배열 $row에는 칼럼 순서대로

데이터가 저장된다.


따로 어디에 저장해두면 항상 유용하게 사용 할 수 있다.


- 시연 동영상 : 기존 내비게이션의 길안내 방향과 다른 길을 안내 받고, 실제로 또 그 길이 더 빠르게 도착하는 지름길임을 확인 할 수 있었다!



  

- (좌)실제 길안내 기능 중 스크린샷, (우)POI검색 기능


- 전체 시스템 구성도




프로젝트명

빅내비게이션

본인역할

클라이언트 애플리케이션 및 서버개발  

개발인원

2  

관련전공

캡스톤 설계I, 캡스톤 설계II

수강학기

3-2 ~ 4-1  

개발기간

1

진행사유

WPC Lab 과제 진행 및 졸업작품을 위한 프로젝트

프로젝트 소개

기존에는 내비게이션은 교통량, 날씨 및 도로의 종류와 신호등 유무까지 여러 요소들의 분석을 했다. 하지만 이러한 방법은 도로 네트워크 데이터 기반이라는 데에 한계가 있다. 기존 방법의 대안으로 본 프로젝트에서는 실제 사용자 경험 지식기반의 경로 데이터를 활용했다. 지식기반 경로 데이터란 운전자들의 운전노하우가 반영된 실제 차량 주행에 대한 정보가 담긴 GPS좌표의 집합을 의미한다. 이 데이터를 빅데이터 처리를 통해 분석함으로써 사용자들의 경험 지식에 기반한 실제적인 최소 경로의 파악이 가능해지며 이를 기반으로 한 빅데이터 처리 알고리즘 및 내비게이션 시스템을 개발하였다.

개발내용

(본인 구현부분)

웹으로 개발된 내비게이션을 통해 빅데이터 처리된 결과물을 토대로 서비스를 받을 수 있다. 그 절차의 첫 번째로 가고자 하는 목적지를 POI검색 기능을 통해 지정 한다. 서버로부터 경로 데이터를 수신 받으면 해당 GPX 파일을 파싱하여 지도에 렌더링 된다. 사용자의 현위치를 실시간으로 파악하여 길안내를 실시하며, 클라이언트의 내부적인 다양한 계산을 통해 사용자의 전방 방향에 따른 내비게이션 지도의 회전 방향이나 향후 진로 방향에 대한 정보를 받아 볼 수 있다. 뿐만 아니라 오픈소스 내비게이션 OSMAND를 변형하여 개발된 데이터수집앱을 활용하면, 사용자가 빅데이터 처리 서버에 직접 기여 할 수 있다.

프로젝트

어려움/해결방안

지식기반의 경로 데이터들의 빅데이터 처리함으로써 의미있는 다양한 경로들의 조합을 생성하였으며 개발한 시스템을 이용하여 직접 차량 주행하여 실질적인 길안내까지 가능함을 입증하였다. 웹이라는 네이티브보다 비교적 제한적인 환경 특성상 단말기의 센서를 활용하는 것은 다소 어려움이 존재 한다. 주어진 자원인 위치정보를 활용하여 다양한 정보들을 계산하는 솔루션을 제작하여 이러한 한계점을 극복하였다. 본 시스템에 대한 연구를 더 진행한다면, 향후에는 시간, 날씨 뿐만 아니라 차량 사고 및 특수한 행사 등 다양한 동적인 변화에도 민감하게 대응하여 빠른 길안내 서비스가 가능 할 것으로 전망된다.

시연 영상

 

http://wpclab.smuc.ac.kr/~taeho/pf/bignavi.mkv

 


빅데이터와 내비게이션이라는 부분의 조합을 통해 기존에는 없는 방식의 내비게이션 서비스를 개발했다.

WPCL에서 활동 중 손꼽히는 성과 중 하나 ㅎㅎ

반년은 OSMAND를 통해 서비스를 개발하고, 남은 반년은 독자적인 시스템을 갖추고자 웹 기반의 내비게이션을 별도로 개발하였다.

밤새도록 고통받으면서 했기에 더 애착이 남는 프로젝트인 것 같다.

관련 논문도 여러편 나올 수 있었다.

'Term Project' 카테고리의 다른 글

[PHP기반 SNS] 최종 보고서  (0) 2015.12.29
[PHP기반 SNS] 개요  (0) 2015.12.29
[상명WIFI] 개요  (1) 2015.12.29
[호식이 맛집추천앱] 최종 보고서  (0) 2015.12.28
[호식이 맛집추천앱] 프레젠테이션 자료  (0) 2015.12.28




서버프로그래밍에 대해 열정적으로 했던 프로젝트...

아래 링크를 통해 읽어 볼 수 있음

DBP 최종 보고서.docx



'Term Project' 카테고리의 다른 글

[빅내비게이션] 개요  (0) 2015.12.29
[PHP기반 SNS] 개요  (0) 2015.12.29
[상명WIFI] 개요  (1) 2015.12.29
[호식이 맛집추천앱] 최종 보고서  (0) 2015.12.28
[호식이 맛집추천앱] 프레젠테이션 자료  (0) 2015.12.28

프로젝트명

Mini Homepage 기반의 SNS

본인역할

팀장  

개발인원

2  

관련전공

데이터베이스 프로그래밍

수강학기

2-2 

개발기간

8

진행사유

데이터베이스 프로그래밍 과목 텀 프로젝트

프로젝트 소개

사용자에게 기존의 싸이월드와 같은 미니홈페이지 방식으로 개인공간을 제공하고, 이와 동시에 SNS로써 친구로 등록된 사용자들 간에는 게시하는 콘텐츠들이 공유될 수 있도록 하였다. 각 사용자의 미니홈피에 대한 정보는 별도의 파일 형식으로 제공되는 것이 아닌, 하나의 정해진 레이아웃에 DB에 저장된 각 사용자의 설정 값, 콘텐츠들을 가져오는 형식으로 제작함으로써 데이터 공간의 낭비를 줄이고 유지 보수에 용이하도록 정형화에 초점을 맞추어 개발되었다.

개발내용

(본인 구현부분)

SNS에 필요한 DB 스키마를 작성하고 이를 구축하였다. PHP를 통해 수신 받은 데이터를 서버에 저장하거나 HTML 형식으로 사용자가 요청한 정보를 반환하도록 하였다. 주요 기능으로는 프로필, 스킨사진 등록, 게시판 및 방명록 생성, 뉴스피드, 클럽게시판 등이 있으며 iframe을 활용하여 자동적으로 페이지가 refresh되는 것처럼 구현함으로써 PHP의 한계를 극복하고자 하였다. 또한 CSS를 활용해 반응형 웹으로 구현하였다.

거의 모든 부분이 PHP로 구현되어 서비스되는 SNS을 교내 텀프로젝트를 통해 개발하였다.

방명록, 게시판 타입의 메뉴를 생성하여 다양하게 활용할 수가 있고, 권한 설정도 가능하다.

친구 추가/삭제, 뉴스피드, 현위치 표시, 파일첨부, 사진 업로드 등

요즘 SNS라면 갖추어야 할 기본적인 기능들은 모두 갖추고자 노력하였다.

http://태북.wo.to/ 로 접속하면 아직도 사용 할 수가 있다ㅋㅋㅋ

'Term Project' 카테고리의 다른 글

[빅내비게이션] 개요  (0) 2015.12.29
[PHP기반 SNS] 최종 보고서  (0) 2015.12.29
[상명WIFI] 개요  (1) 2015.12.29
[호식이 맛집추천앱] 최종 보고서  (0) 2015.12.28
[호식이 맛집추천앱] 프레젠테이션 자료  (0) 2015.12.28

프로젝트명

상명 Wifi

본인역할

클라이언트 개발  

개발인원

2  

관련전공

소프트웨어 프로젝트

수강학기

3-1 

개발기간

8

진행사유

소프트웨어 프로젝트 과목 텀 프로젝트

프로젝트 소개

학교 및 기업 등에서는 Wifi를 제공하기 위한 AP의 신호강도를 기반으로 Wifi 신호가 어디까지 송신되는지 추측 할 수 있다. 하지만 이 방법은 사용 인구 수, 시간대 별 트래픽, 물리적인 공간으로 인한 신호 감쇠 등을 반영하지 못한다. 이에 따라 Wifi 수신자의 RSSI, Speed값 등을 수집하여 축적된 빅데이터 처리를 함으로써 다양한 변수를 고려한 Wifi 측정기를 만들고자 하였다.

개발내용

(본인 구현부분)

데이터 수집을 위해 안드로이드 어플리케이션을 개발하였다. GPS 좌표, RSSI, Speed(Mbps)값 등을 단말기의 센서로부터 측정하여 가져오도록 하였으며 이는 파일입출력을 통해 SD카드 메모리에 저장된다. 축적된 데이터는 FTP통신을 통해 일괄적으로 서버에 전송되도록 하였다. 한편 HTML5, Javascript, PHP등을 활용하여 웹 상에 빅데이터 처리 결과를 가시화하였으며 지도상에 지역별 Wifi의 신호감도를 표현되도록 하였다.


이 프로젝트를 진행 할 당시 교내의 정보통신시설에 문의해본 결과,

WIFI의 신호가 어느 영역까지 가용성이 있을지에 대해 가시적으로 표현해주는 솔루션은 이미 있었다.

하지만 문제점은 교내 설치된 AP들을 기반으로 해당 성능이 어느 길이까지 전달 될 것이다라는 모호한 추측성 프로그램이었다.

추측과 실제는 다르다. 왜냐하면 와이파이의 사용자수가 급격히 변동 할 수 있는 시간(예를들어 쉬는 시간, 점심시간, 수업시간 등으로 구분 지을 수 있다)이라던지,

소프트웨어 상 고려 할 수 없는 물리적 부분(벽, 장애물 등)의 요인 때문이다.

이에 대한 문제를 해결하기 위한 방법으로, 사용자들이 직접 와이파이를 사용 할 때 그 정보를 토대로 빅데이터 처리 분석을 하여

효과적인 피드백을 제공해 주고자 하였다.

+ Recent posts