본문 바로가기

Java95

[Java] JMX (JavaManagement eXtension) 간단한 예제 코드 JMX는 Java Management eXtention의 약자로 애플리케이션의 상태를 모니터링하고 설정을 변경할 수 있는 프레임워크다. JMX는 JDK 1.5부터 제공되기 시작했으며 많은 자바 개발자들 사이에서 사용되고 있는 기능이다. 구성 JMX 아키텍처는 3개의 레이어로 구성되어 있다. Instrumentation layer (MBeans) JMX agent layer (MBeanServer) Remote management layer (Connector, tools) JMX를 통해 리소스를 관리하려면 MBean이라는 Managed Beans를 생성해야한다. 이렇게 생성한 MBean을 MBeanServer에 등록하면, MBeanServer는 등록된 MBean을 관리하는 에이전트 역할을 하게 된다. 외.. 2022. 2. 24.
[Java] 데몬 스레드(Daemon Thread) 의미와 예제 자바에서 스레드는 일반 스레드와 데몬(Daemon) 스레드로 구분할 수 있다. 일반 스레드는 보통 우리가 아는 스레드의 개념이다. 그렇다면 데몬 스레드는 어떤 스레드이며, 일반 스레드와 어떤 점이 다른지 알아보자. 데몬 스레드(Daemon Thread) 데몬 스레드(Daemon Thread)는 우선 순위가 낮은 스레드로 백그라운드에서 사용자의 애플리케이션을 보조하는 역할을 수행하는 스레드다. 대표적인 데몬 스레드로는 JVM에 생성된 객체들의 메모리 공간을 회수하는 GarbageCollection을 수행하는 스레드가 있다. 데몬 스레드가 일반 스레드와 비교해서 가장 크게 다른 점은 프로그램이 종료할 경우에 발생한다. 사용자의 애플리케이션이 종료될 때, 사용자가 생성한 모든 일반 스레드의 수행이 모두 종료되.. 2022. 2. 14.
[Java] transient 키워드 의미 자바의 transient 키워드를 알아보기 전에 '직렬화(Serialization)'와 '역직렬화(Deserialization)'에 대해서 이해하고 넘어가야 한다. 직렬화와 역직렬화 '직렬화(Serialization)'는 JVM 메모리에 있는 객체를 바이트 스트림으로 변환하는 작업을 말한다. 주로 메모리에 있는 객체를 파일로 쓰거나 네트워크를 통해 다른 JVM으로 전송하는 동작이 필요할 경우 사용한다. 이렇게 변환된 바이트 스트림을 다시 자바 객체로 변환하는 것을 '역직렬화(Deserialization)'라고 한다. transient 키워드 자바의 transient 키워드는 객체의 필드 중에 직렬화하지 않을 것들을 지정하기 위해 사용한다. 즉, transient 키워드가 붙은 필드의 값은 직렬화 작업에서.. 2022. 2. 13.
[Linux] jstat 명령 사용법 jstat 명령은 JDK 1.6 버전부터 함께 제공되기 시작한 모니터링 및 분석툴이다. jstat 명령을 이용해서 JVM 상태를 모니터링하고, GC(Garbage Collection)에 대한 정보를 확인할 수 있다. 이 정보를 바탕으로 JVM을 튜닝할 수 있다. jstat 사용법 jstat -help 를 입력하면 jstat 명령어의 사용법을 확인할 수 있다. $ jstat -help Usage: jstat -help|-options jstat - [-t] [-h] [ []] Definitions: 아래에서 설명할 jstat 명령어의 옵션 -t 출력의 가장 첫번째 컬럼에 timestamp 출력 모니터링하려는 JVM의 PID 출력 모니터링 출력 사이에 샘플 번호 출력 모니터링 출력 주기 단위는 기본이 초, .. 2021. 12. 30.
[Java] InterruptedException이란? 자바로 코드를 작성할 때 가장 많이 고려되어야 하는 예외 중 하나가 InterruptedException이다. 스레드의 실행을 잠깐 동안 멈추기 위해 사용하는 sleep 코드를 살펴보자 try { Thread.sleep(1000); } catch (InterruptedException e) { /* Do something */ } 코드에서 단순하게 Thread.sleep() 코드만 사용하면 InterruptedException을 처리하지 않았다고 컴파일러가 에러를 발생시킨다. Thread.sleep() 같은 코드뿐만 아니라 자바 프로그램의 다양한 곳에서 InterruptedException이 발생할 수 있다. Java에서의 Interrupt 자바에서 '인터럽트(Interrupt)'는 스레드를 종료하기 위.. 2021. 12. 19.
[Java] Optional 사용법 및 예제 자바 8부터 Optional이라는 클래스가 지원되기 시작했다. Optional 클래스란 어떤 목적으로 사용되는지 알아보자. Java NPE 예방 자바 프로그램 코드를 작성하다보면 null 값에 대해 고려해야하는 경우가 많다. null 값을 제대로 처리하지 않으면 NPE(NullPointerException)을 만나게된다. 안정적인 실행을 위해 NPE가 발생하지 않도록 중간중간 null 체크를 해줘야하는데, 이게 코드를 여간 더럽히는게 아니다. 예를 들어보자. List items = getItems(); System.out.println(items.size()); getItems() 메소드를 통해 문자열 리스트 객체를 얻어온 다음 엘리먼트 개수를 출력하는 간단한 코드다. getItems() 메소드가 nul.. 2021. 8. 19.
[Java] 자바 가비지 컬렉션 기초(Garbage Collection Basic) 자바 개발자라면 '가비지 컬렉션(Garbage Collection)'에 대해서 고민하게 되는 순간이 온다. 토이 프로젝트나 작은 프로젝트에서는 가비지 컬렉션에 대한 관심이 적다. 가비지 컬렉터의 선택이 성능에 미치는 영향보다는 어떤 알고리즘을 사용했는지, 어떤 라이브러리를 사용하는지, 어떤 설정으로 구동하는지가 더 중요하다. 하지만 일정 규모 이상의 프로젝트를 진행하다보면 결국 가비지 컬렉터의 선택까지 고민하게 된다. 실력있는 자바 개발자라면 가비지 컬렉션의 동작에 대한 이해를 하고 자신이 구현하는 애플리케이션에 맞는 적당한 가비지 컬렉터를 선택, 설정들을 튜닝할 줄 알아야한다. 가비지 컬렉션(Garbage Collection) C언어나 C++ 같은 언어에서 메모리 관리는 프로그래머의 책임이다. 필요한 .. 2021. 8. 10.
[Hadoop] 하둡 클라이언트에서 커버로스(Kerberos) 인증 사용하기 - 여러 계정 인증 동시사용 (UserGroupInformation) 여러 사용자가 동시에 접근하는 하둡 클러스터를 서비스할 때, 데이터나 리소스에 대한 보안 강화를 위해 '커버로스(Kerberos)' 인증을 사용할 수 있다. 커버로스 인증을 사용하는 클러스터에 접근하려면 Principal과 Keytab 혹은 패스워드를 이용해 인증을 받고, 발급받은 커버로스 티켓을 이용해서 하둡을 사용하게 된다. HDFS 클라이언트가 네임노드 혹은 데이터 노드와 통신하면서 데이터를 받아오는 과정에서도 커버로스 인증을 사용할 수 있다. 하둡은 UserGroupInformation이라는 클래스를 이용해 커버로스 프로토콜을 사용할 수 있도록 프로그래머에게 편의를 제공한다. 메이븐 의존성 일단은 커버로스 인증을 사용하는 하둡 클라이언트를 테스트해보기 위해 다음 메이븐 의존성을 추가해보자. org.. 2021. 8. 8.
[Java(자바)] ThreadLocal 사용법 설명과 예제 자바를 이용해 멀티 스레드 프로그래밍을 하면 성능향상을 얻을 수 있다. 하나의 스레드에서 해야할 작업들을 여러스레드로 나누어 동시에 처리하면 훨씬 빠른 시간안에 작업을 마무리할 수 있다. 하지만 멀티 스레드 프로그래밍에서 가장 고민해야할 부분은 공유 리소스에 대한 동시성 제어다. 여러 스레드가 공통으로 접근하는 변수 값을 저장하고 읽는 과정을 동기화해야 문제가 생기지 않는다. 자바는 synchronized 키워드를 이용해서 특정 메소드 혹은 코드 블럭을 동기화 시키는 방법을 제공한다. synchronized 키워드와 더불어 자바에서 제공하는 도구로 ThreadLocal이 있다. ThreadLocal은 각 스레드가 자신만 접근할 수 있는 변수로 여러 스레드가 동시에 접근할 수 있지만 각자 자기만의 공간을 .. 2021. 7. 30.