분류 전체보기 194

JPA 영속성 컨텍스트

JPA 영속성 컨텍스트영속성 컨텍스트영속성 컨텍스트란 엔티티를 영구로 저장하는 환경(context)라는 의미이다영속성 컨텍스트 개념을 구현한게 entity manger이라고 생각을 하면 된다.영속성 컨텍스트는 엔티티를 식별자 값으로 구분한다. 따라서 영속 상태는 식별자 값이 반드시 있어야 한다. 없으면 예외가 발생한다.영속성 컨텍스트에 엔티티를 저장하면 이 엔티티는 언제 저장이 될까?JPA는 보통 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장된 엔티티를 데이터베이스에 반영하는데 이를 플러시(flush)라 한다.영속성 컨텍스트가 엔티티를 관리하면 다음과 같은 장점이 있다.1차 캐시동일성 보장트랜잭션을 지원하는 쓰기 지연변경 감지지연 로딩엔티티의 생명주기비영속성(new/transient) : 영속성 ..

Database/JPA 2018.09.08

JPA CascadeType

JPA CascadeTypeJPA에서 연관관계(@OneToMany, @ManyToOne) 에 부모 엔티티와 자식 엔티티에 대한 영속성 처리에 대한 설정을 할수가 있다.CascadeType.RESIST 엔티티를 생성하고, 연관 엔티티를 추가하였을 때 persist() 를 수행하면 연관 엔티티도 함께 persist()가 수행된다. 만약 연관 엔티티가 DB에 저장이 되어있으면 다시하며 persist 를 하는 것이기때문에 detached entity passed to persist Exception이 발생한다.이경우에는 CascadeType.MERGE를 사용한다.CascadeType.MERGE트랜잭션이 종료되고 detach 상태에서 연관 엔티티를 추가하거나 변경된 이후에 부모 엔티티가 merge()를 수행하게 ..

Database/JPA 2018.09.08

Spring Constructor Dependency Injection

Spring Constructor Dependency Injection생성자를 이용한 의존성 주입공통 로직을 가지고 있지만 멤버 변수가 다른 경우에 활용을 할수 있다.XML Config인 경우constructor-arg 를 이용하여 의존성 주입을 할수 있다.Java Config인 경우공통 로직은 Abstract Class로 구현을 하고 구현체는 그 클래스를 extend를 한다.필요한 데이터는 super 키워드를 이용하여 주입을 한다. @Componentpublic class Car { @Autowired public Car(Engine engine, Transmission transmission) { this.engine = engine; this.transmission = transmission; }}

Singleton Pattern

Singleton Pattern대표적인 패턴 중의 하나프로그램이 실행되는 생성되는 객체가 1개로 생성하여 활용하는 패턴DB 등과 같이 하나만 사용이 되어야하는 곳에 활용이 된다.java.lang.Runtime, java.awt.Desktop 등등에서도 활용된다. Static를 이용한 간단한 singleton classpublic class SingletoneClass {private static SingletoneClass instance = new SingletoneClass(); private SingletoneClass() {System.out.println( "SingletoneClass constructor." );}public static SingletoneClass getInstance ()..

Programing/Java 2018.09.06

Group By 최대값을 가진 Row를 추출하는 쿼리

Group By 최대값을 가진 Row를 추출하는 쿼리Group by를 이용하여 특정필드의 최대값을 가지고 올수 있지만 group by 특성상 해당하는 row의 다른 필드의 값을 가지고 올수가 없다.최대값이 있는 row 값을 가지고 오는 방법을 아래와 같이 2가지 방법이 있다.DB, Index, Table 구조 등에 따라 속도가 달라지기때문에 그때 그때에 맞게 2가지 방법중에 사용하면 된다. SELECT a.id, a.rev, a.contentsFROM YourTable aINNER JOIN ( SELECT id, MAX(rev) rev FROM YourTable GROUP BY id) b ON a.id = b.id AND a.rev = b.rev Group BY와 SubQuery를 활용하여 먼저 id와 ..

Database/MySQL 2018.09.03

Actor Selection을 통한 Actor 찾기 (Identifying Actors via Actor Selection)

Actor Selection을 통한 Actor 찾기 (Identifying Actors via Actor Selection) 하나의 액터는 Unique한 Path를 가지고 있기 때문에 Path를 이용하여 Actor를 찾을수가 있다 (Look up) // will look up this absolute path getContext().actorSelection("/user/serviceA/actor"); // will look up sibling beneath same supervisor getContext().actorSelection("../joe"); `ActorSelection` 객체가 리턴이 된다. Remote System에서는 `ActorSelection`은 처음 응답은 한 Actor (init..

Programing/Akka 2018.09.02

SLF4J(Simple Logging Facade for Java)

SLF4J(Simple Logging Facade for Java)다양한 Logging Framework (java.util.logging, logback, log4j)를 동일한 인터페이스를 통해 Logging을 기능을 제공 Hello Worldimport org.slf4j.Logger;import org.slf4j.LoggerFactory; public class HelloWorld { public static void main(String[] args) { Logger logger = LoggerFactory.getLogger(HelloWorld.class); logger.info("Hello World"); }} 아래와 같은 에러메시지가 난다면 SLF4J: Failed to load class "o..

Programing/Java 2018.09.01

Executor service

Executor Service비동기 작업을 손쉽게 사용할수 있게 제공하는 프레임워크작업을 실행할수 있는 스레드풀을 제공한다.Factory Method을 이용하여 생성하는 방법ExecutorService executor = Executors.newFixedThreadPool(10); 직접 생성을 하는 방법ExecutorService executorService = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(), (r, e) -> { log.error("Queue Overflow") };Runnable에 대한 Queue와 Core Thread Pool, Max Thread Pool, Thread Pool Al..

Programing/Java 2018.08.31

불변객체 (Immutable Object)

불변객체 (Immutable Object)객체를 생성 후 그 상태를 바꿀수 없는 객체객체가 가지고 있는 멤버 변수 (properties)가 변하지 않기 때문에 중간에 값이 바꿈으로써의 버그가 나는 코드를 작성할 확률이 줄어든다.변경이 되지 않기 때문에 멀티스레드 환경에서 Thread Safe하다.멤버 변수가 바뀐다고 한다면 새로운 객체를 생성하면 된다.기존 객체를 활용하는것이 아니고 새로운 객체가 계속 생성이 되기 때문에 Minor GC가 많이 발생이 될수가 있다.메모리의 크고, CPU 사양이 좋기때문에 거의 문제가 되지 않는다메모리,CPU 환경이 제약이 많은임베디드 환경에서는 문제가 될수 있다. 객체를 재 활용하는 방향으로 개발을 해야 된다.자바스크립트에서 불변 객체를 사용하고 싶다면 IMMUTABLE..

Programing 2018.08.28