본문 바로가기

개발 기록89

2024-08-01 학습일기 스프링 노션으로 따로 정리는 해두었지만, 그 내용이 너무 길어서 간단하게 정리한다.어제 학습했을 때 프록시 클래스를 만들면서 원본 코드의 아무런 수정없이 로그 추적이 가능했다.하지만, 이는 프록시 클래스를 모든 경우에 만들어줘야 한다는 문제가 있었다. 따라서, 이를 해결해야만 한다. 먼저, 자바에서 제공해주는 리플렉션 기술을 사용한 경우에는 Class로부터 메타데이터를 받아와 Method를 추상화하여 사용할 수 있으므로, 동적 프록시 클래스 생성이 가능했다.하지만, 이는 컴파일시 오류를 잡지 못하고 런타임에서만 오류를 잡을 수 있는 문제가 있다. 따라서, 이것은 개발자의 발전을 역행하는 것이므로, 리플렉션은 보통 사용하지 않는다.  그래서, 다른 대안으로 JDK 동적 프록시를 활용한 방법인 Invocat.. 2024. 8. 1.
2024-07-31 학습일기 스프링 프록시 패턴 프록시의 주요 기능은 접근 제어이다.캐시도 접근 제어의 한 종류라고 볼 수 있다.이미 한번 조회한걸 빠르게 조회하기 위함이미 개발된 로직을 전혀 수정하지 않고 프록시 객체를 통해 캐시를 적용하려면 어떻게 해야할까 Subject라는 인터페이스를 만들고 이걸 실제로 구현한 RealSubject라는 구현체를 만든다.이때 RealSubject에서 1초 걸린다고 가정하면세 번 호출시 각각 1초씩 걸리므로 3초가 걸린다.하지만, 만약 조회하는 내용이 같다면 이건 손해가 될 수 있다.따라서, 프록시를 통해 캐시 형태로 사용하면 더 빨리 조회할 수 있다.그렇기 위해 CacheProxy라는 것을 하나 만들고 필드로 RealSubject를 주입받는다.또한, Cache 값을 저장하기 위한 필드를 하나더 .. 2024. 7. 31.
2024-07-30 학습일기 스프링저번에는 스프링의 템플릿 콜백 패턴에 관한 공부를 진행했다. 템플릿 콜백 패턴은 실제로 RedisTemplate, RestTemplate 등 스프링에서 실제로 많이 사용이 된다.하지만, 이 콜백 패턴을 로그 추적기에도 적용하기엔 다소 아쉬운 점이 존재한다. 결국 템플릿 콜백 패턴을 적용해 익명 클래스를 만들던 뭘 하던 새롭게 도입했을 때,너무 많은 코드의 수정이 필요하다.  개발자는 너무나도 게으르다. 따라서, 더 편하기 위해 로그 추적기를 만들기 위해 프록시, 데코레이터 패턴을 사용한다고 한다.프록시, 데코레이터 패턴을 사용해 코드를 아무것도 수정하지 않는다고 하는데 이것이 가능한 일인지는 아직 학습하지 못했다.(아무것도 수정하지 않는다 -> 원본 코드를 전혀 수정하지 않고, 로그 추적기를 도입).. 2024. 7. 30.
2024-07-27 ~ 2024-07-29 학습일기 2024-07-27 ~ 2024-07-29 기간동안 가족여행에 다녀왔다. 따라서, 많은 학습은 하지 못했고 알고리즘 문제만 풀었다.  알고리즘촌수계산그래프 2024. 7. 29.
2024-07-26 학습일기 스프링어제 탬플릿 패턴으로 로그 추적기를 구현했었는데 이것에는 다소 문제점이 존재한다고 한다. 탬플릿 메서드 패턴을 사용하면 자식 클래스는 부모 클래스의 기능을 전혀 사용하지 않는데강결합되는 단점이 존재한다.부모 클래스에 새로운 메소드가 추가되면 자식 클래스는 전부 다 바뀌어야 함따라서, 엄청 좋은 구현 방법은 아니라고 한다.전략 패턴반복되는 작업을 하는 클래스의 내용이 바뀌어도전략 패턴의 경우 인터페이스만 의존하고 있기에 다른 클래스의 변경이 크게 영향을 미치지 않음특정 작업에 관한 인터페이스의 메소드만을 재정의해서 사용하므로전략 패턴을 주입받는 클래스의 생성시 관련 인자를 람다로 구현구현되어야 하는 메소드가 한 개일 때만 가능변하지 않는 부분을 Context(로그 출력 부분), 변하는 부분을 Stra.. 2024. 7. 26.
2024-07-25 학습기록 스프링ThreadLocal을 사용하여 로그 추적기의 동시성 문제를 해결했었다.하지만, 여전히 Controller - Service - Repository에 불필요한 반복되는 코드는 남아있다. 이걸 똑똑하게 처리하기 위해 탬플릿 패턴을 적용하는 과정에 관해 학습했다.탬플릿 패턴은 공통으로 사용되는 부분은 묶어놓고 매번 다르게 사용되는 부분에 관해서는해당 탬플릿 패턴 클래스를 구현하는 쪽 클래스로 미룸으로 사용이 가능하다. 탬플릿 패턴은 내 블로그 포스팅에서도 담겨 있듯이 추상 클래스로 생성하여공통된 부분에 관한 코드는 작성해놓고 하위 자식 클래스에서 사용되는 부분만추상 메소드로 미룸으로 Override하여 동적 바인딩이 되도록 구성한다. 이때, 익명 내부 클래스를 사용하여 새로운 자식 클래스 파일을 생성하.. 2024. 7. 25.