반응형

ubuntu가 빠르게 업데이트 되고있지만, apt package manager는 그렇지 못한것 같습니다.

node 버전이 8에 머물러있네요...

 

node버전 문제를 해결하는 방법은 nvm (node version manager)을 사용하는 것입니다.

 

nvm 설치 명령어

sudo curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash

export NVM_DIR="$HOME/.nvm"

[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

nvm install 버전 (ex. nvm install 12.13.0)

위의 명령어를 통해 최신버전의 node, npm 을 설치할 수 있습니다.

 

다만, 프로젝트의 의존성 모듈을 설치하는 중에 경우에따라 Missing write access to ... 와 같은 권한문제를 맞이할 수 있습니다.

 

해결책

프로젝트 폴더의 접근권한을 주는것입다

 

sudo chown -R $USER 폴더경로 및 폴더명

 

어렵지않게 위의 명령어로 깔끔하게 해결가능합니다.

 

 

 

반응형
반응형

Youtube API와 관련된 Nodejs 레퍼런스가 많이 부족한것 같습니다.

Youtube가 현재 대세인 것을 고려하면 너무나 안티까워 간단하게 Youtube api사용법을 공유하려 합니다.

 

* API로 유튜브 영상을 지우기

Youtube.videos.delete를 사용하게되며 영상의 id값만을 parameter로 보내줍니다.

Youtube.videos.delete({ id }, (err, data) => { ...something });

 

이전의 게시물에서 충분히 사전내용을 기록해두었기에 간단히 기록해보았습니다. (이전 게시물에 Youtube API서용법이 상세히 나와있으니 참고하시길 바랍니다..^^)

 

* 다만, 기억할것이 있습니다.

다른 api들과 같이 YoutubeAPI 역시 일일할당 트래픽량이 존재랍니다.

1인당 하루 10000트래픽이 허용되며, 초과시 사용이 더 이상 불가능합니다.

 

영상 업로드 api를 사용하다보면 금방 초과되버립니다 (7~8개쯤 영상업로드 테스트중 초과해버렸네요

..)

list를 가져오는 경우에는 거의 소요되지않지만 업로드 api를 사용해야 한다면,

정말 꼭 필요한 경우에만 쓰도록 하는게 좋을듯 합니다...

 

 

 


웹사이트 개발 / 홈페이지 제작 / android앱 개발 / ios 앱 개발 / server / client / aws / fullstack / buisness partner / 외주 / 용역

https://open.kakao.com/o/sNETgUJb

http://self-made.cloud

 

 

반응형
반응형

Youtube가 정말 핫합니다.

그래서 유튜브를 좀 더 적극적으로 활용하기 위해 Youtube API를 nodejs와 함께 쓰는법에 대해 포스팅을 해보겠습니다.

 

먼저, 목적에 따라 쓰는법이 달라질 수 있으니,

제가 쓰고자 하는 목적에 따라 아래의 가이드를 선택적으로 살펴보세요.

 

Type A: 단순히, 영상 id를 통해 목록 혹은 영상의 정보를 호출하고자 하는경우

Type B: 계정에 영향을 주는 작업, 예를들어 영상업로드나 수정과 같은.

 

* Type A

이 경우에 작업은 매우 간단하다.

GCP 계정을 생선한 다음 credentials에서 web용 api-key를 발급받습니다.

 

영상정보를 호출하고자 하는 경우,

https://www.googleapis.com/youtube/v3/videos

위의 url로 params: { key, id, part } 정보와 함께 get 요청을 하면됩니다.

part의 값으로는 'snippet,contentDetails'와 같은 값이 올 수 있습니다.

https://www.googleapis.com/youtube/v3/videos?key=abcabccom&id=wowow10&part=snippet

 

 

* Type B

이 경우에는 작업이 다소 복잡합니다...

우선, OAuth의 인증 작업을 걸쳐야 합니다.

따라서, 클라이언트와의 연계작업이 불가피하게 들어가게 됩니다. (여기서 말하는 연계작업이란, 클라이언트 사이드에서의 로그인 인증 과정을 말합니다.)

 

아래와 같이 작업해볼까요?.

Nodejs서버에 npm의 youtube-api, dotenv 세개의 라이브러리를 설치합니다. (없어도 구현가능 하지만, 예제에서는 사용하도럭 하겠습니다.)

 

다음, GCP credentials에서 OAuth client를 하나 생성하겠습니다.

이 때, callback url은 자유롭게 설정해도 되나, 예제와 같이하려면 /oauth2callback을 콜백url로 지정하는게 속편하겠죠?.

예를들면, "http://localhost:9000/oauth2callback"

생성한 계정정보를 가지고 앞으로의 작업을 진행할 것입니다.

const OAuth = Youtube.authenticate({
    type: 'oauth',
    client_id: process.env.OAUTH_ID,
    client_secret: process.env.OAUTH_PW,
    redirect_url: 'http://localhost:9000/oauth2callback',
});

 

OAuth를 통해 인증작업을 진행해보도록 하겠습니다..

*** dotenv모듈을 설치하면 .env파일에 저장한 정보들이 환경변수로 지정되며 위와같이 process.env.변수명 으로 불러올 수 있다.

*** 사용을 희망하는 파일에서 require('dotenv').require()와 같이 파일 맨 상단에 불러와주면 된다.

 

const data = { ...뭐시기뭐시기 };

const url = OAuth.generateAuthUrl({
  access_type: 'offline',
  scope: ['https://www.googleapis.com/auth/youtube.upload'],
  state: JSON.stringify(data),
});

return res.redirect(url); or return res.send(url);

 

위 코드에서  data는 클라이언트에서 받아온 정보이거나, 하여튼 무언가 정보가 있을수 있습니다.

(예를들면 영상과 영상정보)

callback에서 해당 정보를 전달받기 위해서는 위와 같이 state에 값을 string형태로 저장해 보내주면 됩니다.

아마 작업을 하시다보면 꼭 필요한 부분일것입니다. 잘 응용하시길 바랍니다.

 

이제, callback을 받아볼까요?

app.get('/oauth2callback', async (req, res) => {
    let { code, state } = req.query;
    state = JSON.parse(state);

    OAuth.getToken(code, (err, tokens) => {
        OAuth.setCredentials(tokens); //신뢰할 수 있는 사이트 지정

        const config = {
            part: 'snippet,status',
            resource: {
                snippet: {
                    title: state.title} 아이디어 발표영상,
                    description: state.description,
                    tags: ['유튜브api', '테스트'],
                },
                status: {
                    privacyStatus: 'public', // public, unlisted, private
                },
            },
            media: {
                body: state.media, // media
            },
        };
 

        Youtube.videos.insert(config, (err, data) => {
            if (err) return res.status(500).send('failed');
            else return res.status(200).send('success');
        });
    });
});

 

여기서 media파일이 중요합니다.

위의 경우에는 s3에 저장된 영상을 getObejct하여 바로 createReadStream() 처리해 받아온 경우이기 때문에 바로 사용할 수 있었습니다.

 

만약, 서버에 저장된 영상파일을 올려야한다면,

fs.createReadStream(media)와 같이 처리해야합니다.

 

 

 


웹사이트 개발 / 홈페이지 제작 / android앱 개발 / ios 앱 개발 / server / client / aws / fullstack / buisness partner / 외주 / 용역

https://open.kakao.com/o/sNETgUJb

http://self-made.cloud

 

 

반응형
반응형

javascript에 익숙하다면 nodejs에서도 import/export를 쓸수는 없을까? 하고 생각해보셨을겁니다.

가능합니다.

 

가볍게 따라해보도롣 하겠습니다.

1. esm 라이브러리를 설치한다.

 

2. index.js, main.js로 파일구성을한다.

main은 주요 실행파일, index는 진입 파일이다.

 

3. index.js를 다음과 같이 작성한다.

require = require("esm")(module /*, options*/);

module.exports = require("./main.js");

 

 

 


웹사이트 개발 / 홈페이지 제작 / android앱 개발 / ios 앱 개발 / server / client / aws / fullstack / buisness partner / 외주 / 용역

https://open.kakao.com/o/sNETgUJb

http://self-made.cloud

 

 

 

반응형
반응형

정말 귀찮아서 포스팅 안하려고했는데


저 처럼 쓸데없이 시간을 보낼지도 모르는 여러분을위해 포스팅합니다.


내용은 cafe24 node.js호스팅의 및 push, 실행까지 모든내용입니다.


캡쳐는 귀찮아서 생략합니다.


text로 자세히 설명하겠습니다.


[ 2019. 01 .23 - 포스팅 이용자가 많아 글을 업데이트 하였습니다. ]


1. cafe24 회원가입

https://www.cafe24.com/




2. cafe24 로그인

계정이 없다면 회원가입을 하도록 하자

https://user.cafe24.com/join/hosting/




3. cafe24 node.js 호스팅 신청하기

호스팅시에 등록하는 아이디 패스워드 ftp암호 등은 잘적어두자.

FTP접속을 위해서는 서버의 주소가 필요하다. 

하지만, 필자가 이용할때 기준으로 nodejs호스팅은 서버IP를 별도로 표기해두지 않았다.

tip을 주자면 고객센터에 타당한 이유를 제시하며 IP를 알려달라고하면 알려준다.




4. 로컬환경에 git 및 source tree설치

개발자라면 대부분 설치되어 있겠지만 혹시 없다면 설치하자.

https://git-scm.com/downloads


git을 다루는데 능숙하다면 Source tree는 필요 없을수 있다.

아니라면 설치하도록 하자.

https://www.sourcetreeapp.com/





5. 로컬환경에 node.js설치

windows 이용자라면 아래의 링크에서 설치할 수 있다.

https://nodejs.org/ko/


linux 계열의 os 이용자라면 아래의 링크를 참고하자.

https://github.com/nodesource/distributions/blob/master/README.md

위의 링크는 설치 가이드라인이다.




6. express-generator

이는 필수는 아니며 본 예제에서 사용할 nodejs with express 개발환경이다.

간단히, 웹서버를 만들어 올리는것도 상관없다.


아주 간단히 웹서버를 생성해 nodejs 호스팅을 테스트해보고자 한다면 아래의 코드를 복붙하고 아래 단계들을 뛰어넘도록 하자.

(9번으로 이동)


express 정도는 설치해주자.

[ npm install express ] 


const express= require('express');
const app = express();
app.listen(8001, () => {
console.log('server is runnin on port 3000');
});



다시 본론으로 들어와 express-generator를 이용해보자.


터미널(명령프롬프트, git-bash, power shell 등)을 아무거나 킨다.

express와 express-generator를 전역으로 설치해준다.


[ npm install -g express express-generator ]


express-generator를 통해 기초적인 환경을 한번에 세팅해버리자. 

view template으로로써 pug(jade의 최신버전)를 지정합니다.


[ express abc-view==pug ]

여기서 abc는 폴더명(프로젝트명)이 됩니다. 아무거나 해주세요.




7. 프로젝트 구조조정

생성된 프로젝트를 조금 손봐야한다. 잘 확인해두도록 하자.

아직까지도 왜이런 현상이 발생했는지는 의문이다.

다만, 나는 오랜시간 삽질을 했기에 그런일을 하는건 나만으로 끝냈으면 싶다.


express-generator로 프로젝트를 생성했다면 bin폴더 아래의 www가 보일것이다..

해당파일에서 var port = normalizePort(8001); 다음과 같이 포트를 잡아주세요.

개인별로 할당받은 포트는 다를수있으니 한번 확인해보도록 하자. 

cafe24 나의 서비스현황>앱생성관리에서 볼 수 있다.


www의 파일명을 web.js으로 바꿔준다. 

이것은 cafe24가 기본 서버실행파일을 web.js만 인식하기에 불가피한 부분이다.


이름을 바꿧다면 bin폴더 밖으로 파일을 꺼낸다. 즉 ,루트디렉토리 바로 아래로 위치를 바꾸란 얘기다.

쓸데없는 bin폴더는 지워버리자.

pakage.json에서 start 부분을 node ./web.js로 바꿔준다.


이런 번거로운 수고를 하는이유는 호스팅서버에서 bin/www.js를 인식하지 못하여 자꾸 에러를 반환했기 때문이다.

삽질끝에 이러한 방법으로 해결을 하였다.




8. View template 설정 재확인

터미널에서 npm install을 한번 해주자. package.json에 정의되어있는 의존성 모듈들을 업데이트 및 설치할 수 있다.

혹시 generator를 쓸때 pug가 아니라 jade가 설치되었다면 pug를 설치해주자. (npm install pug)

이유는 없다. 필자 마음이다.


필요없어진 jade는 지워준다. (npm uninstall jade)

view폴더의 .jade는 모두 .pug로 확장자도 바꿔주자.

마지막으로 template설정을 한다.

app.js에서 app.set('view engine', 'pug'); 으로 변경




9. Public Key 발급

cafe의 Nodejs호스팅을 이용하기 위해서는 Public Key가 필요하다.

터미널에서 ssh key-gen 명령어를 입력하자.

입력표시가 나오면 처음에는 그냥 enter!

다음 입력표시가나오면 비밀번호를 설정하는것이니 잘 기록해두도록 하자. 연필로.


다음 입력표시는 비밀번호 확인창이니 다시 같은 비밀번호를 입력.

생성된 Public Key는 윈도우 기준으로 C:\Users\사용자\.ssh 경로에 있다.

텍스트편집기를 통해 id_rsa.pub의 모든 내용을 복사해둔다.




10. Cafe24의 Nodejs 호스팅에 Public Key 등록하기

Nodejs호스팅 내 서비스의 Public-Key관리에서 입력란에 복사한 놈을 붙여넣어주고 key이름으로 적절한 네이밍을 해준다.

저장하고 앱생성관리로 이동.

앱생성관리에서 해당 프로젝트에 키를 부여합니다.





11. 대망의 소스코드 업로드 차례

소스트리를 켜고 New tab > create

아까전에 생성된 프로젝트를 지정


상단 제목표시줄에서 저장소 > 저장소설정으로 이동

cafe24의 앱생성관리에서 [저장소]부분을 쭉 복사해다가 저장소설정에 붙여넣어준다. 

'git '여기 부분은 뺴고


이름은 대충 origin정도로 붙여서 저장

상단 제목표시줄에서 도구 > ssh-key추가에서 C:\Users\사용자\.ssh 경로의 id_rsa (.pub 아님, 주의)를 추가한다.

도구 > 옵션에서 ssh클라이언트가 opensssh로 되어있어야한다. 주의하세요.


이 때 주의할점이 있다. 우리가 git으로 프로젝트를 관리할 떄, .gitignore를 통해 node_modules를 빼고 업로드 하곤 한다.

하지만, Nodejs호스팅을 이용할때는 그러면 안된다. (필자가 확인한 바로는)

이유는 SSH접속을 통해 npm install과 같은 명령어로 서버에서 직접 의존성모듈을 설치하는것이 불가능하기 때문이다.

SSH접속이 되는지 안되는지는 불확실하니, 고객센터를 통해 확인하자.

따라서, node_modules도 함께 아래의 단계를 진행하자.




12. 커밋 + push

프로젝트의 모든 내용을 커밋하자. 메시지로는 initial commit정도가 적당할 것으로 생각된다.

됐다면 Push.

이 때, 시간이 상당히 소요된다. node_modules의 모듈들을 같이 업로드해버리는 엄청난 행위를 하기 때문이다.




13. 호스팅서버 재실행

cafe24로 이동하여 실행할 차례이다. 

혹시 서비스를 실행중이셨다면 중지 후 재실행 하고, 아니라면 바로 실행해준다.





14. 지정된 도메인을 통해 접속

Cafe24의 지정도메인 말고 자신의 도메인을 등록하고 싶다면 서버의 IP를 알아야한다.

그때는 Cafe24 고객센터에 문의하여 자신의 호스팅서버 IP를 알아내어 등록하도록 하자.





짜짠


잘되죠? 안되면 제 손에 장을지지겠습니다. 연락주세요. 삽질 정말 많이했습니다.






반응형