본문 바로가기

전체 글

(21)
Go 언어에서 프로세스 실행 타임아웃(timeout) 지정하기 Go 언어의 장점은 goroutine이라는 가벼운 thread를 기반으로 동적인 처리를 효율적으로 제공한다는 것이다. 그리고 채널 등을 통해 goroutine을 어렵지 않게 제어할 수 있지만, 별도로 프로세스를 실행하는 경우에는 통제가 어렵다. 실제 내부적으로 Maven이나 Gradle 빌드를 별도의 프로세스로 실행하는 경우에 해당 프로세스들이 중지되지 않는 경우들이 종종 발생한다. 이런 경우 내부적인 goroutine 관리만으로는 프로세스를 중지할 수 없다. 이런 경우에 친절하게도 Go에서는 타임아웃이 적용된 프로세스를 시작할 수 있고, 타임아웃이 된 경우에 실행했던 프로세스를 "kill -9"와 같은 명령으로 강제 종료시키는 것을 지원한다. 이를 공통 함수로 활용하면 어렵지 않게 타임아웃을 적용할 수..
Maven에서 phase vs. lifecycle vs. goal Maven을 사용할 때에 헷깔리는 용어가 바로 phase, lifecycle, goal인 것 같습니다. 그래서 정리해 봅니다. (phase들은 파란색, lifecycle들은 녹색, goal들은 노란색으로 구분해서 작성한다.) Phase phase는 최소 수행 단위다. 예를 들면 compile, test, package, clean, ... 등이 대표적인 phase이다. Lifecycle Lifecycle은 관련 있는 phase들의 순서가 있는 묶임으로 생각하면 된다. Maven에는 다음과 같은 3개의 lifecycle이 있다. default : 빌드를 수행하는데, 23개의 phases로 구성된다. (validate -> .. -> generage-sources -> .. -> compile -> .. -..
Functional interfaces in Java (standard functional interfaces) Java 8부터 함수형 프로그래밍(functional programming)을 지원한다. Java 함수형 프로그래밍의 가장 기초는 아무래도 함수형 인터페이스(functional interface)이다. JDK 내에 많은 기능들, 특히 collections과 관련된 기능들은 함수형 인터페이스를 기반으로 제공된다(eg: ```Iterable``` 인터페이스의 ```forEach(Consumer)``` 메서드 정의의 ```Consumer``` 파라미터). 람다 표현식도 이 함수형 인터페이스를 활용해 코드를 간결하고 효율적으로 표현할 수 있게 한다. 1. 함수형 인터페이스 우선 함수형 인터페이스 정의부터 알아보자. Java 8의 ```java.util.function``` 패키지에는 43개의 함수형 인터페이스가..