Spring

· Spring
⬜ 섹션2 스프링 부트 소개◼️ 스프링 프레임워크 등장 배경스프링 프레임워크는 2000년대 초반에 자바(Java) 개발자들이 경험한 문제들을 해결하기 위해 등장했다.1. 복잡한 엔터프라이즈 자바 개발 (EJB 문제) 🥵2000년대 초반, 자바로 대규모 기업 애플리케이션을 개발할 때 주로 EJB(Enterprise JavaBeans)기술을 사용했다. 하지만, EJB는 너무 복잡하고 사용하기 어려운 부분이 많았다.개발자들은 많은 설정과 복잡한 코드를 작성해야 했기 때문에 시간이 많이 걸리고 오류 발생 가능성이 높았습니다.2. 더 쉬운 방법에 대한 요구 🤨개발자들은 복잡한 EJB 대신, 더 간단하고 효율적인 방법으로 애플리케이션을 개발하고자 했다. 특히, 자바의 장점을 살리면서도 코드가 깔끔하고 유지보수가..
· Spring
⬜섹션11 스프링 AOP - 포인트컷◼️ AOP 개념포인트컷 표현식: 에스펙트J가 제공하는 포인트컷 표현식 실습 사전 준비- ClassAop, MethodAop, MemberService, MemberServiceImpl을 만든다. (상세 코드 in 교안)@Slf4jpublic class ExecutionTest { // AspectJExpressionPointcut; 포인트컷 표현식을 처리해주는 클래스 AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut(); Method helloMethod; @BeforeEach public void init() throws NoSuchMethodException { ..
· Spring
⬜섹션9 스프링 AOP 개념◼️ AOP 개념앱의 기능은 핵심 기능과 부가 기능으로 나뉜다. 로깅처럼, 보통 부가 기능은 여러 클래스에 걸쳐서 함께 사용된다. 이러한 부가 기능은 횡단 관심사(cross-cutting concerns)이다. 🟢 AOP 탄생 과정부가 기능을 적용할 때 반복과 중복 코드가 많이 발생하고, 수정 시에도 많은 작업이 필요했음이를 해결하기 위해 @Aspect를 사용해 부가 기능과 적용 범위를 정의이렇게 Aspect를 사용하는 프로그래밍 방식을 관점 지향 프로그래밍(AOP, Aspect-Oriented Programming)이라 하며, AOP는 객체 지향 프로그래밍(OOP)을 보완하여 횡단 관심사를 깔끔하게 처리하기 위해 개발됨◼️ AOP 적용 방식🟢 AOP 부가 기능 로직 추가 ..
· Spring
⬜섹션8 @Aspect AOP◼️@Aspect 프록시 🟢 스프링 프록시 적용 방법Advisor(포인트컷 + 어드바이스) 를 스프링 빈으로 등록자동 프록시 생성기가 스프링 빈으로 등록된 어드바이저를 찾음스프링 빈에 프록시 적용결국 우리가 할 일은 단순히 위 1번 과정이다. @Aspect 는 편리한 어드바이저 생성 기능을 지원한다.자동 프록시 생성기( AnnotationAwareAspectJAutoProxyCreator )는 @Aspect를 찾아 이것을 Advisor로 만들어 준다. 🟢 자동 프록시 생성기가 하는 일@Aspect를 보고 Advisor로 변환해서 저장어드바이저를 기반으로 프록시 생성자동 프록시 생성기는 모든 @Aspect 빈 조회 후, @Aspect 어드바이저 빌더를 통해 어드바이저를 생성..
· Spring
⬜섹션7 빈 후처리기◼️빈 후처리기빈 후처리기(BeanPostProcessor)는 생성객체를 빈 저장소에 등록하기 직전 조작할 수 있다.이를 사용하려면 아래 인터페이스를 구현후, 스프링 빈으로 등록하면 된다.🔶 BeanPostProcessor 인터페이스 public interface BeanPostProcessor { // 객체 생성 이후, @PostConstruct 같은 초기화 발생 전 호출되는 포스트 프로세서 Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException // 객체 생성 이후, @PostConstruct 같은 초기화 발생 후 호출되는 포스트 프로세서 ..
· Spring
⬜섹션6 스프링이 지원하는 프록시◼️프록시 팩토리🤔 문제점인터페이스가 있는 경우에는 JDK 동적 프록시를 적용하고, 그렇지 않은 경우에는 CGLIB를 적용하려면 InvocationHandler, MethodInterceptor를 각각 중복으로 만들어서 관리해야 하는 번거로움이 있다.😉 해결책 프록시 팩토리는 동적 프록시를 통합해서 편리하게 만들어준다. 인터페이스는 JDK 동적프록시를, 구체클래스는 CGLIB을 사용한다.추가 설정도 가능하다. 🟢프록시 팩토리Advice는 프록시에 적용하는 부가 기능 로직이다.JDK 동적 프록시의 InvocationHandler,CGLIB의 MethodInterceptor 개념과 유사하다.프록시 팩토리를 사용하면 둘 대신 Advice를 사용하면 된다.Advice를 만드..
· Spring
⬜섹션5 동적 프록시 기술◼️리플렉션리플랙션을 사용해 클래스나 메서드 메타정보를 사용해서 동적으로 호출하는 메서드를 변경할 수 있다.아래 코드 를 보면, 중복되는 부분이 나타난다. 중복부분을 제거하려면 메서드로 뽑아서 공통화 해야 한다. 하지만 중간 호출 메서드가 다르다. 🔶중복이 많은 코드@Slf4jpublic class ReflectionTest { @Test void reflection0() { Hello target = new Hello(); //공통 로직1 시작 log.info("start"); String result1 = target.callA();//호출 메서드가 다름 log.info("result={}", resu..
· Spring
⬜섹션4 프록시 패턴과 데코레이터 패턴◼️예제 프로젝트 만들기🟢예제 3가지 상황v1 - 인터페이스와 구현 클래스 - 스프링 빈으로 수동 등록v2 - 인터페이스 없는 구체 클래스 - 스프링 빈으로 수동 등록v3 - 컴포넌트 스캔으로 스프링 빈 자동 등록🟢스프링 부트 3.0 전후 차이스프링 부트 3.0 미만@RequestMapping //스프링은 @Controller 또는 @RequestMapping 이 있어야 스프링 컨트롤러로 인식@ResponseBody public interface OrderControllerV1 {}스프링 부트 3.0 이상 @RestController //스프링은 @Controller, @RestController가 있어야 스프링 컨트롤러로 인식public interface Ord..
· Spring
⬜섹션3 템플릿 메서드 패턴과 콜백 패턴◼️템플릿 메서드 패턴 - 시작문제점🤔: 앞서 로그 추적기를 만들면서 핵심기능보다 로그 출력을 위한 부가 기능 코드가 더 많고 복잡해졌다.아래의 동일한 패턴이 중복해서 나타난다. TraceStatus status = null; try { status = trace.begin("message"); //핵심 기능 호출 trace.end(status); } catch (Exception e) { trace.exception(status, e); throw e; }◼️템플릿 메서드 패턴 - 예제아래에서 변하는 부분은 비즈니스 로직, 변하지 않는 부분은 시간 측정이다. 이제 템플릿 메서드 패턴을 사용해서 변하는 부분과 변하지 않는 부분을 분리해보자. @Sl..
· Spring
⬜ 섹션2 쓰레드 로컬 - ThreadLocal◼️ 필드 동기화 - 개발앞서 로그 추적기를 만들면서 다음 로그를 출력할 때 트랜잭션ID와 level을 동기화 하는 문제가 있었다. 이 문제를 해결하기 위해 TraceId를 매번 파라미터로 넘기도록 구현했다.모든 메서드에 TraceId 파라미터를 추가하지 않기 위해 traceIdHolder필드를 사용하도록 해보자.public interface LogTrace { TraceStatus begin(String message); void end(TraceStatus status); void exception(TraceStatus status, Exception e);}@Slf4jpublic class FieldLogTrace implements L..
고쩡이
'Spring' 카테고리의 글 목록