Sptring boot 프로젝트를 war 파일로 배포하는데 

tomcat이 profils 설정을 읽지 못하는 상황.

 

프로젝트에는 아래와 같이 프로퍼티를 구분해뒀는데

 

application-dev.properties

application-prd.properties

 

프로파일 파일을 읽어오지 못하니 자꾸 에러가 발생합니다.

이런 경우 tomcat 설치 디렉토리에서 bin 폴더를 찾아서

setenv 파일을 추가해주면 됩니다.

 

Linux

setenv.sh 파일 생성 후 아래 내용 추가

JAVA_OPTS="$JAVA_OPTS -Dspring.profiles.active={profile}"

 

Window

setenv.bat 파일 생성 후 아래 내용 추가

JAVA_OPTS=%JAVA_OPTS% -Dspring.profiles.active={profile}

 

 

위 과정을 통하여 파일을 생성했으면 chmod 명령어로

실행 권한까지 부여해주어야 합니다.

 

$ chmod +x setenv.sh

 

마지막으로 톰캣을 재기동하면 정상적으로 프로파일 내용을

읽어 올 것입니다.


오늘은 웹 캐시 저장을 방지하는 방법을 공유합니다.

 

웹 캐시는 사용자(client)가 웹 사이트(server)에 접속 할 때, 서버 지연을 줄이기 위해 정적 컨텐츠(image, js, css) 등을 임시 저장하는 정보기술 입니다.

캐시를 이용하면 저장된 웹 사본의 정보를 불러옴으로써 더 빠른 열람이 가능하며 트래픽 낭비를 해소할 수 있습니다.

 

 

※ 캐싱의 문제점

 

- 빠르게 변화되는 사이트에 비해 사용자는 이미 하드디스크에 캐시된 버전으로 보일 수 있으므로

포맷이 안 맞거나 올바르지 않은 이미지로 보여질 수 있습니다.

 

- 웹 서비스 내 주요 정보 및 민감 정보를 다루는 페이지가 존재할 경우 해당 페이지의 캐싱 방지 설정이 따로 없다면

사용자 세션이 만료된 이후에도 브라우저 내 뒤로가기 등을 통해 별도의 인증 과정 없이 주요 페이지에 접근이 가능해집니다.

이로 인해 민감한 정보들이 악의적인 사용자들에게 노출될 가능성이 있기 때문에 캐싱 방지를 하는 것이 좋습니다.

 

 

각 언어 별 no-cache 설정 방법은 문법 형태의 차이만 약간 있을 뿐 설정 방법은 동일합니다.

 

 제목

 설명 

Cache-Control

 HTTP/1.1 스펙 에서 정의, no-cache, no-store 등의 설정

Pragma

 Cache-Control이 생기기 전에 HTTP/1.0 no-cache 설정을 위해 사용되는 헤더. HTTP/1.0 를 사용하는 클라이언트를 위해 사용

Expires

 캐시 만료 시간 지정 '-1' 설정 시, 캐시된 페이지를 즉시 만료

 

 

HTML, ASP, JSP, PHP 웹 캐시 저장 방지

 

HTML인 경우

<META http-equiv="Pragma" content="no-cache">
<META http-equiv="Cache-Control" content="No-Cache">
<META http-equiv="Expires" content="-1"> 

 

ASP인 경우

<%   
    Response.Expires = 0
    Response.AddHeader "Pragma","no-cache"
    Response.AddHeader "Cache-Control","no-cache,must-revalidate"
%>   

 

JSP인 경우

<%   
    response.setHeader("Cache-Control","no-store");
    response.setHeader("Pragma","no-cache");
    response.setDateHeader("Expires",0);
    if (request.getProtocol().equals("HTTP/1.1"))
    	response.setHeader("Cache-Control", "no-cache");
%> 

 

PHP인 경우   

<?
    header("Pragma: no-cache");
    header("Cache-Control: no-cache,must-revalidate");
?>

 

 


NAS NFS(Network File System)을 사용하다 Stale File Handle 에러가 발생하는 경우가 발생.

NFS 연결되어 있는 디스크 연결이 끊어져 버린 경우의 상태라면

위와 같은 에러를 접할 때가 있습니다.

 

 $ ls
ls: cannot access nas: Stale file handle
total 0

 

아래와 같은 명령어를 통해 마운트 된 모든 파일 시스템의 상태를 확인해 봅니다.

NFS 의 연결 상태가 비정상적이라는 것을 확인

 $ cat /proc/mounts // proc/mounts 파일

 

 

언마운트를 하고 다시 마운트를 하려고 해도 동일한 메시지가 출력됩니다.

 $ mount -t nfs 10.10.10.10:/nas /nas

mount.nfs: Stale NFS file handle

 

이런 경우 간단한 해결방법은 NFS 마운트 포인트를 끊고

다시 연결해 주면 되는데 umount 하려고 해도 제대로 연결이 끊어지지 않습니다.

 

이럴때 umount '-f' 옵션을 사용하면 말끔히 해결됩니다.

아래와 같이 -f 로 언마운트를 하고 다시 마운트를 해 주면 됩니다.

 

$ umount -f /nas

 

 


node js 포어그라운드(foreground)에서 실행

 

nodejs로 개발 하다 보면 보통 node app.js 명령어로 실행하는데 이는 foreground에서

실행 되기 때문에 터미널을 종료하면 같이 종료되는 문제가 발생.

 

 

 

node js 백그라운드(background) 실행 & forever CLI 도구(Command line interface) 사용

 

 > 백그라운드 실행

 

nodejs로 작성된 웹 서비스를 유지하기 위해 터미널 창을 매번 띄워 놓을 수도 없는 일.

이 같은 경우에 nohup 명령어를 사용하게 되면 사용자가 SSH 세션을 로그오프 해도 프로세스는

데몬 형태로 실행되기 때문에 지속적으로 실행되게 됩니다.

 

- nodejs 백그라운드 실행

nohup node server.js > app.log &

 

& 는 백그라운드 실행을 의미하고 출력파일은 app.log에서 확인 가능합니다.

nohup로 실행할 파일은 퍼미션 755 이상이어야 합니다.

 

- nodejs 프로세스 확인

ps -ef | grep node
root      72635  71903  0 11:02 pts/0    00:00:00 node server.js
root      72963  71903  0 11:07 pts/0    00:00:00 grep --color=auto node

ps -ef 를 통해 실행중인 프로세스 아이디를 확인해보면

72635이라는 ID로 실행 중임을 확인 할 수 있습니다.

 

- nodejs 프로세스 종료

kill -9 72635

종료는 kill process id : kill -9 {id}로 가능합니다.

 

 

- nodejs 프로세스 종료를 한줄로 실행하기

kill -9 $(ps -ef | grep node | awk '{print $2}')

 

$() 표현식은 내부에 위치한 명령을 실행하고 출력 값을 다음 명령에 대한 인수로 제공합니다.

이는 backquote key로 대체 하여 사용 가능합니다.

awk '{print $2}' 는 지정된 레코드로 부터 두번째 필드의 내용을 출력합니다.

 

 

 >  npm forever 모듈 사용(링크)

 

실제로 개발 & 서비스 환경에서 서버가 자꾸 내려가면 안 될 일.

따라서 forever 모듈을 사용해보았습니다.

 

$ sudo npm install forever -g

설치한 서버 인스턴스로 접근하여 npm 명령어를 사용, -g 옵션으로 global하게 forever모듈을 설치합니다.

 

$ sudo forever start server.js

sudo 명령어를 사용하여 서버를 구동해줍니다. (80포트가 root 계정에서 접근하기 때문)

 

$ sudo forever list

forever list 명령어를 사용하면 백그라운드에서 실행 중인 프로세스 정보를 확인 할 수 있습니다.

 

$ sudo forever stop 0

forever list 명령어로 확인한 uid(식별번호)가 0번이니 

sudo forever stop 0 명령어로 실행 중인 프로세스를 종료할 수 있습니다.

 

 

 

 

 

 


 

증상 : 원격데스크톱 연결 인증 오류발생. CredSSP 암호화 오라클 수정 때문일 수 있습니다.

윈도우 10 원격데스크톱 연결시 위와 같은 메시지가 팝업되면서 접속되지 않는 현상이 발생하였습니다.

 

 

원인 : CredSSP 보안 취약점 패치로 인한 문제

 

대충 확인해보니 원격 데스크톱 연결시 CredSSP (Credential Security Support Provider) 프로토콜을 사용하는데

CredSSP 프로토콜 원격코드 실행 취약점 문제로 인해 패치를 진행하였고 그로 인해 접속이 되지 않는 문제였는데요.

자세한 내용은 아래 링크를 확인하시면 됩니다.

 

https://support.microsoft.com/ko-kr/help/4093492/credssp-updates-for-cve-2018-0886-march-13-2018

 

해당 증상을 해결하기 위한 방법은 간단하게 대상 PC 보안 업데이트를 진행하면 되겠지만

당장 서비스를 중지할 수 없는 상황일 때 아래 해결방안을 참조하세요.

 

 

해결 : 아래와 같이 설정 (패치가 적용되지 않은 클라이언트를 수락하는 설정)

 

원격 컴퓨터에 연결하고자 하는 클라이언트 PC에서 로컬 그룹정책 편집기를 실행합니다.

 

gpedit.msc 으로 컴퓨터 구성 > 관리 템플릿 > 시스템 > 자격 증명 위임 >Oracle 수정 암호화를 더블클릭 합니다.

 



오라클 수정암호화를 사용으로 선택하고 아래 탭 보호수준을 취약으로 변경후 저장합니다.

 

 

2. cmd > Gpupdate /force를 명령어를 입력하고 문제가 해결되는지 확인합니다.

 

만일 안될 경우.. 레지스트리 편집기를 열어서

 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters] "AllowEncryptionOracle"=dword:00000002

AllowEncryptionOracle 값 1 -> 2로 변경한 후 되는지 확인해보세요.