본문 바로가기

java48

[macbook] 맥북에 openjdk8 설치하는 방법 맥북에 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 2023. 12. 28.
[intellij] maven 으로 빌드시 JAVA_HOME 설정 하는 방법 인텔리j에서 메이븐으로 빌드를 할 때 JAVA_HOME 설정이 되지 않아서 오류가 발생하는 경우가 있습니다. 이때 다음의 순서로 JAVA_HOME을 설정합니다. 먼저 Maven 탭의 수명주기에서 사용하고자 하는 프로파일을 선택하고, '실행 구성 수정'을 클릭합니다. 그리고 아래쪽의 Java 옵션에서 환경 변수에 사용하고자 하는 자버 버전의 경로를 입력합니다. 2023. 3. 4.
[java] 자바 CLI 환경에서 클래스패스를 디렉토리로 설정 하는 방법 자바를 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.. 2021. 12. 12.
[java] Error: Could not find or load main class 오류 처리 자바를 CLI 로 컴파일 하고 실행할 대 이런 오류를 볼 경우가 있습니다. 다양한 원인이 있을 수 있는데 저의 경우는 컴파일할 때 지정한 패키지 경로에 클래스 파일이 존재하지 않아서 였습니다. 자바를 컴파일 할 때 패키지가 지정되어 있다면 디렉토리 구조와 자바에 선언된 패키지가 일치해야 합니다. # 컴파일 $ javac -classpath "/opt/hbase/lib/*:." HBaseExample.java # 실행 $ java -classpath "/opt/hbase/lib/*:." HBaseExample 2021. 12. 12.
[기타] JD-GUI에서 No suitable Java version found on your system! 오류가 발생할 때 자바 디컴파일러 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.. 2021. 3. 11.
[kerberos] Clock skew too great 오류 확인 커버러스 티켓 사용중 발생하는 다음의 오류는 클라이언트 서버와 타켓 서버의 시간 동기화가 이루어 지지 않을 때 발생합니다. date 명령으로 서버의 시간을 확인해 보면 시간이 다른 것을 알 수 있습니다. 시간 동기화를 해주면 문제를 해결할 수 있습니다. Caused by: KrbException: Clock skew too great (37) - PROCESS_TGS at sun.security.krb5.KrbTgsRep.(KrbTgsRep.java:73) 2021. 2. 18.
[java] jsvc 명령에서 Invalid JVM name specified server 오류 해결 방법 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.. 2021. 1. 29.
[CentOS] yum으로 자바의 특정 버전 설치 하기 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/.. 2020. 10. 30.
[java] DateTimeFormatter를 이용하여 유닉스 시간(Epoch Time)을 밀리세컨드로 출력하는 예제 유닉스 시간은 시각을 표현하는 방식으로 POSIX 시간 또는 Epoch 시간입니다. 자바에서 Epoch시간은 1970년 1월 1일 00시를 기준으로 현재까지의 초를 출력합니다. DateTimeFormatter를 이용하여 Epoch 시간을 밀리세컨드로 출력하는 방법은 아래와 같습니다. 2020. 6. 3.
[Maven] 메이븐 빌드시 PKIX path building failed 오류 해결 방법 메이븐 빌드를 처리할 때 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.. 2019. 11. 1.
[java] This application requires a Java Runtime Environment 1.8.0 오류 해결방법 윈도우에서 자바로 작성된 프로그램을 실행할 때 다음과 같은 오류가 발생하는 경우는 JAVA_HOME이 설정되지 않아서 발생합니다. 이럴 때는 "제어판 -> 시스템 및 보안 -> 시스템 -> 고급시스템 설정 -> 환경 변수" 에 JAVA_HOME을 추가해 주면 됩니다. JAVA_HOME = C:\java\java-1.8.0-openjdk-1.8.0.232 2019. 10. 31.
[openjdk] open jdk 1.8 다운로드 및 설치 자바의 라이선스 만료로 인하여 윈도우에서 open jdk 설치할 때는 다음과 같이 진행합니다. 깃허브에서 빌드된 자바 다운로드(https://github.com/ojdkbuild/ojdkbuild) 합니다. msi 파일은 실행하여 설치 안내메시지에 따라서 진행하면 됩니다. zip 파일은 원하는 경로에서 압축을 풀고, 환경변수에 JAVA_HOME을 지정합니다. JAVA_HOME은 {JAVA_LOCATION}/bin 까지 설정해야 합니다. 2019. 10. 25.
[java] JVM이란? 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.. 2019. 7. 8.
[java] 메모리 누수와 힙 덤프 분석 프로그래밍에서 메모리 누수현상(Memory Leak)은 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상입니다. 자바의 메모리 누수 현상은 이전글을 참고 바랍니다. 2019/07/02 - [개념] - [개념] 메모리 누수(Memory Leak) 현상 [개념] 메모리 누수(Memory Leak) 현상 프로그래밍에서 메모리 누수현상(Memory Leak)은 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상입니다. 자바의 메모리 누수 자바에서 메모리 누수는 더이상 사용하지 않는 객체가 가비지 컬렉션(GC).. 118k.tistory.com 힙 덤프 생성 메모리 누수 문제가 발생하면 JVM의 힙 덤프를 이용하여 메모리에 어떤 객체가 생성되어 있는지를 확인할 수 있습니다. JDK와 함께 제공되는.. 2019. 6. 5.
[java] 자바의 가비지 콜렉션(GC: Garbage Collection)과 jstat을 이용한 모니터링 자바는 가비지 콜렉션 기능을 이용해 메모리 관리의 효율성을 제공합니다. 자바의 가비지 콜렉션은 'weak generational hypothesis' 이론에 기반합니다. 이는 신규로 생성한 객체의 대부분은 금방 사용하지 않는 상태가 되고, 오래된 객체에서 신규 객체로의 참조는 매우 적게 존재한다는 것입니다. 이 이론에 기반하여 자바는 Young 영역과 Old 영역으로 메모리를 분할하고, 신규로 생성되는 객체는 Young 영역에 보관하고, 오래동안 살아남은 객체는 Old 영역에 보관합니다. Young 영역은 Eden, S0, S1 영역으로 구분됩니다. 신규로 생성되는 객체는 Eden에 보관되고, Eden 영역이 100% 차게 되면 사용하지 않는 객체는 제거하고 사용되는 객체는 S0 영역으로 이동합니다. 이.. 2019. 6. 4.
[스크랩] 좋은 자바 개발자가 되는 10가지 방법 더 나은 자바 개발자가 되기 위한 10가지 팁을 읽고 내용을 정리했습니다. 1. JAVA8을 배운다. 18년 11월 현재 JDK의 최신버전은 2018년 9월 발표된 JDK 11[^1]입니다. 자바8이 나온지도 4년이 되었습니다. 이제 자바 개발은 람다와 스트림 API를 활용하는 것을 필요로 합니다. 지금 시작하지 않으면 뒤쳐지게 될 것 입니다. 2. 스프링 배우기(스프링 부트) 많은 개발사들이 Spring MVC, Spring Boot, Spring Cloud 같은 스프링 프레임워크를 사용하기 때문에 공부해 두는 것이 좋습니다. 웹애플리케이션, REST API 마이크로 서비스 개발에 많이 사용하기 때문에 배워두면 많은 도움이 될 것 입니다. 3. 유닛 테스트 좋은 자바 개발자와 평범한 개발자를 나누는 기.. 2019. 4. 12.
아파치 커먼즈(Apache Commons) CLI 예제 아파치 커먼즈의 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.. 2019. 3. 30.
[개념] 프로그래밍에서 보일러플레이트(boilerplate)의 뜻 보일러플레이트는 프로그래밍에서 상용구 코드를 말합니다. 어떤일을 하기위해서 꼭 작성해야 하는 코드로 자바에서는 클래스의 getter, setter 메소드를 말합니다. 자바에서 getter, setter는 꼭 필요하지만 코드의 길이를 길어지게 하고 개발자에게 의미없는 노동을 강요하게 됩니다. 이부분이 자바의 단점 중 하나입니다. 그래서 스칼라에서는 케이스 클래스를 통해 컴파일러에서 자동으로 작업을 처리할 수 있게 도와줍니다. 자바에서도 롬복을 이용하여 이부분을 자동으로 생성하게 할 수 있습니다. 롬복 참고문서 바로가기롬복 깃허브 바로가기 2019. 2. 27.
[scala] 빌드시 object java.lang.Object in compiler mirror not found. 오류 해결방법 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$.. 2018. 6. 11.
[오류] Comparison method violates its general contract! 예외 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 .. 2018. 4. 3.
[java] Iterator의 Fail-Fast 방식과 Fail-Safe 방식의 차이점 Fail-Fast와 Fail-Safe 방식의 차이는 다음과 같다. Fail-Fast 방식은 동작중 오류가 발생하면 바로 오류를 알리고, 작업을 중단합니다. Fail-Safe 방식은 동작중 오류가 발생하도 작업을 중단하지 않고 진행합니다. 자바에서는 Iterator가 for 문을 이용한 순환중 데이터가 변경되었을때 Fail-Fast 방식이면 java.util.ConcurrentModificationException 오류를 throw 하고, Fail-Safe 방식이면 동작이 계속된다. Fail-Safe 방식은 ConcurrentHashMap 을 이용할 때만 가능하다. 구현 방법은 다음과 같다. 2018. 3. 6.
[java] HashMap과 HashTable의 차이 HashTable은 자바 1.0 부터 구현된 객체이고, HashMap은 Collections API 에 제공되었다. HashMap은 계속 개선되어 가고 있지만, HashTable은 변경되지 않고 있다. HashTable은 하위 호환성을 위해 존재한다고 볼 수 있다. 가장 큰 차이점은 동기화이다. HashTable은 동기화 되지만, HashMap은 동기화 되지 않는다. HashMap의 동기화를 원한다면 ConcurrentHashMap을 이용하는 것이 좋다. https://stackoverflow.com/questions/40471/differences-between-hashmap-and-hashtable 2018. 3. 6.
[java][디자인패턴] Template Method 패턴 구체적인 처리를 하위 클래스에게 위임하는 패턴이다. 상위 클래스에서 처리의 흐름을 정하고, 하위 클래스에서 구체적인 내용을 결정하는 디자인 패턴을 말한다. 로직을 공통화 할 수 있다. 상위 클래스와 하위 클래스의 제휴 https://github.com/developer-sdk/DesignPattern-Java/tree/master/DesignPattern-Java/src/chap03template 2018. 2. 27.
[java] SimpleDateFormat 을 이용한 날짜 변환 자바에서 SimpleDateFormat 클래스를 이용하여 날짜를 패턴을 이용하여 출력할 수 있다. unixtime을 date 로 변환하는 것도 가능하고,그 반대의 경우도 가능하다. 다음과 같은 형태로 변환이 가능하다. 적용 가능한 패턴은 javadoc을 참고하면 더 좋을 것이다. 그리고 사용에 유의해야 할 점은 Y, y의 대소문자에 따라 내용이 달라 질 수 있기 때문에 년도의 패턴을 잘 구분하여 사용해야 한다. Y는 주차에 따른 년도이고, y는 해당일의 년도이다. 주차에 따른 년도(week year)년 1년이 52주이기 때문에 그에 따른 년도를 출력한다. 그래서 사용상에 주의해야 한다. 2014-12-31Mon Jan 09 00:00:00 KST 2017----------------------2013 2.. 2018. 1. 9.
[Java] Queue 구현 큐는 배열을 이용한다. head, tail의 인덱스를 알려주는 변수를 이용하여 구현할 수 있다. 데이터를 입력할 때 tail을 증가시키고,데이터를 반환할 때는 head를 증가시킨다. 2017. 12. 26.
[예제] Http의 GET, POST 방식으로 데이터 송수신 하기 Java 에서 HTTP로 데이터를 송, 수신하기 위해서는 HttpURLConnection 클래스를 이용한다. http://www.mkyong.com/java/how-to-send-http-request-getpost-in-java/ http://stackoverflow.com/questions/1432961/how-do-i-make-httpurlconnection-use-a-proxy 2017. 12. 13.
[Java] Java에서 객체지향의 특징 객체지향 프로그래밍(Object Oriented Programming)캡슐화객체를 캡슐로 감싸 내부를 보호하고 외부에서 볼 수 없게 하는 것정보 은닉화를 위해 사용접근 제어자를 이용하여 캡슐화를 구현 상속상위 객체의 속성이 하위 개체에 물려져서, 하위 개체가 상위개체의 속성을 모두 가지고 있음코드의 중복 작성 방지 다형성함수 호출에 대하여 객체에 따라 다른 동작을 할 수 있도록 구성오버로딩, 오버라이딩 2017. 11. 28.
[java] 오토박싱(AutoBoxing) 및 래퍼 클래스(Wrapper Class) 이해 래퍼 클래스(Wrapper Class)기본형 변수도 객체로 다루어져야 하는 경우 래퍼 클래스를 이용Integer age = new Integer(30); 박싱 과 언박싱(Boxing, Unboxing)래퍼 클래스는 불변 객체이기 때문에 새로운 객체의 생성 및 참조만 가능기본자료형을 래퍼클래스로 변경하는 것을 박싱, 그 반대를 언박싱이라고 함JDK 1.5 버전 이상에서는 이를 자동으로 처리자동으로 처리하는 것을 오토박싱(AutoBoxing), 오토언박싱(AutoUnBoxing)이라고 함 2017. 11. 28.
[java] String객체의 불변성, 불변 클래스 불변성(Immutability)객체의 정보가 변하지 않는 것 불변 클래스인스턴스가 변경되지 않는 클래스String, 박싱된 원시 클래스, BigInteger, BigDecimal변하는 클래스보다 설계, 구현 및 사용이 용이메모리 할당String 생성시 JVM에서 상수를 이라는 메모리 공간에 할당새로 생성된 String값은 벼경할 수 없고, 이후 동일한 String 이 생성시 String 풀을 참조GC는 String 풀 영역에서는 동작하지 않음 2017. 11. 28.
[Java] Collections 의 종류와 특징, List, Map, Set, Tree 자바에서 자주 사용하는 자료구조에는 List, Set, Map이 존재한다. List, Set은 Collections 아래 존재하고, Map은 따로 존재한다. - 순서가 있는 저장 공간- 가변적인 저장 공간- 배열은 크기가 정해져 있음- 순서대로 검색하기 때문에 데이터가 뒤에 있는경우 속도가 문제 된다. ArrayListJava 1.2에서 도입된 Collection에서 구현Vector 클래스의 단점인 Thread-Unsafe, 낮은 성능을 보완하기 위해 제공됨인덱스를 통한 아이템의 접근을 지원내부적으로 배열을 가지고 있으며, 사이즈가 늘어날 경우 기존 배열의 데이터를 복사하여 처데이터의 개수가 변하지 않는 경우에 효과적잦은 데이터의 변경은 성능이 하락됨탐색은 빠르지만 추가/삭제가 느림 LinkedList각.. 2017. 11. 17.