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에는 칼럼 순서대로

데이터가 저장된다.


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

+ Recent posts