반응형

간단한건데 해당 옵션을 모르면 헤메는 경우가 있어 기왕 관련 작업한거 정리해보려 한다.

일반적으로 쉘스크립트에서 파일이 존재하는지 확인하고 싶다면 아래처럼 사용하면 된다.

if[ -e $FileName ]; then
	echo "file exist"
else
	echo "file not exist;
fi

주요 옵션 몇개만 살펴보자면

-c : 파일이 존재하고 특수문자가 있는지 체크 (File exists and is character special)

-e : 파일이 존재 하는지 체크 (File exists)

-d : 파일이 존재하고 파일이 폴더인지 체크 (File exists and is a directory)

-f : 파일이 존재하고 보통 파일인지 체크 (File exists and is a regular file)

-h : 파일이 존재하고 symbolic link 파일인지 확인 (File exists and is a symbolic link (same as -L)

-r : 파일이 존재하고 read 가능한 파일인지 확인 (File exists and read permission is granted)

-w : 파일이 존재하고 쓰기 가능한 파일인지 확인 (File exists and write permission is granted)

-s : 파일이 존재하고 0size 파일이 아닌지 체크 (File exists and has a size greater than zero)

 

반응형
반응형


톰캣(tomcat)의 기본포트가 8080인 이유를 아시나요???


많은 분들이 WAS로써 톰캣(tomcat)을 사용하실텐데요. 


특히나 요즘은 스프링부트로 인한 임베디드 톰캣을 사용하실줄로 압니다.


톰캣도 그렇고 스프링부트의 임베디드 톰캣도 그렇고 그럼 왜 기본 디폴트 포트는 8080이냐???하는 의문이 생길 수도 있는데요...(저는 그랬습니다...)


간단히 설명을 드리자면 리눅스나 유닉스는 1024이하의 포트(well-known port)들은 일반 유저 권한에서 바인딩 할 수 없도록 되어 있습니다.


이유는 보안때문인데요~!



8080포트에 대한 특별한 이유는 없습니다. 그저 1024이상의 포트중 하나를 임의로 디폴트로 설정한 것 일뿐(이라고 저는 생각합니다.)


하지만 외부 서비스를 해야하는경우에는 80포트로의 접근이 필요한 경우가 있습니다.


단순히 naver.com:8080이라고 사용자들이 접속하게 된다면 불편할테니까요...


그래서 루트권한(sudo)로 톰캣 포트를 80으로 설정 후 어플리케이션을 기동시켜서 사용할 수 는 있습니다.


다만! 위에서 말씀드렸듯 보안 문제가 존재합니다.


애드센스 자동삽입 광고


톰캣서버는 구동시에 tomcat 유저 권한으로 구동되게 됩니다. 때문에 톰캣을 통해 서비스되는 웹을 통해 해킹이 되더라도


tomcat유저 권한에 해당하는 부분까지만 접근 가능하게 됩니다.


따라서 루트권한(sudo)로 80포트로 구동시키게 된다면 해킹당했을 경우보단 안전하다고 할 수 있습니다.




물론 이런 문제를 회피하는 방법은 iptables를 통한 포트포워딩 방식이나 WAS앞단에 웹서버(apache, nginx)를 둬서 해결할 수 있지만


저 경험상에 의해서 iptables를 통해 포트포워딩을 할 경우 문제가 있었던 경험이 있기에 톰캣 80포트 8080 포트로 포워딩 이슈 


앞단에 웹서버를 두시고 서비스하는 방법이 좋다고 생각합니다.

반응형
반응형


리눅스에서 openjdk 업그레이드 하기!!!


1. 자바 버전 확인

$ java -version


2. 설치 가능한 openjdk 버전 확인

$ yum list java*jdk-devel



3. 설치고자하는 버전을 확인 후 설치

$ yum install -y java-1.8.0-openjdk-devel.x86_64


나의 경우에는 설치하고 java -version 명령어를 통해 확인했을 때 잘 업그레이드 된 걸 확인할 수 있었다.



혹시 바뀌지 않은 경우 다음과 같이 바꾸도록 하자.

$ /usr/sbin/alternatives --config java



해당 명령어를 쳐서 원하는 버전의 번호를 선택해주면 된다~!!!!



반응형
반응형

쉘 스크립트를 사용하다보면 스크립트 중간에 그 다음 로직으로 넘어가기전 특정 시간동안 멈추고 싶을 경우가 있다.


그럴 경우 다음과 같이 원하는 시간만큼 간편히 sleep 시킬 수 있다.


[ shell script 간편 sleep 포맷 ]

sleep .5 # Waits 0.5 second.

sleep 5  # Waits 5 seconds.

sleep 5s # Waits 5 seconds.

sleep 5m # Waits 5 minutes.

sleep 5h # Waits 5 hours.

sleep 5d # Waits 5 days.


반응형
반응형

특정 포트의 프로세스를 죽이고 싶을 때 사용


특정 포트를 사용하는 프로세스를 찾고 싶을 때

lsof (list open file)을 나타내며, 

시스템에서 열린 파일 목록을 알려주고 사용하는 프로세스, 디바이스 정보, 파일의 종류등 상세한 정보를 출력해준다.

lsof -n -i4TCP:8080(원하는 port)


lsof 명령이 안먹힌다면 netstat

netstat -anp | grep LISTEN | grep :포트번호

> tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 2542/java


뒤에 2542가 프로세스ID이다.



[ lsof 실행결과 ]

COMMAND  PID   USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME

java    6079 irteam   70r  IPv6 197862007      0t0  TCP 172.20.0.5:webcache->10.161.240.88:35522 (ESTABLISHED)


PID를 찾아서


kill -9 PID(6079)


생각보다 서버운영시 필요할때가 많기 때문에 되도록이면 외우도록 하자~!

반응형
반응형

리눅스(Linux) 페이지 캐시


리눅스는 파일 I/O의 성능 향상을 위해 페이지 캐시라는 메모리 영역을 만들어서 사용한다.


한 번 읽은 파일의 내용을 페이지 캐시라는 영역에 저장 시켜 놨다가 다시 한 번 동일한 파일 접근이 일어나면 디스크에서 


읽지 않고 페이지 캐시에서 읽어서 제공해 주는 방식.


free -k 명령으로 파일을 읽기전 cached 영역과 cat으로 파일을 읽은 후 free -k 명령으로 확인해 볼 수 있다.



반응형
반응형

vi 로 파일을 열었을 때 파일의 마지막 줄이 개행문자로 끝나지 않았을  경우 콘솔 하단에 파일이름 옆 [noeol]이라고 적혀있는 것을 볼 수 있다.


해당 문제를 해결하기 위해서 다음 명령어를 실행해준다.


echo "" >> fileName




반응형
반응형

클라우드 네트워크 교육(0627)

사내에서 클라우드 네트워크 교육(0627)을 듣고 새롭게 알게된 내용에 대해 간략하게 정리.


공해야할 것 들이 너무 나도 많음을 느낀다.

[ 교육들으며 새로 알게 된 내용 ]

1. 실제 네트워크 확인시 패킷을 뜬다고 소위 말하는데 실제로는 OSI Layer상의 Datalink Layer의 Frame을 의미한다

2. Frame, Packet, Segment의 주요한 차이는 header가 가지는 정보의 차이에 있다고 볼 수 있다.

세그먼트(Segment, OSI 7계층의 전송 계층(Transport Layer)) : 데이터를 네트워크를 통한 실질적인 전송을 위하여 적절한 크기로 분할한 조각.

패킷(Packet, OSI 7계층의 네트워크 계층(Network Layer)) : 전송을 위해 분할된 데이터 조각(세그먼트)에 목적지까지의 전달을 위하여 Source IP 와 Destination IP가 포함된 IP Header가 붙은 형태의 메세지

프레임(Frame, OSI 7계층의 데이터링크 계층(Data Link Layer)) : 최종적으로 데이터를 전송하기 전에 패킷에 Header(Mac Address 포함)와 CRC를 위한 Trailer가 붙은 메세지

3. 리눅스에서 MAC ADDRESS확인시 ifconfig외에 ip link 및 ip -4 addr로 확인 가능 (가급적이면 ip 명령어에 익숙해지자 - 네트워크관련 모든 명령 처리가능)


4. MAC ADDRESS는 유니크한가? 로컬 LAN안에서는 유니크해야한다.


5. MAC ADRRESS는 permanent한가? permanent하지 않다. ip link set을 통한 abusing가능. 그렇기 때문에 MAC ADDRESS를 통한 인증처리는 지양하자.


6. 패킷 전송 크기를 정하는 MTU(Maximum Transmission Unit) 가 작을 경우 header에 의한 overhead를 초래할 수 있다.

ex) 
데이터 사이즈 3000byte
MTU=500 (byte) 인경우 6frame 으로 나눠 전송, 각 프레임에 헤더는 14byte * 6이된다
MTU=1500 (byte, 일반적 설정) 2frame, 헤더는 14byte * 6이 된다.

     [ MTU 더 궁금하면참고 ] http://www.packetinside.com/2013/02/mtumaximum-transmission-unit.html


7. 네트워크 연결 확인시 ping보다는 arping 명령어 이용 ping의 경우는 어떤 layer에서 막혔는지 확인이 힘들다.


8. 네트워크 대역폭 확인 시 iperf3 명령어 사용 (참고, http://sola99.tistory.com/374)


9. 토스트 클라우드 네트워크는 각 서비스별에 맞춰 tenant하게 설계되어짐 (share x) - 서로간 통신을 위해서는 floating IP 필요


10. AWS에서는 virtual private cloud를 사용해 각 계정 전용 가상 네트워크 제공


네트워크에 대한 공부도 틈틈히 시간내서 하도록 하자. 

알고개발하는 것과 모르고 개발하는 것은 천지차이


반응형
반응형

 


 안녕하세요. 오늘은 최근 겪었던 문제 상황에 대해 포스팅 하도록 하겠습니다. 최근 담당하고 있는 프로젝트 중 고객의 문의가 들어오면 해당 문의가 상담원들에게 배분이 되도록 작동하는 배치성 프로젝트에 문제가 발생했습니다. 특정 시간이 되면 미처리 문의들이 배분이 되어 웹 화면에서 조회가 되어야 정상이지만 어찌된 일인지 아무리 테스트 문의를 넣어보아도 문의가 제대로 배분이 되지 않았습니다. 이 문제를 해결하면서 겪었던 에피소드에 대해 지금부터 포스팅 하도록 하겠습니다. 


# 해당 문제는 알파 환경(정식 사용자들에게 서비스 되지 않는 환경)에서 발생한 상황입니다. 


문제 상황 

:: 고객들의 문의가 상담원들에게 분배가 되지 않는 현상. 고객들이 문의를 넣게 되면 배치성 프로젝트를 통해 미처리 문의들을 상담원들에게 배분해주는 프로젝트가 정상 작동하지 않음


원인 파악

:: 위와 같은 문제상황이 발생하고 일단 서버에 접속해 톰캣이 혹여나 죽진 않았는지 ps -ef | grep java 명령어를 통해 확인해 보았습니다. 확인을 한 결과 톰캣은 정상작동하고 있는 것을 확인하였습니다. 그래도 혹시나 해서 톰캣을 재시작 해보았지만 역시나 정상작동하지 않았습니다. 그렇게 원인 파악에 대해 고민하던 중 선배님 df로 파일시스템을 사용해 보라고 하셨습니다. df 명령어(밑에 간단한 설명)를 통해 파일시스템을 보니 파일시스템 사용률이 100%을 다다랐던 것을 확인 할 수 있었습니다. 

 


해당 문제의 원인은 프로젝트에 약 15개 정도되는 배치성 프로세스(보통 1,2 분에 한 번씩)가 작동하고 있었는데 로그 레벨이 DEBUG로 설정되어 있었던 것이 화근이되었습니다. 이에 아무도움이 되지 않는 불필요한 로그들이 무수히 쌓이게 되었고 파일시스템 사용률이 100%로 치닫게 되었던 것이었습니다.

[그림 출처 : http://changpd.blogspot.kr/2013/05/spring-lo4j.html]


위의 그림을 보시면 log4j의 레벨을 보실 수 있는데 DEBUG로 설정을 하게 될 경우 DEBUG 상위수준의 로그 또한 모두 기록하는 것을 파악할 수 있다. (보통 실제 리얼환경에서는 ERROR 사용) 


문제 해결

:: 먼저 해당 로그 파일들을 제거(실제 리얼환경에서는 백업을 하길 권장)해주고 톰캣을 재시작 해주었다. 실제 환경일 경우 파일 시스템 용량이 특정 %이상 치솟았을 때는 메일, SMS로 상황을 미리 파악하고 대처할 수 있지만 알파환경의 경우에는 그렇지 않기 때문에 파일시스템 용량 상황을 주기적으로 점검해주고 특별한 이슈가 없다면 로그 레벨의 수준을 DEBUG 상위 레벨로 설정해 줄 것을 권장한다.  

 


#df 명령어에 대한 간단한 설명

:: 사용중인 파일시스템의 전체용량, 사용한 용량, 사용가능한 용량, 사용율, 마운트 정보 등을 보여주는 명령어로 현재 사용중인 파일 시스템들의 디스크사용량을 출력한다. df 명령어는 /etc/fstab파일에서 파일시스템정보를 참조하고, /etc/mtab에서 마운트된 정보를 참조한다고 한다. 기본표시 용량단위는 KB(Kilo Byte)이다. 



모니터링을 통해 서버 상태를 항상 체크하도록 합시다^^



반응형

+ Recent posts