백엔드/Spring

백엔드/Spring

레이어간 의존 관계 문제

아래 사진은 레이어드 아키텍처다 의존하는 방향을 주목해보자. 항상 상위 레이어가 하위 레이어를 의존하는 형태를 가져간다.근데 인프라 레이어의 코드가 도메인에도 있고 애플리케이션 레이어에도 존재한다면 어떻게 될까?DB를 바꿔야 하는 상황에 닥쳤다고 생각해보자.운영상 RDBMS에서 NoSQL로 바꿔야한다는 니즈가 생겨버렸다.그럼 인프라의 변경으로 인해 도메인 레이어의 코드도 수정해야하고, 애플리케이션 레이어의 코드도 수정을 해야한다.수정만이 문제가 아니다. 이전과 동일하게 동작하는지 테스트 코드도 수정해야하고 엄청나게 많은 리소스를 쏟아 부어야한다. 바꿀 수가 없을 정도의 리소스와 리스크를 안고 가야할 수도 있다.그럼 누군가가 이렇게 말할 수도 있다."DB를 바꿔야 하는 건 소프트웨어 설계부터 잘못된거 아니..

백엔드/Spring

[Spring] 동적 프록시(Dynamic Proxy)

들어가며 기존에 정리했던 프록시 패턴(https://brightstarit.tistory.com/48)을 통해 기존 코드를 변경하지 않고 핵심 기능과 부가 기능을 나누어서 개발할 수 있었다. 하지만, 프록시 패턴을 사용하면 대상 클래스의 수만큼 프록시 클래스를 만들어야 한다는 단점이 있었다. 클래스를 계속 생성하면 관리 포인트가 늘어나서 유지보수하기 쉽지 않다. 예를 들어 적용 대상이 100개면 프록시 클래스도 100개를 만들어야 되는 것이다. 그런데 프록시 클래스의 기본 코드와 흐름은 거의 같고, 프록시를 어떤 대상에 적용하는가 정도만 차이가 있다. 이 문제를 해결하는 것이 바로 동적 프록시 기술이다. 동적 프록시 기술을 사용하면 개발자가 직접 프록시 클래스를 만들지 않아도 된다. 이름 그대로 프록시 ..

백엔드/Spring

[Spring Cloud] Spring Cloud OpenFeign

Spring Cloud OpenFeign이란? Spring Cloud OpenFeign은 선언적 웹서비스 클라이언트이다. RestTemplate과 같이 마이크로서비스 간의 통신에 사용하는 라이브러리이다. Spring Cloud는 Feign에 Spring MVC 애노테이션과 HttpMessageConverter를 지원하고, Eureka, Spring Cloud CircuitBreaker 및 Spring Cloud LoadBalancer를 통합하여 Load-Balanced HTTP 클라이언트를 지원한다. 기존의 RestTemplate은 반복적인 코드가 많고 유지 보수적으로 오래 유지하기 힘든 단점이 있었다. RestTemplate은 다음과 같은 작업들을 반복적으로 수행해야 한다. RestTemplate 인스..

백엔드/Spring

[Spring] Spring Boot Actuator

Spring Boot Actuator란? 시스템을 운영하다 보면 시스템이 사용하고 있는 Thread, Memory, Session 등의 요소에 대해서 모니터링은 필수적인 요소다. 운영되는 시스템은 아무리 잘 만들어졌다고 할지라도 버그가 있을 수 있다. 우리는 이런 상황을 대비하기 위해서 모니터링을 해야 한다. Spring Boot에서는 Spring Boot Actuator라는 자체모니터링 툴을 제공한다. Spring Boot 공식 Reference에 나와있는 Actuator에 대한 간략한 설명이다. Spring Boot includes a number of additional features to help you monitor and manage your application when you push i..

백엔드/Spring

[Spring] 스프링(Spring)

스프링(Spring)이란? 스프링은 엔터프라이즈용 Java 애플리케이션 개발을 편하게 할 수 있게 해주는 오픈소스 경량급 애플리케이션 프레임워크이다. 정의를 하나씩 뜯어보자면 다음과 같다. 엔터프라이즈용 Java 애플리케이션 개발을 편하게 할 수 있게 해주는 기업에서 운영하는 웹 서비스에는 비즈니스 로직이라는 것이 있다. 비즈니스 로직이란, 기업이 제공하는 서비스를 코드로 구현한 것으로, 사용자의 요구사항을 해결하기 위한 실질적인 코드를 의미한다. 스프링이 등장하기 이전에는 비즈니스 로직을 구현하기 위해 기술 자체에 대한 공부를 추가적으로 해야만 했다. 비즈니스 로젝을 구현하는 기술 자체가 복잡하고 어려웠기 때문이다. 그러나, 스프링은 이전 기술에 비해 사용 방법이 상대적으로 덜 복잡하다. 따라서, 개발..

백엔드/Spring

[Spring] POJO(Plain Old Java Object)

POJO(Plain Old Java Object)란? Plain Old Java Object, 간단히 POJO는 말 그대로 해석을 하면 오래된 방식의 간단한 자바 오브젝트라는 말로써 Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 "무거운" 객체를 만들게 된 것에 반발해서 사용하게 된 용어이다. 2000년 9월에 마틴 파울러, 레베카 파슨, 조쉬 맥킨지 등이 사용하기 시작한 용어로써 마틴 파울러는 다음과 같이 그 기원을 밝히고 있다. 특정 '기술'과 환경에 종속되어 의존하게 된 자바 코드는 가독성이 떨어져 유지보수가 어렵고 확장성이 매우 떨어지는 단점이 있었습니다. 이는 객체지향 언어인 자바가 객체지향의 장점들을 잃어버리게 되는 것입니다. 그래서 POJO라는 개념이 등장했..

밝은별 개발자
'백엔드/Spring' 카테고리의 글 목록