Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at java.base/sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:148) at java.base/sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:129) at java.base/java.security.cert.CertPathBuilder.build(Ce..
맥북에 openjdk8을 설치 하기 위해서는 brew를 이용합니다. # jdk 설치 brew install openjdk@8 # java version 확인 /usr/local/opt/openjdk@8/bin/java -version # java_home 설정 export JAVA_HOME=/usr/local/opt/openjdk@8 https://formulae.brew.sh/formula/openjdk@8 openjdk@8 Homebrew’s package index formulae.brew.sh
자바를 CLI 로 실행할 때 클래스패스가 많을 때는 파일로 하나씩 추가하는 것보다 디렉토리로 설정하는 것이 더 편합니다. 이때는 디렉토리 경로를 추가해줄 수 있습니다. # 파일 단위로 클래스 패스 추가 java -classpath .:/opt/hbase/lib/hadoop-common-2.7.4.jar:/opt/hbase/lib/hbase-common-1.4.13.jar:/opt/hbase/lib/hbase-client-1.4.13.jar:/opt/hbase/lib/commons-logging-1.2.jar:/opt/hbase/lib/guava-12.0.1.jar:/opt/hbase/lib/commons-collections-3.2.2.jar:/opt/hbase/lib/protobuf-java-2.5.0..
자바를 CLI 로 컴파일 하고 실행할 대 이런 오류를 볼 경우가 있습니다. 다양한 원인이 있을 수 있는데 저의 경우는 컴파일할 때 지정한 패키지 경로에 클래스 파일이 존재하지 않아서 였습니다. 자바를 컴파일 할 때 패키지가 지정되어 있다면 디렉토리 구조와 자바에 선언된 패키지가 일치해야 합니다. # 컴파일 $ javac -classpath "/opt/hbase/lib/*:." HBaseExample.java # 실행 $ java -classpath "/opt/hbase/lib/*:." HBaseExample

자바 디컴파일러 JD-GUI에서 다음오류가 발생해서 해결 방법을 검색하다가 Git에서 찾아서 공유합니다. No suitable Java version found on your system! This program requires Java 1.8+ Make sure you install the required Java version. github.com/java-decompiler/jd-gui/issues/332 BigSur ERROR launching 'JD-GUI' · Issue #332 · java-decompiler/jd-gui ERROR launching 'JD-GUI' No suitable Java version found on your system! This program requires Ja..
커버러스 티켓 사용중 발생하는 다음의 오류는 클라이언트 서버와 타켓 서버의 시간 동기화가 이루어 지지 않을 때 발생합니다. date 명령으로 서버의 시간을 확인해 보면 시간이 다른 것을 알 수 있습니다. 시간 동기화를 해주면 문제를 해결할 수 있습니다. Caused by: KrbException: Clock skew too great (37) - PROCESS_TGS at sun.security.krb5.KrbTgsRep.(KrbTgsRep.java:73)
jsvc를 이용할 때 다음의 오류가 발생하는 경우가 있습니다. Invalid JVM name specified server Cannot locate JVM library file Service exit with a return value of 1 원인 이 오류는 jsvc를 실행할 때 전달하는 jvm의 이름이 틀렸기 때문입니다. JVM의 종류가 다양하기 때문에 자신이 사용하는 JVM의 정보를 확인하고 이 이름을 전달하면 됩니다. OpenJDK나 HotSpot은 jvm이름이 server 이기 때[문에 일반적인 설정에서는 문제가 없으나, 이클립스 VM의 경우 이름이 j9vm 이라서 이런 오류가 발생할 수 있습니다. JVM 이름 확인 JVM이름을 확인하고 이 이름을 JSVC 명령어에서 이요할 수 있습니다. JS..
CentOS에서 AdoptOpenJDK 설치할 때 명령은 다음과 같습니다. 이 명령으로 설치할 수 없다면 리파지토리 설정을 추가해야 합니다. yum install -y adoptopenjdk-8-openj9 리파지토리 설정 리파지토리는 /etc/yum.repos.d에 repo 파일을 추가하면 됩니다. $ ls /etc/yum.repos.d $ vi adopt.repo [AdoptOpenJDK] name=AdoptOpenJDK baseurl=http://adoptopenjdk.jfrog.io/adoptopenjdk/rpm/centos/$releasever/$basearch enabled=1 gpgcheck=1 gpgkey=https://adoptopenjdk.jfrog.io/adoptopenjdk/api/..
메이븐 빌드를 처리할 때 PKIX 오류가 발생할 경우가 있습니다. 보통 내부망에서 사용하는 인증서가 자바의 인증서 목록에 등록되어 있지 않을 때 발생합니다. PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 해결방법 자바의 인증서에 내부망의 인증서를 등록하면 됩니다. keytool 명령어는 사용하고자 하는 자바의 bin 폴더 아래 존재합니다. 여기에 인증서 목록(key store)의 위치를 지정하고, 인증서 파일의 경로(file)를 입력하면 됩니다. 각 경로는 절대 경로를 입력해도 됩니다. %J..

자바의 라이선스 만료로 인하여 윈도우에서 open jdk 설치할 때는 다음과 같이 진행합니다. 깃허브에서 빌드된 자바 다운로드(https://github.com/ojdkbuild/ojdkbuild) 합니다. msi 파일은 실행하여 설치 안내메시지에 따라서 진행하면 됩니다. zip 파일은 원하는 경로에서 압축을 풀고, 환경변수에 JAVA_HOME을 지정합니다. JAVA_HOME은 {JAVA_LOCATION}/bin 까지 설정해야 합니다.
JVM 자바 가상 머신(Java Virtual Machine) 자바 바이트 코드를 실행하는 주체 Linux, Window, Mac 등 OS에 맞게 구현 JVM Spec에 맞춰 구현 Oracle, Eclipse, IBM 등 여러 회사에서 구현 HotSpot, OpenJ9 JVM Language JVM에서 실행가능한 언어 Clojure, Groovy, JRuby, Jython, Kotlin, Scala 자바 바이트 코드 자바 바이트 코드 = 클래스 파일 = .class 컴파일러가 .java 파일을 .class 파일로 해석 자바 컴파일러, 스칼라 컴파일러, 코틀린 컴파일러 등 JVM은 자바 바이트 코드를 해석해서 실행 Write Once, Run Everywhere JVM 주요 모듈 클래스 로더(Class L..

프로그래밍에서 메모리 누수현상(Memory Leak)은 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상입니다. 자바의 메모리 누수 현상은 이전글을 참고 바랍니다. 2019/07/02 - [개념] - [개념] 메모리 누수(Memory Leak) 현상 [개념] 메모리 누수(Memory Leak) 현상 프로그래밍에서 메모리 누수현상(Memory Leak)은 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상입니다. 자바의 메모리 누수 자바에서 메모리 누수는 더이상 사용하지 않는 객체가 가비지 컬렉션(GC).. 118k.tistory.com 힙 덤프 생성 메모리 누수 문제가 발생하면 JVM의 힙 덤프를 이용하여 메모리에 어떤 객체가 생성되어 있는지를 확인할 수 있습니다. JDK와 함께 제공되는..
자바는 가비지 콜렉션 기능을 이용해 메모리 관리의 효율성을 제공합니다. 자바의 가비지 콜렉션은 'weak generational hypothesis' 이론에 기반합니다. 이는 신규로 생성한 객체의 대부분은 금방 사용하지 않는 상태가 되고, 오래된 객체에서 신규 객체로의 참조는 매우 적게 존재한다는 것입니다. 이 이론에 기반하여 자바는 Young 영역과 Old 영역으로 메모리를 분할하고, 신규로 생성되는 객체는 Young 영역에 보관하고, 오래동안 살아남은 객체는 Old 영역에 보관합니다. Young 영역은 Eden, S0, S1 영역으로 구분됩니다. 신규로 생성되는 객체는 Eden에 보관되고, Eden 영역이 100% 차게 되면 사용하지 않는 객체는 제거하고 사용되는 객체는 S0 영역으로 이동합니다. 이..
더 나은 자바 개발자가 되기 위한 10가지 팁을 읽고 내용을 정리했습니다. 1. JAVA8을 배운다. 18년 11월 현재 JDK의 최신버전은 2018년 9월 발표된 JDK 11[^1]입니다. 자바8이 나온지도 4년이 되었습니다. 이제 자바 개발은 람다와 스트림 API를 활용하는 것을 필요로 합니다. 지금 시작하지 않으면 뒤쳐지게 될 것 입니다. 2. 스프링 배우기(스프링 부트) 많은 개발사들이 Spring MVC, Spring Boot, Spring Cloud 같은 스프링 프레임워크를 사용하기 때문에 공부해 두는 것이 좋습니다. 웹애플리케이션, REST API 마이크로 서비스 개발에 많이 사용하기 때문에 배워두면 많은 도움이 될 것 입니다. 3. 유닛 테스트 좋은 자바 개발자와 평범한 개발자를 나누는 기..
아파치 커먼즈의 CLI 라이브러리는 프로그램을 실행 할 때 전달하는 옵션값을 파싱하는 라이브러리 입니다. CLI 공식 문서에서 제공하는 Ant 옵션 파싱 예제를 통해 사용방법을 알아보겠습니다. Ant는 다음과 같은 옵션을 가지고 있습니다. ant [options] [target [target2 [target3] ...]] Options: -help print this message -projecthelp print project help information -version print the version information and exit -quiet be extra quiet -verbose be extra verbose -debug print debugging information -emacs p..
보일러플레이트는 프로그래밍에서 상용구 코드를 말합니다. 어떤일을 하기위해서 꼭 작성해야 하는 코드로 자바에서는 클래스의 getter, setter 메소드를 말합니다. 자바에서 getter, setter는 꼭 필요하지만 코드의 길이를 길어지게 하고 개발자에게 의미없는 노동을 강요하게 됩니다. 이부분이 자바의 단점 중 하나입니다. 그래서 스칼라에서는 케이스 클래스를 통해 컴파일러에서 자동으로 작업을 처리할 수 있게 도와줍니다. 자바에서도 롬복을 이용하여 이부분을 자동으로 생성하게 할 수 있습니다. 롬복 참고문서 바로가기롬복 깃허브 바로가기
scala 2.11 버전에서 java 9으로 빌드시 다음의 오류가 발생하였다. [INFO] Compiling 3 source files to C:\ScalaSample\target\classes at 1528696267166[ERROR] error: scala.reflect.internal.MissingRequirementError: object java.lang.Object in compiler mirror not found.[ERROR] at scala.reflect.internal.MissingRequirementError$.signal(MissingRequirementError.scala:17)[ERROR] at scala.reflect.internal.MissingRequirementError$..
Java 에서 배열 정렬중에 다음과 같은 오류가 발생할 때가 있다. Comparison method violates its general contract! Exception in thread "main" java.lang.IllegalArgumentException: Comparison method violates its general contract! at java.util.TimSort.mergeLo(TimSort.java:773) at java.util.TimSort.mergeAt(TimSort.java:510) at java.util.TimSort.mergeForceCollapse(TimSort.java:453) at java.util.TimSort.sort(TimSort.java:250) at ..
Fail-Fast와 Fail-Safe 방식의 차이는 다음과 같다. Fail-Fast 방식은 동작중 오류가 발생하면 바로 오류를 알리고, 작업을 중단합니다. Fail-Safe 방식은 동작중 오류가 발생하도 작업을 중단하지 않고 진행합니다. 자바에서는 Iterator가 for 문을 이용한 순환중 데이터가 변경되었을때 Fail-Fast 방식이면 java.util.ConcurrentModificationException 오류를 throw 하고, Fail-Safe 방식이면 동작이 계속된다. Fail-Safe 방식은 ConcurrentHashMap 을 이용할 때만 가능하다. 구현 방법은 다음과 같다.
HashTable은 자바 1.0 부터 구현된 객체이고, HashMap은 Collections API 에 제공되었다. HashMap은 계속 개선되어 가고 있지만, HashTable은 변경되지 않고 있다. HashTable은 하위 호환성을 위해 존재한다고 볼 수 있다. 가장 큰 차이점은 동기화이다. HashTable은 동기화 되지만, HashMap은 동기화 되지 않는다. HashMap의 동기화를 원한다면 ConcurrentHashMap을 이용하는 것이 좋다. https://stackoverflow.com/questions/40471/differences-between-hashmap-and-hashtable
자바에서 SimpleDateFormat 클래스를 이용하여 날짜를 패턴을 이용하여 출력할 수 있다. unixtime을 date 로 변환하는 것도 가능하고,그 반대의 경우도 가능하다. 다음과 같은 형태로 변환이 가능하다. 적용 가능한 패턴은 javadoc을 참고하면 더 좋을 것이다. 그리고 사용에 유의해야 할 점은 Y, y의 대소문자에 따라 내용이 달라 질 수 있기 때문에 년도의 패턴을 잘 구분하여 사용해야 한다. Y는 주차에 따른 년도이고, y는 해당일의 년도이다. 주차에 따른 년도(week year)년 1년이 52주이기 때문에 그에 따른 년도를 출력한다. 그래서 사용상에 주의해야 한다. 2014-12-31Mon Jan 09 00:00:00 KST 2017----------------------2013 2..
래퍼 클래스(Wrapper Class)기본형 변수도 객체로 다루어져야 하는 경우 래퍼 클래스를 이용Integer age = new Integer(30); 박싱 과 언박싱(Boxing, Unboxing)래퍼 클래스는 불변 객체이기 때문에 새로운 객체의 생성 및 참조만 가능기본자료형을 래퍼클래스로 변경하는 것을 박싱, 그 반대를 언박싱이라고 함JDK 1.5 버전 이상에서는 이를 자동으로 처리자동으로 처리하는 것을 오토박싱(AutoBoxing), 오토언박싱(AutoUnBoxing)이라고 함
불변성(Immutability)객체의 정보가 변하지 않는 것 불변 클래스인스턴스가 변경되지 않는 클래스String, 박싱된 원시 클래스, BigInteger, BigDecimal변하는 클래스보다 설계, 구현 및 사용이 용이메모리 할당String 생성시 JVM에서 상수를 이라는 메모리 공간에 할당새로 생성된 String값은 벼경할 수 없고, 이후 동일한 String 이 생성시 String 풀을 참조GC는 String 풀 영역에서는 동작하지 않음
- Total
- Today
- Yesterday
- HIVE
- ubuntu
- Tez
- yarn
- bash
- SQL
- Hadoop
- 하둡
- hbase
- Python
- oozie
- 백준
- mysql
- HDFS
- S3
- Linux
- nodejs
- airflow
- SPARK
- 알고리즘
- build
- emr
- 하이브
- AWS
- 오류
- 파이썬
- java
- 정올
- 다이나믹
- error
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |