클린코드를 읽어도, 이펙티브 자바를 읽어도, 개발을 잘하는 팀의 얘기를 들어도 항상 좋은 코드를 얘기할 때면 불변의 객체를 필연적으로 접하게 되는 것 같습니다. 그래서 이번에는 불변의 객체를 사용해야 하는 이유에 대해서 알아고자 합니다. 1. 불변 객체(Immutable Object) 및 final을 사용해야 하는 이유 [ 불변 객체(Immutable Object)란? ] 불변 객체란 객체 생성 이후 내부의 상태가 변하지 않는 객체이다. 불변 객체는 read-only 메소드만을 제공하며, 객체의 내부 상태를 제공하는 메소드를 제공하지 않거나 방어적 복사(defensive-copy)를 통해 제공한다. Java의 대표적인 불변 객체로는 String이 있다. String name = "Old"; name.to..
코드를 작성하다보니 동일한 어노테이션을 여러 클래스에 반복적으로 작성해야 하는 상황이 발생하였다. 이러한 작업이 상당히 번거롭게 느껴졌고, 이러한 반복 작업을 줄이고자 커스텀 어노테이션을 만들어 적용하게 되었는데, 이에 대해 자세히 알아보도록 하자. 1. 다양한 Java 어노테이션 [ 어노테이션의 종류 ] 어노테이션을 직접 개발하기 위해서는 Java에서 제공하는 어노테이션에 대해 먼저 알아야 한다. Java의 어노테이션은 크게 built-in 어노테이션(Built-in Annotation)과 Meta 어노테이션(Meta Annotation)이 존재한다. built-in 어노테이션 Java 코드에 적용되는 어노테이션 @Overrie, @Deprecated, @SuppressWarnings 등이 존재 met..
1. Hadoop의 개념과 아키텍쳐 [ Hadoop이란? ] Hadoop은 Reliable, Scalable하게 분산 처리를 하기 위한 오픈 소스 소프트웨어이다. Hadoop은 Map-Reduce라는 단순한 데이터 처리 모델을 사용함으로써 여러 대의 컴퓨터를 통해 손쉽게 대규모 데이터를 처리하고자 한다. 하둡은 분산 파일 시스템인 HDFS(Hadoop Distributed File System)에 데이터를 저장하여 처리한다. (이러한 방식은 Disk I/O에 의해 성능 저하를 유발하며, 추후에 In-Memory 방식으로 처리하는 Spark가 등장하게 되었다.) [ Multi-Layer 구조 ] Hadoop에서 수행하는 역할은 크게 HDFS에 파일을 저장하는 역할과 데이터를 처리하는 역할로 나누어진다. 그..
1. Apache Spark의 개념과 등장 배경 [ Apache Spark의 등장 배경 ] Spark는 MapReduce 형태의 클러스터 컴퓨팅 패러다임의 한계를 극복하고자 등장하게 되었다. MapReduce는 Disk로부터 데이터를 읽은 후, Map을 통해 흩어져 있는 데이터를 Key-Value 형태로 연관성 있는 데이터끼리 묶은 후에, Reduce를 하여 중복된 데이터를 제거하고, 원하는 데이터로 가공하여 다시 Disk에 저장한다. 하지만 이러한 파일 기반의 Disk I/O는 성능이 좋지 못했고, In-memory의 연산을 통해 처리 성능을 향상시키고자 Spark가 등장하게 되었다. [ Apache Spark란? ] Apache Spark는 오픈소스이며, 범용적인 목적을 지닌 분산 클러스터 컴퓨팅 프..
1. Hadoop 1.0의 구조와 YARN의 등장 이유 [ Hadoop 1.0의 구조와 YARN의 등장 ] Hadoop 1.0의 MRV1(MapReduce Version1)는 작업의 처리와 자원의 관리를 한번에 관리하였다. 즉, Single-Master 노드에 해당하는 job Tracker는 자원을 할당하고, 스케줄링 작업도 수행하며 처리중인 작업까지 모니터링을 하였다. 그리고 하위 노드에 해당하는 Task Tracker에 Map and Reduce 작업을 부여하였고, 하위 노드들은 주기적으로 그들의 진행상황을 Job Tracker에 보고하였다. 이러한 MRV1구조는 Task의 규모가 커짐에 따라, 하나 뿐인 Job Tracker에 부하가 걸리며 bottleneck이 발생할 뿐만 아니라 컴퓨터의 자원이 ..