BackEnd263 [Spring] 프록시 패턴 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 프록시 패턴, 데코레이터 패턴 - 소개 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 프록시는 아무 객체나 프록시가 될수있는것은 아니다. 객체에서 프록시가 되려면, 클라이언트는 서버에게 요청을 한 것인지, 프록시에게 요청을 한 것인지 조차 몰라야 한다. 쉽게 이야기해서 서버와 프록시는 같은 인터페이스를 사용해야 한다. 그리고 클라이언트가 사용하는 서버 객체를 프록시 객체로 변경해도 클라이언트 코드를 변경하지 않고 동작할 수 있어야 한다. 클래스 의존관계를 보면 클라이언트는 서버 인터페이스( ServerInterface )에만 의존한다. 그리고 서버와.. BackEnd/Spring 2022. 8. 10. [Spring] 프록시 패턴과 데코레이터 패턴 예제 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 이번 시간에는 우선 예제 프로젝트부터 만들어보자! 디자인 패턴에 대한 글을 다음 게시물 부터 시작할 예정이다. 1. 예제 프로젝트 만들기 v1 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 이번 글 에서는 다음 글에서 설명할 데코레이터, 프록시 패턴을 위한 준비 예제 작업 시간이다. 설명보다는 단순 코드만 많은 점 양해 부탁 드립니다. 예제는 크게 3가지 상황으로 만든다. v1 - 인터페이스와 구현 클래스 - 스프링 빈으로 수동 등록 v2 - 인터페이스 없는 구체 클래스 - 스프링 빈으로 수동 등록 v3 - 컴포넌트 스캔으로 스프링 빈 자동 등록 V1 -.. BackEnd/Spring 2022. 8. 9. [Spring] 템플릿 콜백 패턴 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 템플릿 콜백 패턴 - 시작 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 지난 번 전략패턴 글에서 ContextV2 는 변하지 않는 템플릿 역할을 한다. 그리고 변하는 부분은 파라미터로 넘어온 Strategy에 해당된다. 이렇게 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 콜백(callback)이라 한다. 콜백 정의 프로그래밍에서 콜백(callback) 또는 콜애프터 함수(call-after function)는 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말한다. 콜백을 넘겨받는 코드는 이 콜백을 필요에 따라 즉시 실행할 수도 있고, 아니.. BackEnd/Spring 2022. 8. 7. [Spring] 전략 패턴 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 전략 패턴 - 예제1 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 우선 다음과 같은 코드가 있다고 해보자. @Slf4j public class ContextV1Test { @Test void strategyV0() { logic1(); logic2(); } private void logic1() { long startTime = System.currentTimeMillis(); //비즈니스 로직 실행 log.info("비즈니스 로직1 실행"); //비즈니스 로직 종료 long endTime = System.currentTimeMillis(); lo.. BackEnd/Spring 2022. 8. 7. [Spring] 템플릿 메서드 패턴 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 템플릿 메서드 패턴 - 예제1 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 이번시간은 TemplateMethod Pattern을 적용할 예제를 만들어보자. @Slf4j public class TemplateMethodTest { @Test void templateMethodV0() { logic1(); logic2(); } private void logic1() { long startTime = System.currentTimeMillis(); //비즈니스 로직 실행 log.info("비즈니스 로직1 실행"); //비즈니스 로직 종료 long en.. BackEnd/Spring 2022. 8. 6. [Spring] 쓰레드 로컬 - ThreadLocal - 2 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 5. ThreadLocal - 소개 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 쓰레드 로컬은 해당 쓰레드만 접근할 수 있는 특별한 저장소를 말한다. 쉽게 이야기해서 물건 보관 창구를 떠올리면 된다. 여러 사람이 동일한 물건 보관 창구의 직원에게 물건을 전달하면, 직원은 사용자를 인식해서 사용자별로 확실하게 물건을 구분해준다. 쓰레드 로컬을 사용하면 각 Thread마다 별도의 내부 저장소를 제공한다. 따라서 같은 인스턴스의 쓰레드 로컬 필드에 접근해도 문제 없다. thread-A 가 userA 라는 값을 저장하면 쓰레드 로컬은 thread-A 전용 보관.. BackEnd/Spring 2022. 8. 5. [Spring] 쓰레드 로컬 - ThreadLocal - 1 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 필드 동기화 - 개발 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 지난번 구현에서는 트랜잭션ID 와 level을 동기화하기 위해서 TraceId를 파라미터로 넘기도록 구현했었다. 이를 파라미터로 넘기지 않고 해결할 방법은 없을까? 향후 다양한 구현체를 만들기 위해 우선 LogTrace 인터페이스부터 만들자. ▶ LogTrace public interface LogTrace { TraceStatus begin(String message); void end(TraceStatus status); void exception(TraceStatus statu.. BackEnd/Spring 2022. 8. 4. [Spring] 예제 만들기 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 예제 프로젝트 만들기 - V0 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 이번시간에는 아주 간단한 예제 프로젝트를 만들었다. 코드 설명할 부분도없다. ▶ OrderRepositoryV0 @Repository @RequiredArgsConstructor public class OrderRepositoryV0 { public void save(String itemId) { //저장 로직 if (itemId.equals("ex")) { throw new IllegalStateException("예외 발생!"); } sleep(1000); } priva.. BackEnd/Spring 2022. 8. 3. [IntelliJ] IntelliJ 에서 DSM을 이용하여 패키지 간 의존성 확인하기 1. DSM 이란? DSM은 모듈 간의 관계를 2차원 매트릭에 나타낸 테이블. 테이블을 통해서 모듈 간의 의존관계 / 의존 강도 / 순환 사이클 등을 확인할 수 있다. DSM을 읽는 방법은 열을 기준으로 읽으시면 됩니다. “1번은 3번에 Dependency(의존성)을 가진다 , 3번은 1번, 2번에 의존성을 가진다”라고 읽으면 됩니다. 2. Layered Architectur 레이어드 아키텍처를 DSM으로 확인해보면 다음과 같은 구조를 가지게 될 것입니다. 위의 계층이 아래쪽 계층에만 의존하기 때문이다. 3. Intellij 에서 사용 IntelliJ에서는 Ultimate 버전에 한해서 DSM 플러그인이 기본적으로 제공된다. 메뉴 Code -> Analyze Code -> Dependency Matrix.. BackEnd/기타 2022. 8. 1. [JPA] JPA metamodel must not be empty! 1. 문제 상황 테스트코드를 작성하던 도중, Controller계층에 @WebMvcTest Slice Test를 하나 추가했더니, JPA metamodel must not be empty! 에러가 발생했다. TestDouble에 필요한 부분들은 전부 Stub을 만들어 줬다고 생각되는데, 어디서 에러가 발생하는지 찾기 어려웠다. 알고보니 객체를 생성하고, 영속화 할때 자동으로 생성시각이 기록되도록 Auditing 기능을 사용하고 있었는데, 이게 문제였다. 2. 원인 우선 나의 메인 메서드라 할 수 있는 IssueTrackerApplicaion.java는 다음과 같다. @EnableJpaAuditing @SpringBootApplication public class IssueTrackerApplication.. BackEnd/JPA 2022. 7. 28. [TDD] 테스트를 위한 생성자, 메서드 피하는 방법 스스로 공부하다 경험했던 문제를 해결하기 위해 1. 문제 상황 테스트를 작성하다 보면 검증을 위해 id값을 직접 객체에 추가해줘야 하는 경우들이 있다. 하지만 JPA를 사용할 경우 프로덕션 코드에서는 생성자로 id를 직접 추가해주지 않아도, auto increment를 사용하게 되기 때문에 id값을 직접 할당할 필요가 없다. 따라서 단지 테스트 만을 위한 용도로 id값을 받는 생성자를 만들게 되는 점이 매우 거슬렸다. 예시를 통해 문제의 상황을 구체화 해보자! 우선 우리의 도메인을 시각화하면 다음과 같다. 다음과 같은 예시 코드를 살펴보자. @DisplayName("구간을 성공적으로 추가한다") @Test public void add_section_test() { // given Line line = n.. BackEnd/TDD 2022. 7. 26. [Spring] 스프링의 3대 요소 (IoC/DI, PSA, AOP) Spring의 핵심적인 요소 3가지가 있다. 이에 대하여 잘 알고 있다 생각했는데, 막상 대답해주려니 생각보다 나의 생각을 전달하기가 어려웠다. 이번 기회에 3대 요소에 대하여 간단하게나마 정리를 해볼까 한다. IoC/DI PSA AOP 1. 공통 프로그래밍 모델 Application을 구성하는 객체(Bean)가 생성되고 동작하는 틀을 제공해줄 뿐만 아니라, 애플리케이션 코드를 어떻게 작성해야 하는지에 대한 기준도 제공한다. 이를 일반적으로 프로그래밍 모델이라고 부르는데, 스프링에서는 크게 3가지 핵심 프로그래밍 모델을 지원한다. 1-1) IoC/DI (제어의 역전/ 의존성 주입) IoC/DI는 객체의 생명주기와 의존 관계를 관리하기 위한 모델이다. ▶ 제어의 역전 IoC(Inversion of Cont.. BackEnd/Spring 2022. 7. 22. 이전 1 ··· 4 5 6 7 8 9 10 ··· 22 다음