• IntelliJ에서 MS949 Encoding 문제 발생시

    윈도우에 설치한 IntelliJ에서 Build 할 때 한글로 된 코멘트 등으로 인해 오류가 발생하면 인코딩 설정을 적절히 변경하면 된다. 문제는 분명히 파일의 인코딩 타입은 utf-8 이고 IntelliJ의 File Encodings 옵션에 UTF-8로 설정했음에도 해결이 안되는 경우가 있다. 이럴때 VM 옵션에 인코딩 타입을 넣어서 시도해보자. VM 옵션 메뉴로 들어가서 Help -> Edit Custom...


  • 방문자 패턴 - Visitor pattern

    Visitor pattern, 방문자 패턴, 실제 로직을 가지고 있는 객체(Visitor)가 로직을 적용할 객체(Element)를 방문하면서 실행하는 패턴이다. 즉, 로직과 구조를 분리하는 패턴이라고 볼 수 있다. 로직과 구조가 분리되면 구조를 수정하지 않고도 새로운 동작을 기존 객체 구조에 추가할 수 있다. 이 포스트에서는 주어진 도메인 문제를 해결해가면서 나타나는 문제점을 이야기해보고 이것을 해결해 나가면서 방문자...


  • java Consumer 와 Function, Supplier interface

    Consumer 파라미터 한 개를 입력받고 반환 값이 없는 인터페이스이다. 다른 함수형 인터페이스와 다르게 사이드 이펙트를 이용해서 일을 처리하게 되어있는 것이 특징이다. 이런 형태, 즉 입력값을 받고 사이드 이펙트를 이용해서 일을 처리하는 인터페이스가 다수 있는데 BiConsumer, IntConsumer 등 입력 파라미터가 몇 개인지, 입력할 타입이 무엇인지에 따라서 추가로 정의되어 있다. 아래는 Cunsumer...


  • getBean의 NoSuchBeanDefinitionException 회피하기

    Spring context에서 Bean을 가져오기 위해 getBean 메소드를 주로 사용한다. getBean 메소드는 Bean 이름이나 Type 등을 받아서 해당하는 Bean이 있으면 인스턴스를 반환하고 없으면 NoSuchBeanDefinitionException 예외를 발생시킨다. 만약에 A라는 Bean이 있으면 이걸 사용하고, 없으면 B라는 Bean을 사용해야 할 때 어떻게 구현을 해야 할까? 라는 고민에서 이 포스트를 작성하게 되었다. 예외는 진짜 예외일...


  • JPA 와 mybatis 를 같은 Transaction 에서 사용하기

    이 포스트는 같은 트랜잭션 내에 JPA와 MyBatis를 사용하는 방법을 Spring Transaction 을 이용한 예제를 보여준다. JpaTransactionManager Spring 은 PlatformTransactionManager 인터페이스로 트랜잭션을 처리한다. 이 인터페이스의 구현체 중에 하나인 JpaTransactionManager 는 단일 JPA EntityManagerFactory 를 유지하면서 스레드별로 EntityManager를 제공한다. JpaTransactionManager 는 JPA 를 위해 주로 사용하지만 트랜젝션이 사용하고 있는 DataSource에 직접 접근이...