
spring batch 에서는 batch 메타 테이블을 이용해 배치 잡의 메타 데이터들을 관리해준다. job 의 실행 이력, 들어온 job parameters, 실행 결과 등을 말이다. 이 메타 테이블에 있는 정보를 이용해 spring batch 는 이전에 실행 이력이 있는 파라미터로 job 요청이 들어오면 job 실행을 중단할 수 있다. 하지만 이런식으로 job 실행을 막는건 여러모로 불편할때가 있다. 그래서 이를 무력화 하기위해 spring batch 는 기본 job parameters 에 유니크한 파라미터를 추가해주는 JobParametersIncrementer 라는 인터페이스를 제공한다. 그리고 이 인터페이스의 구현체인 RunIdIncrementer 클래스를 제공하고있다. https://githu..
1. 이슈와 해결 레거시 코드가 있는 상태에서 기존 코드의 동작을 확장시키는 코드를 만들일이 있었다. 한 문장이지만 표현이 거창해서 그렇지 사실 대부분의 개발은 첫 문장과 같은 형태가 될것이다. 기존 코드를 어떤방식으로 확장하면 좋을까를 고민하다가 상속과 오버라이딩을 이용하기로 했다. 간략화된 코드는 아래와 같다. @Service @RequiredArgsConstructor class AService { private final BService bService; @Transactional void aMethod() { bService.bMethod1(); bService.bMethod2(); } } @Service class BService { @Transactional void bMethod1() { ..

JPA 유튜브 중에 아래와같은 동영상이 있어 이 문제를 해결해보고자한다. https://www.youtube.com/watch?v=brE0tYOV9jQ&t=156s 먼저 방송에서도 언급하지만 코드베이스는 매우작다. BOOK 엔티티와 BOOK_STORE 엔티티 두개만 존재하고 이 둘은 BOOK(N) : BOOK_STORE(1) 관계이다. @Entity @Getter @Setter public class Book { @Id @GeneratedValue @Column(name = "BOOK_ID") private Long id; @Column(name = "ISBN") private String isbn; @Column(name = "TITLE") private String title; @ManyToOne p..
멀티 스레드간에 동기화를 하기위해선 락을 잡아야한다. 자바에서 락을 잡는법은 모두들 알고있을 synchronized 키워드를 이용한 모니터락을 잡는방법과 1.5부터 추가된 Lock 인터페이스의 구현체를 이용하는 방법이 있다. 이 두 방식에서 각각 데드락 상태가 됐을때 스레드덤프의 내용은 동일한 내용일까? 이 포스팅에서는 그 차이를 확인해보려한다. 먼저 synchronized 키워드를 이용한 간단한 데드락 코드를 작성하자. private final Object lock1 = new Object(); private final Object lock2 = new Object(); public static void main(String[] arg) { ExecutorService es = Executors.new..
Java 1.5 에 추가된 concurrent 패키지엔 유용한 동기화 클래스들을 제공해준다. 이 클래스들을 이용하면 손쉽게 멀티 스레드에 안전한 코드를 작성할 수 있다. 이번 포스팅에서는 concurrent 패키지 내에 있는 3개의 동기화 클래스를 간략하게 알아보고자 한다. 1. CountDownLatch Latch 의 사전적 의미는 '걸쇠' 이다. 원하는 지점에서 await() 메서드를 호출해서(걸쇠를 걸어서) 코드의 진행을 중단시키고, 다른 스레드들에서 원하는 횟수만큼 countDown() 메서드를 호출해주면 그때 비로소 코드가 진행되게 된다. 코드로 확인해보자. 원하는 횟수를 지정한 인스턴스를 생성한다. 해당 예제코드에서는 5를 지정했다. CountDownLatch countDownLatch = n..
2020년 3월 17일 GA 예정인 JDK 14 의 몇가지 피처들을 정리해본다. Pattern Matching for instanceof (Preview) 런타임에 객체의 타입을 확인하는 instanceof 연산자는 보통 아래와같은 관용구(idiom)로 많이 사용된다. if(obj instanceof String) { String s = (String) obj; } 이 instanceof 연산자를 확장하여 아래와같은 문법을 지원한다. if(obj instanceof String s) { // String 타입의 s 변수 사용 } 코틀린에 대한 경험이 있는 사람이라면 바로 느꼈겠지만 코틀린의 스마트 캐스팅과 유사한 문법으로 보인다. 다만 한가지 좀 이해하기 어려운 스펙이 있는데 if (obj instanc..
면접관으로 들어가서 알고있는 디자인 패턴이 어떤게 있는지를 질문해보면 가장 많이 나오는 대답이 MVC패턴과 싱글톤 패턴이다. 커뮤니티를 봐도 디자인패턴에 대한 질문은 싱글톤의 비중이 압도적이다. 개인적으로 싱글톤이 왜 이렇게 인기가 많을까 생각해봤는데 패턴이 추구하는 바가 비교적 명확하고, 처음 패턴을 공부하는 초보 개발자들이 적용하기에도 가장 만만해서 그런게 아닐까싶다. 그럼 이제 싱글턴 패턴에 대해 알아보자. 싱글턴 패턴은 애플리케이션 내에서 하나의 클래스가 하나의 인스턴스만 생성하는걸 강제하는 패턴이다. 자바에서 객체를 생성하는 메커니즘은 생성자를 이용해서 객체를 생성하는 것이다. public class Singleton { public Singleton() { } } Singleton single..

햄버거 클래스를 만든다고 생각해보자. 이번 예제부터는 코틀린으로 작성해보려한다. 자바랑 좀 다르긴 하지만 이해하는데 큰 어려움을 없을거라고... 생각한다..... open class Hamburger(private val bun: String, private val patty: String) { open fun materials(): String = "$bun $patty" } 기본 햄버거다. 햄버거 번과 패티를 갖고있다. message() 메서드는 그저 재료들을 나열하는 문자열을 반환하는 간단한 클래스다. 치즈토핑이 추가된 치즈버거를 만들고싶다. 어떻게 구현할 수 있을까? open class CheeseBurger(private val cheese: String, bun: String, patty: S..
generic 을 이용한 배열 객체를 생성할때는 컴파일단에서 에러가 발생하게된다. List[] lists = new ArrayList[10]; ArrayList 의 배열을 만들고자하는 코드다. 대충 쉽게 이해하면 일종의 2차원 배열이라고 볼 수 있다. 하지만 이 코드는 'generic array creation' 이라는 컴파일 에러와 함께 컴파일 되지않는다. 왜 이럴까? 먼저 제네릭이 추구하는 바가 뭔지를 알아보고, 배열과 제네릭 리스트의 차이를 이해해야 컴파일러가 저걸 왜 막는지 이해할 수 있다. 제네릭이 추구하는 바는 타입 안정성이다. 제네릭이 사용된 코드는 타입 안정성을 보장해야한다. 타입 안정성이 보장될 수 없다면 제네릭은 사용될 이유가 없다. 그런데 배열과 제네릭의 차이점으로 인해 제네릭 배열은..

1. 축구경기 국가대표 축구경기가 있다고 생각해보자. 골이 들어갈때마다 네이버와 다음 각 포털의 데이터가 변경되어야한다. 이를 어떻게 구현하면 될까? 첫번째 방법은 담당자가 축구를 보다가 골이 들어갈때마다 데이터를 변경해주는 수동 방법이있다. 수동방법을 몰라서 이 포스팅을 하는건 아니니 넘어가자. 두번째 방법은 축구협회에서 현재 골득점 상황을 알려주는 API를 제공한다고 가정했을때(제공안해주면 크롤링을 해서라도..), 각 포털사가 지속적으로 API를 호출하면서 데이터 변경 유무를 체크하는 방법이 있을 수 있다. 이 방식으로 구현하면 적어도 담당자가 직접 수작업은 하지않아도 되니 자동화가 가능해진다. 다만 축구협회 API를 호출하는 주기를 어떻게 잡을것인지가 중요하다. 너무 짧게 잡으면 축구협회 API에 ..
- Total
- Today
- Yesterday
- spring cloud
- go-core
- backend개발환경
- JavaScript Core
- java
- java8
- JPA
- generics
- Design Pattern
- servlet
- 정규표현식
- code
- Jackson
- http
- mariadb
- Spring
- toby
- clean code
- frontcode
- javascript
- EffectiveJava
- DesignPattern
- Kotlin
- MySQL
- OOP
- db
- programming
- Git
- TEST
- frontend개발환경
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |