본문 바로가기

전체 글46

LENOVO SLIM5-15ARE R7 4700U 선택 이유 / 보급형 중저가 노트북의 선택 방법 이번 포스팅에서는 제품에 대한 리뷰가 아닌, 필자가 노트북 구매(사전예약)를 하는 과정에서 모델 비교 및 선택 이유에 대해서 정리한 글입니다. 노트북 리뷰는 추후 제품이 도착한 이후에 진행할 예정입니다. 1년 전에 구입한 레노버 15인치 모델 게이밍 노트북을 개발과 업무 보조용으로 사용 중이었다. 개발 업무에는 차고 넘치는 성능의 노트북이었으나 무게(2.3Kg)와 배터리(1.5시간) 성능으로 이동성과 외부 사용성에 큰 제약을 받았다. 그리하여 해당 노트북을 처분하고 현재 큰 인기를 얻고 있는 AMD 르누아르 시리즈의 노트북을 구입하고자 한다. 필자가 필요한 노트북의 사양을 아래와 같이 정리하였다. CPU AMD, RYZEN 3세대 4000번대 고성능 저전력 모델. 메인 노트북으로 고성능을 요구하며, 개발.. 2020. 9. 4.
Java Invocation API를 사용한 JVM 내장화(Embedded) / Native 프로그램에서 Java 코드 호출하기 기존에 C언어 기반으로 개발된 프로그램에서 NoSQL, 메시지 서버, 분산 저장소 등에 데이터를 저장해야 할 일이 생겼다. 이들 저장소는 C언어 기반의 인터페이스(라이브러리)를 제공하긴 하지만, 대부분이 인터프리터 기반 언어의 API를 기본으로 제공하기 때문에 기능 확장과 안정성 측면에서 자바 기반의 인터페이스를 사용하고자 한다. 대부분의 기능(데이터 추출 및 가공)이 C 기반의 애플리케이션(프로세스)에서 수행되고 그 결과를 자바 자바 기반의 프로그램(프로세스)을 사용하여 목적(Target) 저장소에 데이터를 저장하고자 한다. 이 두 프로세스 간의 통신을 위해서 파일, 소켓, 표준입출력(Standard Input/Output) 채널, 그 밖의 운영체제에서 제공하는 IPC 기능을 사용할 수 도 있다. 하지.. 2020. 7. 23.
How to handle aborted transactions by Apache Kafka Broker and Consumer / 카프카 브로커와 컨슈머의 취소된 트랜잭션 처리 방법에 대한 이해 [편집 중] [편집 중] [편집 중] Apache Kafka 0.11부터 Idempotent producer와 Transaction 기능이 소개되었다. Idempotent producer는 메시지의 중복과 누락 없이 정확히 한번만 카프카 서버에 저장하는 방식(Exactly-Once Semantic)이며 Transaction은 여러 개의 메시지를 여러 파티션에 걸쳐서 원자적(Atomicity)으로 저장할 수 있는 방법을 제공한다. 이 두 가지 기능에 대해서 알아보다 보니 Kafka에서 ‘Aborted Transaction’을 처리하는 방법을 다루는 글이 많지 않아서 이를 정리하고자 포스팅을 하게 되었다. 이 글에서는 아래와 같은 질문에 답을 구하기 위한 내용을 다루고자 한다. 프로듀서가 KafkaProdu.. 2020. 7. 10.
Docker Desktop for Windows 설치 / Windows 10에 도커 설치하기 Windows 10에 Docker Desktop For Windows를 설치하는 방법을 정리한다. 제약 사항 및 설치 준비 현재 Docker For Windows 허브를 참고하면, Windows 10 64bit Pro/Education/Enterprise(Build 16299 이상) 버전에 설치가 가능하다고 한다. 자신의 CPU가 가상화를 지원하는지 확인하기 위해서는 작업 표시줄에서 마우스 우클릭하여 '작업 관리자'를 실행하여 '성능' 탭에서 가상화를 사용 중인지 확인하자. 가상화가 사용중이 아닐 경우 컴퓨터를 재시작하여 BIOS 셋업에서 가상화 지원 여부를 확인 후 활성화하도록 하자. 만약 BIOS 레벨에서 가상화를 지원하지 않을 경우 도커 설치는 가능하지만 설치하고 난 이후에 다음과 같은 에러 메시지.. 2020. 6. 29.
알리익스프레스 IP 카메라 구입 및 리뷰 / 홈 CCTV / 베이비 모니터/ WIFI 카메라 사용하지 않는 구형 아이폰과 CCTV 어플을 사용하여 아이들의 낮잠과 저녁 취침을 모니터링하고 있었다. 그렇게 어플 CCTV(AtHome CCTV 어플)를 몇 달 사용해보니 몇 가지 기능이 아쉬웠다. 모션 인식과 알람은 유료이다 계속 CCTV 모니터링 어플만 처다볼 수 없는 노릇이고 움직임이 탐지될 경우 알람을 주면 좋겠다. CCTV를 사용할기 원할 때마다 어플을 켜 주어야 한다. 24시간 켜 놓거나, 아니만 원할 때마다(혹은 업데이트로 인한 재시작시) 직접 켜 주어야 하는데 손이 가는 게 싫다. 특히, CCTV 어플은 나이트 비전(적외선 카메라)의 기능이 없다 CCTV 어플은 나이트 비전이 되지 않아서 수면등을 켜 놓아야 아이들의 모습을 희미하게나마 볼 수 있다. 하지만, 수면등은 아이들의 수면을 방해.. 2020. 6. 25.
Java의 Atomic, Adder, Accumulator의 이해 / AtomicInteger, AtomicLong, LongAdder, LongAccumulator 동작 방식 자바에서 병렬 프로그래밍에서 데이터에 대한 동시 접근을 제어하기 위해서 Lock(Intrinsic Lock vs Explicit lock)을 사용할 수 있을 것이다. 하지만, 공유 데이터가 Primitive 타입일 경우 값을 읽거나 업데이트 하는 경우가 전부인데 이때에는 Lock 보다는 원자성(Atomic) 변수가 더 효율적인 것을 다들 알고 있을 것이다. 소 잡는 칼로 닭을 굳이 잡을 필요는 없을 테니 말이다. 이번 포스팅에서는 기존의 Atomic 계열의 클래스(AtomicInteger, AtomiLong,. …)와 Java 8부터는 추가된 원자성의 데이터 타입(클래스)인 LongAdder와 LongAccumulator에 대해서 알아보고 이들의 차이점에 대해서 이야기하고자 한다. Atomic 계열의 클.. 2020. 6. 24.
Java Monitor(Intrinsic Lock)와 Explicit Lock의 이해 – Biased/Lightweight/Heavyweight Lock vs ReentrantLock 자바에서 스레드 간의 동기화를 위해서 synchronized 키워드를 사용하는 것이 가장 기본적인 방법일 것이다. 이 synchronized 키워드를 사용하는 Lock을 Intrinsic Lock 혹은 Built-in Lock이라 하며, Java 1.5부터 java.util.concurrent.locks 패키지를 통해서 제공되는 Explicit Lock과 대비된다. 둘 다 공유 자원을 접근하는 Critical Section을 보호하기 위한 목적으로 사용하긴 하는데, 이 둘의 차이는 무엇일까? 이 포스팅에서는 가장 기본적인 두 가지 Lock, 자바의 Built-in(Intrinsic) Lock인 Monitor와 명시적 Lock인 ReentrantLock에 대해서 비교해 보고자 한다. Oracle Hotsp.. 2020. 6. 23.
Java VisualVM의 Sampler와 Profiler 사용법 / JVisualVM's Sampler and Profiler 자바 어플리케이션의 성능과 관련된 문제를 해결하거나 CPU와 메모리의 사용량과 관련된 모니터링을 위해서 가장 쉽게 접근할 수 있는 툴은 VisualVM일 것이다. 오늘은 Java VisualVM의 Sampler와 Profiler를 보는 법에 대해서 간략히 정리하고자 한다. Sampler와 Profiler 모두 자바 어플리케이션의 CPU와 메모리 사용량을 분석하는 툴이지만 그 동작 방식에서는 차이를 보인다. Sampling 샘플링은 주기적(20 ms ~ 10000 ms)으로 메소드 콜 정보(스레드 덤프 사용)와 메모리 사용 정보를 스냅샷하고 그 결과를 분석하여 메서드 별 혹은 스레드 별 CPU 실행 시간을 수집하는 것을 말한다. 그렇기 때문에 정확한 분석은 아니지만 분석 대상 어플리케이션의 성능에 큰 영향.. 2020. 6. 20.
JAVA 스레드 덤프와 VisualVM (1) / Thread Dump, VisualVM, Sampler/Profiler, FastThread.io 이 글은 자바로 작성된 프로그램(프로세스)에 대해서 아래의 질문에 대한 힌트를 찾기 위한 방법을 설명하고자 작성되었다. 프로그램이 잘 실행되고 있는 것인가? 왜 프로그램의 특정 기능이 응답이 없지? 왜 프로그램이 멈춰 있지? 왜 프로그램의 성능(응답)이 느리지? 왜 프로그램이 CPU를 많이 사용할까? 프로그램의 성능을 향상할 수 있는 방법이 있을까? 프로그램의 CPU 자원 사용량이 많은 코드를 찾을 수 있을까? 자바의 스레드와 관련된 이슈를 해결하거나 모니터링을 위해서는 자바 스레드의 동작 방식을 이해하고 다양한 분석 툴을 손쉽게 다룰 줄 알아야 한다. 스레드 모니터링을 위해서 알아야 할 스레드의 기본적인 개념들과 모니터링 툴을 사용하여 분석하는 방법에 대해서 공유하고자 한다. 자바 기본 스레드의 종류와.. 2020. 6. 17.