BACK-END

php


[PHP] PHP 에서 move_uploaded_file 실패하는 경우


PHP 에서 move_uploaded_file 을 사용해서 서버에 파일업로드를 하려고 할 때, 기존에 이미 설정한 폴더가 아닌 새로운 폴더에 업로드 하고자하면 파일 업로드가 안되곤 합니다.

이 경우, 파일용량 제한때문이 아니라면 주로 리눅스 서버에서 해당 폴더의 권한이 제대로 설정되어 있지 않을 확률이 높습니다.


FTP 등이 아닌 웹 환경에서 파일업로드를 해야하는 경우, 사용자 본인이 아닌 아파치에게 쓰기 권한이 설정되어있어야 합니다.




서버에서 원하는 폴더에 권한을 757 (rwxr-xrwx) 로 설정해주거나,


Bash(CentOS)

[root@ upload_dir]# chmod 757 mingcho[디렉토리경로]


사용하는 툴에서 CHMOD 기능이 있는 경우 변경해주면 됩니다.



물론 변경 후에는 기타사용자에게 쓰기 권한이 주어지기 때문에, 무분별한 파일이 업로드 되지 않도록 확장자검사, 특수문자검사 등의 방어조치를 취해야합니다.


마지막으로 변경된 폴더로 업로드 해봅시다아.

사실은 move_uploaded_file 함수는 업로드개념보다는 함수명그대로 서버의 tmp 폴더 내부에 임시로 저장된 파일을 내가 원하는 경로로 이동시키는 함수입니다.


PHP

<?php define("UPLOAD_PATH", "/images/"); $tmp_name = $_FILES["name_attr"]["tmp_name"]; //임시저장된 파일을 $target = UPLOAD_PATH.time().$_FILES["name_attr"]["name"]; // /images/1210123112upload_file.jpg move_uploaded_file($tmp_name, $target); //저장 찰칵찰칵 ?>




php


[PHP] PHP 문자열 큰따옴표(") 와 작은따옴표(') 의 차이점



PHP 에서 문자열 작성시에는 아래와 같이 큰따옴표("") 나, 작은따옴표('')를 사용하여 표현합니다.


<?php $a = "double quote"; $b = 'single quote'; ?>


무분별하게 사용하기도 하지만 문자열사용시 큰따옴표("") 와 작은따옴표('')를 사용하는 것은 PHP 내부적으로 차이가 있습니다.





PHP는 문자열을 다룰 때 큰따옴표 안의 문자열의 경우 변수를 찾아내는 과정을 거칩니다.

반면, 작은 따옴표 안의 문자열의 경우 순수 문자열로 인식하여 그대로 보여주게 됩니다.


<?php $text = " 입니다"; echo "double quote $text"; //실행결과 : double quote 입니다. echo 'single quote $text'; //실행결과 : single quote $text ?>


위 예제의 경우 큰따옴표("") 안의 문자열에 사용한 변수는 변수의 값이 제대로 적용 된 데 반해, 작은따옴표('') 안의 변수는 그대로가 문자로 표현되었습니다.


큰따옴표("") 와 작은따옴표('') 의 차이는 변수의 처리 뿐만아니라 확장문자 의 처리에서도 존재합니다.

줄을 개행시켜주는 개행문자 \n 의 경우 큰따옴표안에서는 개행문자로 인식하지만, 작은 따옴표안해서는 일반 문자열로 인식됩니다.


<?php echo "double quote \n"; //실행결과 : double quote echo 'single quote \n'; //실행결과 : single quote \n ?>


위와 같이 작은따옴표 안에서는 대부분의 확장문자가 문자열로 인식되기때문에, 확장문자를 써야하는 경우 큰따옴표("")를 써야합니다.

단, 예외적으로 \' 나 \\ 의 경우 작은따옴표('') 안에서도 사용가능합니다.


<?php echo "사용가능 확장문자 \'"; //실행결과 : 사용가능 확장문자 \' echo '사용가능 확장문자 \''; //실행결과 : 사용가능 확장문자 ' ?>


위의 경우 큰따옴표("") 안에서는 \' 가 문자열로 처리된 반면, 작은따옴표('') 안에서는 확장문자로 처리되었습니다.

상황에 맞게 잘 사용하도록합시다!





[CentOS] Apache MIME TYPE 설정하기!



웹페이지에서 비디오나 오디오 , 이미지 등 멀티미디어 파일을 출력하려고 하거나, 그 외 기타 다른 파일들을 웹상에서 활용하려고 할 때,

클라이언트의 브라우저나, 웹 서버 상에 해당 파일 포맷(확장자)에 대한 MIME TYPE 이 등록되어 있지 않으면, 보여주고자 하는 컨텐츠를 웹상에서 제대로 확인 할 수 없습니다.


기존에 없던 파일 포맷이 새로 생겼다고 가정했을 때, 이 포맷을 웹서버에 MIME TYPE에 등록해 주지 않으면 웹서버는 이 확장자들을 인식하지 못합니다.


예를들어, 로컬에서는 문제없이 잘 재생되던 미디어 파일이 웹서버에 업로드 후 재생되지 않는 다면 이 문제일 수 있습니다.




웹서버(Apache) 에 MIME TYPE 설정하기




OS의 배포판에 따라 설정파일의 위치는 조금씩 다를 수 있습니다.

아파치의 경우 주로, /etc/mime.types 에 위치하지만 해당 위치에 파일이 없는 경우 httpd.conf 파일을 확인합니다.


Bash(Linux)

[root@ /]# vi /etc/httpd/conf/httpd.conf


해당파일에서 <IfModule mime_module> 하위에 TypesConfig 를 보면 mime.types 파일의 위치를 확인 할 수 있습니다.


Bash(Linux)

<IfModule mime_module> # # TypesConfig points to the file containing the list of mappings from # filename extension to MIME-type. # TypesConfig /etc/mime.types


파일의 위치를 찾았으면, 해당 파일을 vi로 연 후,


Bash(Linux)

[root@ /]# vi /etc/mime.types


MIME TYPE 종류보기

추가하고자 하는 MIME TYPE 을 추가한 후, 아파치를 재시작 해주면 끝!





PHP 의존성 관리도구 - Composer 사용법



Composer 영문 메뉴얼 바로가기

Composer 한글 메뉴얼 바로가기


컴포저는 node.js 의 npm ruby의 bundler 와 같이 PHP 환경에서 사용하는 의존성 관리 도구입니다.

컴포저의 역할은 아래와 같습니다


a) 여러 라이브러리에 의존하는 프로젝트를 가지고 있습니다.

b) 이러한 라이브러리들은 또다른 라이브러리들을 필요로 합니다.

c) 이때 여러분이 필요로 하는 의존 관계의 라이브러리들을 지정해 줄 수 있습니다.

d) 컴포저는 패키지가 설치되어야 하는 버전을 찾아, 알맞은 버전의 패키지들과 의존 패키지들을 설치합니다. (프로젝트 디렉토리로 다운로드 한다는 의미입니다.)





시스템 요구사항


컴포저는 PHP 5.3.2+ 이상에서 동작합니다. 몇가지 민감한 PHP 설정을 필요로 하지만 인스톨러를 사용하면 이러한 비호환성을 체크하고 경고를 확인할 수 있습니다.




Composer 설치(*nix 환경)


Windows 환경의 경우 상단 링크의 메뉴얼을 참고해주세요.


1. 지역 설치(Locally)

특징: 프로젝트 안에 Composer를 포함하는 방식

장점: Composer가 프로젝트 안에 직접 설치 되기 때문에, 프로젝트를 다른 곳에 배포 할 경우 배포받은 곳에서 특별히 컴포저를 설치 하지 않고도 응용프로그램 안에 포함된 Composer를 이용하여 패키지 관리가 가능하다.



2. 전역 설치(Globally)

특징: 자신의 운영체제 전체에 Composer를 포함하는 방식

장점: 같은 OS 안에 여러개의 프로젝트를 운영하고 있을 경우, 전역 설치를 하면 각각의 프로젝트에 설치하지 않고도 Composer를 사용가능!



저는 전역설치를 하기로 했습니다. 방식은 거의 비슷하므로 매뉴얼을 참고해주세요.!

메뉴얼에는 아래와 같이 cURL 을 이용한 설치 방법이 나와있습니다.


Bash(Linux)

[root@ lib]# curl -sS https://getcomposer.org/installer | grep


나의 경우 위의 방식으로 설치하자 아래와 같이 에러가 나며 설치실패! (설치환경 : CentOS7)


Bash(Linux)

[root@ lib]# curl: (48) An unknown option was passed in to libcurl


왜 인지는 모르겠지만 다른 방식을 사용하기로 했다.


Bash(Linux)

//PHP 인터랙티브 모드 진입 [root@ lib]# php -a //원격지 설치 파일 카피 php > copy('https://getcomposer.org/installer', 'composer-setup.php'); //인터랙티브 모드 종료 (Ctrl+c) 후 파일 확인 //PHP로 파일실행 [root@ lib]# php composer-setup.php All settings correct for using Composer Downloading... //설치완료 Composer (version 1.6.3) successfully installed to: /usr/local/lib/composer.phar Use it: php composer.phar //글로벌로 실행을 위해 파일 이동 [root@ lib]# mv composer.phar /usr/locl/bin/composer





Composer 사용법


저는 라이브러리 들 중 카카오 알림톡을 사용하기 위한 unirest 모듈을 다운받아 보기로 했습니다. Unirest PHP



1. Composer.json 파일 생성


Composer의 메인 저장소 (Composer의 npm)

먼저 Composer를 처음 사용하는 경우, 라이브러리를 설치 하고자 하는 프로젝트 하위에 composer.json 파일을 생성합니다. 이미 사용 중에 라이브러리를 추가 하는 경우에는 만들어져있는 파일을 사용하면 됩니다.


만든 파일에 아래와 같이 작성합니다. ( //로 표기한 주석은 지워주세요 )

Bash(Linux)

{ "require-dev": { //mashape vendor의 unirest-php 패키지의 3.대 버전중 가장 최신버전을 사용 "mashape/unirest-php": "3.*" } }


저는 unirest 의 홈페이지에 나와있는 composer 사용방법에 있는 대로 require-dev 로 작성했습니다.



2. 설치


require 와 require-dev 는 약간의 차이가 있는데, require-dev 에는 디버깅, 테스트 등 개발시 필요한 해키지 정의를 위해서 필요한 라이브러리 들을 정의한 후 , 실제 서비스 환경에는 설치를 하지 않을 수 있습니다. 반대로 require 에는 서비스 환경에 꼭 필요한 라이브러리 들을 정의합니다.


Bash(Linux)

//require, require-dev에 열거된 모든 패키지 설치 [root@ www]# composer install //require, require-dev에 열거된 모든 패키지 업데이트 [root@ www]# composer update //require에 열거된 패키지만 설치 [root@ www]# composer install --no-dev //require 열거된 패키지 업데이트 [root@ www]# composer updatel --no-dev



위의 설치 방법은 Composer를 글로벌 설치 했을 경우의 설치 방법입니다. 로컬 설치를 했을 경우에는 아래 방식을 사용합니다


Bash(Linux)

//require, require-dev에 열거된 모든 패키지 설치 [root@ www]# php composer.phar install



3. composer.lock ( composer update 와 composer install )


composer의 install 과 update 명령은 의미상 차이가 존재합니다.

위와 같이 composer 를 install 하면 composer.lock 파일이 생성됩니다.

이 파일은 내가 install 한 시점에 설치 된 라이브러리 들의 버전 정보들을 담고 있습니다.

그래서 다른사람이 해당 파일들을 이용해 composer 를 install을 한 경우, 이전에 설치 되어있던 라이브러리들은 업데이트 된 최신 버전이 아닌 composer.lock 파일에 명시되어 있는 버전이 설치 되게 됩니다.

그래서 이 파일을 이용해 composer가 install될 때마다 라이브러리가 최신 버전으로 업데이트 되는 상황을 막을 수 있습니다.

만약, 라이브러리를 최신버전으로 갱신하고 싶을 경우 update 명령을 사용하면 됩니다.

새로운 패키지가 추가됐을 경우에도 update 명령을 사용합니다.

프로젝트 참여자 의존성 일치시키기



4. composer 적용


위와 같이 composer 설치를 마치면, 프로젝트 하위에 vendor 라는 디렉토리가 생성됩니다.

이 디렉토리 안에는 내가 설치 한 라이브러리 들이 존재합니다.

적용은 라이브러리 들의 디렉토리 경로와 상관없이 내가 적용하고자 하는 파일에 아래와 같이 작성해 주면 됩니다.


PHP

<?php require("vendor/autoload.php"); ?>



[네크워크] 소켓(Socket) 통신이란?


노드를 사용한 소켓통신 을 구현해 보기전에 개념적인 부분을 짚고 넘어가고싶어서 검색을 해보다가 

말그대로 개념에 대해서 쉽게 정리된 글을 찾아서 가져왔다.

원본링크는  http://jonnung.blogspot.kr/2013/05/soket.html



소켓통신


네트워크를 통하여 서로 다른 컴퓨터에서 수행되는 프로세스간의 통신 채널이다.

소켓통신에는 신뢰성 프로토콜인 TCP(Transfer Control Protocol)와 

비신뢰성 프로토콜인 UDP(User Datagram Protocol)가 있다.


TCP 통신의 개념


TCP 통신은 쉽게 전화 통화하는 방식으로 동작한다. 상대방의 전화번호를 알고 있어야 전화를 걸 수 있듯이 상대방의 IP 주소와 포트를 알고 있어야 연결을 할 수 있다.

서버가 응답을 받아주지 않으면 계속적으로 요청을 하게 된다. 어느 시점에서 요청을 포기하게 될 수도 있다.

이처럼 TCP 통신은 계속적으로 소켓을 통해 데이터를 주고 받을 수 있는 양방향 통신이 가능하다. 

또한 데이터를 받지 못했을 때 다시 요청하는 메커니즘을 가지고 있다.


UDP 통신의 개념


UDP 통신은 상대방과 연결되어 있는 개념이 아니다. 소켓을 개설하고 그냥 데이터를 흘려 보내는 개념이다.

이는 편지를 보내는 방식과 유사하다. 편지를 보냈더라도 편지를 받는 사람은 편지함을 열어보기 전까지는 편지가 왔는지 안왔는지 알 수 없다. 

따라서 UDP 통신은 UDP 소켓을 통해서 자신의 포트를 열어보기 전에는 데이터가 왔는지 오지 않았는지 알 수 없다.


TCP 와 UDP 비교


TCP 통신은 데이터를 주고 받을 때 데이터가 도착했는지 여부를 내부적으로 확인한다.

만약 데이터가 오지 않았다면 재요청을 하는 메커니즘을 가지고 있어 양방향으로 연결 되어 있지만 이러한 확인 절차로 인해 속도면에서 느리다.

하지만 UDP는 이러한 확인 절차를 거치지 않고 계속적으로 데이터를 전송하기만 하기 때문에 속도면에서 훨씬 빠르다.

속도면에서는 UDP가 빠르지만 UDP는 데이터가 도착했는지 알 수 없는 비신뢰성 프로토콜이다.


'BACK-END > .etc' 카테고리의 다른 글

[네트워크] 소켓(Socket) 통신이란?  (0) 2017.08.24

[Node] Forever 모듈 설치 및 사용법 (For Linux)



Forever는 node가 예상치 못한 상황에서 종료될 경우 자동으로 다시 재시작 시켜주는 앱으로, 

노드 앱을 사용할 경우 설치해 주면 편리하게 노드 프로세스를 관리할 수 있다.

예를들어 #ps -ef | grep 대신 forever list로 간단하게 프로세스 목록 조회가 가능하다.


forever 모듈의 설치법과 간단한 사용법을 알아보자.


먼저 forever 설치는 npm으로 간단하게 설치 가능하다. forever 명령어를 사용해야하므로 로컬설치 말고 글로벌 설치로..! (-g)


[user@localhost ~] npm install -g forever


설치가 완료됐다면 , 명령어를 쳐보자.


[user@localhost ~] forever list

info: No forever processes running    //forever가 관리하고있는 프로세스가 없다.



만들어놓은 웹서버가 있다면, forever로 올려보자.


forever start, forever stop, forever restart 등의 명령어로 사용할 수 있다.

더 자세한 명령어 및 옵션은 npm 홈페이지에서 forever로 검색해서 들어가면 확인할 수 있다.  바로가기




php

PHPExcel 로 엑셀파일 읽기



웹페이지를 개발하다 보면, 엑셀형식의 파일을 읽어 DB에 저장해야 하는 경우나 DB에 저장된 데이터를

엑셀파일로 다운받아야 하는 경우가 생긴다.

이럴 경우, 데이터를 읽어들이는 라이브러리로 PHP-ExcelReaderPHPExcel 등이 있다.


각자의 장단점이 있는데, 

PHP-ExcelReader 의 경우 PHPExcel 보다 가볍다는 장점이 있지만, xlsx 형식의 파일은 지원하지 않는다. (xls 파일이 아닌 경우, 다른 방식을 사용해야한다.)

또한, PHPExcel의 경우 PHP 5.2.0 이상의 버전에서만 가능하다. 


나는 PHPExcel을 사용하기로 했다.



PHPExcel 을 사용하기 위해서는 다음 조건이 요구된다.

1.  PHP 버전이 5.2.0 이상 버전이여야 한다.

2.  php-zip , php-xml , php-gd2 가 enabled 되어야한다.


나같은 경우는 php-zip 이 설치되있지 않아서, Uncaught Error: Class 'ZipArchive' not found 에러가 났다.

위의 경우 아래 링크를 참고.!

바로가기 





준비가 다되었으면

먼저, GitHub의 PHPExcel에 접속하여 PHPExcel 라이브러리를 다운받는다.   PHPExcel 다운로드



다운로드 한 파일을 압축을 풀면 Classes , Documentation, Examples 등의 폴더가 있는데, 

이 중 Classes 폴더를 사용하고자 하는 프로젝트에서 원하는 경로 안에 복사해주면 준비가 완료된다.


다운로드받은 PHPExcel 하위에 문서들을 보면 다양한 사용방법이 나와있지만, 

편의를 위해서 쉽게 작성해 놓은 예제소스를 참고했다!

http://spac.tistory.com/176 


잘돌아간다면 위 예제소스의 /*데이터 처리*/ 부분에 원하는 데이터 처리를 하면 된다!




* 이 포스트는 "생활코딩 egoing님의 node강좌" 를 보고 정리하는 개인적인 포스트입니다.


[참고/출처]

https://opentutorials.org/course/2136/11854


NPM 모듈 Express 기본 사용법


익스프레스를 사용해면 http 모듈 없이도 간단한 웹서버를 구성할 수 있습니다.

익스프레스의 자세한 사용법은 express 공식 홈페이지에서 한국어 번역판을 볼 수 있습니다. http://expressjs.com/ko/ 

(번역해 주신분들 감사합니당ㅎ.ㅎ!!!)


1. 설치와 기본사용법


익스프레스를 사용하기 전에 먼저 설치를 합니다.

package.json파일이 없으신분들은 npm의존성모듈 관리하기 참고!


  

[user@server home/mingcho/node] # npm install express --save



express의 기본 사용법.!


 

const express =  require("express");  // express 모듈을 require 한후 

const app =  express() // app변수에 express함수를 담습니다!

  

app.get('/', function(req, res){

  res.send('Hello home page');

});  // '/' 경로로 들어오는 사용자에게 Hello home page라는 문자열을 리턴해줍니다.


app.get('/login'function(req, res){

  res.send('Login please');

});  // '/login' 경로로 들어오는 사용자에게 Login please라는 문자열을 리턴해줍니다.


app.listen(3886function(){

  console.log('Connected 3886 port');

});  // 우리의 서버는 3886번 port의 요청을 들을 준비가 되었습니당.! 준비가되면 콘솔창에 Connected 3886 port를 띄워줍시당.




2. 정적파일 엑세스하기 


우리가 주로 프로그램을 처리하고 동적으로 데이터가 처리되는 부분이 아닌 한번 작성을 하면 

수정하기 전까지 변하지 않는 html 파일이나 css 파일등을 정적파일이라고 부릅니다.


express로 이런 정적파일들을 엑세스 하려면 아래와 같은 소스를 추가해주면됩니다.


app.use(expressstatic('폴더경로'));

// '폴더경로'에는 엑세스 하고자 하는 파일이 들어있는 폴더의 상대경로나 절대경로를 입력해주면 됩니다.


ex)

app.js

 

const express  require("express");  

const app =  express() 


app.use(expressstatic('public'));

// app.js 가 있는 프로젝트 안에 public이란 폴더를 만들고 그 안에있는 


app.get('/'function(req, res){

  res.send('Hello home page');

}); 


app.get('/route'function(req, res){

  res.send('<img src ="/flag.jpg"');

});  

// flag.jpg 이미지 파일을 /route 로 들어오는 사용자들에게 보여주도록 했습니다.


app.listen(3886function(){

  console.log('Connected 3886 port');

});  



호스트주소:포트번호/route 로 접속시 이미지가 잘 나온다면 성공! 


public안에 간단한 html 파일을 만든후 호스트주소:포트번호/파일명 으로도 접근해봅시당.


static.html

 

<!DOCTYPE html>

<html>

  <head>

    <meta charset="utf-8">

    <title></title>

  </head>

  <body>

      <ul>

         <li>mingcho</li>

         <li>mingcho</li>

         <li>mingcho</li>

      </ul>

  </body>

</html>



위와 같은 정적파일들은 수정한 후 node를 껐다가 다시키지 않아도 바로 적용이 됩니다.










* 이 포스트는 "생활코딩 egoing님의 node강좌" 를 보고 정리하는 개인적인 포스트입니다.



[참고/출처]

https://opentutorials.org/course/2136/11854


강의를 보던 중 잠깐 패키지를 다운받기 전 npm으로 의존성을 관리할 수 있는 package.json 파일을 생성하는 부분이 나왔다.

내용이 조금 부족하여 구글링을 추가하여 ㅎㅎ 정리해 보도록 한다.


요즘같은 경우는 npm없이 node를 사용하기란 상상할 수 없는 일이기도하고 , 

npm에 있는 수많은 모듈들을 가져다 사용하고 있기때문에 npm모듈들의 의존성관리를 해줄 필요가 있다.


npm은 프로젝트에 대한 설정을 package.json이라는 파일에 의존하고 있기 때문에 이 파일에 JSON형식으로 작성해서 

프로젝트에 대한 관리를 할 수도 있지만 , npm 에는 손수 json파일을 작성하지 않아도 package.json 파일을 생성해 주는 

명령어가 있다.


그럼 npm 명령어로 package.json 파일을 만들어보자. 명령어는 아래와같다.


  

[user@server home/mingcho/node_test] # npm init



위와 같이 명령어를 입력하면..



[user@server home/mingcho/node_test] # npm init


This utility will walk you through creating a package.json file.

It only covers the most common items, and tries to guess sensible defaults.


See `npm help json` for definitive documentation on these fields

and exactly what they do.


Use `npm install <pkg> --save` afterwards to install a package and

save it as a dependency in the package.json file.  


Press ^C at any time to quit.

name: (node)      //패키지명. 엔터를 치면 괄호안의 이름으로 등록된다.

version: (1.0.0)            //엔터

description: node test     

//해당 프로젝트에 대한 설명. 안써도 상관은 없지만 안쓰면 우리를 귀찮게 하는일이 발생한다고..!

entry point: (hellow.js)  //우리의 패키지를 구동시키는 자바스크립트이다.

생략가능하지만 없지만 추후에 프로젝트가 복잡해진다면 이 항목을 정의하도록하자!

test command:              //추가로 실행할 스크립트 명령어를 정의하는거라는데 아직잘모르겟으니 Pass

git repository:              //git 저장소 URL. 이것도 Pass

keywords:                     //npm search 명령으로 패키지를 찾을 수 있도록 도와주는 키워드. Pass

author:                         //프로젝트 작성자이름.Pass

license: (ISC)               //프로젝트 라이센스.Pass

Is this ok? (yes)          //엔터!



이렇게 만들면 현재 경로 아래 package.json 이라는 파일이 하나 생겼다.

이제 폴더에 package.json 파일만 넣고 npm install 명령어를 치면 package.json 파일에 있는 dependencies와 

devDependencies에 있는 모듈을 자동으로 탐색하여 설치해 줄 것이다.


다른 임의의 프로젝트를 하나 더 생성한 후 package.json 파일을 옮겨보자.


  

[user@server home/mingcho] # cp ./node_test/package.json ./node_test2/package.json



새로생성한 프로젝트에 package.json 파일이 생성되었다면 package.json 파일이 생성된 폴더에서 

npm install 명령어를 치면 내가 dependencies에 등록했던 모듈들이 자동으로 설치되는 것을 볼 수 있다.


이렇게 package.json 파일을 만들었으면 이제 내가 사용할 모듈들의 의존성 관리를 할 수 있다.

그런데 모듈들을 설치할 때마다 package.json 에 따로 등록해주는 일은 귀찮은 일이다.

이때 모듈을 설치할 때 마다 package.json에 자동으로 등록해 주는 옵션이 있다.


먼저, 옵션을 쓰지 않고 모듈을 설치 해보자.


  

[user@server home/mingcho/node_test] #  npm install uglifyjs

├── uglifyjs@2.4.10  extraneous



그럼 아래와같이 extraneous 라고 뜬다. (extraneous: 이물질, 외부의, 부가적인)

이 경우에는 모듈이 설치는 되지만, package.json 에는 등록이 되지 않는다. 

일시적으로 현재 프로젝트에서만 단발성으로 사용할 모듈은 이렇게 설치해 주면 될 것 같다.


그럼 --save 옵션을 사용하여 설치해보자.


  

[user@server home/mingcho/node_test] #  npm install uglifyjs --save



이 경우 extraneous 가 뜨지않는다. 이후 package.json 파일을 확인해보면

아래와 같이 등록이 된 것을 확인 할 수 있다.



  "dependencies": {

    "uglifyjs": "^2.4.10",

    "underscore": "^1.8.3"

  }




[참고] npm update 로 모듈의 버전들을 업데이트 할 때 package.json 에 내가 업데이트 하고싶은 버전의 범위를 지정해 놓을 수도있다. 



* 이 포스트는 "생활코딩 egoing님의 node강좌" 를 보고 정리하는 개인적인 포스트입니다.



[참고/출처]

https://opentutorials.org/course/2136/11854


underscore 모듈은 100가지 이상의 유용한 함수들을 제공하는 편리한 모듈입니다.

www.npmjs.com 에서 underscore를 검색해서 들어가면 underscore의 홈페이지가 나옵니다. underscore 라이브문서

위 홈페이지에서 underscore의 유용한 함수들의 사용법을 볼 수 있습니다.


홈페이지에서 installation 항목을 보면 플랫폼별 설치법이 나와있다. 

나는 node를 공부중이니 npm으로 설치를 한다.


  

[user@server home/mingcho/node_test] # npm install underscore



(이렇게 underscore 모듈을 로컬설치를 했는데 window에서는 현재경로 안에 잘 설치가됐는데 

linux 환경에서 설치하니 프로젝트 하위경로가 아닌 최상위 /home 폴더 아래 모듈이 자꾸 설치가 된다.ㅠㅠ

찾아보니 가끔 이런경우가 있다고 한다. 이럴경우에는 현재 경로 안에 node_modules 라는 폴더를 하나 만들어 주면된다고 한다. 만들어주니 현재경로 안에 로컬설치로 잘들어간다.ㅎㅎ 해결!!)


설치가 다 됐으니 사용해보도록 하장!

underscore.js 파일을 하나 만들어서 간단한 기능들을 사용해 보기로한당.



이와 같이 테스트 해보았다.

직접 스크립트 함수를 이용해 배열의 마지막값을 구한 것 보다 훨씬 가독성이 있다.

underscore 의 다른 다양한 함수들은 다음기회에 다시한번 사용해보고 쓸만한 기능이 많다면 다시한번 포스팅하는걸로!!




+ Recent posts

티스토리 툴바