전체 글
-
람다 표현식을 사용한 잠금(lock) 관리JAVA 2017. 3. 17. 18:52
잠금(lock)은 병렬로 실행되는 자바 애플리케이션에서 중요한 역할 을 한다. synchronized 는 상호 배재(mutual exclusion)를 제공하기 위해 사용되어온 오래된 키워드이지만, 두가지 단점을 가지고 있다. 메서드가 호출되는 시간을 제어하기 어렵다. - 이것은 데드록(deadlock) 과 라이브록(livelock) 이 발생할 가능성을 증가시킨다.synchronized 를 실제 적용하는 것이 어렵다. - 코드가 thread safety에 있는지를 체크하기 위한 unit test를 어렵게 만든다. synchronized 의 문제를 해결하기 위해 자바5 에서 Lock 인터페이스와 ReentrantLock 등의 구현이 추가 되었다. Lock 인터페이스는 lock, unlock, check 등에..
-
Java 8의 parallelStream 을 사용할때 Log4j 의 MDC 문제 해결하기JAVA 2017. 3. 13. 14:52
log4j 의 MDC 에 대한 설명을 보면, 위의 그림처럼 thread safe 한 것으로 되어 있다. 하지만, java 의 forkJoin 을 사용하게 될 경우, thread safe 가 보장되지 않는다. java 8 의 parallelStream 을 사용할 경우, 내부적으로 forkJoin 을 통한 처리를 하고 있어, 동일한 현상이 발생한다. 이 현상을 방지 하기 위해서는 아래와 같이 MDC 의 현재 contextMap 을 복사하고, 그 값을 사용하도록 셋팅하는 클래스 하나가 필요 하다. 123456789101112131415161718192021import org.slf4j.MDC; import java.util.Map; public class MdcSnapshot { private final Ma..
-
오라클 DB 에서 트리거로, UPDATE CASCADE 흉내내기DATABASE 2016. 9. 18. 00:13
현재 서비스 중인 앱의 기능을 강화하기 위해 다른 회사와 제휴를 맺어 데이터를 정기적으로 받고 있는 것이 있습니다. 제휴사에서 제공한 DB 정의서에 따라 PK, FK 를 설정해서 개발중이었는데, 테스트를 하던중 중대한 문제가 발생하였습니다. PK 로 잡혀 있는 키 값이 제휴사 사정에 의해 변경된다는 것입니다. 이 값이 변경되면, FK 로 연결되어 있는 모든 테이블의 데이터가 변경되어야 하는데, 오라클은 UPDATE CASCADE 기능을 제공하지 않고 있어, 데이터 수정이 불가능 합니다. 이번만 그렇다면, 잠시 FK 제거하고 데이터 변경후 다시 FK 설정을 하면 되는데, 제휴사에서 종종(혹은 자주) 서비스 개선을 위한 작업의 일환(?)으로 변경될 수 있다고 합니다. 더군다나, 운영계 시스템에서는 DDL 에..
-
인턴 멘토링을 마치면서...ANYTHING 2016. 8. 20. 10:03
오랫만에 인턴 멘토링을 하게되었습니다. 8주간의 인턴 기간이지만, 7주차에 과제 수행에 대한 발표가 있습니다.즉, 멘토링 가능한 기간은 7주...길다면 길고, 짧다면 짧은 기간입니다. 인턴에게 현재 운영중인 서비스에 대한 OJT 를 진행하고, 파악하고 있는 시스템의 개선 사항도 설명하고, 인턴이 하고 싶은 일은 어떤것인지 논의도 해 가면서, 과제를 선정했습니다. OJT 및 과제 선정에 1주가 지나가고... 선정된 과제를 수행해야 하는데, 과제 수행을 위해 만들어야 할 시스템은 2개...발표 준비를 위한 1주를 빼면, 5주만에 1개의 Backend 시스템과 1개의 Frontend 시스템을 만들어야 하는 상황. 더군다나, 인턴은 안드로이드에 대한 경험은 많았지만, 서버사이드 기술은 지식이 전무한 상태. 사용..
-
gTTS-tokenPYTHON 2016. 7. 15. 14:46
사내 Plalab 활동을 하면서 TTS 를 사용할 일이 있어 자료를 찾아 봤습니다. 현존하는 TTS 라이브러리 중 구글 번역 사이트에서 제공하는 것이 품질이 가장 좋은것 같았습니다. 하지만, 외부에서 사용하려고 하면 capcha 처리가 되어 있어, 자동화 하기 난감하더군요. 이런 이유로 포기하고 다른 TTS 라이브러리를 찾고 있다가, 우연히 gTTS-token 라이브러리를 발견하였습니다. Thanks. Boudewijn van Groos. AND desbma. gTTS-token 라이브러리를 활용하면, capcha 없이 구글 TTS 를 사용할 수 있습니다. gTTS-token 라이브러리를 사용하기 위해서는 먼저 라이브러리를 설치 합니다. $> pip3 install gTTS-token 이후 아래의 코드를..
-
O2O 가 핵심이 맞는 건가?ANYTHING 2016. 5. 31. 09:08
나는 O2O 를 특정 서비스를 고객에게 제공하기 위한 하나의 방법이라고 생각한다. 즉, 특정 서비스를 제공하는 방법에 있어 O2O 라는 채널을 선택하는 것이지... O2O 가 필수는 아니라는 것이다. 예를 들어 배달의 민족 같은 경우 편리하게 주문하기 위해 O2O 라고 지칭하는 서비스 앱이 있는 것이지, 예전 방식대로 전화나 전단지로 서비스가 불가는 한 것은 아니다. 결국 O2O 를 차용한 서비스가 정말 사업적 가치가 있는 서비스라면 O2O 를 빼더라도 성공할 것이다. 반대라면, O2O 를 아무리 강조해도 결국 망할 것이다. 물론 O2O 도 중요하다. 고객과 접점이 되는 채널 중 현재 가장 강력한 채널이기 때문이다. 하지만, O2O 를 강조 하는 것보다는 서비스의 본질을 어떻게 더 강화할 것인지 고민하는..