메모리 가시성과 동시성
메모리 가시성이란 멀티스레드 환경에서 한 스레드가 변경한 값이 다른 스레드에서 언제 보이는지 알 수 없는 문제를 메모리 가시성(memory visibility)이라 합니다. 문제점 예시 예를들어, 아래 코드는 메모리 가시성 문제 때문에 work 스레드는 여전히 동작합니다. public class VolatileMain{ public sta...
메모리 가시성이란 멀티스레드 환경에서 한 스레드가 변경한 값이 다른 스레드에서 언제 보이는지 알 수 없는 문제를 메모리 가시성(memory visibility)이라 합니다. 문제점 예시 예를들어, 아래 코드는 메모리 가시성 문제 때문에 work 스레드는 여전히 동작합니다. public class VolatileMain{ public sta...
스레드를 생성하는 방법 2가지 Thread 상속 Thread 클래스를 상속하고, 스레드가 실행할 코드를 run 메소드에 재정의합니다. 그리고나서 Thread를 상속한 클래스의 객체를 생성하고 start() 메소드를 호출합니다. start()를 호출하면 스레드가 만들어지고 해당 스레드에서 run 메소드를 실행합니다. Runnable 구현 Run...
문제 사항 애플리케이션 서버를 배포한 후, 성능 테스트를 수행하려면 반드시 데이터베이스(DB)가 필요합니다. 하지만 다음과 같은 어려움이 있습니다 RDS를 이용한 성능 테스트: 쿼리 당 비용이 발생하여 예산이 제한적인 상황에서는 적합하지 않습니다. 개발 서버용 EC2에 MySQL 설치: EC2 프리 티어의 1CPU 1GiB 사양으로는 M...
컬렉션 프레임워크란 컬렉션 프레임워크는 객체 그룹을 저장하고 관리하기 위한 통합 아키텍처입니다. 이 프레임워크는 List, Set, Queue, Map등의 인터페이스와 그 구현체들 그리고 이들을 다루는 다양한 메소드들로 구성되어 있습니다. ArrayList에서 indexof 메소드는 값 비교를 어떻게 할까 int indexOfRange(Obje...
Collection 인터페이스 자바에서 Set, List, Queue 는 Collection 이라는 인터페이스를 구현하고 있습니다. Collection 인터페이스는 다음과 같이 선언되어 있습니다. public interface Collection<E> extends Iterable<E> Iterable<E>이...
String 생성자 보통 문자열을 만들 때 다음과 같이 생성합니다. String name = "Java"; 하지만 생성자를 이용하여 문자열을 만들 수도 있습니다. 위 사진처럼 여러 생성자가 있는데 그 중에서 가장 많이 쓰이는 생성자는 다음과 같습니다. 왜냐하면 다른 나라는 보통 영어만 사용하지만 우리나라는 한글을 사용하기 때문에 지정해야 할 ...
문제사항 최근 애자일허브 프로젝트는 도커이미지를 만들어 DockerHub에 올리는 방식으로 배포를 하고 있습니다. Dockerfile을 만들어서 GitHub에 올려두고, GitHub Actions로 docker build와 push를 진행하는 방식입니다. 그런데 배포를 할때마다, 매번 빌드 시간이 10분 이상이었고, 코드가 조금만 추가되어도 1분씩...
문제 사항 애플리케이션 로그를 프롬테일을 이용해 로그들을 로키로 push 하는 과정에서 nginx와 system 로그는 제대로 로키가 받아오지만 애플리케이션 로그(ERROR 레벨)는 받지 못하는 상황이 발생했다. 받아오지를 못하고 있다. 먼저 프롬테일 config.yaml은 다음과 같이 작성했다. 문제 해결 시도 1. 로그 확인 먼저,...
Old 영역은 기본적으로 데이터가 가득 차면 GC를 실행합니다. GC 방식은 Serial GC, Parallel GC, Parallel Old GC, Concurrent Mark & Sweep GC(aka CMS), G1 GC, ZGC가 있습니다. Serial GC (-XX: +UseSerialGC) Serial GC는 Young Gener...
약한 세대 가설 (Weak Generational Hypothesis) 자바 가상 머신(JVM)의 메모리 관리 방식에 큰 영향을 준 중요한 개념입니다. 이 가설을 이해하면 다양한 가비지 컬렉션 알고리즘의 작동 원리를 더 잘 이해할 수 있습니다. 이 가설의 핵심 내용은 “대부분의 객체는 젊어서 죽는다”입니다. 쉽게 말해, 프로그램에서 새로 만들어진 ...