java/summary

·java/summary
프로그래밍을 하다 보면 고려 사항 중 하나가 동시성이다. 동시성이 왜 발생하는지에 관한 고민의 흐름을 정리하고자 글로 작성하고자 한다. 1. 자바 코드는 어떻게 실행될까?자바 코드는 어떻게 실행될까? 자바는 기본적으로 컴파일 언어이다. 컴파일 언어란 코드가 실행되기 이전에 컴파일러(compiler) 를 거쳐 소스 코드를 기계어로 번역하는 과정을 거치는 언어를 말한다. 자바는 자바 컴파일러를 통해서 소스 파일을 자바 바이트 코드로 변환한다. 변환된 바이트 코드는 런타임 환경에서 JVM(Java Virtual Machine) 을 통해 OS 가 읽을 수 있는 기계어(binary code) 로 변환하고, 변환된 기계어는 OS 가 읽어 명령을 수행하게 된다.  2. 동시성이 발생 지점인 공유 자원은 어느 영역일까..
·java/summary
1. Local Cache ? Global Cache?(1) 로컬 캐시장점해당 인스턴스의 메모리를 참조해 빠른 데이터 접근 가능해당 인스턴스의 메모리를 참조하므로 네트워크 트래픽 감소단점캐시 데이터 증가 시 메모리 사용량 증가로 인한 성능 저하 가능캐싱 데이터가 변경되면 여러 서버 간 정합성 문제 발생 가능(2) 글로벌 캐시장점다중 인스턴스에서 동일한 데이터 공유 가능Sharding 과 Replication 을 활용한 고가용성 보장 단점추가 인프라 구성으로 인한 비용 발생네트워크 지연으로 인해 로컬 캐시보다 응답 속도가 느릴 수 있음 2. 로컬 캐시 종류(1) EhCacheEhCache는 Java 기반의 오픈 소스 캐시 라이브러리로, 주로 Spring 애플리케이션에서 사용된다.특징Heap 메모리, Off..
·java/summary
JCF 의 HashMap 코드를 보다가 SerialVersionUID 를 보고 호기심에 학습한 내용   1. 클래스의 기본 해시값을 통한 SerialVersionUID 의 문제클래스의 구조가 변경되었을 때 오류가 발생한다.예시: 멤버 변수 타입 변경, 멤버 변수 삭제프레임워크 또는 라이브러리에서 제공하는 클래스의 객체도 버전업을 통해 SerialVersionUID가 변경될 경우가 있으므로 예상하지 못한 오류가 발생할 수 있다. 2. SerialVersionUID??SUID 는 직렬화와 역직렬화 과정에서 값이 서로 맞는지 확인한 후에 처리한다.(맞지 않다면 InvalidClassException 를 반환한다.)자바의 직렬화 스펙 정의를 살펴보면 SUID 값은 필수가 아니며 선언되어 있지 않으면 클래스의 기..
·java/summary
1. Virtual Thread?(1) 도입 배경기존 자바 스레드인 platform thread 의 한계platform thread : OS thread 를 래핑한 형태이며, 자바의 전통적인 스레드이다.(Java thread code 는 실제 OS thread 를 이용하는 방식으로 동작한다.)OS 커널에서 사용할 수 있는 스레드 갯수가 제한적이고 생성, 유지 비용이 비싸다.이를 효율적으로 사용하기 위해 thread pool 사용처리량(throughput) 한계Thread Per Request 으로 사용자 요청을 처리하지만 OS 스레드는 무한정 늘릴 수 없는 단점이다.application throughput 은 thread pool 에 의존적이다.Blocking 으로 인한 리소스 낭비Thread Per R..
·java/summary
멀티스레드와 자바 비동기 작업으로 간단한 콘솔 기반 카페 만들기 GitHub - pbg0205/asyc-cafeContribute to pbg0205/asyc-cafe development by creating an account on GitHub.github.com  CompletableFuture? 자바는 ThreadPool 과 CompletableFuture 를 기반해 비동기 작업을 지원한다. 기본적으로 자바는 Synchrous & Blocking 기반으로 동작하지만 비순차적 작업과 실행 흐름 대기로 인한 자원의 낭비와 작업이 지연될 수 있는 단점이 있다. 이를 개선하기 위한 방법으로 자바에서 또한 비동기(Asynchronous) 지원을 위한 CompletableFuture 와 같은 개념이 대두되었..
·java/summary
1. 어댑터 패턴어댑터 디자인 패턴은 기존 클래스의 인터페이스를 다른 인터페이스로 사용할 수 있도록 하는 구조 패턴이다. 호환되지 않는 두 인터페이스를 연결하여 함께 작동하도록 하는 다리 역할을 한다. 이 패턴에는 독립적이거나 호환되지 않는 인터페이스의 기능을 결합하는 역할을 하는 Adapter 라는 단일 클래스가 포함된다. 이름은 어댑터(Adapter) 외에도 래퍼(Wrapper) 로 명명되기도 한다. 2. 어댑터 패턴 구성 요소Target interface설명 : 클라이언트가 기대하는 인터페이스를 정의한다. 클라이언트 코드가 사용할 수 있는 연산 집합을 나타낸다.역할 : 클라이언트 코드가 상호 작용하는 공통 인터페이스 이다.Adaptee설명: 새 시스템에 통합해야 하는 호환되지 않는 인터페이스가 있는..
cooper25
'java/summary' 카테고리의 글 목록