목록분류 전체보기 (29)
free from
IntroBytecode를 담고 있는 .Class파일은 JVM(Java Virtual Machine)의 ClassLoader에 의해 해석되어 실행됩니다.어떤 과정을 거쳐서 우리가 작성한 클래스들이 해석되어 메모리에 로딩되는지 알아보겠습니다. ClassLoaderJVM의 ClassLoader는 Boostrap ClassLoader, Extension ClassLoader, Application ClassLoader로 구성된 3계층 구조로 이뤄져있습니다. (~JDK8) 이 3계층 구조에서 각 클래스 로더가 특정 역할에 맞는 클래스를 로딩하도록 설계되어 있습니다. BootStrap ClassLoader는 JVM의 네이티브 코드로 구현된 클래스로더입니다. BootStrap ClassLoader외 ClassLoa..
IntroAI모델에 필요한 학습데이터를 만들기 위해서 Kubeflow Pipeline으로 작업을 했었습니다.Object Stroage나 Hadoop에서 일별로 RawData를 가져와서 loop 안에서 데이터를 정제하는 과정을 거쳤었는데의도치 않게 예외가 발생하거나 버그가 있는 경우에는 처음부터 다시 재처리해야 했었습니다.RawData가 일별 데이터가 아니라 월별 혹은 년 단위와 같이 데이터가 큰 경우에는 더 많은 시간이 걸렸었죠.이때 스트리밍 데이터 처리가 필요하다는 점을 많이 공감했고Spark Streams, Kafka Streams, Flink 등 여러 스트리밍 기술 중에서 Flink가 관심이 많이 갔습니다.핑크 다람쥐가 귀엽기도 했고 Micro Batch가 아닌 Native Streamming을 지..
IntroFork/Join 프레임워크는 병렬 프로그래밍을 위한 도구로 JDK 7에 java.util.concurrent 패키지에 등장했습니다. 이름과 같이 분할할 수 있는 작업을 더 작은 작업으로 나누고(Fork) 처리하여 각각의 결과를 합쳐서(Join) 반환하는 프레임워크입니다. 분할된 작업들을 처리하기 위해서 내부적으로 스레드 풀을 구성하여 작업을 병렬로 처리합니다. 이를 통해 멀티코어 프로세서를 최대한 활용하여 성능을 향상시킬 수 있습니다. Executors, java.util.concurrent 패키지를 통해서 스레드를 어떻게 생성하고 관리할지에 대한 부분이 정리가 되었다면 Fork/Join 프레임워크를 통해서 스레드를 활용하여 어떻게 작업을 병렬로 처리할지에 대해서 다룹니다.Fork/Join프레..
Intro과거에는 무어의 법칙에 따라 CPU에 들어가는 트랜지스터의 수가 증가하여 CPU 속도가 향상되었습니다. 그러나 최근에는 컴퓨터에 들어가는 CPU의 코어의 개수를 늘여서 속도를 향상시키고 있습니다. 그러므로 애플리케이션도 CPU의 코어들을 활용해야 속도를 향상시킬 수 있습니다. 그럼 어떻게 Java에서는 CPU의 코어를 잘 활용할 수 있을까요? 정답은 Thread입니다. Thread를 이용하면 한 프로세스 내에서 두 가지 또는 그 이상의 일을 동시에 할 수 있습니다.JVM에서 Thread마다 PC-register, Java Stack과 Native Stack을 가지므로 Main-Thread와 별도로 실행 Context를 갖고 동작할 수 있습니다.Java에서 Thread를 생성하는 방법은 다음과 같..
IntroClassFile-1 에 이어서 클래스파일의 속성에 대해서 정리합니다.ClassFile Attribute클래스파일은 메타 정보와 속성으로 구성됩니다. 속성은 final, Exceptions, SourceFile, Generics, Code 과 같은 정보를 나타내며 클래스를 풍부하게 하는 역할입니다. 이러한 속성은 클래스를 대상으로 작성하면 class_file에 존재하며 필드 변수를 대상으로 작성하면 field_info에 존재합니다. 그리고 메서드를 대상으로 작성하면 method_info에 존재합니다.attribute_info { u2 attribute_name_index; u4 attribute_length; u1 info[attribute_length];} 모든 속성들의 기본적..
IntroJava Compiler가 .java파일을 컴파일하면 ByteCode를 담은 .class 파일이 생성됩니다..class파일은 Class Loader에 의해 해석되며 JVM 메모리에 로드되어 실행됩니다.이러한 ByteCode 덕분에 Java는 WORA(Write Once, Run Anywhere)라는 강력한 특징을 갖게되었습니다. ByteCode에는 또 다른 장점이 있습니다.JVM(자바 가상 머신)은 초기 설계부터 가상 머신에 다른 언어를 실행할 가능성을 염두에 두었습니다.그래서 자바 외 다른 언어에서 ByteCode로 변환해주는 컴파일러만 있으면 JVM에서 실행될 수 있습니다.오늘날에는 Java말고도 Scala, Kotlin, Groovy, Clojure 등 다양한 언어가 JVM에서 실행됩니다...
들어가기 11376 열혈강호2는 이분매칭 문제입니다. (이분매칭에 대한 설명은 잘 정리된 블로그 내용을 참고해주세요.) 11375 열혈강호1 문제에서 A그룹->B그룹 매칭이 1개가 아닌 최대 2개인 문제입니다. 각 직원(A그룹)은 최대 두 개의 일을 할 수 있으며 각각의 일(B그룹)은 1명만 담당할 수 있습니다. 위와 같은 조건에서 일을 최대한 많이해야합니다. 풀이 A그룹에서 2개의 일을 할 수 있는 노드로 표현하여 매칭하는 것보다 2개의 노드로 생각하는 것이 문제를 푸는 방법입니다. 아래 오른쪽 그림같이 표현을 하면 이분매칭의 기본 형태로 정리할 수 있기 때문입니다. 코드
들어가기 14626 ISBN은 모듈로 연산 문제입니다. ISBN는 모듈러 연산의 규칙을 따르는 13자리의 일련번호로 구성됩니다. 13자리 일련번호의 마지막 숫자는 앞에서부터 각 자리마다 가중치 1, 3, 1, 3…. 를 곱한 것을 모두 더하고, 그 값을 10으로 나눈 나머지가 0이 되도록 만드는 숫자로 정의합니다. 아래 예시는 13자리의 마지막 숫자 m의 계산 과정입니다. 978896832227[m] 10 - (1*9 + 3*7 + 1*8 + 3*8 + 1*9 + 3*6 + 1*8 + 3*3 + 1*2 + 3*2 + 1*2 + 3*7)%10 = m 10 - 137%10 = m 10 - 7 = 3 문제의 요구사항은 마지막 숫자를 제외한 1~12자리 일련번호 중 손상된 1개의 일련번호를 복구하는 것입니다. ..