전체 글57 자바 마커 인터페이스(Marker interface) 마커 인터페이스는 속이 텅 빈 인터페이스를 지칭한다. 그러면 보통 의문이 들 것이다. 아니 내용물 없는 인터페이스를 왜 사용하지? 소프트웨어의 SOLID 법칙 중, L에 해당되는 Liskov Substitution principle을 이용한 기법이다. Liskov Substitution priciple을 이해하려면 SOLID 법칙 중, O에 해당되는 Open-closed principle을 먼저 이해해야 하는 것이 좋지만 이 부분은 다음에 다루도록 하겠다. 혹시나 궁금하다면 해당 링크를 읽어보자: https://www.baeldung.com/java-liskov-substitution-principle Liskov Substitution은 상속된 자식 클라스들은 부모 클래스로 오브젝트 선언이 가능하다. .. 2024. 2. 18. Log4j vs log4j2 성능과 기능 그리고 문제점 (자바 로깅 툴) 만약 현업 개발에 발을 담그지 못하신 분들이나 로거의 존재를 모르신다면 보통 자바의 시스템 출력기능을 사용 하 실 것이다. 그러나 System.out.print는 성능도 떨어지고 관리하기가 힘들기 때문에 개발 언어에 맞는 로깅 프레임 워크를 사용한다. Java 뿐만 아니라 모든 언어에서 말이다. 예를 들어 System.out.print는 콘솔에 출력을 할 때 기본으로 동기로 돌아가기 때문에 Concurrency 환경에서 성능 저하가 발생 할 수 있다. 반면 Logger들은 기본적으로 Asynchronous 형식으로 돌아가기 때문에 성능에는 문제가 없다. 그 때문에 Logger, 혹은 Logging 툴이 존재 하는데 우리가 애플리케이션을 돌리고 상황을 모니터링하거나 기록된 출력물들을 보기 편하게 해주는 아.. 2024. 2. 10. 데이터 베이스 MVCC(Multiversion Concurrency Control) MVCC는 위키피디아에서 다음과 같이 정의된다. Multiversion concurrency control (MCC or MVCC), is a non-locking concurrency control method commonly used by database management systems to provide concurrent access to the database and in programming languages to implement transactional memory. 다중 버전 동시성 제어 (MCC 또는 MVCC)는 데이터베이스 관리 시스템에서 일반적으로 사용되는 비락킹 동시성 제어 방법으로, 데이터베이스에 대한 동시 액세스를 제공하고 프로그래밍 언어에서 트랜잭션 메모리를 구현하는 데 사.. 2024. 2. 5. 소프트웨어 디자인 패턴 - 팩토리 패턴 (Factory Pattern - Creational Design Pattern - 4) 오늘은 팩토리 패턴에 대해 작성해 보겠다. 팩토리 패턴은 말 뜻 그대로 공장처럼 원하는 오브젝트나 인스턴스를 찍어주고 제작해 주는 클래스를 제작할 때 자주 사용되는 패턴이다. 이는 Prototype패턴과 유사할 수 있지만, 프로토타입은 기존의 있는 인스턴스를 복사(내용물과 함께)하는 반면, 팩토리는 고유성이 들어간다. 그러기 때문에 Prototype은 오브젝트를 복사하는 팩토리 라고 부를 수는 있지만 그 반대는 안된다. 우리는 보통 특정 행동이나 서비스를 행하는 로직을 짜기 위해 메서들을 추가적으로 만들고 메서드 안에서 다 해결 하거나 필요할 때마다 제작하고 사용하는 패턴을 이용했는데. 팩토리 패턴은 이 번거로운 행동들을 규격화하고 번거로운 단계의 로직을 자체 클래스 내에서 다루게 끔 만들고 외부 클래스.. 2024. 1. 30. String, String format, 그리고 String builder Java 에는 문자열을 사용할 때 쓰는 String을 선언하는 방법 중, 여러가지가 있지만 대표적으로 일반 String 그리고 String format, String builder를 많이 사용했었는데, 이 세가지의 차이점과 단점, 이점이 무엇이 있는지를 적어보도록 하겠다. String 전반적으로 많이 사용하는 String 선언 방식인데 character들의 배열형태로 이루어지며 Immutable이다. 즉, 한번 생성되면 절대로 수정 될 수가 없다. 겉 보기로는 수정이 되는 것 같아 보이지만, String을 선언할 때 String Pool에서 선언된 string열을 꺼내다가 사용하기 때문에 결국에는 Immutable이다. 전에 자바 메모리 모델을 설명할 때 String Heap메모리와 연관 지으며 Stri.. 2024. 1. 29. Kubernetes의 Liveness 그리고 Readiness probes 최근 회사 서비스의 Health check endpoint에 문제가 생겨서 알아보게된 용어들이다. Kubernetes 설정을 비 정상적인 서비스 상태가 3번 이상 감지되면 강제적으로 서비스를 중단하고 다시 복구하는 프로세스를 거치는데, 큰 문제가 없었는데도 지속적으로 HTTP 요청이 느려지고 결국 timeout으로 걸려 실패로 판정되다가 세번연속으로 걸려 서비스가 재부팅 되는 문제점을 발견했었다. 여기서 선임개발자가 Liveness에 문제가 있다라고 언급을 해서 글을 작성한다. 아쉽게도 문제를 분석/최적화를 한 일지는 나중에 적어보도록 하겠다. 모든 일화를 한 글에 적기에는 시간이 너무 부족하다. Readiness 와 Liveness 는 Kubernetes와 같은 서비스가 돌아가는 서버환경에서 많이 사용.. 2024. 1. 22. 이전 1 ··· 4 5 6 7 8 9 10 다음