java

    Hashtable에 관해서

    개요 HashMap과 비슷한 Collection이지만, Thread-safe 한 특징이 있다. Thread-safe 하게 동작을 보장하려면 여러가지 방법이 있지만, 그 중 가장 성능이 안좋은 synchronized block을 통해 객체 lock을 걸어 동기화를 보장하는 방법을 사용하고 있다. 한번 Hashtable을 살펴보자. public class Hashtable extends Dictionary implements Map, Cloneable, java.io.Serializable { } 특이하게 Dictionary 라는 abstract class를 상속받고 있다. 다른데 쓰는곳이 있나해서 찾아보니, Hashtable에서만 사용하고 있다. 구조를 보다보니 일반적인 Map 과 특징이 비슷해서 Map에..

    HashMap 에 대하여

    개요 Java의 HashMap 에 대한 공부. 자주 쓰지만, 실제로 어떻게 동작하는지에 대한 이해가 필요하고 Java에서 뿐만 아니라, NoSQL 등의 경우에도 사용되는 Hash의 개념과 Map의 개념에 대해 알아보자. Hash Hash 는 특정 input 값이 주어졌을 때 항상 동일값을 보장해주는 값이다. 주로 SHA256 MD5등과 같은 해시 알고리즘에 의해 많이 알려져 있다. 차이점이라고 하면 Hash를 할 때 충돌(collision)이 발생하게 되는데, 그런 충돌을 얼마나 더 효율적으로 방지할 것인가에 대한 정도가 되겠다. Java에서 사용하는 String 클래스의 해시 함수를 살펴보자. Hash != HashCode Hash : 해시 함수 HashCode : 해시 해서 나온 값을 정수화 시킨 것..

    [JAVA/Spring] BeanUtils 관련

    Spring을 사용하다가, 은근히 종종 Class간 property를 복사해야 할 경우가 있다. 예를 들어, 위와 같은 클래스가 2개가 있다고 치자. 이 때 DB에서 조회한 Person1과 Person2가 있는데, 종종 어떠한 이유로 인하여 이 property를 서로 복사하거나 하는 작업을 해야할 때가 있다. 그럴때마다 원시적인 방법은 이를 그냥 set... set... 하면서 복사하는 방법이 있겠다(매우 비효율적이고 쓸데없이 코드 길이만 길어짐 & 가독성 최악) @Data @AllArgsConstructor @NoArgsConstructor class Person { private String name; private Integer id; private String address; private Str..

    Netty 통신 서버 개발 관련 주저리

    Netty? Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. netty는 JAVA 진영의 Transport Layer에서 가장 유명한(?) 프레임워크이다. TCP 뿐만 아니라 HTTP, UDP 등 사실상 byte를 송/수신하는데에 두루두루 쓰이고 있는 상황이다. 수 많은 프레임워크들이 클러스터링 구성을 하거나 할 때 내부 통신(inner-communication)을 하는 프레임워크로 netty를 주로 사용하고 있다. 내부 구현은 JAVA NIO로 되어 있으며, 플랫폼에 따라 Epoll(..

    [JAVA] ExecutorService 관련 공부

    ExecutorService 관련 공부 1. ExecutorService에 관하여 ExecutorService는 병렬작업 시 여러개의 작업을 효율적으로 처리하기 위해 제공되는 JAVA의 라이브러리이다. 통상적으로 작업을 분리하고 수행하는 작업을 손수 구현하고자 하면.. 각기 다른 Thread를 생성해서 작업을 처리하고, 처리가 완료되면 해당 Thread를 제거하는 작업을 진행해야 한다. 이러한 일련의 작업을 이 클래스를 이용해서 쉽게 처리가 가능하다. 흔히 말하는 ThreadPool을 구현하기가 매우 용이하므로, Java에서 쓰레드풀을 생성해서 사용하고자 하면 (손수 구축이 아닌.. 보장된 동작을 원한다면 이를 사용하길 적극 추천) 반드시 사용을 고려해봐야 할 유틸리티성 클래스이다. ExecutorSer..

    [JAVA] HTTP 페이지 읽기

    HTTP가 무엇인지에 대한 포스팅에 이어 JAVA에서 해당 HTTP 연결을 수립하는 것과 동시에 페이지를 읽어오는 방법에 대한 코드이다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class Http { public static void main(String[] args) throws MalformedURLException{ URL url = new URL("http://www.tistory.com");..