자바 개발자들은 대부분이 느끼겠지만 환경설정 할때마다 오라클 사이트에 접속하여 사용하는 버전에 맞는 자바 버전을 다운로드 받는 것도 굉장히 귀찮고 스트레스 받는 일입니다. 뭔가 찾아들어가기 어렵다는 것이 맞습니다. 찾기 편하게 링크를 정리해봅니다. Oracle Java Archive(오라클 자바 저장소) Oracle Java Archive Java ME DVB, J2ME Connected Limited Device Configuration (CLDC), J2ME Mobile Information Device Profile (MIDP), Java Card, Mobile Media API Emulator (MMAPI), Java ME SDK, Java TV, OCAP Sun Specification, Pro..
인터넷 망분리 환경으로 인해 경험할 수 있는 에러였는데 어찌 저찌 해결이 되었다. 여러가지 해결 방법을 짬뽕하여 해결했다. 안드로이드 스튜디오에서 안드로이드 apk 빌드를 gradle로 시작하는데 PKIX path building failed unable to find valid certification path to requested target 를 보게 되었다. 주요 내용은 아래와 같은데 ... sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to ..
자바로 작성한 프로그렘에서 에러 발생시 트레이스 정보에는 에러가 발생한 라인수가 표시된다. 그런데 라인수가 표시되어야 할 부분에 "Unknown Source"라고 표시 되기도 하는데 이는 컴파일시에 디버깅 정보를 포함시키는 옵션을 넣지 않아서 그렇다. javac -g *.java ant 사용시 자바에서 Stack Trace 내 보통 소스 파일과 라인 번호가 있어야 할 자리에 Unknown Source가 자리할 수 있다. 다음은 이를 테스트하기 위한 코드이다. Unknown Source 테스트 코드 public class ExceptionUnknownSourceTest { public static void main(String[] args) { throw new RuntimeException(); } } ..
오늘은 개인적으로 자바 활용의 익스퍼트 급이라고 생각하는 것 중에 하나인 BCI(Byte Code Instrumentation)에 대해서 포스팅해보고자 합니다. 저도 제가 공부하고 이해하는 선 내에서 진행해보도록 하겠습니다. 제가 신입시절... 자바의 리플렉션을 활용하며 그래 이것만 있으면 뭐든 다 할수 있겠는데?라고 생각하고 지냈다가 제니퍼소프트의 APM(Application Performance Monitoring) 솔루션을 만나며 마냥 신기한데? 라고 생각 했었습니다. 제니퍼소프트는 나름 국내 IT업계에서 신의 직장으로 많이 알려진 회사지요? ㅎㅎㅎ 그러다 몇년 후 EJB와 스트럿츠의 시대를 지나 스프링 프레임워크의 시대를 맞으며 AOP(Aspect Oriented Programming : 관점지향..
자바(JDK, JRE) 쉽고 빠른 설치, 환경 설정 방법에 대해서 알아봅시다. 먼저 자바 설치 파일 다운로드가 필요한데요. 설치 파일이 필요하신 경우 아래 링크를 통해서 운영체제에 맞는 버전을 먼저 다운로드 받고 와주시기 바랍니다. 자바(JDK, JRE) 모든 버전 다운로드( 6,7,8,9,10,11,12,13,14,15, 16 등) 자바 개발자들은 대부분이 느끼겠지만 환경설정 할때마다 오라클 사이트에 접속하여 사용하는 버전에 맞는 자바 버전을 다운로드 받는 것도 굉장히 귀찮고 스트레스 받는 일입니다. 뭔가 찾아 nhj12311.tistory.com 1. 윈도우 자바(JDK, JRE) 설치 대부분 많은 분들이 윈도우에 설치할 일이 많을것 같습니다. 윈도우 OS 버전에 맞는 설치 파일 다운로드까지 받으셨을..
막연하게 자바 해쉬 테이블이나 해쉬 맵을 당연하게 사용하고 있었다. 이를 테면 자전거를 타는 방법은 아는데 남한테 설명을 하라고 하면 제대로 설명을 하지 못하는 것과 비슷한 느낌이다. 예전에 자바를 초기에 공부할 때 LinkedList를 직접 구현해서 사용해본적이 있었는데 10년이 지난 지금까지 정확하게 기억은 안나도 시간이 조금 주어지면 금방 다시 만들수 있을 것 같기도 한데... 암튼 해시 테이블, 해시맵 정리해보자. 아주 간단히 생각해보자면 키와 값을 저장하는 컨테이너 컬렉션이다. 자바 해시 테이블(HashTable) vs 해시맵(HashMap) 차이 비교 중복 키에 대한 처리 키가 같은 값을 두번 넣게 되면 초기 값을 유지하게 되고, 해시맵은 키가 같은 값을 두번 넣게 되면 두번째 값으로 덮어버리..
자바의 AOP를 알아보면서 허접하게나마 각 사용방법을 훑은 것 같습니다. 최종적으로 AspectJ가 남았습니다. 이제 이놈만 정복하면 될 듯 합니다. 끝판왕이니 만큼 심혈을 기울여 조사하고 공부하고 깨우치도록 해봅시다. AspectJ란? AspectJ는 PARC에서 개발한 자바 프로그래밍 언어용 관점 지향 프로그래밍 (AOP) 확장 기능이다. 이클립스 재단 오픈 소스 프로젝트에서 독립형 또는 이클립스로 통합하여 이용 가능하다. AspectJ는 최종 사용자를 위한 단순함과 이용성을 강조함으로써 폭넓게 사용되는 AOP에 대한 디 팩터 표준(사실 상 표준)이 되었다. 이전 포스팅에서도 AspectJ에서 두가지 방식으로 aop를 사용할 수 있다고 언급했습니다. 머 암튼 aspect 지향 프로그래밍의 구현이랄..
지난시간에 CGLIB를 배우기 위해 ASM을 사용해보았는데 이젠 CGLIB를 사용해봐야겠습니다. 2. CGLIB는 인터페이스가 아닌 클레스를 대상으로 동작 가능하고 바이트코드를 조작해서 프록시를 만들기에 Java Proxy에 비해 성능이 좋습니다. 일반적으로 스프링 프레임워크에서 AOP 기능을 사용하게 된다면 CGLIB를 사용하게 되지 않을까 싶습니다만... CGLIB는 Byte Code Generation Library로서 동적 프록시 객체를 구성해주는 라이브러리입니다. 그럼 동적 프록시를 어떻게 생성해내는지 확인해보고 싶습니다. 실제 눈으로 보는것과 보지 않는 것의 차이는 어마어마하다고 생각합니다. 먼저 CGLIB를 임포트합니다. 가장 최근 버전이 3.2.5 버전이군요. 저 같은 경우 항상 임포트..
오늘은 CGLIB를 배우기 위해 ASM을 먼저 정리해봅니다. 2. CGLIB는 인터페이스가 아닌 클레스를 대상으로 동작 가능하고 바이트코드를 조작해서 프록시를 만들기에 Java Proxy에 비해 성능이 좋습니다. 일반적으로 스프링 프레임워크에서 AOP 기능을 사용하게 된다면 CGLIB를 사용하게 되지 않을까 싶습니다만... CGLIB는 Byte Code Generation Library로서 동적 프록시 객체를 구성해주는 라이브러리입니다. 내부적으로 ASM 모듈을 사용하기에 ASM를 공부하지 않고 넘어갈수가 없습니다. ASM(http://asm.ow2.org)이란? ASM ASM is an all purpose Java bytecode manipulation and analysis framework. ..
자바 AOP JDK Dynamic Proxy를 경험해보기 위해서 테스트 클레스를 생성합니다. 지난번에 JDK Proxy에 대한 코멘트를 다음과 같이 했습니다. Java Proxy같은 경우에 인터페이스를 반드시 구현해야하고 리플렉션을 사용하여 구현한 기술이기에 상대적으로 퍼포먼스가 떨어지는 특징을 갖습니다. 인터페이스를 극혐하는 저와 퍼포먼스가 떨어지는것도 싫어하는 저에게는 일단 탈락. 실제로 어떤지 구현을 통해 알아보면 뇌리에 쉽게 박히니 짬을 내서 JDK Dynamic Proxy 예제를 준비해보았습니다. 실제로 어떤지 구현을 통해 알아보면 뇌리에 쉽게 박히니 짬을 내서 JDK Dynamic Proxy 예제를 준비해보았습니다. 1. JDK proxy는 인터페이스를 필수적으로 구현해야합니다. //인..
오늘 원인과 해결방법을 찾아볼 자바 Exception은 java.net.MalformedURLException 다. 사실 워딩 그대로 잘못된 URL이 원인이고 URL을 맞게 고쳐주면 해결이 되는 아주 간단한 문제지만 좀 더 세부적으로 탐구해보기로 했다. 에러를 발생시키는 조건은 각종 프로토콜을 다루는 클래스에서 잘못된 인자로 정상적인 프로토콜을 인식할 수 없을 때 예외가 발생하도록 처리 되어있다. 대표적이고 많이 발생하는 클래스는 URL 이다. package exception; import java.net.URL; public class test_MalformedURLException { public static void main(String[] args) throws Throwable { URL url..
이클립스를 사용한지 10년이 넘었지만 사실 쓰는 단축키만 사용하고 유용한 단축키를 알아볼 생각조차 안했던 것 같습니다. 문득 구글링을 하던 중 해외에 이클립스 단축키 top 30 글을 보고 유용하다는 생각이 들어서 블로그에 정리해봅니다. 사실 유능한 자바 개발자분들이 자바 IDE 툴로 인텔리J를 추천하고 있지만 이클립스도 장점이 많은 강력한 무료 툴입니다. 필요한 이런 저런 플러그인들이 이클립스에 있을 때도 많고요. (이클립스를 사용한다고 무능하단 뜻이 절대 아님.) 평소에 몰랐던, 그리고 알아두면 좋은 이클립스 단축키 top 30이니 알아보도록 하지요. 1. Ctrl + Shift + T : jar 포함 클래스 찾기 jar 내에 있는 클래스까지 찾아주기 때문에 어떤 jar에 있는지 일일이 찾을 필요가 ..
오늘은 IllegalAccessError 예외 대해서 알아보자. 말 그대로 실행되는 시점에 메소드가 없거나 필드가 없는 경우에 발생하는데 대개 컴파일 시점에 잡히기 때문에 자주 만나는 예외는 아니다. 하나하나 알아보자. 1. IllegalAccessError 원인 자주 만날수는 없지만 원인을 알아보자. package test; public class test { public static void main(String[] args) { System.out.println(test2.a); System.out.println(test3.a); test2.printA(); test3.printA(); } } class test2{ static String a = "바보"; static void printA() {..
자바에서 NumberFormatException 원인과 에러/예외 해결 방법을 알아보자. java.lang 패키지에 속하는 놈이다. 1. NumberFormatException 원인은? 일단 이름에서도 유추할 수 있듯이 숫자가 아닌 녀석을 숫자 형으로 변환하려고 할 때 일어난다. 아마 가장 많이 만나는 유형은 Integer.parseInt(String s) 를 사용하면서다. 문자열을 int 형으로 변환할 때 사용하게 되는데 의도치 않게 숫자 외에 형태가 들어가있을 때 우리는 이놈을 만나게 된다. 최대한 간단한 샘픔을 보면서 이해해보자. package practice; public class test_NumberFormatException { public static void main(String[] ar..
Java를 한다면 RuntimeException을 수도 없이 만나게 된다. 물론 직접적인 RuntimeException 을 만나진 않을 것이다. 단지 아래와 같은 RuntimeException을 상속 받는 아주 많은 RuntimeException 을 만난다는 뜻이다. AnnotationTypeMismatchException, ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DataBindingEx..
오늘은 아주 가끔 만날수 예외를 알아보자. IllegalAccessException라는 녀석인데 직역하면 불법접근예외다. java.lang.IllegalAccessException 에러의 원인은 접근할수 없는 필드나 메소드에 접근하는 경우에 발생한다고 생각하면 되겠다. Case 1. 컴파일 시에 참조되었던 클래스, 필드, 메소드가 실제 프로그램 구동환경 하에 참조하려고 할 때 접근할 수 없는 경우 클래스가 삭제되었거나 다른 버전의 소스가 컴파일 되어 넣어지는 경우 발생할 수 있다. 자신이 직접 개발하는 소스는 IDE가 자동으로 감지하여 에러를 뱉어줘서 컴파일 에러를 발생시켜서 발생하기 쉽지 않고 통상적으로 참조하는 라이브러리의 버전이 다른 경우 많이 발생한다. 따라서 참조하는 라이브러리의 클래스, 필드,..
오늘은 아주 빈번하게 만나게 되는 IndexOutOfBoundsException, ArrayIndexOutOfBoundsException, StringIndexOutOfBoundsException 예외에 대해서 알아보자. 이 세가지는 비스무리하기 때문에 한꺼번에 알아보자. API 문서를 보면 원인이 아주 쉽게 나온다. Thrown to indicate that an index of some sort (such as to an array, to a string, or to a vector) is out of range.Applications can subclass this class to indicate similar exceptions. 배열, 문자열 또는 벡터와 같은 일종의 인덱스가 범위를 벗어 났음을..
오늘은 CloneNotSupportedException 에러 해결 방법을 알아보자. 사실 업무 하면서 CloneNotSupportedException를 만나기란 쉽지 않다. 거의 대부분의 개발 작업을 프레임워크와 라이브러리 기반에서 하다보니 만나기 어렵겠다. 혹시 빠른 해결방법을 원한다면 스크롤 쭉 내리면 되겠다. Exception에 대한 원인을 살펴보기 위해서는 java api document를 살펴보는게 좋다. 구글에 대고 치면 항상 링크가 나온다. "java api doc" , 혹은 "CloneNotSupportedException api doc" 등등 API 상에서 나타내는 원인을 살펴보자. 원문 ) Thrown to indicate that the clone method in class Obje..