ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스프링 핵심 원리 - 고급편
    개발/강의 2022. 5. 21. 23:59

     몇 년간 사용해오면서 익숙하면서도 아직 모르는 부분에 대한 불안과 갈증으로 고급편을 수강하게 되었다.

     

    2022-05-21

    예제 만들기

    아주 간단한 로그 만들기 강좌로 이 강의를 들으면서 느낀 점은 

    매번 느끼는 거지만 김영한님은 친절하게 동작원리를 설명하신다는 거다.

    (예를들어 @Service, @Repository를 사용하면서 해당 어노테이션에 @Component가 있는 것을 보여주며

    어떻게 컴포넌트스캔에 감지될 수 있는 것을 설명하는 등)

    처음 스프링을 접하는 사람도 아주 간편하게 프레임워크와 돌아가는 구성을 그려보며 이해할 수 있지 않을까라는 생각이 들었다.

    그리고 우연찮게 얻은 꿀팁은, 에러가 있을때 f2키를 누르면 해당 에러로 바로 이동하는 것이다.

    (스크롤바를 통해 해당 위치 부근으로 바로 가거나 로그에서 클릭하여 이동하는 것으로 불편함을 못 느꼈는지...)

    이번 로그처리는 아주 단순하게 처리하고 있는데,

    다음 챕터가 쓰레드 로컬인 것을 보면 불편한 파라미터 전달이 없애질 것으로 보여 

    어떤식으로 작업할지가 기대된다.

    (내가 생각한 방법과 다른 방법이 있는지 궁금하다)

     

    또 가볍게 든 생각은 

    김영한님은 메서드 선언 후 한 줄을 띄우시구나 하는 것이다.

    (나는 한 줄 띄우다가, 최근엔 바로 작성하는 것으로 바꾸게 되었다.)

     

    2022-05-22

    쓰레드 로컬

    이 챕터에서는

    웹 개발자에게 중요한 동시성 문제를 아주 쉽고 간단한 케이스를 통해 경험하고, 이해하여 쉽게 해결하는 방법이 설명되어 있다.

    주니어때 동시성 제어에 대한 깔끔한 코드를 경험하지 못해 막연한 두려움이 있었던 것을 이렇게 쉽게 유도하여 학습하도록 하다니.

    정말 감탄이 나왔다.

    그리고 자연스럽게 configuration을 만들고 bean을 등록하고 싱글톤 특성에 대해 알려주는 것 역시 스프링에 대해 완전히 이해하지 못한 이들에게 소중한 영양분이 될 것 같았다.

    마지막으로 이 챕터의 주제인 쓰레드로컬을 사용하며 동시성 문제를 해결하고, 주의점 마저 친절히 그림과 함께 잘 설명하여 실수로 잘못된 사용을 줄이는 정성을 보였다.

    (ThreadLocal는 생성하는데 비용이 들기 때문에 Thread pool에서 꺼내 재사용하고, 각 Thread의 정보로 Map처럼 정보를 저장하기 때문에 ThreadLocal에 담아 사용한 값은 해당 쓰레드가 종료하기 전에 초기화를 해줘야한다. 그렇지 않으면 memory leak이나 예상치 못한 값을 전달 받을 수 있다.)

     

    아. 마지막으로 처음 Bean에서 LogStace의 구현체가 FieldLogStace에서 ThreadLocalLogStace로 대체하는 것만으로 다른 추가작업 없이 간단히 바꾸며 ocp에 대한 얘기 역시 깨알 같았다.

    정말 김영한님의 내공이 느껴지는 강의였고, 템플릿 메서드 패턴과 콜백 패턴인 다음 챕터는 더욱 기대된다.

     

    2022-06-20

    탬플릿 메서드 패턴 예제

    변하는 것과 변하지 않는 것을 분리하여 모듈화하는 문제를 해결하는데 사용

    간단한 예제를 통해 공통 로그를 담당하는 추상 탬플릿과, 독립적으로 로그를 출력하는 상속하여 구현한 코드를 알아 보았다.

     

    2022-06-26

    탬플릿 메서드 패턴 적용 및 정리

    탬플릿 메서드를 통해 핵심 로직에만 집중할 수 있는 효과를 보았다. 탬플릿 메서드를 적용한 적이 처음이 아니지만 학습을 하며 깊게 본 적은 처음이었다.  그러면서 내가 왜 탬플릿 메서드 패턴을 잘 쓰지 않았는지, 전략패턴이 익숙한 지 좀 더 확실하게 깨달을 수 있었다.

    탬플릿 메서드 패턴은 기본 골격 구조를 정의하고 구체적인 단계는 서브클래스에서 정의를 하는데, 문제는 이를 위해 서브 클래스는 부모클래스를 상속받는다는 점이다. 때문에 상속을 통한 치명적인 단점. 즉 강 결합 현상이 발생하고, 서브 클래스에서 정의한 부분의 경우 부모클래스 로직을 전혀 사용하지 않는데 항상 함께 하는 불편함이 있다.

    그렇다면 더 좋은 코드는, 객체지향적이고 유지보수하기 편한 것은 어떤 것이 있을지에 대한 고민이 나오는데 이 강좌에서는 다음에 전략 패턴을 소개하며 풀려고 하는 것 같다.

    다음 강의도 기대된다.

    댓글

Designed by Tistory.