본문 바로가기
반응형

전체 글318

인텔리J(InteliJ)에서 스칼라(Scala) 설정하기 아파치 카프카(Apache Kafka)의 소스코드를 분석하다가 브로커 서버 코드가 스칼라(Scala)라는 언어로 구성되어 있는 것을 알게되었다. 스칼라로 짜여진 부분에서 자바 클래스를 가져다 쓰고 있고, 그 부분을 고려한 코드들이 자바 소스코드에 남아있어서 어쩔 수 없이 스칼라 코드를 봐야했다. 하지만 내 맥북에 설치되어 있는 인텔리제이에는 스칼라 설정이 되어 있지 않았고 스칼라 코드는 그냥 평범한 텍스트 파일에 불과했다. 메소드 호출이나 클래스 등을 따라갈 수 있는 IDE의 기능을 사용할 수 없어서 코드 분석이 매우 어려웠다. 그래서 IntelliJ에서 스칼라 코드를 잘 볼 수 있도록 설정을 변경해봤다. 스칼라(Scala) 설치하기스칼라는 JVM 위에서 동작하는 프로그래밍 언어로 자바(Java)가 미리.. 2019. 2. 4.
macOS 업데이트 후 git 에러 (xcrun: error: invalid active developer path) 해결 맥북을 사용하면서 업데이트를 한 다음 갑자기 git 이 동작하지 않는 문제가 발생했다. 정확히는 IntelliJ를 실행시켰는데 git 에 문제가 있다는 에러를 보게 되었고 터미널을 열어서 git을 수행해보니 다음과 같은 에러가 발생하고 있었다. xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun 이전에 업데이트를 했었을 때도 발생했던 문제인데 XCode Command Line Tool 의존성과 관련된 문제라고 한다. 이 문제를 해결하기 위해서 XCode를 다시 설치하면 된다. $ xcode.. 2019. 2. 3.
[Kafka] #7 아파치 카프카 컨슈머(Kafka Consumer) 자바(Java)예제 코드 카프카 컨슈머 그룹과 컨슈머의 동작 방식에 대해서 알아봤다. 이제 자바를 이용해서 카프카 데이터를 읽어가는 예제 프로그램을 작성해보겠다. [Kafka] #2 - 아파치 카프카(Apache Kafka) 설치 및 실행, Quickstart[Kafka] #3 - 아파치 카프카 프로듀서 (Apache Kafka Producer) 실행과 간단한 설정 예제(Configuration Example)[Kafka] #6 아파치 카프카 컨슈머와 컨슈머 그룹(Apache Kafka Consumer & Consumer Group) 이전 포스트에서 다뤘던 내용을 바탕으로 카프카 서버를 구동하고, "test"라는 이름의 토픽을 준비해보자. 카프카 컨슈머 예제"test" 토픽에서 메시지를 소비하는 가장 간단한 샘플 코드는 다음과 .. 2019. 2. 2.
[Kafka] #6 아파치 카프카 컨슈머와 컨슈머 그룹(Apache Kafka Consumer & Consumer Group) 카프카로 데이터를 전송하는 프로듀서와 다르게 카프카에서 데이터를 읽어가는 컨슈머는 컨슈머 그룹이라는 개념에 대해서 먼저 알아야 할 필요가 있다. [Kafka] #1 - 아파치 카프카(Apache Kafka)란 무엇인가? 이전 포스트에서 간략하게 컨슈머의 메시지 읽기 동작에 대해 언급했었다. 이번 포스트에서는 좀 더 자세히 설명하여 카프카 컨슈머의 동작 방식에 대해서 확실하게 이해하고 넘어가도록 하겠다. 컨슈머 그룹(Consumer Group)카프카 프로듀서가 전송한 메시지는 토픽의 파티션에 나눠서 저장된다. 파티션에 저장된 이 메시지들은 컨슈머(Consumer)들에 의해 읽혀진다. 하나 이상의 카프카 컨슈머들은 컨슈머 그룹(Consumer Group)을 형성한다. 컨슈머가 특정 파티션의 데이터 소비를 위.. 2019. 1. 30.
[하둡(Hadoop)] HDFS, Yarn, 맵리듀스(MapReduce)를 위한 유닛테스트 및 JUnit 예제 하둡 HDFS를 사용하는 프로젝트를 진행하다가 "어떻게 유닛 테스트를 작성할 것인가?"라는 질문을 스스로에게 하게 되었다. 유닛 테스트를 위한 별도의 클러스터를 구축해놓는 것도 웃기고, 실제 운영되는 클러스터에 테스트 부하를 쏘는 것도 웃기다. 유닛 테스트는 대부분 간단한 동작을 테스트 할 텐데 좀 더 가벼운 방법은 없을까? 다행히도 하둡은 JUnit 같은 유닛 테스트 작성을 위한 미니 클러스터(MiniCluster)를 제공한다. MiniDFS, MiniYARN, MiniMR 클러스터가 제공되며, 이 포스트에서는 MiniDFS 클러스터를 이용한 방법에 대해서 다뤄보겠다. Maven 설정Java 프로그램의 경우 유닛 테스트인 JUnit에서 하둡의 미니 클러스터들을 사용하기 위해서는 dependency를 추.. 2019. 1. 28.
[Java(자바)] ThreadLocal 사용법 설명과 예제 자바를 비롯한 다양한 언어에서 멀티 쓰레드 프로그래밍을 지원한다. 소스코드의 다양한 부분을 멀티 쓰레드로 수행하면 많은 장점들을 얻을 수 있다. 하지만 멀티 쓰레드 프로그램을 작성할 때 가장 고민해야 하는 부분이 있으니 바로 공유 리소스로의 접근제어다. 그 중에 특정 변수 값을 세팅하고 읽는 과정을 동기화해야 하는 경우를 가장 많이 만나게 된다. synchronized 키워드를 이용하여 특정 메소드 혹은 코드 블록을 동기화 시키는 방법은 잘 알고 있을 것이다. Synchronized 키워드와 더불어 자바에서 제공하는 멀티 쓰레드를 위한 도구로 ThreadLocal이 있다. ThreadLocal은 각 쓰레드가 자신만의 전역변수를 만들어 사용할 수 있는 기능을 제공해준다. 우선 코드를 살펴보자. 이 코드를 .. 2019. 1. 27.
현재 실행중인 쉘(Shell) 정보를 알 수 있는 방법 유닉스 환경에서 개발을 하다보면 정말 다양한 쉘(Shell)을 만나게 된다. 가장 친숙하게 사용되는 Bash(Bourne-again shell) 부터 zsh, csh, ksh 등등 다양한 목적으로 개발된 쉘들이 제공된다. 각 쉘마다 명령이 약간씩 다르기도하고, 출력 포맷도 약간씩 다를 때가 있다. 따라서 지금 내가 어떤 쉘을 사용하고 있는지 파악하는게 중요할 때가 있다. 사용가능한 쉘 확인현재 시스템에서 사용가능한 쉘 목록을 보기 위해서는 /etc/shells 파일을 확인하면 된다. $ cat /etc/shells # List of acceptables shells for chpass(1)# Ftpd will not allow users to connect who are not using# one of .. 2019. 1. 26.
[Java(자바)] Deque(덱/데크) 자료구조 카프카의 소스코드를 보던 중 내부에서 Deque 클래스를 사용한 부분을 보게 되었다. Deque(덱 혹은 데크)은 Double-Ended Queue의 줄임말로 큐의 양쪽으로 엘리먼트의 삽입과 삭제를 수행할 수 있는 자료구조를 의미한다. 덱(Deque)은 어떤 쪽으로 입력하고 어떤 쪽으로 출력하느냐에 따라서 스택(Stack)으로 사용할 수도 있고, 큐(Queue)로도 사용할 수 있다. 특히 한쪽으로만 입력 가능하도록 설정한 덱을 스크롤(scroll)이라고 하며, 한쪽으로만 출력 가능하도록 설정한 덱을 셸프(shelf)라고 한다. Java에서의 Deque 자바에서의 덱은 인터페이스로 구현되었다. 덱 자료구조의 여러 연산들을 정의한 Deque 인터페이스가 있고 이를 구현한 ArrayDeque, LinkedBl.. 2019. 1. 23.
Exception in thread "main" java.lang.IllegalAccessException: 하둡(Hadoop) 관련 프로그램을 작성하다가 다음과 같은에러를 만나게 되었다. Exception in thread "main" java.lang.IllegalAccessException: Class org.apache.hadoop.util.RunJar can not access a member of class TestClass with modifiers "public static" at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:110) at java.lang.reflect.AccessibleObject.slowCheckMemberAccess(AccessibleObject.java:262) at java.lang.reflect.Accessib.. 2019. 1. 20.
반응형