일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- feign
- try-with-resources
- 람다표현식
- resilience4j
- 날짜쿼리
- 동작방식
- n+1
- circuitbreaker
- closeable
- tcp
- webflux
- GC
- 4-way-handshake
- Class Loader
- Kotlin
- optional
- Runtime data area
- try-catch-finally
- zipWith
- AutoCloseable
- intelij
- springboot
- execution engine
- wagon-ssh
- java
- 코딩테스트
- jetbrain
- try-catch
- jvm
- Hotspot VM
- Today
- Total
목록JAVA (15)
JuBin's personal study blog

JVM 이란?Java Virtual Machine의 약자로, JVM 기반의 언어(Java, Kotlin, Scala 등)로 작성된 어플리케이션이 동작할 수 있는 환경을 제공하는 가상 머신 입니다. JVM은 어플리케이션과 OS 사이에서 중계 역할을 수행하며, 어느 운영체제 환경에서도 실행될 수 있습니다. Write Once And Run Anywhere! JVM 구성 요소클래스 로더(Class Loader)실행 엔진(Execution Engine)인터프리터(Interpreter)JIT 컴파일러(Just-In-Time)Garbage Collector런타임 데이터 영역(Runtime Data Area)메소드 영역(Method Area, Static Area, Class Area)힙 영역(Heap Area)스..
기존 try-catch-finallytry-catch-resources 이전의 try-catch-finally에서는 자원을 사용 후 finally 구문에 명시적으로 close() 메소드를 호출하여 사용한 자원을 해제 시켜줘야 했습니다. FileInputStream is = null; BufferedInputStream bis = null; try { is = new FileInputStream("test.txt"); bis = new BufferedInputStream(is); int data = -1; while((data = bis.read()) != -1){ // logic } } ..

간단한 기본적인 개념을 알고 사용하자. JPA - JPA는 기술 명세이다. 자바 어플리케이션에서 RDBMS를 사용하는 방식을 정의해 놓은 인터페이스이다. - 말그대로 JPA는 인터페이스이다. 라이브러리가 아니다. 단순 명세이기 때문에 구현이 없다. - 클라이언트가 백엔드API명세를 보고 어떻게 호출해야 하는지를 정의해놓은 것과 같다. Hibernate - Hibernate는 JPA를 구현한 구현체이다. JPA명세를 보고 구현해 놓은것이다. - Hibernate는 마치 자바의 interface를 구현한 class와 같다고 생각하면 된다. - JPA를 사용하기 위해서는 반드시 Hibernate를 사용할 필요없이 JPA를 구현한 구현체들을 EclipseLink, DataNucleus 등과 같이 여러가지 구현체..
String String은 불변(Immutable) 속성을 갖는다. 멀티쓰레드 환경에서 안전하다(thread-safe) String str = "hello~"; // String str = new String("hello~") - 1 str = str + "world"; - 2 1) str은 stack영역에 저장, "hello~"는 heap영역에 저장된다 2) str은 stack영역에 그대로지만 "hello~"는 Garbage가되고 str은 새로운 "hello~world"를 참조한다. 연산이 적은(문자열 추가, 수정, 삭제) 경우 사용하면 좋은성능을 기대할 수 있다. 알고리즘에 String클래스를 사용하면 Heap영역에 많은 Garbage가 쌓여 힙메모리 부족현상이 일어날 수 있다. 따라서 연산횟수가 많..

Java Exception Class 계층구조 Error Error 영역은 시스템 레벨에서 발생한 심각한 오류이다. 애플리케이션단 코드로 해결 할 수 없다. 개발자가 처리할 수 없다. ex ) OutOfMemory, ThreadDeath Checked Exception 컴파일 단계때 발생하는 오류이다. 트랜잭션 범위에서 예외 발생시 자동으로 Rollback 처리가 되지 않는다. (Checked Exception은 복구가 가능하다는 매커니즘을 가지고 있다. 예를들어 이미지를 찾는도중 예외 발생시 기본이미지로 대체할 수 있다. 복구에 관련된 로직을 개발자가 직접 핸들링 할 수 있다.) Checked Exception은 코드작성시 반드시 명시적으로 예외를 처리해야한다. 방법으로는 try - catch구문을 이..

JVM(Java Virtual Machine) 소프트웨어적으로 Java언어를 실행시키 위한, 자바 바이트 코드를 실행할 수 있는 주체, 또한 데몬이라고 합니다. JVM 스펙은 각 벤더사마다 다르지만 표준은 존재합니다. 컴퓨터는 0과 1로 이루어진 기계어를 쓰는데 기계어는 사람이 쓰기에는 너무 어렵기 때문에 자바(Java)와 같은 고급언어를 사용해 프로그램을 작성하고, 컴파일러가 해당 언어를 기계어로 번역을 합니다. 자바 언어를 번역하는 컴파일러를 자바 컴파일러(javac.exe)라고 합니다. 물론, 자바의 경우, 컴파일러가 기계어로 바로 번역하진 않습니다. 운영체제나 하드웨어 마다 사용하는 기계어가 다르기 때문에 자바는 어느 운영체제나 하드웨어에서도 동일하게 동작하도록 자바 가상 머신(Java Virtu..
ModelMapper, MapStruct 둘다 Object Mapping 라이브러리로 일반적으로 Entity -> DTO 혹은 DTO -> Entity 변환 등 Object to Object의 매핑을 위해서 사용된다. 국내에서는 ModelMapper를 많이쓰고, 레퍼런스가 많아서, 사용하기 편하다고해서 많이들 쓰지만 ModelMapper와 MapStruct 둘의 퍼포먼스 차이는 약 90배이상 차이난다. 간단하게 설명하면 ModelMapper는 Runtime시 리플렉션으로 모델 매핑을해 성능상 좋지않고 Mapstruct는 컴파일 타임에 매핑 클래스를 생성해줘 그 구현체를 런타임에 사용하는 것이기 때문에 앱 사이즈는 조금 커질수 있지만 성능상 크게 이슈가 없다~ (성능비교는 이분 포스팅을 참고 better-..
직렬화란? 직렬화(Serialize) 자바 시스템 내부에서 사용되는 Object 또는 Data를 외부의 자바 시스템에서도 사용할 수 있도록 byte 형태로 데이터를 변환하는 기술. JVM(Java Virtual Machine 이하 JVM)의 메모리에 상주(힙 또는 스택)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술 java.io.Serializable 인터페이스를 상속받은 객체는 직렬화 할 수 있다. 직렬화 포맷은 여러 포맷이 존재한다 Ex) json, xml, csv 자바 직렬화는 상당히 타입의 엄격하다 역직렬화(Deserialize) byte로 변환된 Data를 원래대로 Object나 Data로 변환하는 기술을 역직렬화(Deserialize)라고 부릅니다. 직렬화된 바이트 형태의 데이터를 객체..
maven 이 설치되어 있지 않은 환경에서 maven을 사용할 수 있도록 해 주는 Maven Wrapper 실행 파일입니다. 일반적으로 maven 이 없이도, eclipse 설치만으로도 maven 빌드가 가능한 이유가 이것 때문이라고도 할 수 있겠습니다. Apache Maven은 자바 프로젝트에서는 없어서는 안 될 의존성 관리 도구입니다. 이를 좀 더 쉽게 최신 버전을 유지하기 위해 Maven Wrapper가 나왔는데, Maven Wrapper가 설정된 프로젝트는 Maven 설치 없이도 빌드를 할 수 있다. maven 환경이 설정되었다면, 다음의 명령어를 실행할 수 있을 것이다. 만약 -Dmaven 버전을 명시하지 않으면, 실행 시점에 maven 최신 버전이 mvnw 설정되며, 이후 maven이 설치되어..

Overview 이 글은 Jackson의 ObjectMapper 클래스를 이해하는 것과 자바 오브젝트를 JSON으로 시리얼라이징하거나 JSON 문자열을 자바 오브젝트로 디시리얼라이징 하는 방법에 집중하여 작성되었다. 일반적인 Jackson 라이브러리에 대해 더욱 이해하고 싶다면 Jackson Tutorial이 시작하기에 알맞을 것이다. Dependencies 우선 (maven인 경우) pom.xml에 다음과 같이 종속성을 추가한다. maven : com.fasterxml.jackson.core jackson-databind 2.11.0 gradle: // https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind compi..