Spring

· Spring
RestTemplate vs OpenFeign 은 Spring에서 외부 REST API를 호출할 때 자주 비교되는 기술입니다. 두 가지 모두 HTTP 클라이언트 역할을 하지만 사용 목적과 추상화 수준, 코드 작성 방식에서 차이가 있습니다. 1. RestTemplateSpring에서 오래된(Deprecated 예정) HTTP 클라이언트로, HttpClient나 OkHttp 위에 추상화되어 있음.직접 HTTP 요청/응답을 구성해야 하므로 유연하지만 코드 양이 많고 반복적.RestTemplate는 동기식 호출만 지원 (비동기 필요 시 WebClient 사용 권장). 1) 장점HTTP 요청을 세밀하게 커스터마이징 가능 (헤더, 인증, 타임아웃 등).오래된 레거시 코드나 기존 시스템에서 호환성이 높음.Sprin..
· Spring
public이외의 메서드는 AOP가 걸리지 않는다. 스프링 aop에서 프록시는 크게 JDK Dynamic proxy또는 CGLIB으로 작동합니다. 그리고 spring boot 1.4 버전 이후부터는 default로 CGLIB을 사용합니다. CGLIB은 동적으로 상속을 통해 프록시를 생성합니다. 따라서 private 메서드는 상속이 불가능하기 때문에 프록시로 만들어지지 않는것이죠! 그러면 아래처럼 protected나 public으로 메서드를 만들면 정상적으로 트랜잭션이 동작할까요? 정답은 protected일 때 또한 정상 동작하지 않습니다. JDK Dynamic proxy는 인터페이스를 기반으로 동작합니다. 따라서 protected 메서드에서는 프록시가 동작할 수 없는 것이죠. 그래서 스프링에서는 일관된 ..
· Spring
공통 기능 구현의 분리 웹 개발을 하다 보면 로그인 관련(세션처리), 로깅, 트랜잭션, 권한체크 등 공통 로직으로 처리해야 되는 업무가 생긴다. 이러한 기능을 반복해서 작성해야 한다면, 중복된 코드가 많아지게 되고, 유지보수가 힘들어지며 소스관리가 되지 않는다. 때문에 공통 기능은 핵심 기능과 분리하여 관리해야 한다. 그럼 어떻게 공통 기능을 관리해야 할까? 메소드 호출 앞, 중간, 뒤에 추가하여 공통 로직을 처리할 수 있는 방법이 3가지가 있다. 1. Filter(필터) - 핸들러 동작의 전 후 과정에 부가로직 처리, 웹 컨테이너에서 관리 2. Interceptor(인터셉터) - 이하 비슷함, 스프링 컨테이너에서 관리 3. AOP(관점 지향 프로그래밍) - 메서드 동작의 전 후 과정에 부가로직 처리 그..
· Spring
AOP 가 무엇일까 Aspect Oriented Programming 어떤 로직을 핵심적인 관점과 부가적인 관점으로 나누어 그 관점을 기준으로 모듈화하는 프로그래밍. 여러 객체에 공통으로 적용할 수 있는 기능을 분리해서 반복 작업을 줄이고 핵심 비즈니스 로직 개발에만 집중할 수 있다. Spring AOP는 프록시 기반으로 JDK Dynamic Proxy와 CGLIB을 활용하여 AOP 제공. 사용 목적에 따라 프록시 패턴: 클라이언트가 타깃에 접근하는 방법 제어 데코레이터 패턴: 타깃에 부가적인 기능 부여 프록시 동작 방식 클라이언트로부터 타켓을 대신해서 요청을 받는 대리인. 실제 오브젝트인 타겟은 프록시를 통해 최종적으로 요청받아 처리함. 따라서 타겟은 자신의 기능에만 집중하고 부가기능은 프록시에게 위임..
· Spring
MVC framework은 FrontController 패턴으로 이루어짐. 모든 컨트롤러의 컨트롤러로써 서블릿 하나로 클라이언트의 요청을 받음. spring web MCV 의 DispatcherServlet이 FrontController 패턴으로 구현되어 있다. 1. 클라이언트의 모든 요청을 Dispatcher Servlet이라는 Servlet Class가 받는다. 2. Dispatcher Servlet(Front Controller)은 요청 URL을 Handler Mapping에게 전달하고, 현재 요청에 알맞는 Controller와 Method에 대한 정보를 알아낸다. 어떤 요청에 어떤 Controller가 동작할지를 xml파일이나 Java파일의 어노테이션으로 설정한다. Spring으로 만들어진 Web..
· Spring
스프링 빈은 스프링 컨테이너가 생성과 관계 설정, 사용 등을 제어해주는 IoC가 적용된 객체를 가리키는 말이다. 빈 생성 스프링 컨테이너는 xml, java 등 다양한 형식의 설정 정보를 BeanDefinition 으로 추상화해서 사용. BeanDefinition 를 통해 빈 메타 정보를 생성하고 이걸 기반으로 스프링 빈 생성. 빈 등록 - 자동 빈 등록 -> @ComponentScan - 수동 빈 등록 -> @Configuration @Bean은 메소드 레벨에서 선언하며, 반환되는 객체(인스턴스)를 개발자가 수동으로 빈으로 등록하는 애노테이션이다. 반면 @Component는 클래스 레벨에서 선언함으로써 스프링이 런타임시에 컴포넌트스캔을 하여 자동으로 빈을 찾고(detect) 등록하는 애노테이션이다. 조..
· Spring
의존성 주입이란? DI는 IoC를 구현하기 위한 디자인 패턴으로 빈 사이의 의존 관계를 DI 컨테이너가 자동으로 연결한다. IoC는 객체에 대한 제어권이 개발자에게 있는 것이 아닌, 스프링 컨테이너에게 있는 것. 객체의 생성부터 소멸까지의 라이프싸이클 관리를 컨테이너가 대신 해준다. IoC 컨테이너에 객체들을 생성하면 객체끼리 의존성을 주입(DI, Dependency Injection)하는 역할을 하고 컨테이너에 등록한 객체들을 '빈'이라고 한다. 런타임 시에 관계를 동적으로 주입하여 유연성을 확보하고 결합도를 낮출 수 있게 해준다. 의존성 주입 방법 의존성 주입은 생성자 주입, 필드 주입, 세터 주입의 3 가지 방법이 있습니다. 이 중 Spring에서 가장 권장하는 의존성 주입 방법은 생성자를 통한 주..
· Spring
스프링이란? 객체지향 프로그래밍 개발을 빠르고 편하게 할 수 있도록 도와주는 프레임워크이다. 스프링의 주요 기술인 Ioc/DI, AOP는 어플리케이션을 POJO로 개발할 수 있게 해주는 기술들이다. 여기서 POJO에 제공한다는 말은 엔터프라이즈 서비스 기술과 POJO 애플리케이션 로직을 담은 코드를 분리했다는 뜻이다. 개발자들은 스프링 프레임워크 틀 위에서 핵심 비즈니스 로직에만 집중할 수 있어서 생산성이 향상된다. PSA (Portable Service Abstraction, 일관된 서비스 추상화) - 스프링이 데이터베이스 서비스를 추상화한 인터페이스를 제공, JDBC - JDBC처럼 특정 기술과 관련된 서비스를 추상화하여 일관된 방식으로 사용될 수 있도록 한 것 SpringBoot의 장점 과거의 Sp..
코딩스토리
'Spring' 카테고리의 글 목록