Kotlin Delegation으로 결합도 낮추기 Delegation Delegation은 interface의 구현이나 Property의 Accessor의 구현을 다른 객체에 위임하도록 해주는 패턴이다. Delegator -> Delegate 형태로 책임이나 처리를 넘긴다. Composition + Forwarding 이라고도 할 수 있다. Composition Composition은 상속 대신 객체를 내부 private 변수로 두어 구성요소로써 동작하게 하는 것을 의미한다. Forwarding 부모 메서드의 전달을 의미한다. 상속과 비슷하게 한 객체의 기능 일부를 다른 객체에 넘겨서 대신 수행하도록 한다. 위임을 활용하면 결합도를 낮출 수 있다. 코틀린에서는 기본적으로 클래스가 final을 붙이기 때문..
전체 글
개발만 하기는 심심하니 기록 또 기록..클래스 변수, 인스턴스 변수, 지역 변수 차이 설명해주세요 클래스 변수는 클래스 내에서 정의된 변수로, 모든 인스턴스가 공유하는 변수입니다. 클래스 변수는 클래스 이름으로 접근할 수 있으며, 객체 생성 없이도 사용할 수 있습니다. 인스턴스 변수는 클래스 내에서 정의된 변수로, 객체가 생성될 때마다 새로운 인스턴스 변수가 생성됩니다. 인스턴스 변수는 객체를 통해 접근할 수 있습니다. 지역 변수는 메서드 블록 내에서 정의된 변수로, 해당 메서드나 블럭 내에서 사용할 수 있습니다. 지역 변수는 해당 블럭이나 메서드가 종료되면 소멸됩니다. ORM이란? ORM은 Object-Relational Mapping의 약어로 객체와 관계형 데이터베이스 간의 매핑을 자동화하는 기술입니다. 객체 지향 프로그래밍 언어에서 사용..
강한 참조 Strong Reference 이것은 우리가 가장 일반적으로 사용하는 참조 유형입니다. 강한 참조가 객체에 연결되어 있으면, 가비지 컬렉터는 그 객체를 회수하지 않습니다. 약한 참조 Weak Reference WeakReference 클래스를 사용해 객체에 대한 약한 참조를 만들 수 있습니다. 가비지 컬렉터가 실행되면, 약한 참조만이 남아있는 객체는 메모리에서 제거됩니다. 소프트 참조 Soft Reference SoftReference 클래스를 사용해 만듭니다. 소프트 참조는 메모리가 부족할 때까지 가비지 컬렉션의 대상이 되지 않습니다. 즉, 가비지 컬렉터가 실행되더라도 충분한 메모리가 있는 경우에는 소프트 참조가 가리키니는 객체는 회수되지 않습니다. 팬텀 참조 Phantom Reference..
벌크 수정, 삭제 연산과 영속성 컨텍스트 벌크 수정연산과 벌크 삭제연산을 각각 수행한 후에 별도로 영속성 컨텍스트 초기화 작업을 하지 않았다고 가정하자. 이후에 전체 조회 작업을 시행하면 Update는 연산이 적용되지 않은 영속성 컨텍스트 데이터, delete는 연산이 적용된 DB 데이터 겨로가가 조회되는 것을 확인할 수 있다. (Repeatable Read) Update 벌크 연산 상황 영속성 컨텍스트와 DB에 아래 데이터가 있다고 하자. 위 상황에서 아래와 같이 28살 미만은 이름을 전부 비회원으로 바꾸라는 bulk update 연산을 수행해보자. @Test @Commit public void bulkUpdate() { queryFactory .update(member) .set(member.user..
자바는 과거 finalize() 메서드를 사용해서 가비지 컬렉션에 의해 객체가 회수되기 직전에 실행되는 코드를 작성할 수 있었다. 그러나 finalize()는 실행 시점을 정확히 예측할 수 없으므로 사용하는 것이 권장되지 않아 Java 9부터는 deprecated가 되었다. 그리고 Java 12에서 Cleaner, PhantomReference를 사용한 대안이 제시되었다. Cleaner Cleaner 클래스는 객체에 도달할 수 없을 때, 그리고 가비지 수집되기 직전에 수행해야 하는 정리작업을 등록하는 데 사용된다. 가비지 수집기에서 개체를 회수하기 전에 실행해야 하는 리소스 정리 또는 기타 작업을 수행하는 방법을 제공한다. Cleaner의 주요 목적은 예측 불가능성과 잠재적인 성능 문제로 인해 권장되지 ..
Istio, Istio Architecture Istio는 애플리케이션 네트워크 기능을 유연하고 쉽게 자동화할 수 있는 투명한 언어 독립적 방법을 제공하는 현대화된 서비스 네트워킹 레이어인 서비스 메시입니다. 클라우드 기반 애플리케이션을 구성하는 다양한 마이크로서비스를 관리하는 데 널리 사용되는 솔루션입니다. Istio 서비스 메시는 또한 이러한 마이크로서비스가 서로 통신하고 데이터를 공유하는 방법을 지원합니다. 조직이 클라우드로의 이동을 가속화하면서 필요에 따라 애플리케이션도 현대화하고 있습니다. 그러나 모놀리식 레거시 앱을 클라우드 기반 앱으로 전환하면 데브옵스팀의 문제가 발생할 수 있습니다. 개발자는 클라우드에서 이동성을 보장하기 위해 느슨하게 결합된 마이크로서비스를 사용하여 앱을 어셈블하는 방법을..
개요 Non-Blocking 방식의 애플리케이션 api가 대규모 소프트웨어 프로그램에서 성능 향상을 위해 거의 필수다 싶이 사용되는 기술이다. 그렇기에 오늘 Webflux와 리액티브 스트림, 논블라킹에 대해서 정리해보려고한다. Non-Blocking Non-Blocking은 한 번에 하나의 작업을 처리하고 결과를 반환하기전에 다른 작업을 수행할 수 있도록 하는 프로그래밍 스타일이다. Non-Blocking 특징 입출력 작업이나 긴 작업을 수행하는 동안 CPU가 다른 작업을 할당해 자원을 최대한 활용할 수 있다. 다중 스레드와 달리 스레드 간의 컨텍스트 스위칭이 발생하지 않아 CPU 부하와 메모리 사용을 최적화할 수 있다. Spring WebFlux Spring WebFlux는 Spring5에서 추가된 R..
개요 Spirng boot 개발 환경에서 데이터들이 변경되거나 yaml 이 변경되었을때 서버를 재 가동시키는 방법 이외에 데이터 상태를 불러오는 방법이 있을까? 바로 Spring Actuator라는 라이브러리를 사용하는 것이다. 오늘은 그 Spring Actuator에 대해서 알아보겠다. 🧐 Spring Actuator Spring Actuator란 무엇일까? Spring Actuator는 스프링 부트 프레임워크에서 제공되는 라이브러리로서 스프링 푸트 애플리케이션의 모니터링이나 메트릭과 같은 기능을 HTTP와 JMX 엔드 포인트를 통해서 제공한다. 메트릭이란? 시스템, 프로세스, 제품 또는 서비스의 성능을 측정하는 데 사용되는 측정 항목이나 지표다. Spring Actuator는 애플리케이션의 내부 확인..
개요 스프링 클라우드 관련 기술을 익히기전 모놀리식 아키텍처와 마이크로서비스 아키텍처를 공부하던 중 모놀리식 아키텍처에서의 SOA, ESB, SOAP에 대해서 더 자세히 공부해보려고한다. 모놀리식 아키텍처 하나의 거대한 애플리케이션에서 모든 작업을 처리하는 아키텍처다. 내부적으로 의존성이 강하며 구조적으로 결합도가 높은 아키텍처다. 모든 작업을 하나의 하드웨어에서 처리하므로 강력한 하드웨어가 필요하며, 대용량 트래픽이 쏠렸을 때 시스템이 무거워질 수 있다. 마이크로 서비스 아키텍처 작고 독립적인 서비스들을 쪼개 팀 별로 독립적으로 개발 배포를 할 수 있는 아키텍처다. 대용량 트래픽이 쏠렸을 때도 유연하게 대처가 가능하다. 수평적 확장이 가능하며 클라우드 서비스에 적합한 아키텍처로 볼 수 있다. SOA S..