Spring-Boot/스프링핵심원리 - 고급편
-
Spring 핵심 원리 고급편 - 4. 프록시 패턴과 데코레이터 패턴Spring-Boot/스프링핵심원리 - 고급편 2022. 6. 3. 09:55
* 예제는 크게 3가지 상황 * v1 - 인터페이스와 구현 클래스 - 스프링 빈으로 수동 등록 v2 - 인터페이스 없는 구체 클래스 - 스프링 빈으로 수동 등록 v3 - 컴포넌트 스캔으로 스프링 빈 자동 등록 - 실무에서는 스프링 빈으로 등록할 클래스는 인터페이스가 있는 경우도 있고 없는 경우도 있다. 그리고 스프링 빈을 수동으로 직접 등록하는 경우도 있고, 컴포넌트 스캔으로 자동으로 등록하는 경우도 있다. - @RequestMapping : 스프링 MVC는 @Controller 또는 @RequestMapping 애노테이션이 타입에 있어야 스프링 컨트롤러로 인식한다. 그리고 스프링 컨트롤러로 인식해야, HTTP URL이 매핑되고 동작한다. 이 애노테이션은 인터페이스에 사용해도 된다. - @Response..
-
Spring 핵심 원리 고급편 - 3. 템플릿 메서드 패턴과 콜백 패턴Spring-Boot/스프링핵심원리 - 고급편 2022. 6. 2. 16:07
* 핵심 기능 vs 부가 기능 * - 핵심 기능 : 해당 객체가 제공하는 고유의 기능 - 부가 기능 : 핵심 기능을 보조하기 위해 제공되는 기능, 예를 들어 로그 추적 로직, 트랜잭션 기능이 있다. * 변하는 것과 변하지 않는 것을 분리 * - 좋은 설계는 변하는 것과 변하지 않는 것을 분리하는 것이다 - 여기서 핵심 기능 부분은 변하고, 로그 추적기를 사용하는 부분은 변하지 않는 부분이다 - 이 둘을 분리해서 모듈화해야 한다 → 템플릿 메서드 패턴 ( Template Method Pattern ) 은 이런 문제를 해결하는 디자인 패턴이다. - try~catch 처럼 중간에 비즈니스로직이 들어갔을 때 사용 템플릿 메서드 패턴 * 템플릿 메서드 패턴 구조 그림 * @Slf4j public abstract ..
-
Spring 핵심 원리 고급편 - 2. ThreadLocalSpring-Boot/스프링핵심원리 - 고급편 2022. 6. 2. 13:31
필드 동기화 * 동시성 문제 * FieldLogTrace는 싱글톤으로 등록된 스프링 빈이다. 이 객체의 인스턴스가 애플리케이션에 딱 1 존재한다는 뜻이다. 이렇게 하나만 있는 인스턴스의 ' FieldLogTrace.traceIdHolder ' 필드를 여러 쓰레드가 동시에 접근하기 때문에 문제가 발생 - 실무에 한번 나타나면 개발자를 가장 괴롭히는 문제도 바로 이러한 동시성 문제이다. 참고 Runnable user A = new Runnable() { @Override public void run() { } } Runnable userA = () -> { } : 동일 코드! * 동시성 문제 * - 여러 쓰레드가 동시에 같은 인스턴스의 필드 값을 변경하면서 발생하는 문제를 동시성 문제라 한다. - 이런 동시..