Java/일반(21)
-
Java Heap 메모리 구조
Java 8 이전까지의 Heap 메모리 구조 Young Young 영역은 Eden 영역과 Survivor 영역으로 구성됩니다. Eden 영역은 객체가 Heap에 최초로 할당되는 장소입니다. 만약 Eden 영역이 꽉 차게 되면 객체의 사용중 여부를 따져 만약 사용 중인 객체이면 Survivor 영역으로 넘기고, 사용 되지 않는 객체이면 그냥 남겨 둡니다. 사용 중인 모든 객체가 Survivor 영역으로 넘어가면 Eden 영역을 정리합니다. Survivor 영역은 Eden에서 살아남은 객체들이 잠시 머무르는 공간입니다. Survivor 영역은 두 개로 구성되는데 참조 중인 객체를 이동할 때는 하나의 Survivor 영역만 사용하게 됩니다. Old Young 영역에서 정리되지 않고 계속 사용중인 객체들은 Ol..
2021.08.23 -
Reactive Stream
Reactive Stream이란 계속적으로 들어오는 스트림 데이터를 효율적으로 처리하기 위해서는 비동기 시스템이 효과적입니다. 비동기 처리를 하면서 가장 중요한 문제는 데이터 처리가 목적지의 리소스 소비를 예측가능한 범위에서 신중하게 제어할 수 있어야 하는 것입니다. 비동기는 네트워크를 통한 서버간의 협업 또는 단일 서버에서 컴퓨팅 리소스를 동시에 사용할 때 주로 사용됩니다. Reactive Stream의 주된 목적은 비동기의 경계를 명확히 하여 스트림 데이터의 교환을 효과적으로 관리하는 것입니다. 즉, 비동기로 데이터를 처리하는 시스템에 어느 정도의 데이터가 들어올지 예측가능하도록 하는 것입니다. Reactive Stream에서는 BackPressure이 이를 달성할 수있게 해주는 중요한 부분입니다. ..
2020.09.09 -
Java Module
Moudle이 등장하게 된 배경 Java는 public, private와 같은 클래스 수준의 한정자가 있습니다. 그러나 이 한정자들은 클래스까지만 유효하고 패키지를 넘어서면 힘을 잃어버리게 됩니다. 이러한 캡슐화에 대한 지원 부족으로 인해 Java Module이 등장했습니다. 예를 들어, 우리는 JAR로 제공된 패키지의 클래스를 보면 어느 클래스를 써야할 지 알 수 가 없습니다. 대부분의 클래스가 public이고 접근이 가능합니다. 그 안에는 API 설계자가 내부 구현을 위해 만든 내부용 API 문서도 있습니다. 기존에는 내부용 API에 접근이 가능합니다. JAR로 제공되고 문서화가 잘 되더라도 클래스와 메소드가 public이면 API 설계자가 의도하지 않은 호출이 발생할 수 있습니다. Module이란 ..
2020.09.07 -
ThreadLocal
일반 변수의 수명은 특정 코드 블록 범위 내에서만 유효합니다. { int a = 10; // 변수 a는 현재 코드 블록내에서만 유효 } ThreadLocal을 이용하면 스레드 영역에 변수를 설정할 수 있기 때문에, 특정 스레드가 실행하는 모든 코드에서 그 스레드에 설정된 변수 값을 사용할 수 있게 됩니다. public class ThreadLocalTest implements Runnable { @Data @AllArgsConstructor static class UserInfo { private String name; } private static final ThreadLocal userInfoThreadLocal = new ThreadLocal() { @Override protected UserInf..
2020.05.26 -
EHCache
1. EHCache란 EHCache란 Java의 대표적인 캐시 엔진 중의 하나입니다. 특징 경량의 빠른 캐시 엔진 메모리, 디스크 저장 지원, 멀티 CPU의 동시 접근에 튜닝 동기, 비동기 복사, 피어 자동 발견 사용 이유 Java 메소드에 캐싱을 적용함으로써 캐시에 보관된 정보로 메소드의 실행 횟수를 줄여줍니다. 대상 메소드가 실행될 때마다 추상화가 해당 메소드가 같은 인자로 이미 실행되었는지 확인하는 캐싱 동작을 적용합니다. 해당 데이터가 존재한다면 실제 메소드를 실행하지 않고 결과를 반환하고 존재한다면 메소드를 실행하고 그 결과를 캐싱한 후, 사용자에게 반환해서 다음 번 호출 시에 사용할 수 있게 합니다. 2. EHCache 사용 방법 Maven 의존성 추가 net.sf.ehcache ehcache..
2020.05.13 -
Filter, Interceptor, AOP의 차이
1. Filter Filter는 DispatcherServlet 이전에 실행이 되어 Filter가 동작하도록 지정된 자원의 앞단에서 요청내용을 변경하거나, 여러가지 체크를 수행할 수 있습니다. 또한 자원의 처리가 끝난 후 응답 내용에 대해서도 변경하는 처리를 할 수 있습니다. Filter는 웹 설정에 기본적으로 등록되는데 대표적으로 인코딩변환, 로그인 여부확인, 권한 체크 등의 요청에 대한 처리로 사용됩니다. Web.xml에서 필터의 예시 encoding org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 encoding /* 2. Interceptor Interceptor는 DispatcherServlet가 컨트롤러를 호출하기 전..
2020.04.22