목록Framework (26)
코딩하는 오징어
Actor Error Handling Application의 최상위 액터는 /user 경로에 만들어지며 사용자 가디언(user guardian)에 의해 감독된다. 사용자 가디언의 기본 감독 전략은 Exception이 발생하면 자식을 재시작하는 것이다. 다만, 어떤 액터가 (내부 이유로) 종료됐거나 초기화 도중 실패했음을 알리는 내부 예외가 발생하면 해당 액터를 종료시킨다. 다음은 Actor defaultStrategy & defaultDecider 코드 이다. final val defaultDecider: Decider = { case _: ActorInitializationException => Stop case _: ActorKilledException => Stop case _: DeathPactE..
Kotlin으로 JPA를 이용해 개발할 때 주의할 점인자없는 기본생성자JPA의 Entity들은 기본적으로 인자없는 기본생성자가 필요하다. 하지만 코틀린에서 주생성자가 있다면 기본생성자가 없다. 디폴트 파라미터를 통해 기본생성자가 생성되게 할 수 있지만 프로퍼티가 많아지면 모든 Entity에 디폴트 파라미터를 넣기 힘들어진다. 다음과 같이 해결 할 수 있다.dependencies { ... // JPA entity들은 기본적으로 기본생성자가 필요하다. 하지만 주 생성자가 존재하면 기본생성자가 없다. // @Entity가 붙은 클래스들에 한해서 자동으로 인자없는 생성자를 추가해준다. classpath("org.jetbrains.kotlin:kotlin-noarg:${kotlinVersion}") } // @..
JPA 기본EntityManagerFactory & EntityManagerEntityManagerFactory: EntityManager를 만드는 공장Datasource하나당 하나의 EntityManagerFactory를 만들어 사용EntityManagerFactory를 생성하는 작업은 비용이 크기 때문에 싱글톤으로 만들어 사용Thread-safeEntityManagerFactory emf = Persistence.createEntityManagerFactory("kakaopay"); EntityManager: entity를 생성, 수정, 삭제, 조회하는 등 entity와 관련된 일들을 처리EntityManagerFactory를 이용하여 EntityManager를 생성하는 비용은 거의 들지 않음.Thr..
JPA에서의 Isolation With LockJPA는 데이터베이스 트랜잭션 격리 수준을 READ COMMITTED 정도로 가정한다. 일부 로직에 더 높은 격리 수준이 필요하면 낙관적 락과 비관적 중 하나를 사용하면 된다.Optimistic Lock(낙관적 락)버전정보를 이용하여 업데이트를 처리하는 방법버전정보로 사용할 컬럼에 @Version 애너테이션을 부여해야함optimistic locking is based on detecting changes on entities by checking their version attributeUPDATE {TABLE_NAME} SET {COL_A} = ?, VERSION = ? (버전 + 1 증가) WHERE ID = ? AND VERSION = ? (버전 비교)..
Spring boot logback 설정classpath(resource디렉토리 밑)에 logback-spring.xml파일이 있으면 Boot가 설정파일을 읽어감.logback-spring.xml파일이 없다면 .yml(.properties)파일의 설정을 보게됨.설정시 특징 ${LOG_PATH}/private.${port:-default}.log ${LOG_PATH}/private.${port:-default}.log.%d{yyyy-MM-dd} 7 %replace(%msg){'\n', ' '}%n ${LOG_PATH} 변수에 들어가는 값을 .yml파일에 속성 값이 있다면 그것을 가져옴.file태그가 없을 경우 fileNamePattern태그 설정이 파일 이름을 세팅함.spring: profiles: def..
Spring Boot Profile 설정 Spring Boot를 사용하기 전에는 maven을 이용했다면 태그를 이용하여 profile을 설정하였다. Spring Boot를 이용하면 보다 손쉽게 profile을 설정할 수 있다. 참고 docs : https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-profile-specific-properties application.properties를 파일을 이용할 경우 application-{profile}.properties 형식으로 다음과 여러개의 파일을 생성하면 된다. applicatio..
QueryDsl이란?JPQL의 빌더(Criteria)클래스QueryDsl 사용전 설정dependency 추가dependencies { compile("com.querydsl:querydsl-core:4.2.1") compile("com.querydsl:querydsl-apt:4.2.1") compile("com.querydsl:querydsl-jpa:4.2.1") compile("com.querydsl:querydsl-collections:4.2.1") ... } Q클래스를 먼저 생성 후 컴파일 되어야 하므로 task를 먼저 실행시켜야함def queryDslOutput = file("src-gen/main/java") sourceSets { main { java { srcDir "src-gen/main/..
Junit 4 & Spring Test을 이용한 TDD 환경 세팅(다음은 Spring boot를 이용하지 않은 애플리케이션에서의 테스트 환경이다.)SpringTestSupport 클래스에 설정 후 이 클래스를 상속받아 테스트를 개발함.@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { RootContextConfig.class }, loader = AnnotationConfigWebContextLoader.class) @WebAppConfiguration public class SpringTestSupport { @Autowired protected WebApplicationContext wac; protected MockM..