[CodeIgniter] 컨트롤러(Controllers) 사용방법[CodeIgniter] 컨트롤러(Controllers) 사용방법

Posted at 2019.07.31 16:39 | Posted in PHP/CodeIgniter




참고 : http://www.ciboard.co.kr/user_guide/kr/general/controllers.html





■ 컨트롤러란 무엇인가?



컨트롤러는 URL과 상호작용하는 클래스 파일이라고 할 수 있다.


파일명(File.php)과 클래스(File)명의 첫글자는 항상 대문자 이여야 한다.


클래스명은 컨트롤러 파일명과 동일해야 한다.



 ./application/controllers/Blog.php

<?php

if(!defined("BASEPATH")) { exit("No direct script access allowed"); }


class Blog extends CI_Controller {

public function index() {

echo "사악미소의 현대마법의 IT공방";

}

}


/* END of file Blog.php */

/* Location : ./application/controllers/Blog.php */




# 출력결과 : http://code-igniter.com/index.php/blog/










■ 함수 호출하기




이전 예제에서 호출된 함수는 index( )였는데, index( ) 함수는 URI에서 두번째 새그먼트가 전달되지 않은 경우 기본적으로 실행이 된다.


이번에는 URI에 새그먼트 값을 추가하여 Blog라는 클래스에 comments( )라는 함수를 호출해 보자.


 ./application/controllers/Blog.php

<?php

if(!defined("BASEPATH")) { exit("No direct script access allowed"); }


class Blog extends CI_Controller {

public function index() {

echo "사악미소의 현대마법의 IT공방";

}

public function comments() {

echo "방문해 주셔서 감사합니다";

}

}


/* END of file Blog.php */

/* Location : ./application/controllers/Blog.php */




# 출력결과 : http://code-igniter.com/index.php/blog/comments




그럼 위와 같이 새로운 메세지가 출력되는 것을 확인 할 수 있다.








■ URI 세그먼트 값을 함수에 전달하기




 ./application/controllers/Products.php

<?php

if(!defined("BASEPATH")) { exit("No direct script access allowed"); }


class Products extends CI_Controller {

public function shoes($sandals, $id) {

echo sprintf("sandals : %s", $sandals);

echo "<br/>";

echo sprintf("id : %s", $id);

}

}


/* END of file Products.php */

/* Location : ./application/controllers/Products.php */





# 출력결과 : http://localhost/index.php/products/shoes/sandals/123










■ 기본 컨트롤러 정의



코드이그나이터에서는 새그먼트 없이 사이트의 루트 URI만 요청될때 실행되는 기본 컨트롤러를 지정할 수 있다.


기본 컨트롤러를 지정하려면 ../application/config/routes.php 파일의 $route[ 'default_controller' ] 의 값을 설정해 주면된다.


 ./application/config/routes.php

<?php

if(!defined("BASEPATH")) { exit("No direct script access allowed"); }


      /* 주 석 생 략 */


$route['default_controller'] = "First";

$route['404_override'] = "";

$route['translate_uri_dashes'] = FALSE;



이제 First.php 파일을 controllers 디렉토리에 생성하고.


아래와 같은 코드를 작성해 보자.



 ./application/controllers/Blog.php

<?php

if(!defined("BASEPATH")) { exit("No direct script access allowed"); }


class First extends CI_Controller {

public function index() {

echo "https://www.google.co.kr";

}

}


/* END of file First.php */

/* Location : ./application/controllers/First.php */





# 출력결과 : https://localhost




단순히 http://localhost라는 기본 주소를 입력하는 것만으로도


http://localhost/index.php/first 를 호출한것과 같은 결과를 얻을 수 있다.









■ 함수요청 재맵핑하기




일반적으로 URI의 두번째 새그먼트는 컨트롤러내의 어떤 함수를 실행할 것인가를 결정하낟.


이런 일반루틴을 재정의 하여 원하는 액션으로 바꿀 수 있다.



 http://code-igniter.com/index.php/rmapping/zerg 

<?php

if(!defined("BASEPATH")) { exit("No direct script access allowed"); }


class Rmapping extends CI_Controller {

public function _remap($method) {

if($method === "zerg") {

$this->zerg();

} else if($method === "protoss") {

$this->protoss();

} else {

$this->terran();

}

}

public function zerg() {

echo "군단의 심장";

}

public function protoss() {

echo "공허의 유산";

}

public function terran() {

echo "자유의 날개";

}

}


/* END of file Rmapping.php */

/* Location : ./application/controllers/Rmapping.php */




# 출력결과 : http://localhost/index.php/rmapping/zerg




위와 같이 출력되는 것을 확인 할 수 있다.




※ 참고


../application/config/routes.php 페이지의 


$route['default_controller'] 값을 "Rmapping" 으로 변경하고 사용하게 되면



# 출력결과 : http://localhost/index.php/rmapping/protoss









■ Private 접근제어 함수



PHP에는 public, private, protected 라는 3가지 접근 제어자가 존재한다.


접근제어자

기     능

public

 · class 밖에서도 함수에 접근이 가능하다.

 · 아무것도 명시하지 않으면 기본값이 public으로 선언된다.

private

 · 클래스 내부에서만 접근이 가능하다.

 · 상속이 불가능 하다.

protected

 · 클래스 내부에서만 접근이 가능하다.

 · 상속이 가능하다.







<?php

if(!defined("BASEPATH")) { exit("No direct script access allowed"); }


class Access extends CI_Controller {

public function index() {

echo "접 근 가 능";

}

private function _utility() {

echo "접 근 불 가";

}

}


/* END of file Access.php */

/* Location : ./application/controllers/Access.php */




# 출력결과 : http://localhost/index.php/Access/index




# 출력결과 : http://localhost/index.php/Access/_utility



위와같이 URI의 새그먼트 값으로 _utility 함수를 호출하려고 하는경우


페이지를 찾을 수 없다는 404 Page Not Found


에러가 발생하는것을 확인 할 수 있다.








■ 클래스 생성자




컨트롤러에서 생성자를 사용하고자 한다면 생성자아래 반드시 아래의 코드가 들어있어야 한다.


 parent :: __construct( );


그렇지 않으면 직접 구현한 모든 생성자가 부모 controoler의 생성자를 재정의 하기 때문에


반드시 부모 controller를 수동으로 호출해 주어야 한다.



생성자는 클래스가 초기화될 때 어떤 기본값들을 설정해야 한다거나 어떤 프로세스를 수행해야 할때 유용하다.


생성자는 리턴값이 있어서는 안된다.



 

<?php

if(!defined("BASEPATH")) { exit("No direct script access allowed"); }


class Products extends CI_Controller {

public function __construct() {

parent::__construct();

}

}


/* END of file Products.php */

/* Location : ./application/controllers/Products.php */










Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[PHP] DB접속 테스트하기[PHP] DB접속 테스트하기

Posted at 2019.07.30 17:00 | Posted in PHP/PHP Setting




참고 : https://blog.naver.com/diceworld/220292090236




■ PHP  데이터 베이스 접속 테스트




# 소스코드

<?php


error_reporting(E_ALL);

ini_set("display_errors", 1);

date_default_timezone_set('Asia/Seoul');


$conn = mysqli_connect("접속IP주소", "아이디", "비밀번호", "데이터베이스명", "포트");


if( empty($conn) == true ) {


      echo ( "#############################################################################" );

              echo ( "</br> default DBMS 접속 호스트 정보가 정확하지 않습니다. </br>\n\n" );

          exit ( "#############################################################################" );


} else {


      echo ( "#############################################################################" );

          echo ( "</br> default DBMS 접속에 성공하였습니다. </br>\n\n" );

          echo ( "-----------------------------------------------------------------------------" );

          echo ( "<pre>" );

          print_r ( $conn );

          echo ( "</pre>" );

          exit ( "#############################################################################" );


}

mysqli_close( $conn );


?>





# 출력결과









'PHP > PHP Setting' 카테고리의 다른 글

[PHP] DB접속 테스트하기  (0) 2019.07.30
[PHP] Windows 환경에서 Apache 및 PHP 설치하기  (0) 2018.08.18

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[MariaDB] Ubuntu MariaDB 시간 변경[MariaDB] Ubuntu MariaDB 시간 변경

Posted at 2019.07.30 15:22 | Posted in MySQL/MariaDB




참고 : https://jootc.com/p/201905052779




■ 우분투 마리아DB 시간대 변경




 MariaDB> SELECT @@system_time_zone, NOW() FROM DUAL;




 $ sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf


      /* 이 하 생 략 */


[mysqld]


user = mysql

pid-file = /var/run/mysqld/mysqld.pid

socket = /var/run/mysqld/mysqld.sock

port = 3306

basedir = /usr

datadir = /var/lib/mysql

tmpdir = /tmp

lc-messages-dir = /usr/share/mysql

skip-external-locking


default-time-zone = "+9:00"


      /* 이 하 생 략 */





 MariaDB> SELECT @@system_time_zone, NOW() FROM DUAL;








Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[Ubuntu] 우분투 타임존(Timezone) 변경하기[Ubuntu] 우분투 타임존(Timezone) 변경하기

Posted at 2019.07.30 15:10 | Posted in Linux/Ubuntu




참고 : https://twpower.github.io/95-set-ubuntu-timezone




■ 우분투 시간대 설정 변경하기




날짜 확인


 $ date

 



지원하는 날짜셋 확인


 $ ls /usr/share/zoneinfo/

 



시간변경


 $ sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

 



날짜 재확인


 $ date

 








Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[CodeIgniter] DataBase 접속 설정하기[CodeIgniter] DataBase 접속 설정하기

Posted at 2019.07.25 17:06 | Posted in PHP/CodeIgniter





참고 : http://www.ciboard.co.kr/user_guide/kr/database/configuration.html




■ 코드이그나이터에서 DB 접속 설정하기



/application/config/database.php에 사용자, 비밀번호, HOST, 데이터베이스명을 입력해야 한다.



 /application/config/database.php

<?php

defined('BASEPATH') OR exit('No direct script access allowed');


/* 주 석 생 략 */


$active_group = "default";

$query_builder = TRUE;


/*

$db['default'] = array(

  "dsn" => ""

, "hostname" => "IP주소"

, "username" => "DB접속계정"

, "password" => "계정비밀번호"

, "database" => "DB이름"

, "dbdriver" => "mysqli"

, "dbprefix" => ""

, "pconnect" => FALSE // pconnect 값이 TRUE일 사용할 경우 웹 호스팅 환경에서는 실행이 되지 않는다.

, "db_debug" => (ENVIRONMENT !== "production")

, "cache_on" => FALSE

, "cachedir" => ""

, "char_set" => "utf8"

, "dbcollat" => "utf8_general_ci"

, "swap_pre" => ""

, "encrypt" => FALSE

, "compress" => FALSE

, "stricton" => FALSE

, "failover" => array()

, "save_queries" => TRUE

);

*/


// DB 설정

$db['default']['dsn'] = "";

$db['default']['hostname'] = "DB IP주소";

$db['default']['username'] = "DB접속계정 아이디";

$db['default']['password'] = "DB접속계정 비밀번호";

$db['default']['database'] = "DB 이름";

$db['default']['dbdriver'] = "mysqli";

$db['default']['port'] = "3306";

$db['default']['dbprefix'] = "";

$db['default']['pconnect'] = FALSE;      // pconnect 값이 TRUE일 사용할 경우 웹 호스팅 환경에서는 실행이 되지 않는다.

$db['default']['db_debug'] = (ENVIRONMENT !== "production");

$db['default']['cache_on'] = FALSE;

$db['default']['cachedir'] = "";

$db['default']['char_set'] = "utf8";

$db['default']['dbcollat'] = "utf8_general_ci";

$db['default']['swap_pre'] = "";

$db['default]['encrypt'] = FALSE;

$db['default']['compress'] = FALSE;

$db['default']['stricton'] = FALSE;

$db['default']['failover'] = array( );

$db['default']['save_queries'] = TRUE;


$arrParseUrlparse_url$_SERVER[ 'HTTP_HOST' ] );


if( ( isset$_SERVER[ 'HTTPS' ] ) && $_SERVER[ 'HTTPS' ] == "on" ) ) {

    $arrParseUrl[ 'scheme' ] = "https";

} else {

    $arrParseUrl[ 'scheme' ] = "http";

}


if ( strlen ( trim$db['default']['hostname'] ) ) == 0 ) {

    echo( "#############################################################################" );

    echo "</br> default DBMS 접속 호스트 정보가 정확하지 않습니다. </br>\n\n";

    echo "<pre>";

    var_export$arrParseUrl );

    echo "</pre>";

    exit( "-----------------------------------------------------------------------------" );

    echo "<pre>";

    var_export$db );              

    echo "</pre>";

    exit( "#############################################################################" );

}



※ 데이타베이스 설정값

환경값

설     

dsn

 · DSN 연결문자

hostname

 · 데이터베이스 서버의 IP주소

 · 같은 서버일경우 localhost, 120.0.0.1

username

 · 데이터베이스의 사용자 아이디

password

 · 데이터베이스의 사용자 비밀번호

database

 · 연결하고자 하는 데이터베이스 이름

dbdriver

 · 데이터베이스 타입

 · mysqli, postgre, odbc, etc등

 · 반드시 소문자 여야만 한다.

port

 · 데이터베이스 포트 번호

dbprefix

 · Query Builder를 사용할 경우 테이블명에 자동으로 접두어를 붙임

 · 하나의 데이터베이스로 여러개의 CodeIgniter를 사용할 때 유용함

pconnect

 · 영속적연결(Persistent Connection)을 사용할 것인지 말것인지 결정한다.

 · BOOLEAN 타입( TRUE / FALSE )

db_deboug

 · 데이터베이스 에러를 표시할지 말지를 결정

 · BOOLEAN 타입( TRUE / FALSE )

cache_on

 · 데이터베이스 쿼리를 캐시할 것인지를 결정(쿼리를 텍스트 파일로 캐싱하여 데이터베이스의 부하를 줄인다.)

 · BOOLEAN 타입( TRUE / FALSE )

cachedir

 · 데이터베이스 쿼리 캐시가 저장될 절대경로

char_set

 · 데이터베이스와 통신할 때 사용할 문자셋

dbcollat

 · 데이터베이스와 통신할 때 사용되는 문자열 대조법(Character Collation)

 · 'mysql'과 'mysqli' 드라이버에서만 사용된다.

swap_pre

 · 기본 테이블 접두어가 dbprefix에서 교체된다.

 · 수동으로 작성된 쿼리를 실행하고, 최종 사용자에 의해 변환될 때 접두어가 여전히 필요할 때 유용하다.

schema

 · 데이터베이스 스키마, "public"이 기본이다.

 · PostgreSQL 및 ODBC 드라이버에서 사용한다.

encrypt

 · 암호화 연결을 사용할지 결정

compress

 · 클라이언트 압축을 사용할지를 결정한다.

 · MySQL 전용이다.

stricton

 · 스트릭 모드 연결을 강제로 사용할지 여부를 선택한다.

 · 어플리케이션을 개발하는 동안 엄격한 SQL을 보장하기 위해 좋다.

 · BOOLEAN 타입( TRUE / FALSE )








Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[CodeIgniter] 리눅스 환경에 코드이그나이터 세팅하기[CodeIgniter] 리눅스 환경에 코드이그나이터 세팅하기

Posted at 2019.07.23 17:07 | Posted in PHP/CodeIgniter




■ Linux 환경에 CodeIgniter 설치하기





리눅스 환경코드이그나이터를 설치하기 위해서는


현재 지원중인 코드이그나이터의 버전을 확인해야 한다.


코드이그나이터 사이트( http://www.codeigniter.com/download ) 에 접속하여


사용할 수 있는 버전을 확인하자.







버전을 확인했다면 wget 을 사용하여 해당 버전을 다운로드 받아보자.


 $ sudo wget https://github.com/bcit-ci/CodeIgniter/archive/서비스중인 버전.zip -P /다운받을 디렉토리 경로

 $ sudo wget https://github.com/bcit-ci/CodeIgniter/archive/3.1.10.zip -P /var/www/html/



다운을 받았다면 해당 파일의 압축을 해제한다.


 $ sudo unzip 다운받은 파일.zip -d 압축해제 디렉토리의 경로

 $ sudo unzip /var/www/html/3.1.10.zip -d /var/www/html/




※ 참고 : wget, unzip 설치방법

 

Ubuntu

CentOS

wget

 $ sudo apt-get install wget

 # yum install wget

unzip

 $ sudo apt-get install unzip

 # yum install unzip





압축을 해제했다면 생성된 CodeIgniter 디렉토리의 파일


아파치 서버의 실행 파일 경로로 전부 이동시킨다.


 sudo cp -R /CodeIgniter(압축해제 디렉토리 이름)/* /아파치 서버의 실행 파일 경로

 sudo cp -R /var/www/html/CodeIgniter-3.1.10/* /var/www/html/




코드이그나이터의 설치가 완료되었다면


브라우저를 통해 해당 서버의 IP주소 혹은 도메인( localhost )으로 접속해 보면 아래와 같은 출력결과가 나타나는 것을 확인 할 수 있다.





위와 같은 화면이 나타난다면 모든 코드이그나이터의 설치는 정상적으로 된것이다.










■ Hello World 페이지 만들기




#01. 주소체계 파악하기



Welcome to CodeIgniter 라는 메세지가 브라우저 화면에 정상적으로 출력되었지만


주소입력창에 호스트 및 도메인주소만 입력했는데 특정 컨트롤러가 실행되고, 어떤 뷰가 화면에 출력되었다.


이런 역할을 해주는 것이 /application/config/routes.php 에 존재한다.



 설치경로/application/config/routes.php

<?php

defined('BASEPATH') OR exit('No direct script access allowed');


/* 주 석 생 략 */


$route['default_controller'] = 'welcome';      // Welcome.php 컨트롤러를 실행한다.

$route['404_override'] = '';

$route['translate_uri_dashes'] = FALSE;



주소에 컨트롤러가 입력되지 않았을 경우 welcome.php 컨트롤러가 실행된다.



 설치경로/application/controller/Welcome.php

<?php

defined('BASEPATH') OR exit('No direct script access allowed');


class Welcome extends CI_Controller {

/* 주 석 생 략  */


public function index( )

{

$this->load->view('welcome_message');      // welcome_message.php 파일을 실행한다.

}

}





CodeIgniter의 주소체계는 http:// 호스트 / 컨트롤러 / 메서드로 되어 있다.


routes.php에서 default_controllerwelcome.php로 지정해서 컨트롤러 명을 알 수 있는데 실행되는 메서드 명은 알 수가 없다.


index( ) 메서드를 선언하려면 http://localhost/welcome/까지만 주소를 쳐도 자동으로 http://localhost/welcome/index라고 실행된다.

(에러 방지의 목적도 있기 때문에 index 메서드는 항상 만드는 것이 좋다.)


$this->load->view는 뷰 파일을 로딩하라는 의미이다.


/application/views/welcome_message.php 파일이 로딩되며, 확장자는 생략하고 호출된다.





#02. Hello World 출력하기



Hello World를 화면에 출력하기 위해


/application/views/welcome_message.php 파일의


내용을 아래와 같이 수정해 보자.


 설치경로/application/view/welcome_message.php

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

?><!DOCTYPE html>

<html lang="en">

<head>

<meta charset="utf-8">

<title>Welcome to CodeIgniter</title>


<style type="text/css">


::selection { background-color:#E13300;color:white; }

::-moz-selection { background-color:#E13300;color:white; }


body {

background-color:#FFFFFF;

margin:40px;

font:13px/20px normal Helvetica,Arial,sans-serif;

color:#4F5155;

}


a {

color:#003399;

background-color:transparent;

font-weight:normal;

}


h1 {

color:#444444;

background-color:transparent;

border-bottom:1px solid #D0D0D0;

font-size:19px;

font-weight:normal;

margin:0 0 14px 0;

padding:14px 15px 10px 15px;

}


code {

font-family:Consolas, Monaco, Courier New, Courier, monospace;

font-size:12px;

background-color:#F9F9F9;

border:1px solid #D0D0D0;

color:#002166;

display:block;

margin:14px 0 14px 0;

padding:12px 10px 12px 10px;

}


#body {

margin: 0 15px 0 15px;

}


p.footer {

text-align:right;

font-size:11px;

border-top:1px solid #D0D0D0;

line-height:32px;

padding:0 10px 0 10px;

margin:20px 0 0 0;

}


#container {

margin:10px;

border:1px solid #D0D0D0;

box-shadow:0 0 8px #D0D0D0;

}

</style>

</head>

<body>

<!--

<div id="container">

<h1>Welcome to CodeIgniter!</h1>


<div id="body">

<p>The page you are looking at is being generated dynamically by CodeIgniter.</p>


<p>If you would like to edit this page you'll find it located at:</p>

<code>application/views/welcome_message.php</code>


<p>The corresponding controller for this page is found at:</p>

<code>application/controllers/Welcome.php</code>


<p>If you are exploring CodeIgniter for the very first time, you should start by reading the <a href="user_guide/">User Guide</a>.</p>

</div>

</div>

-->


<!-- 수 정 시 작 -->

<!-- 뷰 파일은 HTML로 구성되어 있어서 일정한 규칙을 개발자와 디자이너가 준수한다면 디자인 분업이 가능하다. -->

<div id="container">

<h1>Hello World</h1>

<div id="body">

<p>CodeIgniter 설치후 볼 수 잇는 화면 입니다.</p>

</div>


<p class="footer">Page rendered in <strong>{elapsed_time}</strong> seconds. 

<?php 

echo  (ENVIRONMENT === "development") ?  "CodeIgniter Version <strong>" . CI_VERSION . "</strong>" : ""

?>

</p>

</div>

<!-- 수 정 종료 -->

</body>

</html>



자동으로 로딩되는 output 라이브러리의 변수 중 하나로 { elapsed_time }은 현재 보이는 페이지의 실행 시간을 나타낸다.


어떤 페이지든 { elapsed_time } 를 삽입하면 그 페이지의 실행 시간을 보여준다.


비슷한 변수로 그 페이지 사용량을 보여주는 { memory_usage } 가 있다.














Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[AWS] 가상 컴퓨터 환경(EC2) 생성 및 SSH 접속[AWS] 가상 컴퓨터 환경(EC2) 생성 및 SSH 접속

Posted at 2019.07.05 18:00 | Posted in AWS




■ 아마존 가상 서버 EC2 생성하기





Amazon Elastic Compute Cloud( EC2 ) 환경을 구성하기 위해서는


먼저 https://aws.amazon.com/ko/ 에 접속 한고 로그인한 이후에 상단 내 계정을 클릭하고


AWS Management Console로 이동한다.







AWS Management Console 페이지로 이동했다면


페이지 중단의 솔루션 구축 항목에서


EC2를 사용하여 가상머신 시작을 선택한다.














#메뉴01. Amazon Machine Image ( AMI ) 선택



Amazon Machine Image ( AMI ) 선택 페이지에서


사용할 가상 컴퓨터 환경의 운영체제를 선택할 수 있다.


여기서는 가장 기본적인 Amazon Linux를 선택한다.









#메뉴02. 인스턴스 유형 선택



인스턴스 유형을 선택한다.


여러 항목들이 있지만, 여기서는 테스트 서버를 하나 구성하는 용도로 사용할 것이기에


대략 1개월 정도의 무료 사용이 가능한 프리 티어( Free Tire ) 사용 가능 항목을 선택하여 준다.


 인스턴스 유형은 추후 업그레이 등이 가능하다.

( 참고 : https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ec2-instance-resize.html )







검토 및 시작을 누르게 되면 현재 메뉴에서


#메뉴07. 검토 페이지로 바로 이동하게 된다.


전부 기본적으로 제공되는 설정을 사용할 계획이라면


해당 버튼을 클릭하여 시간을 단축해도 좋다.





#메뉴03. 인스턴스 구성








#메뉴04. 스토리지 추가








#메뉴05. 태그 추가








#메뉴06. 보안 그룹 구성








#메뉴07. 검토





생성한 인스턴스에 정상적으로 접속하기 위해서는


키페어( key-pair.pem ) 파일을 필요로 한다.


키페어를 선택하고


원하는 키페어의 이름을 지정해 주고


키페어를 다운로드 받도록 하자.






키페어는 해당 포스팅 하단의 SSH통해 접속하기 위해 꼭 필요한 파일이다.


생성된 키페어를 다운받았다면 잘 보관한 이후에


인스턴스 시작을 누르게 되면 인스턴스의 생성작업이 모두 마무리 되었다.










인스턴스 생성에 성공했다면


아래 화면과 같은 창의 모습을 확인 할 수 있다.


AWS 사용 요금에 대한 알림을 받기위해


결제 알림 생성 페이지에 들어가 보자.







결제 기본 설정에 여러가지 있지만.


기본적으로 결제 알림 받기는 꼭 설정해 주도록 하자.


프리 티어 사용량 알림 수신의 경우 프리 티어를 사용하지 않는다면 불필요 하다.








이제 인스턴스 보기를 클릭해 주면


AWS 가상 컴퓨터 환경( EC2 )의 생성이 완료된다.






이제 인스턴스 보기를 클릭하게 되면


아래와 같이 작업한 인스턴가 정상적으로 생성된 것을 확인 할 수 있다.







생성한 인스턴스를 선택하면


인스턴스 ID, 퍼블릭 DNS ( IPv4 )등


인스턴스 접속에 필요한 정보들이 출력되는것을 확인 할 수 있다.













■ 생성한 아마존 가상 서버 환경(EC2), SSH로 접속





생성한 인스턴스퍼블릭 IP 주소를 복사한다.






SSH를 접속하기 위한 툴은 Moba Xterm을 사용했다.

( 참고 : http://magic.wickedmiso.com/131 )


Moba Xterm을 실행한뒤 인스턴스에 접속하기위한 Session을 하나 생성하자.






SSH에 접속하기위해 필요한 값을 하나씩 입력하도록 하자.






① 상단 메뉴에서 SSH를 선택한다.

리모트 호스트 ( Remote Host )는 생성한 인스턴스의 퍼블릭 IP를 입력해 준다.

③ 해당 포스팅은 Amazon Linux를 사용하였기에 계정 ID ( Specify Username )는 ec2-user가 기본값이 된다.

고급 SSH 설정 ( Advanced SSH settings ) 탭을 선택해 준다.

⑤ 사용자 프라이빗 키( Use Private Key )는 인스턴스 생성 과정에서 다운받은 키-페어.pem 파일의 경로를 설정해 주면 된다.



※ AWS의 가상 컴퓨터 환경( EC2 ) 운영체제별 기본 계정 ID 정리

운 영 체 제

사용자 계정

 Amzon Linux

 · ec2-user

 Ubuntu

 · ubuntu

 CentOS

 · centos 

 Debian

 · admin 또는 root

 Fedora

 · ec2-user 또는 fedora

 RHEL

 · ec2-user 또는 root

 SUSE

 · ec2-user 또는 root 




①②③④⑤




마지막으로 즐겨찾기 세팅 ( Bookmark Settings )에서


세션 이름 ( Session Name )의 값을 기억하기 쉬운 이름을 입력하여 주고


OK 버튼을 클릭하면 SSH 접속준비가 완료되었다.







이제 생성한 세션을 실행 시키게 되면







정상적으로 아마존 리눅스 환경에 접근한 모습을 확인 할 수 있다.












'AWS' 카테고리의 다른 글

[AWS] 가상 컴퓨터 환경(EC2) 생성 및 SSH 접속  (0) 2019.07.05
AWS

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[Concepts] 프로그래밍 언어의 실행 과정[Concepts] 프로그래밍 언어의 실행 과정

Posted at 2019.07.02 21:49 | Posted in Computer Concepts




출처 : IT CookBook, 컴퓨터 사이언스






■ 사용자 요구사항 분석과 프로그램 설계




간단한 프로글매이면 분석 없이 바로 코딩을 하기도 하지만, 복잡하거나 규모가 큰 프로그램을 개발할 때는 사용자의 요구사항을 분석한 후 설계한다.




#01. 사용자 요구사항 분석


사용자가 무엇을 원하는지 파악하고 프로그램을 통해 해결할 문제가 무엇인지 확인하는 단계이다. 프로그램의 출력물에 어떤 내용을 포함시켜야 하고, 이를 위해 입력할 내용은 무엇인지, 폼은 어떻게 구성해야 하는지 등을 설계한다. 사용자와 시스템 사이의 인터페이스 방식은 어떻게 할지, 데이터 구조 및 처리 절차에 대한 기본 틀은 어떻게 할지 등을 분석해야 대략적인 설계를 한다. 이 과정이 모두 끝났다면 프로그램 설계를 시작한다.





#02. 프로그램 설계


실제 코딩을 시작할 때 사용할 논리를 프로그래머가 대략 그려내는 단계로 보통 알고리즘 설계라고 한다. 알고리즘(algorithm)의 사전적 의미는 반복 동작을 포함하여 정해진 단계 내에서 형식적이고 수학적으로 표현된 문제를 푸는 절차이다. 즉 어떠한 결과가 나오도록 차례를 설계하는 것을 알고리즘 설계라고 한다.



알고리즘은 다음과 같은 다섯 가지 주요한 특성이 있다.







※ 알고리즘의 5가지 특성



① 알고리즘 명령을 수행하면 유한한 횟수를 거친 후 종료해야 한다.


② 알고리즘의 각 단계와 명령은 명확하게 정의되어야 한다.


③ 알고리즘은 데이터 입력이 0 또는 그 이상이어야 한다.

    여기서 입력은 알고리즘이 시작되기 전에 알고리즘에 주어진 또는 알고리즘 수행 중에 동작으로 주어진 수량을 말한다.


④ 알고리즘은 한가지 이상의 결과를 출력한다.


⑤ 알고리즘은 효과적이어야 한다. 이는 알고리즘의 모든 연산이 종이와 연필을 이용해 유한한 시간 내에 정확히 수행할 수 있을 정도로 단순해야 함을 의미한다.







이상을 정리하면, 알고리즘은 항상 어떠한 결과(답) 나오도록 만들어진 단계의 모양이다. 여기에서 중요한 것은 인간의 뇌 속에 지식으로 가지고 있는 '문제를 푸는 방법'을 어떻게 문자나 기호 등을 이용해 시각적으로 표현하느냐이다.



문제 푸는 방법을 알고리즘으로 쉽게 표현하기 위해 순서도나 의사 코드 등을 사용한다. 순서도는 제어 흐름을 그림으로 표현한 것이고, 의사 코드는 프로그램과 비슷한 문자로 표현한 것이다. 두 방법 모두 프로그램 실행에 대한 명확한 문법 구조가 아닌 프로그램 전체 구조와 제어 흐름만 나타낸다.


순서도나 의사 코드로 표현되는 프로그램 제어 흐름 유형에는 순차 구조, 선택 구조, 반복 구조가 있다.




※ 프로그램 제어 어 흐름의 유형







:: 순차 구조 ::

:: 선택 구조 ::

:: 반복 구조 ::





◎ 순차 구조 ( Sequence Structure )


순차 구조는 프로그램 코드를 순서대로 실행한다.



◎ 선택 구조 ( Selection Stucture )


선택 구조는 프로그램이 다음에 무엇을 해야 할지 결정하는 분기 구조이다.

조건문(Conditional Stucture)으로 부르기도 한다.

보통 if - then문, case 문, else 또는 else if 문을 포함한 if - then 문을 사용한다.



◎ 반복 구조 ( Repetition Stucture )


반복 구조는 조건이 만족되지 않을 때까지 계속 반복한다.

루프 구조(loop structure)로 부르기도 한다.

프로그래밍 언어마다 반복 구조를 표현하는 방법이 있는데,

for 문, while 문, do - while 문 을 공통으로 사용한다.





① for 문






 어떤 과정을 특정 횟수만큼 반복한다. 조건식이 참이면 문장을 실행한 뒤 증가 연산을 하고 다시 조건식을 검사한다.

 조건식이 거짓이면 문장을 실행하지 않고 for문을 종료한다.



② while 문





 조건식을 만족하는지 여부를 확인한다.

 조건식이 참이면 문장을 실행하고 거짓이면 while 문을 종료한다.

 즉 while 문은 조건식이 거짓이 되지 않는 한 계속 실행된다.





③ do - while 문




 조건식을 먼저 검사하는 while 문과 달리 일단 문장을 한 번 실행 한 후 조건식이 만족하는지 여부를 확인한다.

 조건식이 참이면 문장을 실행하고 거짓이면 do - while 문을 종료한다.











■ 코딩 및 컴파일




프로그래밍 언어로 프로그램을 작성하는 것을 코딩(Coding)이라고 한다. 코딩을 할 때는 개발할 프로그램의 특성에 맞는 프로그래밍 언어를 선택하여 작성해야 한다. 코딩이 끝나면 고급언어로 작성된 명령문을 기계어로 바꾸는 컴파일(Compile) 단계에 들어간다. 컴파일은 프로그래밍 언어의 성격에 따라 컴파일러 compiler를 이용한 방식과 인터프리터(Interpreter)를 이요한 방식이 있고 두 방식을 혼합한 하이브리드 hybrid 방식이 있다.





#01. 컴파일러를 이용한 방식


프로그램 전체를 한 번에 기계어로 번역하는 방식을 C언어를 비롯하여 코볼, 포트란, 파스칼 등에서 사용된다. 다음 그림은 컴파일러를 이용한 방식으로 프로그램을 실행하는 과정이다. 컴파일러는 고급 언어로 작성된 원시 코드를 기계어인 목적 코드로 번역한다. 목적 코드는 로더에 의해 메모리에 옮겨져 실행(Execution)되어 결과 값을 출력한다.


컴파일러는 한번 목적 코드로 번역하고 나면 실행할 때마다 번역할 필요가 없으므로 프로그램 전체의 실행 시간을 줄일 수 있다. 하지만 원시 코드 일부만 수정되어도 프로그램 전체를 다시 번역해야 하므로 번거로울 수 있다.









#02. 인터프리터를 이용한 방식


프로그램을 한 행씩 읽어 번역과 실행을 동시에 하는 방식으로 베이직 등에서 사용된다. 원시 코드가 수정될 때마다 프로그램 전체를 번역할 필요가 없으므로 간단한 구조의 프로그램은 편리하나 반복문이나 계속 호출되는 서브 프로그램처럼 많은 횟수로 처리되는 프로그램은 실행 시간이 길어져 비효율 적이다.











#03. 하이브리드 방식



컴파일러 인터프리터를 함께 이용하는 방식으로 리스프(LISP), 스노볼4(SNOBOL4), API, 프롤로그(Prolog), 자바(JAVA)등에서 사용된다. 이 방식은 컴파일러가 원시 코드를 목적 코드로 번역하는 것이 아니라 적당한 중간 코드로 번역한다. 중간 코드는 인터프리에 의해 입력 자료와 함께 실행된다.
















Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[Concepts] 프로그래밍 언어의 개요[Concepts] 프로그래밍 언어의 개요

Posted at 2019.06.26 20:21 | Posted in Computer Concepts




출처 : IT CookBook, 컴퓨터 사이언스






 프로그래밍 언어의 개념



컴퓨터를 움직이게 하려면 명령을 내려야 한다.

프로그래밍 언어는 인간이 컴퓨터와 의사소통할 수 있도록 컴퓨터에 내리는 명령으로 프로그램을 처리하도록 기술한 언어를 말한다.


프로그램은 인스트럭션(Instruction)이라는 명령어로 쓰여 있고, 컴퓨터는 인스트럭션을 논리적 순서(문제를 푸는 방법)에 따라 수행한다. 하지만 2장에서 살펴본 것처럼 컴퓨터는 0이나 1로 된 2진수 형태의 기계어만 처리할 수 있으므로 인스트럭션 역시 기계어로 쓰여 있어 인간이 이해하기 힘들다. 이 문제를 해결하기 위해 인간도 쓰기 쉽고 컴퓨터도 기계어로 해석 할 수 있는 프로그래밍 언어(Programming Language)를 개발하여 사용하게 되었다.








■ 저급 언어와 고급 언어



프로그래밍 언어는 기계어와 유사한 저급 언어와 인간이 쓰는 자연 언어와 유사한 고급 언어로 나뉜다.




#01. 저급 언어


저급언어란 컴퓨터 내부 표현에 가까운 언어로 기계어와 어셈블리어로 나눌 수 있다.

기계어는 0과 1로 작성하고, 어셈블리어는 기계어를 인간이 이해하기 쉽도록 기호홀 표현하여 작성한다.



◎ 기계어 ( Machine Language) 


기계어는 0과 1로 된 2진수 형태의 언어이다.

인간이 이해하기 어려울 뿐만 아니라 하드웨어 주소 체계에 따라 배열이 달라져 컴퓨터 끼리 호환되지 않는 문제가 있어 지금은 거의 사용되지 않는다.



◎ 어셈블리어 ( Assembly Language )


어셈블리어는 기계어 명령을 알기 쉬운 기호로 표시하기 떄문에 기계어는 물론 사용하고자 하는 컴퓨터 내부 구성과도 관계가 깊다.

예를 들어 LDA A라는 어셈블리어 코드는 메모리 A번지에 있는 내용을 누산기 accumulator에 저장하라는 의미로, 기계어 010100000000100에 해당한다.

다음은 A ∨ B 수식을 ( A' ∧ B' )형태로 치환해 계사한 어셈블리어의 예이다.



  LDA A 

 // A번지에 있는 데이터 값을 로드한다.

  CMA

 // 위의 값을 보수( A' )로 바꾼다.

  STA TMP

 // 위의 값을 임시 저장소에 저장한다. 

  LDA B

 // B번지에 있는 데이터 값을 로드한다.

  CMA

 // 위의 값을 보수( B' )로 바꾼다.

  AND TMP

 // AND( A' ∧ B' ) 계산을 수행한다.

  CMA

 // 계산 결과를 보수화하여 ( A ∨ B ) 결과 값을 얻는다.



어셈블리어는 기계어에 비해 간편하게 쓸 수 있지만 기계어인 0과 1의 집합을 문자나 기호로 바꾼 것에 불과하므로 하드웨어 구조에 익수한 사람이 아니면 쓰기 어렵다.

그럼에도 불구하고 주기억 장치, 레지스터, 마으코르포르세서, 입출력 포트 같은 컴퓨터의 하드웨어 장치를 직접 제어할 때는 매우 유용하다.




#02. 고급언어



사용자의 요구 수준이 높아지고 컴퓨터 기술이 발달하면서 다양한 고급 언어가 개발되었다.

고급 언어는 하드웨어의 기술적 요소를 구체적으로 몰라도 쉽게 작성하고 수정할 수 있다.


고급언어의 특징은 다음과 같다.


일상 언어에서 사용하는 표현을 그대로 가져다 쓸 수 있다.

예를 들어 +는 덧셈, -뺄셈으로 상요한느 등 일반적으로 사용하는 단어나 표현을 그대로 쓴다.


기계어나 어셈블리어를 쓰려면 기억장치에 데이터를 읽거나 쓸 때 기억 장소의 주소를 정확히 알아야 한다.

이에 비해 고급 언어는 번지 대신 변수 이름으로 기억 장소에 접근하므로 사용자가 기억 장소의 주소를 일일이 기억할 필요가 없다.


명령어 하나로 다수의 동작을 지시한다.

예를 들어 X = Y + Z × W 명령어는 Z와 W를 먼저 곱하고 그 결과를 Y에 더해 X에 대입하라는 뜻이다.

이처럼 하나의 명령어로 다수의 연산을 실행한다.


다음 그림은 고급 언어로 작성한 프로그램을 실행하는 과정이다. 프로그래머는 먼저 고급 언어와 같은 프로그래밍 언어를 이용해 원시 코드를 작성한다. 그 다음 번역기(컴파일러)가 원시 코드를 목적 코드로 번역한다. 여기서 목적 코드는 긱어로 된 프로그램으로 컴퓨터가 바로 실행할 수 있는 상태의 프로그램 코드이다. 목적 코드는 메모리로 옮겨져 실행되고 결과물을 계산해 낸다.




※ 프로그램 작성과 실행과정





종류에 따라 다르지만 고급 언어는 다음과 같은 형식적인 규칙이 있다. 이를 프로그래밍 언어의 문법 구조(Syntax)라 한다.


어떤 구조와 순서가 있다.

특별한 기호를 사용한다.

언어에 따라서는 마침표( . )나 세미콜론( ; ) 등을 사용한다.


대표적인 고급 언어로는 C언어를 비롯해 포트란(FORTRAN), 코볼(COBOL), 파스칼(PASCAL), C++, 자바(JAVA), 스몰토크(SMALLTALK) 등이 있다.





#03. 프로그래밍 언어의 발전


나라마다 사용하는 언어가 다르듯 프로그래밍 언어도 수백 종 이상이 개발되어 사용되고 있다. 언제 개발되었고 어떻게 발전되어 왔는지 살펴보자.



① 1950년대 언어


이전까지 기계어로 작성하던 프로그램을 1950년대 초에 처음으로 어셈블리어로 작성하였다.

어셈블리어는 기계어인 0과 1을 인간이 이해하기 쉬운 코드로 바꾸어 기계어보다 작성하기 쉬웠지만, 하드웨어 위주의 언어라는 제약이 따랐다.

그러던 중 과학 분야의 복잡한 계산을 수행하기 위해 포트란(FORTRAN, FORmula TRANslator)이 개발되었다.

포트란은 프로그래밍 언어가 발전하는데 새로운 이정표를 세웠다.



② 1960년대 언어


포트란을 발전시킨 과학기술용 고급 언어가 잇따라 개발되었고, 사무 처리용 고급 언어도 개발되었다.

대표적인 사무 처리용 언어가 코볼(COBOL, COmmon Business Oriented Language)이다.

코볼은 미국 국방성이 후원하여 컴퓨터 제품 간의 호환성 문제를 해결하기 위해 개발한 것으로, 수차례의 수정과 보완을 거쳐 사무 처리용 언어로 확고히 자리를 잡았다.

포트란 같은 과학기술용 언어는 프로그램을 수학적 푝법을 사용하여 작성하는데 반해, 코볼은 영어에 가까운 구문을 사용하기 때문에 작성하기도 편하고 이해하기 쉽다는 장점이 있다.

1960년대 포트란과 코볼의 장점을 살린 하이브리드 형태인 PL/I(Programming Language One)이 등장해 관심을 크게 끌었지만, 오늘날에는 코볼에 비해 사용 빈도가 낮은 편이다.



③ 1970년대 언어


하드웨어 가격이 떨어지고 소프트웨어가 복잡해지면서 프로그래밍 언어 역시 소프트웨어 중심으로 비중이 옮겨가기 시작했다.

소프트웨어의 복잡성과 관리가 중요한 쟁점으로 떠오르면서 더 강력하고 새로운 개념의 언어가 필요해졌다.

이렇게 개발된 언어가 C언어와 파스칼(PASCAL)이다.


C언어는 원래 시스템 소프트웨어를 개발하는 언어였지만 다양한 종류의 컴퓨터에 이식할 수 있다는 점 때문에 현재까지도 여러 분야에 두루 사용되고 있다. 실제로 수많은 워드프로세서, 스프레드시트, 그래픽 프로그램, 게임 등이 C언어로 제작되었다.

유닉스 운영체제가 등장하면서 C언어의 인기가 날로 높아졌는데 이것은 비트 연산과 같은 저급 언어 기능을 갖추고 있어 빠르고 효율적이기 때문이다.

물론 이후 등장한 언어에 비해 배우기가 어렵고 보고서 작성이나 데이터 파일 조작이 많은 업무에는 부적합하다는 단점이 있다.


파스칼은 프랑스 수학자인 파스칼(Pascal)의 이름에서 따온 언어로, 1969년에 스위스 취리히 공과대학의 니클라우스 위스(Niklaus Wirth) 교수가 개발했다.

파스칼은 당시 유행한 구조적 프로그래밍에 적합한 언어이기도 했고, 쉽게 배울 수 있는 것은 물론 이공계 및 과학계 종사자가 주로 사용하는 그래픽 처리 기능 또한 뛰어나 많은 사람에게 주목을 받았다.

하지만 대화식 입출력이나 사무 처리 분야에 응용하기엔느 부족했고, C언어에 비해 사용자를 크게 늘리지 못하면서 1990년대 중반 이후에는 인기가 시들해졌다.



④ 1980년대 언어


본격적으로 컴퓨터 하드웨어 가격이 떨어지면서 개인용 컴퓨터와 중앙 컴퓨터가 연결된 단말 시스템을 이용한 분산 처리 개념이 확산되었다.

이러한 이유로 학생들과 컴퓨터 초보자들도 쉽게 배울 수 있는 교육용 언어가 필요해졌고 이때 등장한 언어가 베이직(BASIC)이다.

베이직은 쉽게 배울 수 있고 중앙 컴퓨터와 연결된 단말 시스템에서 처리하는 시분할 시스템(Time Sharing System)운영 에 적합한 기능을 가지고 있어 많은 인기를 끌었다.

다만 비교적인 측면이 있어 소프트웨어 규모가 커질 수록 관리하기 번잡해지고 운영이나 유지가 많이 어렵다는 단점이 있었다.

이후 이러한 단점을 개선한 퀵 베이직(Quick Basic)과 비주얼 베이직(Visual Basic) 등이 등장했고 지금까지도 널리 사용되고 있다.



⑤ 1990년대 언어


객체 지향 언어가 본격적으로 등장했다.

특히 GUI(Graphical User Interface) 환경의 프로그래밍을 위한 여러 클래스의 라이브러리가 등장하면서 객체 지향 언어의 장점이 크게 부각되었다.

이러한 추세에 맞춰 C++, 자바(JAVA), 비주얼 베이직(Visual Basic)등의 객체 지향 언어가 등장했다.

이들 언어은 기존의 객체 개념을 업그레이드하고 GUI 개념을 강화하는 방향으로 더욱 발전해 나갔다.


비주얼 베이직은 베이직과 퀵 베이직을 개선하여 객체 지향 개념을 보강한 언어이다.

GUI 기능을 내세워 사용자가 쉽게 사용할 수 있어 지금까지 많이 활용된다.



⑥ 2000년대 이후 언어


2000년대에 접어들면서 사용자는 더욱 간편하고 쉬운 방법으르 프로그래밍하길 원했고 이미 개발된 프로그램을 쉽게 가져다 쓸 수 있는 소프트웨어가 나오길 기다렸다.

강화된 기능의 웹과 저렴해진 하드웨어는 이러한 사용자 요구를 만족시킬 방법을 찾아냈다.


먼저 파워빌더(PowerBuilder), 델파이(Delphi), 각종 쿼리(Query) 전용 언어 등 소위 4세대라 불리는 언어가 등장했다.

4세대 언언느 특정 상황에 맞춤식으로 사용할 수 있고, 종래의 고급 언어보다 사용하기가 쉽다.

또한 사용자에게 강화된 텍스트 환경이나 시각 환경을 제공한다.


객체 지향 프로그래밍 기법이 발전하면서 소프트웨어 모듈을 컴포넌트화하여 필요할 때마다 사용할 수 있도록 하는 소프트웨어 컴포넌트 기술도 빠르게 발전했다. 이 기술은 소프트웨어를 전자 부품처럼 통일된 인터페이스로 제작함으로써 소프트웨어(Software Factory)을 만들 수 있도록 도왔다.

소프트웨어 컴포너트는 차세대 소프트웨어 기술의 핵심 분야로 인식되면서 소프트웨어 생산성 향상을 위한 필 수 기술로 대두 되었다.


이 시기에는 객체 지향 기술과 웹이 결합하여 다양한 정보를 제공하는 기법이 발전했다.

XML(eXtensible Markup Language)과 VRML(Virutal Realiry Modeling Language) 등 각종 웹 프로그래밍 언어가 등장했다.

XML은 HTML의 한계를 극복할고 만든 언어로 다른 시스템 특히 인터넷에 연결된 시스템끼리 데이터를 쉽게 주고받을 수 있도록 한다.

VRML은 인터넷이나 로컬 시스템에서 3차원 개체나 세계를 표현하기 위한 파일 형식이다.

XML과 VRML은 기존 객체 지향 언어와 결합하여 인터넷에서 텍스트, 이미지, 애니메이션, 사운드 등을 비롯한 가상현실(Virtual Reality) 까지 구현할 수 있는 기술로 발전하고 있다.


최근에는 5세대 언어라 불리는 인공지능 기능을 이요해 자연 언어(Natural Language)로 직접 처리하는 기법에 대한 연구가 활발히 진행되고 있다.

음성인식 시스템이나 자동 번역 시스템 등도 이러한 기법의 일부라 할 수 있다.






※ 프로그램 작성과 실행과정









Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[Puppeteer] Puppeteer와 Cheerio를 활용한 데이터 스크랩핑[Puppeteer] Puppeteer와 Cheerio를 활용한 데이터 스크랩핑

Posted at 2019.06.20 21:10 | Posted in Node.js/Puppeteer




■ 퍼펫티어를 이용한 유튜브 채널 스크랩핑




유튜브 API가 제대로 동작하지 않게 되었다.


cheerio-httpcli 모듈로 YouTube 페이지의 데이터를 스크래핑 하려 해보았지만.


유튜브의 경우 cheerio-httpcli를 통한 단순한 데이터 스크랩핑을 해보니


많은 수의 json형태의 데이터를 가져오기에


포기하던 차에 puppeteer를 활용해 보기로 했고


결과는 어느정도 만족할 수 있는 수준이었다.






위와 같이 유튜브 특정 채널의 업로드 영상을 가져와 보려고 한다.




# 소스코드

 puppeteer_ra_om_musiq.js

const puppeteer = require( "puppeteer" );

const cheerio = require( "cheerio" );


puppeteer.launch( { headless : true } ).then(async browser => {


const page = await browser.newPage();

await page.goto( "https://www.youtube.com/user/RaOmMusiq/videos/", { waitUntil : "networkidle2" } );

        // YouTube 페이지의 <ytd-grid-renderer> 태그 안의 내용을 가져온다.

const html = await page.$eval( "ytd-grid-renderer", e => e.outerHTML );


        // console.log(html);


const datacheerio.loadhtml );

data( "a.ytd-grid-video-renderer" ).each( function( key, val ) {


               // substring을 사용하여 불필요한 값을 잘라낸다. 

var videoId = data( val ).attr( "href" ).substring( 9, 20 );

var videoTitle = data( val ).text();

console.log( "VIDEO ID = ", videoId );

console.log( "VIDEO TITLE = ", videoTitle );

});

});





# 출력결과




위와같이 필요로 하는 YouTube 영상의 아이디 값 타이틀 제목을 얻어오는 모습을 확인 할 수 있다.






Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기