반응형

1. SVN Server와 SVN Client의 소스 동기화
이클립스 프로젝트에서 마우스 우클릭 후 Team > Synchronize with Repository

2. Synchronize 탭에서 보여지는 아이콘 의미

 
local에서는 수정되지 않았고, 서버에서만 수정된 파일로 Update하면 local이 수정됨


local에서만 수정하고, 서버에서는 수정되지 않은 파일로 Commit하면 서버가 수정됨


local에서도 수정되었고, 서버에서도 수정된 파일이므로 어디가 최신인지 확인해서 Update 또는 Commit을 해야 함


3. 로컬 소스를 서버로 Commit 또는 서버 소스를 로컬로 Update 하기

Commit : 서버로 내 로컬 소스를 올리는 작업으로 보통 작업 전에 Syncronize를 먼저해 본 후 본인이 작업하는 동안 다른 작업자가 작업을 해서 반영했는지 확인을 해야 충돌이 발생하지 않음

Update : 서버의 소스를 로컬로 옮기는 작업

Override and Update는 SVN 서버의 소스를 내 로컬 소스로 overwrite (SVN소스가 오리지널)
Override and commit는 내 로컬 소스를 SVN으로 overwrite (내소스가 오리지널)
요 두개는 일전에도 다루었었음
https://hippalus.tistory.com/621


















 

eclipse에서 SVN: Override and Update, Override and Commit

SVN으로 형상관리시 수정된 또는 수정할 소스를 충돌현상이 발생할 경우 먼저 대상 소스를 마우스 우클릭 Team > Synchronize with Repository 선택 update or commit시 충돌인 conflict가 발생하게 된다. 이때 Over

hippalus.tistory.com

 

반응형
Posted by Hippalus
,

반응형

ulimit -a 명령어를 실행해보면 아래와 같이 나타남

여기서 주의깊게 봐야 하는 정보는 file size로 소켓이 최대 접속 가능한 개수를 나타난다.
보통 1024개가 기본 설정인데 어지간한 소켓 서버라면 1024로는 턱없이 부족할터
 
파일 오픈 개수를 늘려야 한다.

root 권한으로 접속하여 /etc/security/limits.conf 열어서 아래처럼 수정하면 된다.

vi /etc/security/limits.conf
* soft nofile 400000
* hard nofile 400000

저장 후 터미널을 새로 로그인 하여 ulimit -a 명령어를 실행해보면 지정한 대로 접속 개수가 증가되어 있음을 확인할 수 있고 client socket의 connection역시 성공적으로 연결됨을 확인할 수 있을 것이다.

반응형
Posted by Hippalus
,

반응형

일전에 cent os에 node.js 설치하기 글을 작성한적 있다.
https://hippalus.tistory.com/607

 

cent os에 node.js 설치하기

linux cent os에 node.js를 설치하기 위해선 yum을 이용하여야 한다. root권한이 있는 계정으로 접속한 후 yum repolist를 실행해보면 아래 스샷처럼 보통 초기엔 epel이란게 없기 마련이다. EPEL 저장소가 없

hippalus.tistory.com


이 방법 말고 더 나은 방법으로 linux에서 node.js를 설치하고자 한다.

먼저 node.js 홈페이지의 다운로드로 이동한다.
https://nodejs.org/en/download

 

Node.js — Download

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

여기서 Linux Binaries가 두 버전이 있는데 일반적이면 x64를 설치하면 된다.
x64: 대부분의 데스크톱 및 서버 시스템에서 사용된다. 일반적으로 인텔 또는 AMD의 64비트 아키텍처를 사용하는 시스템에 적합.
ARM: ARM 아키텍처를 사용하는 시스템에 대한 바이너리로 Raspberry Pi와 같은 임베디드 장치나 ARM 기반의 서버에 설치할 때 적합.

위 화면에서 64-bit의 링크를 마우스 우측으로 눌러 링크 주소 복사하기를 눌러 복사 한다.

복사해보면 2024년 2월 현재 다운로드 주소는 다음과 같다.
https://nodejs.org/dist/v20.11.1/node-v20.11.1-linux-x64.tar.xz

이제 리눅스로 접속 후 su명령어로 관리자 권한으로 진행한다.

노드가 설치될 폴더를 생성 후 해당 폴더로 이동한다.
cd /opt
mkdir nodejs
cd nodejs

앞서 복사했던 주소로 다운로드를 실행한다.
wget https://nodejs.org/dist/v20.11.1/node-v20.11.1-linux-x64.tar.xz

이제 다운로드 된 압축을 푼다.
파일명은 ls명령어로 확인하여 각자 맞는 파일명을 적어주면 된다.
다시 말하지만 파일명 등은 2024년 2월 현재 시점의 파일명이다.
xz -d node-v20.11.1-linux-x64.tar.xz
tar xf node-v20.11.1-linux-x64.tar

심볼릭 링크를 생성한다.
ln -s /opt/nodejs/node-v20.11.1-linux-x64 /opt/nodejs/node
ln 명령어는 심볼릭 링크를 생성하는 명령어로 -s 옵션은 심볼릭 링크를 생성하라는 것을 나타낸다.
그 뒤에는 실제 파일이나 디렉토리의 경로를 지정하고, 마지막에는 생성될 링크의 경로를 지정한다.

/opt/nodejs/node-v20.11.1-linux-x64 경로에 있는 디렉토리를 가리키는 심볼릭 링크를 /opt/nodejs/node라는 이름으로 생성하게 된다.
이렇게 하면 /opt/nodejs/node라는 경로로 접근하면 실제로 /opt/nodejs/node-v20.11.1-linux-x64에 있는 내용을 볼 수 있게 되므로 이는 더 간단하고 직관적인 경로로 Node.js를 사용할 수 있도록 도와준다.

끝으로 환경 변수에 등록해 준다.
vim ~/.bashrc

제일 마지막 라인에 아래 라인을 추가 한다.
export PATH="$PATH:/opt/nodejs/node/bin"

저장 하고 나온 후 추가한 내용을 즉시 적용시킨다.
source ~/.bashrc

이제 아무 디렉토리에 가서 node -v를 실행해보면 현재 설치된 node의 버전이 확인 될 것이다.

반응형
Posted by Hippalus
,

반응형

본 리뷰는 시즌 C 경험을 토대로 작성되어 있음
시즌은 A,B,C,D 총 4단계로 구성되어 있으며 A에 가까울수록 티켓 가격도 저렴하고 사람도 상대적으로 없다.

 

급한분들을 위한 슈퍼닌텐도월드 마리오카트 쿠파의 도전장 탑승 성공 공식 간단정리

1. 얼리파크인 티켓 구매
장점 : 파크 개장 시간 기준 15분 먼저 입장하는 시스템이므로 가장 확실하고 쉽고 돈도 적게 든다. 내가 가려는 날짜에 보이면 무조건 사야 한다.
단점 : 구하기가 어렵다. 티켓 자체가 조기 품절되므로 원하는 날짜에 가려면 한달 전 또는 그 이전부터 구매 해야 한다.

2. 유니버셜 익스프레스 패스 4를 리미티드, 리미티드 & 펀, 버라이어티 라이드 중 택 1 하여 구매
장점 : 아침 일찍 방문하지 않아도 되며, 지정된 어트랙션을 다이렉트로 이용 가능하므로 시간 절약에서 월등하다.
단점 : 비싸다. 입장권을 별도로 구매해야 하며, 얼리파크인 보다는 양호하지만 마찬가지로 조기 품절 되므로 그 이전부터 구매를 해야 한다.

3. 몸으로 떼우는 오픈런
장점 : 저렴하다. 입장권만 사서 7시까지 USJ 게이트로 가서 입장하자마자 앱에서 가장 빠른 8시 정리권을 발부 받아 이용하면 된다.
단점 : 아침 일찍 부터 부지런히 움직여야 하고 30분 정도 게이트에서 기다려야 하며 자칫 정리권을 발부 받지 못하면 낭패 패닉에 빠질 수 있다.


입장권은 공식 판매처에서 구매하길 바란다.
https://www.usj.co.jp/web/ko/kr/travel

 

상세한 설명 스따또


USJ를 입장하기 위해선 당연히 입장권을 구매해야 한다.
하지만 사악한 USJ의 슈퍼닌텐도월드는 입장권이 있다하여도 워낙 인기가 많아 입장 가능 인원수를 통제하기 때문에 조금이라도 늦게 들어가면 선착순 마감이 되어 버린다.
하여 몇 만원을 더 주고 다른 입장객보다 15분 먼저 입장 가능한 "얼리파크인"이란 USJ 입장권 티켓을 구매하면 남들보다 먼저 입장이 가능하므로 무조건 슈퍼닌텐도월드의 입장은 물론이고 쿠파의 도전장 탑승물도 거의 기다리지 않고 이용 가능하다.

그런데 이 얼리파크인이란 입장권은 매리트가 매우 쓰바라시하기에 너도 나도 얘도 쟤도 사려드니 구하기가 쉽지 않다.
보통 한달 전에 모두 매진되어버린다.

그럼 다른 방법은 돈을 더 들이는 방법인데 바로 확약권이란게 포함되어 있는 유니버셜 익스프레스 패스 4를 리미티드, 리미티드 & 펀, 버라이어티 라이드 중 택 1 하여 구매하면 된다.
이 티켓은 정말 사악한게 가격도 비싼데 장권이 별도다.
게다가 얼리파크인 보다는 양호하지만 마찬가지로 조기 품절된다.
사람 심리가 다 똑같으니 이런 현상은 당연하다.

뭐 좋다. 어찌됐든 사면 그만이니.
하지만 직장 다니는 사람들이 자기 여행일자를 한달도 훨씬 전에 휴가 기안 내고 승인 받고 그러다 문제 생기면 휴가 취소 되면?
어렵게 구매한 저 비싼 익스프레스 패스는 취소도 안된다.

그럼 마지막 최후의 수단은 무엇인가?
바로 정리권이다.
정리권이란 그때 그때 (보통 1시간마다인것 같았다.) 슈퍼닌텐도월드에 입장객이 빠져나가면 또 사람이 들어올 수 있으니 즉 자리가 정리되었으므로 새로운 손님이 들어 올 수 있으므로 문을 열어주는 것이 바로 정리권이다.
이 정리권은 입장할 때 등록한 입장권을 USJ앱에 등록하고 정리권 발급 메뉴에서 신청하는 구조로 파크에 입장한 모두가 목을 메는 입장권이므로 발급 받기가 매우 어렵다.

안다. 당신은 지금 뭐 이런 괴상망측한 제도와 혼란스러운 용어에 어지럼증을 느끼고 있다란것을.
처음 정리권이란 용어를 접했을 땐 도무지 이 괴상한 용어에 대해 혼란이 컸는데 한 번 경험해보니 이젠 익숙한 용어가 되었다.

정리하자면 닌텐도월드에 입장 가능한 추가 입장권은 두 종류가 있는데 하나는 확약권, 다른 하나는 정리권
확약권이란 사전에 "너님은 몇시에 입장 가능하세요"라고 USJ측에서 발권한 슈퍼닌텐도월드의 입장권이고 익스프레스라는 별도 요금을 지불하여 구매가 가능한 티켓이고
정리권이란 "자리가 났으니 올 사람 오세요"라며 앱에서 발행하는 실시간 선착순 입장권이다.

따라서 가장 추천하는 방법은 오픈런이다.
슈퍼닌텐도월드 정리권 = 오픈런 이라고 외우면 쉽다.

일단 오픈런을 성공하려면 7시까진 입장게이트에 도착해 있어야 한다.
아래 좌측 사진은 USJ역에서 빠져나올 때의 모습이고, 우측은 7시의 입장게이트의 모습이다.

지하철에서 내렸을 당시의 플랫폼 상황 영상도 첨부한다.

오픈런을 하여 7시까지 파크 게이트에 다다랐다면 7시 20분 전후로 입장이 가능하고 입장하자 마자 앱에서 정리권을 발부 받으면 슈퍼닌텐도월드에 입장할 수 있다.
(참고-유니버셜 스튜디오재팬의 개장 시간은 그날 그날 다르기 때문에 앱으로 확인하길 바란다.)
참고로 7시 30분 정도 까지는 슈퍼닌텐도월드는 그냥 들어갈 수 있었기에 정리권 메뉴로 발급 받을 수 없었고 35분쯤 되니 그때부터 발급이 진행되었다.



초등 저학년과 오픈런 해봤는데 결코 힘들지 않았다.
입장 후 슈퍼닌텐도월드로 향하는 사람들의 영상인데 유튜브 등에서 보여주는 영상처럼 치열하거나 그런 상황은 아니었다.
어쩌면 귀멸의 칼날 때문에 분산되어 상대적으로 수월했을지도 모른다.
USJ 오픈런 관련 유튜브 영상만 봤을 땐 "와... 이거 빡세게 뛰어야 하는데 그 먼 거리까지 어떻게 뛰지?" 싶었지만 절대 아니다.
너무 겁먹지 말자.

걷기와 살짝 뛰기를 반복하며 가다보면 아까 말했듯이 정리권이 발부되는 시점이 생긴다.
가면서 앱에서 정리권 발부 화면을 계속 새로고침 해야 한다.
난 8시 정리권이 있길래 냉큼 받았다.
정리권 발급도 원하는 시간을 10분 단위로 선택 가능한데 시간을 선택하지 말고 그냥 가장 빠른 시간대를 자동으로 선택 버튼을 통해 아무거나 빠른걸 선택하는걸 추천한다.
괜히 분까지 고르다 놓친다.

그렇게 정리권을 발급 받았다면 해당 시간에 맞춰 닌텐도월드로 이동하면 딱 저 지점에서 직원이 정리권 확인 후 안으로 들여보내준다.


그럼 이런 환상적인 게임세계 보상이 오픈런 용사님에게 보상으로 지급된다.


이게 끝이다?
아니다. 이제 절반 왔다.
저따위 풍경은 나중에 천천히 감상해도 늦지 않는다.
영상을 봐라 저게 어떻게 아침시간 영상이겠는가?
곧바로 쿠파성으로 뛰어야 한다.
그래야 이번 방문의 최종 목적인 마리오카트 탑승이 가능하기 때문이다.
정말 최종 보스 답다. 쿠파

보이는가? 저 줄의 행렬을
그나마 이건 오픈런해서 30분 정도 기다리면 탑승 할 수 있었다.
나중되면 이 줄의 두배 세배 네배 꼬불꼬불 구불구불 이어질 것이다.
얼리파크인 티켓을 구매했다면 10분 정도면 탑승 할 수 있었을 것이다.
그래도 중간 중간 슈퍼마리오로 꾸며져 있어서 크게 지루하진 않았다만 이거 하나 타겠다고 지하에서 120분씩 기다려야 한다면 현타 강하게 올 것 같다.
그정도로 기다리며 탈만한 어트랙션은 아니었다.
30분 정도 기다려서는 반드시 타야만 하는 어트랙션이긴 하다.

허니팁
팁1 : 입장권 구매처
입장 티켓 가격이 같은 공식 판매처라고 다 같은 가격에 팔지 않았다.
특정 업체는 다른 곳들과 달리 비싸다.

상품 소개와 구매 인터페이스가 편리한건 klook인것 같은데 난 투어비스에서 구매했다.
가격 등을 비교해서 구매하길 바란다.

팁2 : 입장권 출력 이유
입장권은 반드시 출력해서 가야 한다.
안일한 마음에 캡쳐해서 폰으로 보여주면 되겠지라는 생각은 입장의 지연의 빌미를 제공한다.
게이트에서 전용 리더기로 읽어야 가능한데 종이가 아니면  읽히질 않는다.
또한 USJ 앱에 입장권을 등록해야 하는데 이 역시 이미지로는 불가하다. 인식 절대 안된다.
외워라 입장은 출력(프린트다)

만약 출력을 못했다면 편의점에서도 출력서비스가 된다.
프린트 방법은 조만간 다루겠다. 개빡친다.

팁3 : 파워업밴드는 반드시 사든지 빌리든지 하자.
파워업밴드가 없으면 닌텐도월드를 절반밖에 즐길 수 없다.
파워업밴드는 곳곳에 팔고 있으니 사람 많은곳에서 사지 말자. 시간 아깝다.
당근마켓에선 3만원 ~ 3만 5천원 정도에 팔던데 솔직히 양심 없는 사람들 같다.
4,800엔이면 요즘 환율로 42,500원 정도다.
지들 놀거 다 놀고 세금 환급까지 받아놓구선 그걸 저 가격에 판다니 ㅡㅡ
대여도 가능한데 난 그냥 두 개 샀다.

팁4 : 닌텐도월드내 유일한 레스토랑 키노피오 줄서기

키노피오레스토랑은 2팀으로 나누어 1팀은 관람을 1명은 줄을 서자.
10시 30분쯤 줄서야 12시에 밥 먹을 수 있다.
요것도 나중에 다루겠다.
키노피오 레스토랑의 입구인 요기까지는 혼자 줄을 설 수 있다.

팁5 : 스타팝콘
스타모양 팝콘도 파는데 개비싸고 사려면 20분은 넘게 기다려야 한다.
직원이 동작되는지 확인하고 일일이 설명하기 때문이다.
사려면 각오해야 한다.

팁6 : 퇴장 동선에 위치한 워터월드 즐기기

닌텐도월드에서 퇴장할 땐 시간을 잘 맞춰 퇴장하면 동선에 있는 워터월드 관람이 가능하니 워터월드 관람 시간을 미리 확인하고 가면 좋다.
난 우연하게 시간이 맞아서 어떨결에 관람했다.

팁7 : 텍스리펀
기념품 영수증은 버리지 말자.
세금 환급을 받을 수 있는데 게이트쪽 왼편에 위치해 있는데 다들 퇴장할 때 가면 자칫 줄이 너무 길어 환급 받느라 시간 낭비할 수 있으니 가급적 미리 받는걸 추천한다.
참고로 난 3시 30분쯤에 받았는데 5분 정도 걸려 받았다.
모자, 파워업 밴드 같은 기념품이 대상이다.(먹는건 제외)
비닐로 밀봉해서 돌려준다.

팁8 : 직원에게 거절하라
닌텐도월드내 어떤 게임은 4명이서 할 수 있는데 일행이 2명이면 2명이서 하겠다고 해라.
우리팀은 괜히 얼라들과 4인 배정되어 했다가 기다린 보람도 없이 게임 실패하고 열쇠도 못 얻었다.
(열쇠 3개를 모아야 최종 게임에 도전할 자격이 주어진다.)

팁9 : 한국어 가능한 직원
한국어 가능 직원이 있긴 한데 게임룰에 대해 물어봤다가 낭패를 봤다.
내 파워업밴드에 열쇠 2개, 다른 사람 파워업밴드에 열쇠 1개가 있는 상황인데 이걸 합쳐서 최종 보스에게 도전 가능하냐 물었더니 된다하여 최종 보스 구역으로 이동하여 보여주니 뺀찌 맞았다. -_-
일본인은 몰라도 아는척 한다고 80년대 선생님이 그러셨는데...

팁10 : 입장권 유효기간
입장권은 지정 당일이 아닌 지정일로부터 수개월간 유효하다.
그 지정한 날짜의 시즌에만 맞다면 해당 기간내 입장이 가능하다.

팁11 : 날씨

내 경험상 웨더뉴스가 아큐웨더나 웨더채널에 비해 잘 맞았다.
검색한게 맞다면 웨더뉴스만 일본쪽 서비스인걸로 알고 있다.
닌텐도월드 방문하는 이유가 이 파란 하늘 때문인데 비오면 속상하다.

팁12 : 외부음식물
물이나 패트병에 든 음료는 인당 1개씩 500ml에 한해 가능하다던데 주머니에 있는건 검사 안한다.
가뜩이나 사람 많은데 식당은 줄을 서야 하고 애는 배고프다고 하면 멘붕 온다.
USJ측이 고객을 배려하지 않으니 각자도생급 식량은 주머니에 넣고 가자.
먹고 살아야 하지 않겠는가?

반응형
Posted by Hippalus
,

반응형

자바 진영은 정말 볼때마다 개발자, 기획자들이 작심하고 딴지 거는 느낌을 갖도록 만든 툴의 요소가 한두개가 아니다.
M$가 정말이지 볼수록 혜자임

토드도 가뜩이나 불편한데(계속 시간 지나면 session이 지멋대로 끊기질 않나) 기본 에디터에 주석을 입력하면 아주 그냥 상콤하게 가독성을 망가뜨려준다.
가독성 뿐만 아니라 커서가 도대체 어디에 위치해 있는지 조차 알 수 없게 만들어 편집 자체를 방해한다.

이렇게


이딴건 바퀴벌레 없애듯 그때 그때 발견 즉시 없애야 한다.
에디터에서 빈땅 클릭하고 마우스 우측 눌러 맨 아래쪽 보면 Editor Options... 메뉴를 눌러준다.
뭔노무 메뉴는 또 이리 많은지

나온 메뉴에서 좌측 트리에 보면 Editor가 있다.
그 안에서 Behavior 클릭

우측 하단 Languages의 ... 클릭


하.. 이제 슬슬 딥빡침이 밀려온다. 
거기서 Highlighting탭을 눌러 Comment를 누르고 중앙에 Font style의 Italic에 체크를 풀어준다.


이제서야 비정상의 정상화가 되었다.

툴을 만들어 판매하려면 여러 기능이 들어가는건 좋지만 애시당초 이용자들이 불편함을 느끼지 않게 배려함이 백만번 맞거늘 변태들도 아니고 -_-

 

추가로 사용하다보니 하.. 진짜 가지가지도 이런 야물찬 가지가 또 있을까
이번엔 줄이 너무 길면 HOME 키를 눌러도 맨 앞으로 커서가 이동하지 않는게 확인되었다.
마찬가지로 Options까지 온 다음 Editor의 Behavior의 Word wrap를 체크해주면 

이렇게 짧아진다.

그런데 짧아도 너무 짧다.
Editor < Display로 이동해서 Gutter and Margin의 Position이 80자로 되어 있는걸 자기 컴에 맞게 설정하면 된다.

반응형
Posted by Hippalus
,

반응형

pm2란?
pm2는 Node.js 애플리케이션을 관리하기 위한 프로세스 매니저로 애플리케이션을 백그라운드에서 실행하고, 자동으로 재시작하며, 여러 가지 기능을 제공한다.

설치와 실행
npm install pm2 -g를 실행하면 설치가 가능하다.
반드시 -g로 전역설치를 해야만 한다.
안그러면 command not found오류를 만나게 될 것이야~

기본 실행방법은 아래와 같다.
(참고로 내 node.js 푸시 서버 이름은 pushServer.js다.)

시작
pm2 start pushServer.js

중지
pm2 stop pushServer.js

만약 실행중인 프로그램을 또 실행하려 들면 기특하게도 이런 오류를 내뱉어준다.

pm2를 사용하는 이유는 로그아웃을 해도 pm2로 돌리면 나중에 관리가 되기 때문이다.



자동 재실행
여기가진 좋다.
그.런.데 
내가 만든 푸시 서버 node.js는 node-cron을 사용하여 1분마다 체크 로직이 들어있는데 이상한게 계속 메모리 점유율이 올라갔다. 59M .. 60M .. 71M ...
의심가는 로직을 주석처리 해보고 별짓 다 해봐도 아무리 용을 써도 메모리 점유율이 그대로였다.
node-cron만 사용하면 그랬다.
혹시나 싶어 pm2 대신 그냥 node pushServer.js로 실행한들 동일했다.

그러다 pm2는 자동 재실행하거나 메모리 사이즈가 일정 수치를 넘어서면 자동 재실행 등 다양한 옵션질이 가능하니 이를 활용하기로 했다.

일단 메모리 오버시 자동 재실행을 하기 위해선 별도의 js를 만들어야 한다.
이름은 process.config.js라 지었다.

module.exports = {
    apps: [{
      script: "pushServer.js",
      instances: "max",
      exec_mode: "cluster",
      max_memory_restart: '100M' // 프로세스의 메모리가 100MB에 도달하면 reload 실행
    }]
  };

이 process.config.js를 저장하고 실행을 시킨다.
pm2 start process.config.js   (종료는 pm2 stop process.config.js)

이 경우 인스턴스가 max로 되어 있는데
내 경우 새벽 3시마다 재실행을 하고 싶고 1개의 인스턴스만 실행되어야 하므로 내용을 이렇게 바꿔줬다.
max대신 1, cluster대신 fork

module.exports = {
    apps: [{
      name: "pushServer",
      script: "/node/push/pushServer.js",
      instances: 1,
      exec_mode: "fork",
      cron_restart: '0 3 * * *',
      log: "/node/push/log/pushServer.log",
    }],
}

이후 pm2 start process.config.js를 실행하면 알아서 잘 동작한다.
해당 파일안의 script를 원하는 인스턴스의 개수 만큼 실행해주고 로그 또한 원하는 위치에 만들어준다.

혹시라도 실수로 instances를 이미 max로 실행해서 프로세스가 여러개 생성되었다면 pm2 list를 실행해보고 
pm2 delete all 명령어로 깨끗하게 다 지워버리면 된다.
성형 후 다시 새롭게 시작할 수 있다.

모니터링
실행중인 node.js 프로그램의 상태를 확인하고 싶다면 monit 기능을 이용하면 된다.
pm2 monit
좌측 상단엔 실행중인 프로세스 리스트로 화살표로 이동이 가능하다.
우측 하단에 Metadata에서 앱 이름과 버전 재실행 횟수 실행기간 등등 정보와 
좌측 하단엔 메모리 정보들을 확인 가능하다.

모니터 툴을 빠져나올 땐 ctrl+c로 빠져나오면 된다.
하단에 기본적인 사용 안내가 나와있는것을 확인할 수 있다.

로그파일
pm2로 실행중인 node.js 프로그램에서 console.log를 찍으면 로그가 .pm2/logs 폴더에 파일로 계속 쌓이는데 이것도 로그 파일 사이즈별로 컨트롤이 가능하다.
이거 안해주면 나중에 어마어마한 사이즈의 로그파일을 경험하게 되니 반드시 해주자.

방법은 특이하게 npm i가 아닌 pm2 install pm2-logrotate 이렇게 설치해야 한다.
당연히 pm2는 제일 위에 언급하였듯이 npm으로 설치를 미리 해두어야 한다.


pm2 set pm2-logrotate:max_size 1K 또는 pm2 set pm2-logrotate:max_size 1M 이런식으로 실행 후 pm2 start pushServer.js를 실행하면 이후 console.log로 찍은 로그는 저 사이즈를 넘을 경우 자동으로 새로운 파일이 생성된다.

만약 이것도 싫고 하루마다 파일을 생성하고 싶다면?
pm2 set pm2-logrotate:rotateInterval '0 0 * * *'




끝으로 자동재실행까진 괜찮은데 이 경우 메모리 누수가 발생하는건 아닌가 불안하다.
여기까진 확인을 못해봤다.

반응형
Posted by Hippalus
,

반응형

개발하다 8976 포트를 사용하는 node.js 프로그램을 개발하였는데 
listen이 안되길래 분명히 kill을 해줘도 계속 되살아 났다.

포트 현황을 확인하기 위해 리눅스에서 netstat를 실행해보니 아래처럼 주루룩 나온다.

netstat -tnlp


보다 간단하게 확인하기 위해 grep와 포트번호를 입력하고 실행하면 하나만 나오는게 확인 된다.

netstat -nap | grep :8976

(이때 root권한으로 실행을 해야 프로세스아이디 확인이 된다는 이야기를 본것 같다.)
21688을 실행시키고 있는 부모의 프로세스ID를 찾는 명령언데
ps -o ppid= -p 21688

이걸 실행하니 부모의 프로세스 아이디가 내 경우 11811이었다.

ps -p 11811
이 process id로 조회를 해보면 pm2로 실행되고 있었다.
해당 프로세스 아이디를 kill 11811 해주고 pm2가 실행하던 프로세스 아이디도 kill해주면 증상이 해결된다.


반응형
Posted by Hippalus
,

반응형

그냥 이것 저것 만지다 svn을 다시 한 번 연결해 봤는데 어라? 같은 repository가 두개나 존재하네? 잘못본건가?
하나 삭제해야지 싶어 svn 리스트 중 하나를 삭제하였더니 project explorer에서 svn 연결이 그냥 끊겨버렸다.


project explorer의 파일에서 Team을 선택하면 우측에 이런 메뉴들이 나와야 하는데 덩그러니 몇 안되는 메뉴만 나온다.

아마 연결되어 있던 svn을 삭제했나보다. -_-
아 연결되어 있는 svn이면 경고를 주던가!

다시 연결해야하니 일단 project에서 오른쪽 마우스 클릭 → [Team] → [Share Project]
Use existing repository location 라디오 버튼을 선택하고 next를 하면 다시 살아난다.




반응형
Posted by Hippalus
,

반응형

1편에서 기본적인 설정을 통해 node.js를 이용한  IPFS에 파일 업로드를 해보았다.
이번엔 다운로드다.
이미 많은걸 해두었기에 다운로드는 더 쉽다.

일단 IPFS는 실행해둬야 한다.
윈도우용이든  CMD에서 ipfs daemon 명령어를 이용해서든

앞서 만들었던 d:\Project\NFT 폴더를 계속 이용할 것이다.
appdown.js란 파일을 만들고 그 안에 이렇게 타이핑 해보자

const IPFS = require("ipfs-api");

const ipfs = new IPFS({
    host: "127.0.0.1",
    port: 5001,
    protocol: "http"
});

const hash = "QmfHZXP......VHfHkuntm86xY1vg"; // 앞서 업로드 하고 받아낸 해시값

ipfs.files.get(hash, (err, files) => {
    if (err) {
        console.error("Error while downloading file:", err);
    } else {
        if (files && files.length > 0) {
            console.log("File download success! Result:", files[0].content.toString());
        } else {
            console.error("No files found for the given hash.");
        }
    }
});

주의할 점은 hash부분이다.
업로드 하고 받아낸 해시값을 입력해야 한다.

저장 후 node appdown.js를 실행하면

업로드시 사용한 txt파일 내용을 확인할 수 있다.

반응형

'NFT' 카테고리의 다른 글

NFT 개발하기 - 1편 IPFS에 node.js로 파일 업로드하기  (1) 2024.01.18
Posted by Hippalus
,

반응형

먼저 Controller 생성
Project Explorer의 Java Resources에서 마우스 우측 버튼을 눌러 New를 선택하자.

우측에 나온 메뉴의 Class를 선택

Name에 알맞은 컨트롤러 이름을 지정해주자
.java는 안 적어도 된다.

다음엔 Mapper class
똑같이 해되 이번엔 Interface를 선택한다.

똑같이 이름을 적고 Finish를 선택하면

이렇게 컨트롤러 클래스와 매퍼 클래스가 이클립스에 나타난다.

src쪽으로 이동해 보면
나는 log란 폴더 아래에 두길 원했으므로 log밑에 컨트롤러 클래스와 mapper 폴더 아래에 매퍼 클래스가 위치한게 보인다.


이제 마지막으로 매퍼와 연결되는 xml을 만들어 본다.
src폴더 하위의 resources폴더를 찾아간 후 log 폴더를 만든다.

그리고 log폴더에서 New, File을 선택하여 

아까와 마찬가지로 이름을 정해주되 xml을 붙여주자.
애시당초xml을 선택하는 방법도 있겠지만 난 이 방법을 선호한다.

그럼 이렇게 mapper 클래스에서 호출할 xml이 생성된다.
x아이콘은 파일이 xml 규격을 따르지 않기 때문인데 이건 뭐 내용 채워주면 없어진다.




반응형
Posted by Hippalus
,