몇 년 전까지만 해도 직접 쓰레드를 생성하고 해제 해야하는 책임을 가지는 플랫폼에서 주로 개발을 했습니다. 자바 언어로 넘어오면서 쓰레드 풀이라는 개념을 접하게 되었는데, 처음 쓰레드 풀을 접하고 사용 상의 문제는 없었지만 내부 동작을 모르니 어딘지 모르게 찝찝한 부분
Java Stream을 사용해 이렇게 작성된 코드를 보며 의문점이 생겼습니다. 제 생각에는 코드가 다음과 같이 동작할 것 같았습니다.filter 연산에서 스트림의 모든 항목을 순회하며 3보다 작은 항목을 추출한다. findFirst 연산에서 추출된 항목 중 첫 번째 항
Java, Netty 기반 서비스에서 발생한 쓰레드 누수 이슈를 밑바닥에 있는 로그에서 시작해서 진짜 원인을 찾아서 해결한 귀납적 과정을 기록하며 객관화해 보았습니다.
어제 팀에서 작성된 코드 중에 이런 패턴의 코드가 있어서 Effective Java 책의 내용(아이템 7 다 쓴 객체 참조를 해제하라)을 살펴보았습니다.결론은 ‘다 쓴 객체 참조를 프로그래머가 항상 명시적으로 해제(null 처리)할 필요는 없다’ 입니다. 아래는 관련된
어떤 제약으로 클래스에 some1, some2, some3 처럼 List 없이 쭉 펼쳐진 멤버들이 있었는데 루프를 돌 수 없어 괴로웠다. 현업에서 Reflection을 제대로 사용해 본적이 없었는데 getMethod("some"+index).invoke(...)와 같이
계속 C언어에 익숙한 개발자와 대화를 나눈다. ‘아! 이런 사고를 하시는구나’를 이해하는 신선함이 있는 것 같다. 대화를 하다보니 C언어에서는 함수를 정의하면 곧바로 코드 어디에서든 호출이 가능한데 Java에서는 클래스 내에 함수를 정의했다고 곧바로 호출할 수 있는게
이전 글에서 Java 코드에서 JNA(Java Native Access)를 활용해 C먼저 C해당 상태 값을 획득하여 반환하는 함수입니다. 최종적으로 DLL에서 Export 되는 합수입니다.Java에서 DTO를 정의합니다. C이제 DLL을 로드하고, 연결된 DLL 함수
Java 프로젝트에서 JNA(Java Native Access)를 활용하여 CJava 코드에서 문제가 발생했으면 호출 스택을 통해서 어느 파일, 어느 코드에서 문제가 발생했는지 쉽게 찾을 수 있었겠지만 라이브러리로 로드한 C어느 코드에서 죽는다는 것은 알았지만 왜 해당
특정 외부 시스템을 제어할 일이 생겼는데 C++/CVisual Studio에서 Class Library (.NET Framework) 템플릿 프로젝트를 생성하고 DLL 파일을 생성합니다. File > New > Project 메뉴를 선택합니다.‘Create a new
테스트 코드를 작성하다 재활용 될 수 있는 코드가 보여서 별도의 메서드로 분리했다. 단순하게 두 개의 시간을 비교하는 메서드인데 어느 정도 차이(밀리초)가 나도 같은 시간으로 판단하는 epsilonMillis 라는 파라미터를 입력 받는다. 그런데 커밋을 하려고 하니 I
JAVA로 작성한 서비스 실행을 서버에 따라 제한하는 기능을 C++ DLL로 작성하고 JNA로 호출하도록 바꾸어 보았다. jar 파일을 고객에게 전달하면 소스를 까볼 수 있으니 아무래도 취약한 것 같아서다. 처음에 JAVA 코드에서 JNA로 DLL 로드가 실패해서 찾아
AWS EC2 인스턴스 (1G 메모리) 에 올린 통신 서버(Netty 기반)에서 java.lang.OutOfMemoryError 예외가 발생합니다.
Java 프로젝트에서 boolean 타입의 isUp 이라는 객체 멤버가 Jackson 라이브러리를 통해 JSON 문자열로 직렬화되면 필드 이름이 up 로 바뀌는 문제가 발생합니다.
String.split() 을 사용하면 Leading Empty String 이 생겨요.
Netty 프레임워크를 활용해 TCP 서버, 클라이언트를 구성하고 간단한 메시지를 교환하는 테스트 코드를 작성합니다.