목록IT/Java (35)
잡동사니
안녕하세요. yeTi입니다. 오늘은 자바에서 람다식을 사용하는 방법에 대해 공유하고자 합니다. 제가 처음 Oracle Java Documentation내 Lambda Expressions을 읽은 이유는 단순히 자바에서 사용하는 람다의 표현식에 대해서 알고자 함이었습니다. 하지만 documentation 에서 제공하는 시나리오를 읽으면서 단순히 function 을 파라메터로 전달하는 형식에 그치는 것이 아니라 function 을 파라메터로 전달하는 형식에 의해 얻을 수 있는 인터페이스의 변화나 확장성에 대해 인지할 수 있는 시간이었기 때문에 해당 내용을 공유하게 됐습니다. 개요 자바에서는 interface (하나의 추상 함수를 가지는)와 anonymous classes (익명 클래스)를 활용하여 로직을 함..
안녕하세요. yeTi입니다. 오늘은 Java를 공부하는 범위에 대해 알아보려고 합니다. 개요 자바를 공부하는 방법에는 다양한 방법이 있고, 공부하는 방법에 따라 강조하는 부분이 다를 수 있습니다. 따라서 어느정도 공부를 해야 자바를 잘 안다고 할 수 있을지에 대한 개인적인 생각을 공유하고자 합니다. 우리가 접하는 대부분의 제품에는 설명서가 있습니다. 마찬가지로, 프로그래밍 언어나 오픈소스에도 Document라는 형태로 개념이나 spec에 대해 설명을 하고 있습니다. 따라서 자바를 공부함에 있어서 해당 진영에서 제공하는 document를 기반으로 지식을 얻는다는 것은 의미가 있다고 생각합니다. 이에 오라클에서 제공하는 학습 가이드를 기반으로 Java를 공부하는 범위를 보고자 합니다. Guide for be..
안녕하세요. yeTi입니다. 오늘은 VSCode를 활용하면서 발생하는 ClassNotFoundException을 해결해보려고 합니다. 작업환경 VSCode : 1.48.2 현상 JPA환경에서 Querydsl을 사용하여 개발을 하고 있던 와중에 Debug모드로 구동하니 QClass를 사용하는 과정에서 java.lang.ClassNotFoundException이 발생하였습니다. 2020-09-08 13:39:18.658 ERROR 25152 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception..
안녕하세요. yeTi입니다. 오늘은 자바 어플리케이션을 도커로 배포시 발생하는 A fatal error has been detected by the Java Runtime Environment오류를 해결해보겠습니다. 현상 도커로 Springboot 어플리케이션을 배포하는 상황에서 베이스이미지로 openjdk:12-alpine을 사용했습니다. 쿠버네티스에 배포 후 어플리케이션이 로드하는 과정에서 다음과 같은 오류가 발생했습니다. # # A fatal error has been detected by the Java Runtime Environment: # # SIGILL (0x4) at pc=0x00007fb82810e9bc, pid=1, tid=6 # # JRE version: OpenJDK Runtime..
안녕하세요. yeTi입니다. 오늘은 Eclipse에서 JUnit을 구동할때 발생하는 Caused by: java.lang.ClassNotFoundException: org.junit.platform.engine.EngineDiscoveryListener를 해결한 상황을 공유하고자 합니다. 저는 다음과 같은 상황에서 정상적으로 JUnit을 사용하고 있었습니다. IDE : STS-4.5.1.RELEASE Java : openjdk-12.0.1 (JavaSE-11) SpringBoot : 2.2.4.RELEASE Gradle : 6.0.1 JUnit : 5.5.2 오류 그런데 STS에서 업데이트 안내가 떠서 업데이트를 하고나니(4.6.0.RELEASE) 다음과 같은 오류가 발생하면서 JUnit이 동작하지 않았..
안녕하세요. yeTi입니다. 오늘은 Java에서 사용하는 키워드의 일부를 살펴보려고 합니다. Final 한번 정의된 값을 수정할 수 없도록 제한한다. Final Class : 상속 방지 Final Method : Override 방지 Final Variable : 값의 변경 금지 final keyword in java - GeeksForGeeks, final, finally and finalize in Java - GeeksForGeeks에 추가적인 내용이 있습니다. Static 객체의 정의없이 항상 메모리에 올려두고 모든 객체와 공유한다. Static Block : Static Variable을 초기화 Static Variable : 공유 변수 static keyword in java - GeeksFo..
안녕하세요. yeTi입니다. 오늘은 Java의 GC(Garbage Collection)에 대해서 알아보겠습니다. Oracle JDK 8 Java Platform, Standard Edition HotSpot Virtual Machine Garbage Collection Tuning Guide를 참고하여 작성했습니다. GC (Garbage Collector)란? 메모리 관리 툴입니다. GC는 다음의 세가지 작업을 수행합니다. Young 영역(Young Generation) 에 객체를 할당하고 오래된 객체를 Old 영역(Old Generation)으로 옮깁니다. 힙 메모리의 전체 점유율이 임계 값을 초과하면 Java HotSpot VM이 마킹 단계를 트리거 하고, 동시(병렬) 마킹 단계에서 Old 영역에 살..
안녕하세요. yeTi입니다. Spring AOP를 공부하다보면 Java의 Dynamic Proxy와 CGlib이 언급됩니다. 그래서 Dynamic Proxy와 CGlib에 대해서 정리하고 차이점을 알아보고자 합니다. 프록시 패턴 Dynamic Proxy와 CGlib은 기존 코드에 변경을 가하지 않으면서 기능을 추가할 수 있는 프록시 기술을 구현하기 위한 방법들입니다. 소프트웨어 디자인 패턴 중 하나인 프록시 패턴을 UML로 표현하면 아래 그림과 같습니다. 프록시 패턴의 주요 개념은 동일한 인터페이스를 가진 구현 클래스는 Client에서 사용할때 다형성을 활용하여 동일한 인터페이스에 다른 기능을 정의하여 사용할 수 있는 것입니다. Dynamic Proxy 프록시 패턴을 직접 구현하는 경우에 프록시 클래스를..
인프런의 더 자바, 코드를 조작하는 다양한 방법 - 백기선을 수강하면서 내용을 정리하고 간단한 후기를 남깁니다. JVM 이해하기 JVM, JRE, JDK 그리고 자바 JVM은 자바 가상 머신(Java Virtual Machine)의 약자로 자바 바이트 코드(.class 파일)를 OS에 특화된 코드로 변환(인터프리터와 JIT 컴파일러)하여 실행한다. 때문에 특정 플랫폼에 종속적이다. JVM자체는 바이트 코드를 실행하는 표준이자 특정 벤더가 구현한 구현체(JVM 벤더 : 오라클, 아마존, Azul 등)이다. JRE는 자바 실행 환경(Java Runtime Environment)의 약자로 자바 어플리케이션을 실행할 수 있도록 구성된 배포판이다. JVM과 핵심 라이브러리 및 프로퍼티, 리소스를 가지고 있다. (..
안녕하세요. yeTi입니다. 오늘은 Swagger에서 List 형의 Example을 표현해보겠습니다. 설치 환경OS : CentOS release 6.9 (Final)설치 버전 : Zabbix 2.2 Swagger에서 Array나 List를 사용하여 파라메터를 생성하고Example을 사용하면 다음과 같이 나타나지 않습니다. "param": [ "value1", "value2", "value3",... ], 위와같이 나타내려면 allowableValues를 활용하면 됩니다.