불변 객체를 쉽게 다루는 클래스 타입 Record
Record 필요성 우리는 일반적을 DB 쿼리 결과, 서비스의 정보 등 데이터를 보관하기 위해 클래스를 작성하는데, 이러한 경우 데이터는 불변인(immutable) 경우가 많다. 보통 불변 클래스는 다음을 포함한다. 각 데이터에 대한 private, final 필드 각 필드에 대한 getter 각 필드에 해당하는 인수가 있는 publi...
Record 필요성 우리는 일반적을 DB 쿼리 결과, 서비스의 정보 등 데이터를 보관하기 위해 클래스를 작성하는데, 이러한 경우 데이터는 불변인(immutable) 경우가 많다. 보통 불변 클래스는 다음을 포함한다. 각 데이터에 대한 private, final 필드 각 필드에 대한 getter 각 필드에 해당하는 인수가 있는 publi...
이번 포스트에서는 synchronized보다 더 유연하게 동시성 제어를 할 수 있는 ReentrantLock에 대해 자세히 알아보고자 한다. ReentrantLock은 Java 5부터 도입된 concurrent 패키지의 java.util.concurrent.locks.Lock 인터페이스 구현체다. Lock 인터페이스에 대해 알아보고 ReentrantL...
개발할 때 서비스 계층에 @Transactional 어노테이션을 많이 사용한다. 연산들을 원자 단위로 수행되게 하기 위해 묶어주고, 예외 발생시 롤백해 준다는 정도로 알고 습관적으로 사용할 때가 많았다. 트랜잭션의 중첩 이슈와 내부 옵션들에 대한 호기심이 생겨 이번 기회에 @Transactional 어노테이션의 동작과 옵션, 주의점 등을 알아보고자 ...
Monitor 왜 쓰나 세마포어, 뮤텍스 잘못 쓰면 타이밍 에러(Timing Error) 같은 문제 자주 발생한다. e.g. 이진 세마포어를 사용하여 1로 초기화한 경우 wait()을 수행한 뒤 signal()을 수행해야 하는 일련의 순서를 지켜야 한다. 호출 순서가 잘못 되면 데드락, 리소스 누수 등의 문제가 발생한다. 이러한 문제를 ...
프로젝트용 서버 구축을 위한 EC2 인스턴스 생성 과정에 대해 기록하고자 한다. EC2, Elastic Computing Cloud AWS에서 제공하는 클라우드 컴퓨팅 서비스로 아마존이 사용자에게 컴퓨팅 자원을 임대해주는 서비스다. 특징 초 단위 온디맨드 가격 모델 초 단위 컴퓨팅 파워로 측정된 가격을 지불 서비...
자바 스레드 프로그래밍 Future, Executor 관련 클래스들을 공부하면서 계속 나오는 스레드 풀 Thread Pool 에 대해 알아보고자 한다. 해외 사이트 문서를 이용하여 실제 자바에서 스레드 풀이 어떻게 구현되는지도 간단히 알아보았다. 개념 출처 : https://www.baeldung.com/thread-pool-java-and-gua...
자바 클래스 로더를 학습하며 실제 자바 API 코드를 확인해보고 싶었고 추가 정보들을 정리하며 분석해보고자 한다. 공부할 내용이 너무 많아 주요 메서드인 ClassLoader 클래스의 loadClass 메서드만 한 번 살펴보고 가려고 한다. 자세한 내용은 링크에 정리하였다. Class Loader 공식 문서 다음은 공식 문서의 일부를 번역한 내용...
feature/A 브랜치를 pre-production 브랜치, master 브랜치에 merge 한다. master 브랜치에서 merge commit을 revert 한 후, master 브랜치에서 딴 feature/B 브랜치에서 다른 기능을 커밋한다. feature/B 브랜치를 pre-production 브랜치, master 브랜치에 merge ...
PC를 교체하면서 기존 PC에 저장되어 있던 mysql 도커 컨테이너를 옮겨야 할 상황이 생겼습니다. 구글링한 정보로 도커 컨테이너를 옮기는 데에는 성공했으나, 대부분의 자료들은 리눅스 환경 명령어 기준으로 작성되어 mysql DB 덤프를 복원하는데 실패하였습니다. 이에 도커 컨테이너의 이미지 백업/복구 절차와 동시에 Windows 환경에서 컨테이너...
OOP의 특징 중 하나인 다형성은 하나의 메서드나 클래스가 여러 가지 형태로 동작하는 성질을 의미합니다. 자바에서 다형성은 하나는 상속, 인터페이스를 통해 다양한 객체를 하나의 타입으로 다룰 때 나타납니다. 추상 클래스나 인터페이스를 구현한 여러 클래스에서 오버라이딩한 메소드에 따라 다양한 형태로 동작할 수 있습니다. 다형성을 통해 코드의 유지보수...