전체 글 31

[Linux] JVM 상태 모니터링 및 GC 정보 확인 ( jstat 명령어 )

JDK 1.6부터 함께 제공되기 시작한 모니터링 및 분석 툴. 보통 JVM 튜닝을 하기 위하여 JVM 상태를 모니터링하고 GC(Garbage Collection) 정보를 확인한다. jstat에서 사용할 수 있는 옵션 Option Description -class 클래스 로더의 동작에 대한 통계 -compiler HotSpot의 JIT 컴파일러에 대한 통계 -gc GC된 heap의 동작에 대한 통계 -gccapacity 세대마다의 용량과 대응하는 영역 통계 -gccause GC 통계 데이터(-gcutil 옵션)와 직전 및 현재의 GC 이벤트의 원인 -gcnew New 세대 동작에 대한 통계 -gcnewcapacity New 세대의 사이즈와 대응하는 영역에 대한 통계 -gcold Old 세대 및 Perman..

Linux 2024.01.25

[Linux] Socket 상태 조회 ( Socket Statistics )

리눅스에서 네트워크 상태를 확인하기 위해 흔히 사용하는 명령어로 netstat 명령어가 존재하나 최근 리눅스 배포판은 netstat 보다 새로운 명령어인 ss 사용을 권장하고 있음. ss는 옵션 없이 사용하면 listening socket을 제외하고 현재 연결되어 있는 모든 소켓(TCP/UDP/Unix)을 표시. ss는 다양한 옵션을 제공한다. 자주 사용되는 옵션은 다음과 같다. ss [options] [ filters ] Option Description a 전체 포트 보기 ( listening socket 포함 ) t TCP 포트 보기 u UDP 포트 보기 x 유닉스 포트 보기 l Listening 상태의 포트 보기 p 프로세스명 표시하기 n 출력화면의 호스트명, 포트 사용자명 보기 Filter De..

Linux 2024.01.24

[Java] Time Orderd UUID

UUID를 Primary Key로 썼을 경우 MariaDB InnoDB 테이블의 Primary Key는 Clustered 인덱스로 물리적으로 순서대로 유지가 가능 UUID의 값은 unique하긴 하나 랜덤하게 발생되는 값으로, Primary Key 컬럼일 경우 Clustered Index로 재배열하게 되어, InnoDB 스트로지 엔진의 부하가 발생. 해결방안 UUID를 랜덤하게 생성하되 이 값을 sequencial 하게 생성하여, DB 입장에서 새로운 데이터가 들어오더라도 indexing으로 인해 드는 리소스가 랜덤값보다 현저히 감소. Java UUID Generator (JUG) Library 사용 ( 아래 dependecy 추가 ) com.fasterxml.uuid java-uuid-generator..

Java 2022.02.23

/dev/null 2>&1 와 nohup, & 의미

shell(#mode)에서 간단하게 명령어를 통해 테스트를 진행하면서 "/dev/null 2>&1"의 의미를 알아봅니다. 아래 명령어는 표준 출력을 /dev/null로 redirection 하라는 의미로 표준출력을 버리라는 의미입니다. $ rm test > /dev/null 하지만, test라는 file이 존재하지 않는 경우 아래와 같은 표준에러가 출력됩니다. $ rm test > /dev/null rm: cannot remove 'test': No such file or directory 방금 언급했지만, 이것은 "표준출력"이 아닌 "표준에러"이기 때문에 화면에 출력이 된것입니다. 다시 강조하면 위에 예제는 /dev/null 로 redirection 을 통해 화면 출력을 하지 않는것은 표준출력에 한해서..

Linux 2021.08.25

[Java] JMX를 통한 자원 모니터링

JMX 확장 라이브러리를 이용한 Jconsole, Jvisualvm 기반으로 서버 실시간 자원 모니터링. ( Thread dump도 지원한다. ) Java 실행하는 쉘 스크립트를 이용하여 JMX port 오픈하는 방법 DEBUG_OPT="-Dcom.sun.management.jmxremote -Dcohttp://m.sun.management.jmxremote.port= #{JMX PORT} -Dcohttp://m.sun.management.jmxremote.rmi.port= #{JMX PORT} -Dcohttp://m.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcohttp://m...

Java 2021.06.11

[Linux] TCPDUMP 사용법

LINUX TCPDUMP 사용법 TCPDUMP는 주어진 조건식을 만족하는 네트워크 인터페이스를 거치는 패킷들의 헤더를 출력해 주는 유틸 ( 설치되어 있지 않을 경우, yum install tcpdump 명령어를 이용하여 설치 ) 명령어 : tcpdump [option] [expression] [host] ( tcpdump -i any -w test.pcap -C 16 -s 1500 -z root port 11200 Option -i device : 어느 인터페이스를 경유하는 패킷들을 잡을지 지정한다. 지정되지 않으면 시스템의 인터페이스 리스트를 확인하여 가장 낮은 번호를 가진 인터페이스를 선택 ( loopback은 제외 ) -w : capture packet을 분석하여 출력하는 대신에 파일로 저장한다. ..

Linux 2021.02.06

[Network] WireShark 필터 명령어 방법

WireShark 필터 주요 기능 이더넷 통신 모듈간 문제가 발생 했을 경우, 어떠한 에러가 발생하고 있으며, 클라이언트 / 서버 간 잘못된 동작을 파악하기 위함 1. MAC ID 필터링 - Source & Destination둘다 : eth.addr = 00:12:34:56:78:9A - Source : eth.src == 00:12:34:56:78:9A - Destination: eth.dst == 00:12:34:56:78:9A 2. IP 필터링 - Source & Destination 둘다 : ip.addr == 13.107.4.50 - Source : ip.src == 13.107.4.50 - Destination : ip.dst == 13.107.4.50 3. PORT 필터링 (TCP,UDP ..

Network 2021.02.06

[Java] 공개키(Public Key) 와 개인키(Priviate Key)

대칭키와 비대칭키란? 대칭키는 암호화 / 복호화 시에 사용하는 키가 동일한 방식으로 1개의 키만 사용한다. 전자문서(비밀편지)가 대칭키(열쇠)로 암호화 되면 똑같은 대칭키를 가지고 있는 상대방만이 이 전자문서를 복호화 할 수 있으며, 누군가가 암호화된 전자문서를 입수 하여도 이를 복호화하지 못하기 때문에 입수한 사람에게는 아무 의미가 없는 문서이다. 비대칭키는 사용하는 키와 복호화 할 때 사용하는 키가 다른 경우를 말한다. 타인에게 절대 노출되어서는 안되는 비밀키(개인키), 비밀키를 토대로 만든 공개키가 쌍을 이룬 형태이다. 2개의 키를 사용한다. 공개키 - 사람들에게 공개된 키이며 정보를 암호화 할 수 있다. 비밀키 - 사용자만 알고 있는 암호를 풀 수 있는 키 Java RSA 암호화/복호화 Util ..

Java 2020.12.10

[Java] 암호 알고리즘 / 운용 모드 / Padding

암호 알고리즘 자바에서는 대칭키 알고리즘을 사용하여 데이터를 암호화/복호화 시에 javax.crypto.Cipher 클래스를 사용한다, 클래스의 인스턴스는 정적 메서드인 Cipher.getInstance() 를 호출하여 생성할 수 있는데, 이 때 호출 시 사용할 알고리즘, 운용 모드, 패딩 방식을 인자 값으로 넘겨줘야 한다. 혼돈과 확산을 달성하기 위해 Substitution 과 Permutation을 이용한다. Subsititution은 문자를 다른 문자로 바꾸는 것이고, Permutation은 문자들의 순서를 바꾸는 것이다. Substituition과 Permutation을 한번 수행하는 것이 암호 알고리즘의 기본 수행 단위 이다. 암호문은 이를 여러번 수행할수록 안전하다. Substitution-P..

Java 2020.11.28

[Design Pattern] Chain of Responsibility Pattern

책임 연쇄 패턴( Chain of Responsibility Pattern ) 명령 객체와 일련의 처리 객체를 포함하는 패턴 각각의 처리 객체는 명령 객체를 처리할 수 있는 연산의 집합이며 체인 안의 처리 객체가 핸들링 할 수 없는 명령은 다음 처리 객체로 넘겨진다. 체인에 들어가는 객체를 바꾸거나 순서를 바꿈으로서 역할을 동적으로 추가/제거 및 상황에 따라 동적으로 핸들러를 추가하거나 제거 할 수 있으며 이러한 변화가 전체 구조에 아무런 영향을 주지 않도록 클래스들 간의 낮은 결합도로 구현되어있다. 명령에 대한 처리가 반드시 수행된다는 보장이 안되므로 반드시 명령이 처리 될 수 있도록 적절한 체인의 순서 구현 필요 ※ Sample Code public abstract class Middleware { ..

Java/Design Pattern 2020.11.23