로깅은 서버에서 중요한 처리 중 하나로써 어떤 일들이 일어나고 있는지 알 수 있고, 버그나 의도하지 않은 동작 등이 있을 때 빠르게 원인을 파악할 수 있다. 단순히 로깅은 디버깅용으로 개발자가 에러나 테스트 중 사용하는 용도 뿐 아니라 굉장히 광범위하게 사용할 수 있다.

 

데이터베이스 접속 기록 , 사용자 행동 로그 등 많은 것들을 로그로 저장해놓을 필요가 있다. 아래의 예를 간단히 보자.

 

  • 서버 : 특정 API의 Request , Respone 정보를 기록함. 클라이언트나 웹에서 API 호출할 경우 저장함
  • 앱(IOS/Android) : 로그인을 하며, 화면에서 유저가 어떤 화면에 진입했는지, 어떤 버튼을 클릭했는지 등을 기록함
  • 웹 : 로그인을 하며, 어떤 웹 페이지에 진입했고 어떤 버튼을 클릭했는지 등을 기록함

결국 사용자가 어떤 것을 샀고, 어떤 것을 팔았고, 레벨업을 언제 했는지 또는 서버에 요청을 했는지 다른 서버에서 어떤 데이터를 요청하는 등의 로그로 저장해놓는다. 나중에는 이런 데이터를 분석하여 데이터를 추출할 수 있게 말이다.


로그 수준

 

로깅의 수준 또한 중요하다. 어찌보면 로그의 처음을 보는 것은 수준일 수도 있을 것 같다. 많은 로그 중 Critical 또는 Warning을 먼저 보게되면 많이 당황스러울 수 있을 것 같다. 수준은 어딜가나 다른 것 같다. 그래서 내가 찾아보고 배운 내용을 대부분 다 적어봤다.

 

수준 내용
Critical 서버 문제 또는 중요한 조건이 발생할 때마다 이벤트가 로그에 기록
Error 오류 조건이 발생할 때마다 이벤트가 로그에 기록 - ex)클라이언트나 다른 서버에 대한 연결시도가 실패한 경우
Warning 경고 조건이 발생할 때마다 이벤트가 로그에 기록 - ex)클라이언트가 보낸 통신을 서버가 인식할 수 없는 경우
Notice 일반적으로 중요한 조건이 발생할 때마다 이벤트가 로그에 기록 
Information 서버 실행되는 모든 중요 작업에 대한 이벤트를 로그에 기록 - ex)클라이언트가 로그인 했거나 폴더를 이동시키는 이벤트의 경우
Debug 가장 세밀한 로깅으로 디버깅 용도에만 적합하며 데이터의 흐름 또는 문제를 나타내기 위해 각 프로세스나 작업 내의 개별 단계에서 이벤트 로그를 기록

 

 

'IT > general' 카테고리의 다른 글

[네트워크] 쿠키?  (0) 2022.02.09
[UUID] Universally Unique Identifiers - 범용 고유 식별자  (0) 2022.02.09
SSL(Secure Sockets Layer)  (0) 2021.12.07
[방화벽] 기본 포트 차단  (0) 2021.11.22
[VSCode] 원격 SSH 접속  (0) 2021.10.08

SSL 인증서란 클라이언트와 서버간의 통신을 제 3자가 보증을 해주는 문서이다.

 

클라이언트가 서버에 접속하면 서버는 클라이언트에게 인증서를 전달하면 클라이언트는 이 인증서를 보고 신뢰할 수 있는 사람인지 확인 후 데이터를 보내는 등 다음 절차를 진행한다.

 

여기서 보통 SSL을 잘 몰랐다. 크롬이나 브라우저창에 www 또는 https를 볼 수 있다. 여기서 HTTPS는 HTTP와 TLS가 조합된 프로토콜만을 말한다. 여기서 TLS는 SSL의 후속 버전이지만 아직 SSL이 더 많이 사용되는 용어같다. 그렇지만 일단 둘 다 기억은 해두자!!

 

SSL을 쓰는 이유를 정리해보면 전달되는 내용이 다른 사람에게 노출되는 것을 막을 수 있으며 접속하는 클라이언트가 신뢰할 수 있는 서버인지 알 수 있고 전달되는 내용이 변경되는 것을 막을 수 있다.

 

통신 단계는 3단계다.

1. 핸드셰이크    2. 전송    3. 종료

 

여기서 가장 중요한건 핸드셰이크다. 헨드셰이크는 공개키와 대칭키 2가지 방법을 함께 사용한다.

 

1. Client Hello : 서버에 접근하여 클라이언트는 현재 자신이 가능한 암호화 방식과 랜덤 데이터를 서버에게 전송한다.

2. Server Hello : 서버는 클라이언트에게 제시한 암호화 방식 중 하나를 선정하여 알려주고 서버의 인증서를 전달한다. 또 서버에서도 랜덤 데이터를 생성하여 전달한다.

3. Client Pre Master Secret 생성 : 클라이언트는 자신이 가지고 있는 CA 리스트에서 서버가 보낸 인증서를 복호화 한다. 만약 성공 했을 시 클라이언트와 서버가 전송한 랜덤한 데이터를 조합하여 Pre Master Secret 키를 생성한다. 그 후 인증서에 있는 공개키를 이용하여 Pre Master Secret 키를 암호화 하여 서버로 전송한다. (이 때 Pre Master Secret는 절대 노출되면 안된다.)

4. Server Pre Master Secret 암호화 : 서버는 Pre Master Secret 키를 자신의 비밀키로 복호화하여 클라이언트와 서버는 서로 Pre Master Secret 키를 공유한 상태가 된다.

5. Session Key 생성 추후 Pre Master Secret 키를 이용하여 Master Secret 키를 만들고 Session Key를 만들어 세션을 형성하고 대칭키 방식으로 데이터를 주고 받는다.

 

 

 

 

 

'IT > general' 카테고리의 다른 글

[UUID] Universally Unique Identifiers - 범용 고유 식별자  (0) 2022.02.09
로깅(Logging)?  (0) 2021.12.14
[방화벽] 기본 포트 차단  (0) 2021.11.22
[VSCode] 원격 SSH 접속  (0) 2021.10.08
[IDE] 이클립스 설치  (0) 2021.06.03

회사에서 개발 도중 해당 페이지가 안열린다고 연락을 받았다. 물론 내가 엔지니어는 아니기 때문에 잘 모르지만...

 

트래픽 모니터를 보니 계속 차단된다고 나온다...

 

해당 방화벽은 기본 차단 포트가 있다고 한다. 각 포트마다 이유가 있었다.

혹여나 포트를 개방했는데 접속이 안된다면 이런게 있을 수 있으니 찾아보자

'IT > general' 카테고리의 다른 글

로깅(Logging)?  (0) 2021.12.14
SSL(Secure Sockets Layer)  (0) 2021.12.07
[VSCode] 원격 SSH 접속  (0) 2021.10.08
[IDE] 이클립스 설치  (0) 2021.06.03
[가상화폐] 가정용 데스크탑 PC 이더리움 채굴  (0) 2021.05.28

이전에 forever을 작성을 했었다.

 

얼마 뒤 다른 분과 협업을 하다 보니 그쪽은 pm2를 사용하여서 작성하게 됐다.

 

너무 바쁘기 때문에 쓰레드라던지 등등을 자세하게 파헤치진 않았다. 

 

대충 아는건 멀티 코어 혹은 하이퍼 스레딩을 사용가능하다 정도... forever도 이게 가능한지는 모르겠다.

 

아무튼 내가 체감되는 것들만 맨 끝에 남긴다. 

 

우선 pm2를 설치한다.(forever랑 명령어 방식이 거의 유사하다.)

 

$ > npm install pm2 -g

 

pm2 명령어를 사용하여 실행시켜본다. 

pm2 start app.js

프로세스 중지

pm2 stop 0 (프로세스 번호)

프로세스 삭제

pm2 del 0 (프로세스 번호)

프로세스 전체 삭제

pm2 kill

프로세스 전체 로그 - 이 부분이 forever 과 달랐다. 특정 프로세스의 로그를 출력하는 방법을 모르겠다. 현재 pm2로 실행되고 있는 프로세스 전체의 로그가 한번의 출력 된다.

pm2 log

프로세스 목록

pm2 ls

실행 중인 프로세스 모니터

pm2 monit

 

회사에서 Putty로 서버에 많이 접속한다. 근데 그때마다 vi로 편집할 때가 많은데 vi 단축키를 잘 모르니 많이 불편했다. 그런데 유튜브를 보다가 알고리즘을 통해 영상을 하나 보게 됐는데 VSCode에서 아주 유용한 툴을 발견했다. VSCode에서 SSH 접속을 하여 디렉토리 목록도 편집기에서 노출시켜서 너무 편하게 작업을 할 수 있는 툴이다. 한번 보자.

 

1. 확장탭에서 Remote Development를 검색하여 설치한다.

2. F1를 눌러서 SSH를 검색하면 많은 메뉴 중에 Open Configuration File...있을 것인데 그것을 누르면 내 PC의 SSH config 파일을 선택한다. (C:\Users\사용자명\.ssh\config)

3. config 파일을 열면 처음에는 아래처럼 있다. 

파일 안에 호스트랑 유저를 입력하고 저장한다.

Host [계정명]@[IP 주소]:[포트번호]
    HostName [IP 주소]:[포트번호]
    User [계정명]

4. 이제 연결을 해보면된다. F1 누른 후 Remote-SSH:Connect to Host...를 선택한다.

그러면 아까 위에서 config 파일에 저장해둔 연결 호스트가 나온다. 

나는 이 부분에서 잘 안됐다. 그래서 나는 config 파일에 저장한게 안되니 ADD New SSH Host...를 하여 새로 입력하고 config 파일에 저장해줬다. 

ssh 계정명@ip주소:포트번호(또는 도메인) 형식으로 입력하고하고 Enter 키를 누르면 어디 파일에 저장해야될지 선택하면 된다.

근데 이렇게 하면 계정이름이 윈도우 계정이름으로 잡힌다. config 파일을 열어서 Host 부분을 보면 IP주소와 포트번호만 써있으니 Host IP주소 앞에 User명@IP주소:포트번호로 바꿔주자

결과적으로 config에 먼저 들어가서 저장할 필요는 없다.

 

5. Host를 선택하면 해당 SSH 의 운영체제를 선택 후 패스워드를 입력하면 끝난다.

 

 

VSCode에서 원격 디렉토리 접근이 가능하며 편집도 가능하고 터미널까지 가능하다. 너무 편리하다. 지금까진 파일질라로 PC에서 파일 편집해서 파일질라로 옮기고 했는데 그럴 필요가 없어졌다.

 

'IT > general' 카테고리의 다른 글

SSL(Secure Sockets Layer)  (0) 2021.12.07
[방화벽] 기본 포트 차단  (0) 2021.11.22
[IDE] 이클립스 설치  (0) 2021.06.03
[가상화폐] 가정용 데스크탑 PC 이더리움 채굴  (0) 2021.05.28
[통신 프로토콜] MQTT  (0) 2021.05.21

서버를 계속 운용하다보니 포트가 제대로 열렸는지 확인해야될 경우가 생겼다. 그래서 간단하게 알아보자

 

netstat -nap

위 명령어는 열려 있는 모든 포트를 확인한다.

 

netstat -nap | grep LISTEN

위 명령어는 현재 LISTEN 중인 포트만 확인할 수 있다.

 

netstat -nap | grep 3306

위 명령어는 특정 포트를 확인할 수 있다.

 

위 명령어를 통해서 포트에 해당하는 프로세스 아이디를 가지고 프로세스를 죽일 수 있다.

kill -9 3306

외주를 준 프로젝트 백엔드 소스코드를 받았는데 로컬테스트를 하기 위해 내가 사용하는 PC에서 구동을 해보려 하지만 모듈이 설치가 안된다. node와 npm 버전 때문인 것 같다. 그래서 업데이트를 해보려고한다.

 

 

Node.JS 공홈에 나와 있는 방법을 우선 올린다.

 

윈도우는 그냥 패키지 매니저 홈페이지에서 다운 받아서 원래 있던 폴더에 덮어쓰면 된다.

 

 

아마 검색을 하면 n 으로 Node.JS 패키지를 설치를 하는게 많을텐데 괜히 힘 빼지 말자 n은 리눅스 계열이다.

나도 윈도우에서 주구장창 했다... 결과 안된다. 아래처럼 EBADPLATFORM 에러가 발생한다. 대충 써보면 내가 사용중인 OS는 지원을 하지않는다는 얘기다. 

각 OS 마다 업데이트 방법이 다르니 공홈을 참고하자.

왠만한거 다 세팅했는데 공개 테스트에 App Bundle을 올리고 버전 검토를 누르고 기다리는데 아래 처럼 오류가 발생했다. 

 

앱에 버전 코드 1의 APK가 있으므로 android.permission.CAMERA, android.permission.RECORD_AUDIO, android.permission.READ_PHONE_STATE, android.permission.READ_CONTACTS 권한이 필요합니다. APK에서 이 권한을 사용하는 앱에는 개인정보처리방침을 설정해야 합니다.

 

대충 먼소리냐 특정 권한을 사용하려면 개인정보처리방침 URL을 등록해야된다.

 

콘솔이 예전이랑 많이 달라져서 당황했다. 처음 세팅할 때 나왔어야 했는데 앱을 업로드하고 검토 누르니깐 대시보드에 생겼다. 개인정보처리방침을 URL에 등록하자.

 

+ Recent posts