반응형

아드님이 호떡이 드시고 싶으시단다.
유명한 호떡집 남기남이 정릉시장에 있다하여 차를 몰고 정릉시장에 방문하였다.
시장을 둘러보니 시장기가 돌아 사전에 조사한 숯불 닭갈비냐 돈까스냐 서울불고기 집이냐 고민하다 서울 불고기에서 돼지갈비를 먹기로 하여 방문.

정릉시장 초입에 있는 서울 불고기집은 가정 양옥을 개조한 집이다.

가격은 대충 이러하다.

육회는 가격이 좀 나가고 돼지갈비가 300g에 15,000원
된장찌개는 2,000원 되신다.

아드님께선 돼지갈비를 드실 땐 항상 된장찌개 두부를 건져 밥과 함께 드신다.
나와는 식성이 정 반대다.
돈 아깝게시리 돈을 주고 된장찌개를 굳이?

돼지갈비 3인분을 주문하여 나왔는데 대부분 뼈가 붙어 있었다.
뼈 있는거 싫은데 -_- (아마 뼈 없는걸로만 달라 요청하면 가능할것이다. 대부분의 돼지갈비 집들이 그러하니)
고기도 약간 다른 집들과는 달랐다.
얇다고 해야 하나.. 그렇다고 중량이 적진 않으니 이점은 그저 취향의 차이

양배추 소스도 나오고

된장찌개도 나왔다.
주문 할 때 "두부 좀..."이라 말씀드리니 센스 있으시게 "아~ 많이요~ ^^" 이래주신다.
정말 두부가 많이 들어 있었다.
약간 아쉬운건 찌개 두부는 아닌것 같았... 

여하튼 고기를 얹고

굽고

구웠다.

창 안으로 햇빛이 비춰 먹음직스럽길래 사진도 여러장 찍었다.
사실 블로그 하려고 찍은건 아니었는데.
찍다보니 블로그에 올려야겠기에 더 찍었다.

전체적인 상차림은 대략 이렇다.
사진에 짤려 안 보이는데 마늘과 쌈장 그리고 동치미가 접시에 조금 나온다.

정말 솔직하게 식후감을 말하자면 막 맛집 그런건 아니다. 평범한 집이다.

아쉬웠던 점은 좁은 방에 테이블이 4개인가 있었는데 그 중 3테이블에서 고기를 굽느라 방안에 연기가 한 가득이었다.
일행은 눈이 아플 지경이었다 했다.
식사를 다 끝낼 때 쯤에서야 환풍기를 돌려주셨고 그래도 안되어서 창문도 열어주셔서... -_-a
1년 동안 마실 미세먼지를 다 마신것 같다.

정릉시장 구경갈 겸 돼지갈비로 식사하실 분은 방문하셔도 괜찮다.
서울페이(제로페이)가맹점이라 서울페이가 있는 분이라면 이용하시길
서울페이 되는집인데 막상 찾아가면 결제 못하는 집들 상당수 있는데 이 집은 된다.

위치와 정보는 네이버~
https://map.naver.com/p/search/%EC%A0%95%EB%A6%89%EC%8B%9C%EC%9E%A5%20%EC%84%9C%EC%9A%B8%EB%B6%88%EA%B3%A0%EA%B8%B0/place/38341807?placePath=?entry=pll&from=nx&fromNxList=true&searchType=place&c=15.00,0,0,0,dh

반응형
Posted by Hippalus
,

반응형

어지간해선 허경영이란 사람을 모르는 사람은 없을것이다.
매번 낙선을 거듭하지만 꾸준하게 대선에 출마하고 그때마다 내놓는 공약이 허황된 공약이라며 사람들에게 놀림을 넘어 손가락질을 받기만 했던 그의 공약.

무서운건 한심한건 그중 상당수 공약은 현실화가 되었다.
토요휴무제, 65세 이상 월 70만원 노인수당, 3천만원 출산수당, 1억원 결혼수당, 청년취업지원금 등

난 허경영의 공약을 보며 왠지 생텍쥐페리의 어린왕자의 한 에피소드가 떠오른다.

터키의 한 천문학자가 소행성 B612를 발견하고, 이를 학계에 보고했지만, 끝내 사실로 인정받지 못한다.
당시 천문학자가 입고 있었던 터키의 전통 복식 때문이었다.
나중에 그는 양복을 입고 다시 한 번 그 별의 좌표를 증명했고, 세계천문학회는 그제서야 그의 발견을 인정했다.

만약 허경영이 아닌 당시 유력했던 거물급 정치인이 발표하였다면 군중은 어떻게 반응했을까 싶다.

요즘 발표되는 정책들은 청년을 위한 정책들로 대홍수를 이룬다.
과연 이 땅의 청년들만 고되고 암울하고 부족한 것일까 물어보고 싶다.
길거리 아무 누구나 붙잡고 요즘 힘드시죠? 라 물으면 백이면 이백 모두 "아 힘들어요 ㅜㅜ" 라 답하지 않을 사람이 있겠는가.

그럼에도 불구하고 왜 청년들에게 온갖 복지와 지원 정책이 쏟아지는가
다 인구와 관련되어 있다.

어차피 선거는 표로 결정되는 구조이니 당연히 MZ세대와 그의 부모 세대의 인구가 차지하는 비율을 보면 납득이 간다.

표는 그렇다 치고 미래를 위해 생각해보자.

요즘 인구 소멸이 사회적 문제로 거론되고 있다.
청년들이 결혼과 출산을 꺼려하는데 그 이유는 과열경쟁으로 쓴맛을 본 청년들이 똑같은 삶을 넘겨주기 싫어하기 때문이다.
상황이 이러하니 정부에선 기껏 내놓은 정책이 청년들에게 돈 몇 푼 쥐어주고 영화 문화 생활 하라 등떠미는 수준인데 그렇다 한들 그들이 안 하던 결혼을 하고 안하던 출산을 하겠는가?
대가리를 굴려도 최소한 상대가 몇년은 속을 만큼 대가리를 굴려 정책을 내놔야지 
이따위 정책들은 내놔봐야 체리피커 성격의 정책 딱 그 수준일 뿐이다.

그럼 어쩌자란 말인가?
허경영처럼 당시엔 허황된 급진적인 정책일지라도 방향타를 꺾어 버리지 않고선 답이 없다.
한국인의 평범한 삶의 궤적은 알다시피 태어나서 어린이집 다니다 유치원 그리고 초중고 내내 학원으로 절어 살다 대학가고 초봉 월 2~300이냐 월 4~500이냐로 인생이 결정난다.
한 번 중소로 시작하면 계속 중소고 한 번 공기업, 대기업으로 시작하면 계속 안정된(?) 삶이 이어진다.
그러니 경쟁에 내몰리고 밤 10시 11시까지 학원질 하다 시장에 나온 애들은 현실이 냉혹하다 못해 불공정해 보인다.
본전 생각이 간절해진다.
난 똑똑한데 저 무능한 자들은 윗자리에 버티며 월급이나 축내고 부당한 지시를 내린다 착각한다.
그러니 헛된 공정을 부르짖고 성별 갈등은 기본이고 세대 간 갈등이 발생한다. 

결국 문제의 시발점인 사교육 철폐 말고는 답이 없다.
사교육에 부모들은 허리가 거꾸로 접히고(최근 발표된 기술 폴더폰은 거꾸로 뒤집힌다더라 기술의 발전이 놀랍도록 닮았다.) 아이들은 경쟁에 올인하고 돈 버는건 불안을 부추기는 사교육 시장이니 돈의 흐름이 자유롭지 못하다.
그렇게 개고생을 한들 한정된 고급 일자리는 어차피 뱁새들에겐 무지개 끝 황금단지일 뿐이다.

그럼 사교육 없이 고급 일자리는 어떻게 가란 말인가?
답은 간단하다.
계층간 이동 사다리를 걷어 차버리면 된다.
너나 나 말고 쟤가 가면 된다.
대신 쟤가 너와 나를 먹여 살리면 된다.
(어쩌면 너가 쟤일수도 있겠다.)
저~ 유럽의 어느 먼 나라처럼 세금은 많이 걷고 어차피 고급 일자리는 엘리트로 채워지고 있는 그 나라처럼 말이다.
다들 가고싶어 하는 삼성도 천재 1명이 10만명 먹여 살린다하지 않았던가?

하지만 사교육의 꿀맛을 본 자들은 이런저런 이유를 들먹이며 절대 동의하지 않는다.
그러니 다함께 인구 소멸을 받아들이자!~

끝으로 
인구절벽을 넘어 인구 소멸이 현실화 되고 있는 요즘 앞서 현실화 되었던 그의 허황된 공약들 중 유력한 공약은
국회의원 100명 감축, 징병제 폐지 및 모병제 전환, 경기도 전체를 서울로 편입, 충남·충북강원을 합쳐 ‘충강도’, 경북·전북을 합쳐 ‘경전도’ 전남·경남을 합쳐 ‘전경도’로의 통합 처럼 인구 소멸로 인해 자연스럽게 현실화 될 것이 유력해 보인다.

반응형
Posted by Hippalus
,

반응형

아이폰 앱스토어에 심사를 제출하려면 이런게 뜬다.

수출 규정 관련 문서가 누락이라니 뭔 소리여
그냥 관리 눌러주고 나오는 팝업이 나오는데
뭔 요상한 암호냐 싶지만 그냥 마지막 위에 언급된 알고리즘에 모두 해당하지 않음을 선택하면 된다.

매번 이러기 싫다면 프로젝트의 Info.plist 파일에서 아래와 같이 필드를 추가해 주면 된다.

앱스토어든 구글 플레이스토어든 매번 이상한 기준을 열심히 마련하고 강요해대는데 법적으로 이슈가 생겨서 그런건 알겠지만 매번 느끼지만 너무 불친절하다.

반응형
Posted by Hippalus
,

반응형

즐겨찾기 해놓은 sessions(서버)리스트에서 마우스 우측을 눌러 Edit session 메뉴를 호출하자

그러면 저렇게 덩거러니 빈 화면이 나오는데 여기서 Advanced SSH settings 탭을 누른다.

그리곤 Execute command에 아래와 같이 입력해준다.
export TMOUT=0
이어서 우측에 Do not exit after command ends 체크박스에도 체크를 해준다.


그리곤 OK를 눌러 저장 후 재접속 하여 사용하면 된다.




반응형
Posted by Hippalus
,

반응형


VSCode의 좌측 하단의 톱니바퀴를 눌러서 검색에서 tab size를 입력하고 숫자를 변경하라던데 아무리 해봐도 안되더라

그냥 편집기 상태에서 우측 하단에 보면 저렇게 공백: 4라고 보일것이다. (숫자는 각자 상황에 따라 다름)

공백 부분을 클릭해주면 아래처럼 상단에 메뉴가 뜬다.
여기서 공백을 사용한 들여쓰기를 눌러준다.

그리고 원하는 탭의 크기를 선택해주자.

난 space 4개는 있어야 한다. 
속이 다 시원하다.






반응형
Posted by Hippalus
,

반응형

일단 root 권한으로 접속을 하자.
su 입력 후 관리자 비번을 입력하면 요렇게 접속이 된다.

(반대로 이전 이용자로 돌아가려면 su - [아이디] 엔터로 복귀 가능하다.)

root권한을 획득 하였으면 lsof를 설치하자.
내 리눅스는 레드헷 계열이므로 
sudo yum install lsof 

설치가 됐다면 이제 사용중인 포트로 조회가 가능하다.

lsof -i :8976


요롷게 프로세스 ID (PID)가 나타난다.
이걸 죽여는 명령어는 아래와 같다.
kill -9 <프로세스ID>

프로세스 ID가 15083이니까
kill -9 15083 을 입력하면 되겠다.

반응형
Posted by Hippalus
,

반응형

Node.js로 FCM 푸시 서버를 만들어 항상 백그라운드에서 동작하도록 하려면 여러 가지 방법이 있다. 
가장 일반적인 방법은 forever나 pm2와 같은 프로세스 관리 도구를 사용하는 것으로 이러한 도구를 사용하면 서버가 비정상적으로 종료되더라도 자동으로 다시 시작되도록 설정할 수 있다.

일단 pm2를 전역으로 설치한다.
이때 반드시 su 계정으로 로그인하여야 한다.
다시 일반 계정으로 복귀하고자 한다면 su - 일반계정이름 엔터를 치면 된다.

npm install -g pm2
그런 다음, Node.js 애플리케이션을 pm2로 실행할 수 있다.

bash
Copy code
pm2 start your_fcm_server.js
이제 your_fcm_server.js는 백그라운드에서 계속 실행된다.

만약 서버를 중지하려면 다음 명령어를 사용한다.
pm2 stop your_fcm_server.js

또는 모든 프로세스를 중지하려면
pm2 stop all

더 나은 안정성을 위해, 서버가 리부팅될 때 자동으로 시작되도록 만들 수 있다.
이를 위해서는 다음 명령어를 실행한다.

pm2 startup
이 명령어를 실행하면 pm2가 서버 리부팅 시에도 자동으로 시작되도록 설정된다.
이렇게 하면 Node.js 애플리케이션이 항상 백그라운드에서 실행되도록 할 수 있다.

기본적으로 pm2는 로그와 관련된 다양한 기능을 제공하므로, 서버의 상태를 모니터링하고 문제를 디버깅하는 데 도움이 된다.
pm2 logs

특정 프로세스의 로그만 확인하려면 프로세스 이름 또는 ID를 지정할 수 있다.

pm2 logs your_fcm_server

로고 출력 설정:
pm2에서는 로그의 출력을 여러 가지 형식으로 설정할 수 있다.
예를 들어, JSON 형식으로 출력하려면 다음과 같이 명령어를 사용한다.

pm2 logs --json

로그 위치 확인
pm2는 각 프로세스의 로그를 파일로 저장한다. 
로그 파일은 기본적으로 ~/.pm2/logs/ 디렉토리에 저장되며, 특정 프로세스의 로그 파일 위치를 확인하려면 다음과 같이 명령어를 사용한다.

pm2 show your_fcm_server
이 명령어는 프로세스의 상세 정보를 보여주는데, 그 중에서 "log_path" 항목이 로그 파일의 경로를 나타낸다.

로그 파일을 삭제하려면 pm2 flush 명령어를 사용한다.
pm2 flush

실시간 로그 모니터링 중지인 
pm2 logs 명령은 실시간 로그 모니터링을 위한 것이기 때문에 Ctrl+C를 누르면 모니터링이 중지된다.

반응형
Posted by Hippalus
,

반응형

SVN으로 형상관리시 수정된 또는 수정할 소스를 충돌현상이 발생할 경우 

먼저 대상 소스를 마우스 우클릭

Team > Synchronize with Repository 선택


update or commit시 충돌인 conflict가 발생하게 된다.

이때 
Override and Update는 SVN 서버의 소스를 내 로컬 소스로 overwrite (SVN소스가 오리지널)
Override and commit는 내 로컬 소스를 SVN으로 overwrite (내소스가 오리지널)

반응형
Posted by Hippalus
,

반응형

바쁜분들을 위해 그리고 기초는 있다란 가정하에 3줄 요약
1. npm install oracledb@5.2.0

2. 아래 링크로 접속하여 client 설치 후 yum으로 install
https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html
자신의 오라클 버전에 맞는 파일 다운로드(11g인 경우 Version 11.2.0.4.0의 RPM파일 다운로드)
 yum install oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm

3. vi ~/.bashrc를 입력해서 환경변수 설정
export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib:${LD_LIBRARY_PATH}

안 바쁘면 이제 시작~

보통 node.js로 oracle로 db connection을 하려면 npm install oracledb로 oracledb를 설치 후 아래와 같이 하기 마련이다.
dbConfig.js에 DB 연결 정보를 설정해 두고

// Oracle DB 연결 정보
const dbConfig = {
    user: 'myid',
    password: 'pwd123',
    connectString : "(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 200.100.80.10)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = pos)))"
  };

  module.exports = dbConfig;


이를 require로 불러와서 getConnection으로 연결 후 DB조회, 처리
 

const
oracledb = require('oracledb');
const dbConfig = require('./dbConfig.js'); // dbConfig 파일을 불러옴

oracledb.getConnection(dbConfig, (err, connection) => {
    if (err) {
      console.error('Error connecting to Oracle:', err.message);
      process.exit(1);
      return;
    }
    console.log('=======');
    // 연결이 성공한 경우, 쿼리 실행
    connection.execute(
      'SELECT * FROM YOUR_TABLE', // 적절한 테이블명으로 변경
      [], // 바인드 변수 배열 (여기서는 사용하지 않음)
      { resultSet: true, outFormat: oracledb.OUT_FORMAT_OBJECT },
      (err, result) => {
        if (err) {
          console.error('Error executing query:', err.message);
        } else {
          console.log('Query result:', result.rows);
        }
 
        // 연결 종료
        connection.close((err) => {
          if (err) {
            console.error('Error closing connection:', err.message);
          } else {
            console.log('Connection closed.');
          }
        });
      }
    );
  });


그런데 안된다.
절대 안된다.

thin모드를 지원하지 않는단다.
도대체 왜??????

자랑스럽게 node oracledb 6.0에선 Thin mode를 지원한다고 발표한 상태다.


설치된 oracledb 모듈의 버전도 6.0을 넘어 6.2였다.

이윤즉슨 oracledb 모듈 버전이 6.0으로 올라서면서 thin을 지원하지만 
oracle 11g는 6.0으로 올려도 지원 자체가 불가능하다.
시간 많으면 여기가서 읽어보시라.
https://node-oracledb.readthedocs.io/en/latest/user_guide/appendix_a.html#id1

thin 모드와 thick 모드가 궁금하다면 chat gpt 센세에게 물어보면 잘 가르쳐 주신다.



결론은 node.js가 설치된 서버에 별도의 client를 설치해줘야만 한다.
또한 6.2버전을 thick 모드를 지원하는 5.2.0으로 다운그레이드를 해줘야 한다.
아니면 초장부터 5.2.0으로 설치 하던지
이렇게 말이다.
npm install oracledb@5.2.0

일단 oracledb는 5.2.0으로 설치완료했고
다음엔 망할 클라이언트 설치다.
바쁘면 그냥 아래 링크 눌러 다운받으면 된다.
* 오라클 11g용 Instant Client rpm파일의 다이렉트 링크는 아래와 같다.
https://download.oracle.com/otn/linux/instantclient/11204/oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm

바쁘지 않으면 천천히 읽어 내려가면 된다.

https://oracle.github.io/node-oracledb/INSTALL.html#prerequisites

3.2.1을 보면 Node-oracledb Installation on Linux x86_64 with Instant Client ZIP files가 보일것이다.
이걸 선택해주자.

 

그럼 node-oracledb.readthedocs.io란 사이트로 이동 할 것이다.
https://node-oracledb.readthedocs.io/en/latest/user_guide/installation.html#instzip

2.4.3.1. Oracle Instant Client ZIP Files에 x86-634 64-bit가 보일것이다.

이걸 선택하면 최종 종착지는 oracle.com이다.
https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html

여기서 자신의 오라클 DB 버전에 맞는걸 다운받아 주면 된다.
내 경우 oracle 11g이므로 version 11.2.0.4.0을 눌러 Instant Client Package (RPM)을 다운 받았다.
RPM은 Redhat Package Manager의 약자로 Windows를 예를들면 setup.exe와 비슷하다고 볼 수 있다
그래야 yum으로 리눅스에서 install이 가능하기 때문인데 
YUM은 Yellowdog Update Manager의 약자로 RPM의 단점인 의존성 문제를 해결하기 위해서 제공되는 것으로 특정 패키지를 설치할 때 의존성이 있는 다른 패키지들을 자동으로 먼저 설치해주는 지능적인 툴이다.


다운받은 파일을 적당한 곳에 복사해 두고 해당 디렉토리에서 yum을 이용해 rpm파일을 설치한다.
 yum install oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm

혹시 다른 rpm파일을 잘못 설치했다면 리스트로 확인도 가능하고 제거도 가능하니 당황하진 말자
 yum list installed

제거하는 방법은
yum remove 패키지이름


마지막으로 환경변수를 설정해줘야 한다.



 vi ~/.bashrc 를 입력하자

export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib:${LD_LIBRARY_PATH}
이렇게 입력해주고 :wq로 저장 후 나가준다.
제대로 설정되었는지 확인하려면 echo $LD_LIBRARY_PATH 를 입력해보자
/usr/lib/oracle/11.2/client64/lib: 
이렇게 뜬다면 정상이다.

이제 클라이언트 설치와 환경변수까지 모두 다 설정해줬다.
다시 node.js로 dbconnect 파일을 실행해보면 정상 접근이 가능한 걸 확인 할 수 있을것이다.

반응형
Posted by Hippalus
,

반응형

메이븐 프로젝트가 아닌 일반 자바 프로젝트에서 이클립스로 외부 라이브러리를 추가하려면 다음과 같이 하면 된다.
먼저 해당 프로젝트에서 마우스 우측을 눌러 Build Path를 선택하면 우측에 서브 메뉴로 Configure Build Path가 뜬다.

여기서 우측의 Add External JARs... 버튼을 누르고

JAR Selection 창이 뜨면 다운받아 놓은 lib를 선택하면 된다.

 

------------------------------------------------------------------------ 추가 ------------------------------------------------------------------------

추가로 외부라이브러리가 없을 때 문제 해결 방법은 다음과 같다.

내 경우 메이븐 프로젝트가 아닌 상태에서 SVN에서 프로젝트를 불러왔기에 외부 라이브러리들이 없는 경우가 발생하였다.
"Provider com.sun.xml.internal.ws.spi.ProviderImpl not found"
검색해보니 stackoverflow.com 페이지가 검색되었다.
jaxws-api-2.3.1.jar 파일이 없어서 발생하는 문제란다.
https://stackoverflow.com/questions/54032558/jdk-11-jax-ws-provider-com-sun-xml-internal-ws-spi-providerimpl-not-found

 

JDK 11; JAX-WS; Provider com.sun.xml.internal.ws.spi.ProviderImpl not found

I Need to access legacy SOAP webservices in JDK 11. But I am suffering "ProviderImpl not found." The JDK 11 implementation is: zulu11.2.3-jdk11.0.1-win_x64. In my build.gradle, I have the following

stackoverflow.com

외부 library 다운로드는 구글에 검색하면 되는데 대부분 https://mvnrepository.com/ 에서 검색 후 다운받을 수 있다.
(만약 없다면 당연하지만 구글 검색해서 다운 받아야 한다.)

jaxws-api-2.3.1.jar 파일을 https://mvnrepository.com/  에서 먼저 버전을 제외하고 검색하여 아래 결과를 얻었고

2.3.1이 최신이라 2.3.1버튼을 눌러

최종 다운로드 받는 곳으로 이동하여 Files옆에 있는 jar 버튼을 눌러 jar파일을 다운받았다.

jar파일을 프로젝트의 lib폴더든 아무폴더든(비추) 위치해 놓고 위 과정을 거쳐 외부 라이브러리를 프로젝트에 포함시키면 된다.

반응형
Posted by Hippalus
,