everydayminder
log4j 취약점에 대해 제로데이 어택으로 구분될만큼 심각한 보안문제로 log4j CVE-2021-44228가 보고 되었다. 이와 관련한 내용을 정리해 본다. 제로데이 어택 앞서 말한 제로데이 어택이란 무엇일까? 어떤 보안상 문제가 발견되고, 그 문제가 미처 공표되기도 전에 해당 문제점을 목표로 행해지는 위협/공격을 말한다. 취약점이 발견되고, 아직 패치 등이 적용되기 전에 이뤄지는 공격이므로 마땅한 대처 방안이 없고, 피해 규모도 가늠할 수 없는 상태를 말한다. 즉, 빨리 해결책이 나올 때까지 기다리고, 그 패치를 적용하는 것 외에는 뾰족한 방법이 없다. log4j란? log4j는 자바 애플리케이션에 로그를 쉽게 기록할 수 있도록 도와주는 라이브러리 구현체 중 하나이다. 공식사이트) https://lo..
java DNS TTL 설정 자바에서 DNS 설정하는 여러가지 방법에 대해 확인해 보자. 배경 - DNS 기반 redundancy layer DNS에 여러 A 레코드를 두고, DNS lookup을 하면 그 중 하나의 A 레코드를 반환하도록 한다. 이렇게 하여 서비스의 부하 분산, 지역 분산 및 혹시 모를 장애 대비도 할 수 있다. 그런데, DNS에 기반한 위 가정에 맞추려면, java 애플리케이션의 경우 꼭 챙겨야 하는 설정이 있다. DNS Client Cache 설정 어떤 URL이 주어지면, DNS에 대한 질의를 하고자 하는 클라이언트와 그에 대한 답을 하는 서버로 역할이 나눠진다. 실행하는 자바 애플리케이션이 어떤 주소를 확인하기 위해 매번 DNS 질의를 해야 한다면 (아무리 패킷이 작더라도) 그만큼..
여러 버전 java 사실 개발하면서 Java의 버전을 계속 바꿀 일은 별로 없는 것 같다. 프로젝트마다 바꿀 일도 없고, 회사 정책이 바뀌지 않는한 기존의 버전을 사용할 가능성이 높다. 또한, 기존에 java 8을 사용한 프로젝트라면 특별한 이유가 없는 한 Java8을 유지보수할 가능성이 높다. Java의 버전 릴리즈 주기가 6개월로 짧아지면서, 여러 버전을 설치하고 사용하고자 할 때 jenv를 사용하면 좋을 것이다. (Python처럼) 3년 주기의 Java LTS 버전을 감안하면, production에서는 현재로서는 Java11이 유용한 선택지가 될 것이다. https://en.wikipedia.org/wiki/Java_version_history jenv: Java용 Pyenv Python 개발 환경..
moreunit은 작성중인 클래스에 테스트 코드가 작성되어 있는지를 시각적으로 보여주는 플러그인이다. 해당 플러그인에 대한 자세한 설명은 http://moreunit.sourceforge.net/index.html 에서 확인할 수 있다. 설치는, 직접 다운로드하여 플러그인 디렉토리에 풀어주거나, 이클립스 플러그인 설치 메뉴로부터, http://moreunit.sourceforge.net/update-site/ 를 등록하여 다른 플러그인 설치 과정과 동일하게 설치하면 된다. 본인의 경우, 별다른 기본 설정없이도 작성중인 클래스에 대해 테스트 클래스를 찾아 보여주었는데, 설정이 동작하지 않는다면 properties context menu로부터 세부 설정이 가능하다. 동작시의 화면은 moreunit의 공식사이..
"우리나라 정서상 어렵다, 현실에 맞지 않다"는 말들을 하기도 하고, 듣기도 한다. Rod Johson이 그의 저서 "Expert one-on-one J2EE Design and Development"에서 XP 기법을 소개하면서, 그 기법의 모든 것을 따르지는 않더라도 테스트 지향 개발 방법은 바람직하다고 하였다. 테스트에 대한 XP의 기법은, 코드를 작성하기 전에 먼저 테스트 코드를 작성하자 모든 코드는 단위 테스트 코드를 가져야 하고, 각 단위 테스트는 자동으로 실행될 수 있어야 한다. 버그가 발견되면 버그를 고치기에 앞서, 버그를 다시 재현해 내는 테스트 케이스를 정의한 후에 고쳐야 한다. 테스트 코드를 먼저 작성하는 것이 더 유용하다는 관점에 대해서는, 테스트 문서는 스펙 문서에 근거할 뿐만 아니..
"내가 작성한 코드는 잘 작성한 것일까?" 내가 작성한 코드가 이상없이 동작하는지 검사하기 위해, JUnit 등을 사용하여 테스트를 수행해 왔다면, 이제 이런 질문을 던져볼 만도 하다. 프로그래머가 작성한 코드는 "논리"의 집합이다. 그렇다면, 테스트케이스는 "그 논리가 적합한가?" 혹은 "그 논리에 헛점이 있는가?"를 검증하기 위한 것이라고 할 수 있을 것이다. 그러면, 그 "논리를 세우는 방법이 잘 되어 있는가?"를 검증하는 방법도 있을 법하다. 그래서, "코드검사"를 수행한다!! 코드 검사는 내가 작성하는 코드가 표준에 맞는지, 어떤 잠재적인 오류 패턴을 내포하고 있는지 등을 검사해 준다. CheckStyle, PMD, FindBugs 등 여러 가지가 있으나, FindBugs를 hudson에 연동하..
사실, 개발하면서 주석을 다는 것은 무척이나 흥미로운 귀찮은 일이다. 게다가 포맷을 지키고, 어떤 파라미터가 넘겨지고, 리턴 값은 어떻고, 어떤 상황에서 어떤 exception이 던져진다는 것까지 써야 한다면 더더욱 그렇다. 보통 프로그램부터 작성한 후, 주석을 달라고 한다면, 주석을 다는 것이 아주 하기 싫은 일이 될 가능성이 크다고 생각한다. 주석을 달면서, 코드 리뷰도 하고, 분석도 하고, 수정도 하는 선순환이 되기 보다는 상당히 형식적인 주석 작업이 될 확률이 더 높아진다. 오히려, 보다 양질의 주석을 달기에 좋은 시기는 해당 부분을 프로그램화 할 때라고 생각한다. 모든 프로젝트를 완료한 후, javadoc을 사용하는 대신에 초기부터 javadoc을 사용해 보자. 자신이 작성하는 코드와 비슷한 시..
지난 글에 설정한 바대로 ant task를 정상적으로 진행했다면, ant task로 emma.report 태스크를 수행했을 때, coverage.html과 coverage.xml이 생성되었을 것이다. 참고로, 생성된 coverage.html을 살펴보자. 해당 패키지의 구성중, 클래스/메소드/블럭/라인 기준으로 어느 정도가 test로 커버 되고 있는지를 보여준다. 패키지 이름을 클릭하면, 패키지에 포함된 클래스들이 나타나고, 이 클래스들이 어느 정도 test로 커버되고 있는지 보여준다. 이 중, 아무 클래스나 또 클릭하게 되면, 클래스내의 메소드들이 test로 어떻게 커버되고 있는지 현황을 자세하게 보여주게 된다. 이 결과물은, 별도의 ant task를 수동으로 실행시켜 얻은 결과물이므로, 이제 hudso..
지난 글t에서 hudson에 JUnit 테스트를 수행하는 방법에 대해 소개하였다. 물론, 코드의 품질은 어떤 테스트 코드를 어떻게 작성하느냐에 코드의 신뢰도가 달라진다. 그렇다면, 좋은 테스트는 테스트 케이스의 수에 단순히 비례할까? 두 말할 필요 없이 얼마나 양질의 테스트가 어떻게 수행되었는지가 중요할 것이다. 본 포스트에서 말하고자 하는 metric은 테스트의 커버리지(coverage)이다. 즉, 테스트의 커버리지가 높은 프로젝트 코드들은 검증을 거친 부분이 많으므로, 상대적으로 양질이라고 볼 수 있다. Emma는 프로젝트 코드와, 프로젝트 코드를 테스트하는 테스트 코드를 조합하여 비교함으로써, 주어진 테스트 코드가 원본 소스 코드에 대해 어느 정도의 커버리지를 갖는지를 조사해 준다. Emma는 어디..
Eclipse에 내장된 기능으로도 특정 객체의 hashCode()와 equals()를 작성할 수 있다. 사용법은, 마우스 오른쪽 클릭하여 나오는 context 메뉴로부터 Source > Generate hashCode() and equals() ... 를 클릭하면 된다. 그러면, 다음과 같은 코드가 생성될 것이다. @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((link == null) ? 0 : link.hashCode()); result = prime * result + ((menuCode == null) ? 0 : menuCode.hashCode()); result = ..
FindBugs - EQ_COMPARETO_USE_OBJECTS_EQUALS 사용자가 compareTo()를 override 했을 경우, 볼 수 있는 warning이다. FindBugs의 code inspection에 따르면, This class defines a `compareTo(...)` method but inherits its `equals()` method from `java.lang.Object`. Generally, the value of compareTo should return zero if and only if equals returns true. If this is violated, weird and unpredictable failures will occur in classes s..
Twitter API는 http://apiwiki.twitter.com/ 에서 세부 정보를 찾아볼 수 있다. 합병되기 전/후의 두 개의 회사가 연관되어 있어, 두 개 (혹은 세 개)의 API 그룹으로 구성되어 있다. HTTP 기반의 프로토콜인데, 여러 언어로 라이브러리가 공개되어 있다. 그 중, java로 공개된 라이브러리로는 Twitter4J, java-twitter, jtwitter 등이 있으며, 사용자 층이 두텁고, 업데이트가 최근까지 가장 활발한 Twitter4J를 선택하여 일부 메소드를 테스트해 보았다. 1. Twitter4J의 공식 사이트 : http://twitter4j.org/ 2. Twitter4J의 활용예 (* YouTube 동영상 참조 : http://www.youtube.com/wa..
eUML2라는 eclipse 플러그인을 설치하여, 기존에 작성했던 java project의 클래스 다이어그램 및 클래스 연관 관계를 쉽게 그려서 볼 수 있다. 라이센스는 'free' 버전과 'studio' 버전이 있으므로, free를 골라서 설치하자. eclipse에서 자신의 eclipse 버전에 맞는 것으로 골라서, download 받고 설치하면 된다. 대략 다음의 장점이 있다고 광고하고 있다. Real-time code/model synchronization UML2.1 compliant and support of OMG XMI Advanced reversed engineering Powerful true dependency analyze tools JDK 1.4 and 1.5 support Cust..
www.doclet.com에 소개된 바와 같이 여러 종류의 doclet이 있으나, 그 중 몇몇은 javaodc의 출력 형태를 pdf로 직접 지정할 수 있다. LaTex를 쓰는 방법은 LaTex의 특성상 가독성이 좋은 결과물을 만들 것으로 기대되나, 별도로 변환을 한번 더 해줘야 하는 번거로움이 있으므로 이왕이면 손이 덜 가는 방법을 찾아보게 되었다. www.doclet.com에 소개된 library 중 하나인, AurigaDoclet(http://aurigadoclet.sourceforge.net/)을 사용해 보자. 사용법은 간단하다. ANT에서 지정할 수 있는 설정은, package-names package names source-path path of the java source files aurig..