Application

    Thread/Heap dump 뜨는 법

    jps -v java PID 확인 후 Thread Dump jstack {{PID}} > {{경로}}/thread-dump.txt heap dump jmap -dump:live,format=b,file={{경로}}/{{파일명}}.hprof {{PID}}

    자바 병렬성과 동시성 정리

    병렬성: 한 테스크를 여러 하위 테스크로 나눠서 CPU의 다른 코어 또는 다른 머신에서 이들 하위 테스크를 병렬로 실행한다. 동시성: 조금씩 연관된 작업을 같은 CPU에서 동작하는 것 또는 애플리케이션의 생산성을 극대화할 수 있도록 코어를 바쁘게 유지하는 것이 목표라면, 원격 서비스나 데이터베이스 결과를 기다리는 스레드를 블록함으로써 연산 자원을 낭비하는 일을 피해야 한다. 자바는 이런 환경에서 사용할 수 있는 두 가지 주요 도구를 제공한다. Future 인터페이스로 자바 8의 CompletableFuture 구현은 간단하고 효율적인 문제 해결사. 자바9에 추가된 발행 구독 프로토콜에 기반한 리액티브 프로그래밍 개념을 따르는 Flow API는 조금 더 정교한 프로그래밍 접근 방법을 제공한다. 동시성은 단..

    스프링 트랜잭션, Spring AOP

    트랜잭션 추상화와 동기화 트랜잭션 추상화 트랜잭션 서비스의 종류는 다양하다. 스프링은 데이터 액세스 기술과 트랜잭션 서비스 사이의 종속성을 제거하고 스프링이 제공하는 트랜잭션 추상화 계층을 이용해서 트랜잭션 기능을 활용하도록 만들어준다. 이를 통해 트랜잭션 서비스의 종류나 환경이 바뀌더라도 트랜잭션을 사용하는 코드는 그대로 유지할 수 있는 유연성을 얻을 수 있다. 트랜잭션 동기화 트랜잭션 동기화는 트랜잭션을 일정 범위 안에서 유지해주고, 어디서든 자유롭게 접근할 수 있게 만들어준다. PlatformTransactionManager 스프링 트랜잭션 추상화의 핵심 인터페이스는 PlatformTransactionManager로, 모든 스프링의 트랜잭션 기능과 코드는 이 인터페이스를 통해서 로우 레벨의 트랜잭션..

    Spring MVC, DispatcherServlet

    WebApplicationContext Servlet이란? 자바 VM에게 main() 메소드를 가진 클래스를 시작시켜 달라고 요청할 수 있는 독립 자바 프로그램과는 다르게, 웹 환경에서는 자바 VM에게 main() 메소드를 호출할 방법이 없다. 또한 여러 명의 사용자가 동시에 웹 애플리케이션을 이용한다. 그래서 웹 환경에서는 main() 메소드 대신 서블릿 컨테이너가 HTTP 요청을 받아서, 해당 요청에 매핑되어 있는 서블릿을 실행해주는 방식으로 동작한다. main() 메소드 역할을 하는 서블릿을 만들어두고, 미리 애플리케이션 컨텍스트를 생성해 둔 다음, 요청이 서블릿으로 들어올 때마다 getBean()으로 필요한 빈을 가져와서 정해진 메소드를 실행하는 방식으로 동작한다. WebApplicationCon..

    Java 제네릭

    제네릭이란? 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시 미리 타입검사를 수행하는 방법. (List) 반대 개념으로 Raw Type을 들 수 있다. (List) 효과 컴파일 시점에 타입 체크를 수행할 수 있어서 좀 더 안정성 제공. (런타임 시에 타입 에러가 발생하지 않고, 컴파일 시점에 타입 에러가 발생한다는 것은 엄청난 효과....!) 제네릭의 타입 소거 시점 제네릭 타입은 컴파일 시점에 컴파일러에 의해 자동으로 검사 되어 타입 변환된다. 그리고 나서 런타임 시점에는 모든 제네릭 타입은 소거(제거)되고, 런타임 시점에는 어떠한 제네릭 타입도 포함되지 않게 된다. 제네릭의 특징 - 비구체화 제네릭 타입은 비구체화 타입으로, 컴파일 시점에 타입 체크를 수행하고 런타임에는 타입을 모두 소거하는..