Logback 안녕하세요~ 이번 포스팅에서는 Logback의 구조와 사용 방법에 대해서 정리해보려고 합니다. 모든 내용을 다 다룰 수는 없지만, 기본적인 구조를 인지하고 있으면 나머지는 필요할 때마다 찾아보면서 적용할 수 있습니다. 특히 Logback은 공식 문서가 꼼꼼하게 되어있는 편이어서, 없는 것 빼고 다 있다는 느낌이 들기도 합니다. 영어지만요 Logback이란? 먼저 Logback이 어떤 것인지 잠깐 짚고 넘어가도록 하겠습니다. 간단히 말해서 java.util.logging, log4j, log4j2를 잇는 자바 로깅 프레임워크인데요. 위 유틸들에 비해서 좋은 성능을 가지고 있으며, 특히 Spring boot에서는 기본 로깅 모듈로 채택하고 있기 때문에 많은 분들이 알게 모르게 Spring bo..
이전 글 : [토비의 스프링] 6. AOP (1) 지금까지 해왔던 작업은 비즈니스 로직에 반복적으로 등장하는 트랜잭션 코드를 투명하게 분리해내는 것이었다. 투명하다는 것은 투명한 유리를 사이에 둔 것처럼, 부가기능을 적용한 후에도 기존 설계와 코드에는 영향을 주지 않고 메소드가 호출되는 과정에 다이내믹하게 참여해서 부가적인 기능을 제공해주도록 만들었다는 것이다. 자동 프록시 생성 자동 프록시 생성 빈 후처리기 투명한 부가기능을 적용하는 과정에서 발견됐던 거의 대부분의 문제는 제거했다. 타깃 코드는 깔끔하고, 부가기능은 한 번만 만들어 모든 타깃과 메소드에 재사용이 가능하고, 타깃의 적용 메소드를 선정하는 방식도 독립적으로 작성할 수 있도록 분리되어 있다. 하지만 아직 한 가지 해결할 과제가 남아 있다. ..
AOP AOP는 IoC/DI, 서비스 추상화와 더불어 스프링의 3대 기반기술의 하나다. AOP를 바르게 이용하려면 OOP를 대체하려고 하는 것처럼 보이는 AOP라는 이름 뒤에 감춰진, 그 필연적인 등장배경과 스프링이 그것을 도입한 이유, 그 적용을 통해 얻을 수 있는 장점이 무엇인지에 대한 충분한 이해가 필요하다. 스프링에 적용된 가장 인기 있는 AOP의 적용 대상은 바로 선언적 트랜잭션 기능이다. 트랜잭션 코드를 메소드로 분리 5장의 서비스 추상화 기법을 적용해 스프링이 제공하는 깔끔한 트랜잭션 인터페이스를 썼음에도, 비즈니스 로직이 주인이어야 할 메소드 안에 이름도 길고 무시무시하게 생긴 트랜잭션 코드가 더 많은 자리를 차지하고 있다. public void upgradeLevels() throws E..
트랜잭션 적용으로 알아보는 서비스 추상화 5장에서는 트랜잭션을 적용해보면서 스프링이 어떻게 성격이 비슷한 여러 종류의 기술을 추상화하고 이를 일관된 방법으로 사용할 수 있도록 지원하는지를 살펴볼 것이다. 모 아니면 도 서비스에서 필요한 사용자의 레벨 관리 기능에 대한 요구사항을 추가로 구현하고, 테스트도 잘 만들어서 검증도 마쳤다. 이 때 다음과 같은 질문이 나왔다. 정기 사용자 레벨 관리 작업을 수행하는 도중에 네트워크가 끊기거나 서버에 장애가 생겨서 작업을 완료할 수 없다면, 그때까지 변경된 사용자의 레벨은 그대로 둘까요? 아니면 모두 초기 상태로 되돌려 놓아야 할까요? 열띤 토론 끝에 사용자 레벨 조정 작업은 중간에 문제가 발생해서 작업이 중단된다면 그때까지 진행된 변경 작업도 모두 취소시키도록 결..
예외 처리 자바 개발자가 가장 신경 쓰기 귀찮아하는 것 중의 하나가 바로 예외처리다. 정상적인 결과와 흐름을 보여주는 코드를 만들기도 버거운데 예외상황까지 처리해야 한다는 사실이 부담스러울 수도 있다. 이 장에서는 예외를 처리하는 Best Practice를 살펴본다. 초난감 예외처리 먼저 개발자들의 코드에서 종종 발견되는 초난감 예외처리의 경우들을 살펴보자. 예외 블랙홀 try { // Do something } catch (SQLException e) { } 예외를 잡고는 아무것도 하지 않는 경우다. 예외 발생을 무시해버리고 정상적인 상황인 것처럼 다음 라인으로 넘어가겠다는 분명한 의도가 있는 게 아니라면 연습 중에도 절대 만들어서는 안 되는 코드다. 왜냐하면 프로그램 실행 중에 어디선가 오류가 있어서..
IoC? DI? Spring 프레임워크를 직접적으로 사용하지 않더라도, 개발을 하다보면 IoC(Inversion of Control), 혹은 DI(Dependency Injection)라는 용어에 대해서 듣게 되는 경우가 많습니다. Spring에서만 사용하는 개념들이 아니기 때문인데요. 그때마다 IoC나 DI가 궁금해서 용어에 대한 정의를 보며 공부를 해도 이 개념들이 정확하게 무엇인지, 왜 필요한지에 대해 처음에는 크게 와닿지 않는 것이 사실입니다. 이번 포스팅에서는 간단한 자바 예제를 통해 Spring의 IoC와 DI에 대해서 이해해보는 시간을 가져보도록 하겠습니다. 커피 한 잔 카페에서 손님이 커피를 커피를 전문적으로 취급하는 어떤 카페가 있습니다. 이 곳 카페의 바리스타는 본인이 만드는 커피에 높..
템플릿 객체지향 설계의 핵심 원칙인 개방 폐쇄 원칙(OCP)를 생각해보자. 이 원칙은 코드에서 어떤 부분은 변경을 통해 그 기능이 다양해지고 확장하려는 성질이 있고, 어떤 부분은 고정되어 있고 변하지 않으려는 성질이 있음을 말해준다. 템플릿이란 이렇게 바뀌는 성질이 다른 코드 중에서 변경이 거의 일어나지 않으며 일정한 패턴으로 유지되는 특성을 가진 부분을 자유롭게 변경되는 성질을 가진 부분으로부터 독립시켜서 효과적으로 활용할 수 있도록 하는 방법이다. 예외처리 기능을 갖춘 DAO DB Connection이라는 제한적인 리소스를 공유해 사용하는 서버에서 동작하는 JDBC 코드에는 반드시 지켜야 할 원칙이 있다. 바로 예외 처리다. 정상적인 JDBC 코드의 흐름을 따르지 않고 중간에 어떤 이유로든 예외가 발..
테스트 스프링이 개발자에게 제공하는 가장 중요한 가치는 객체지향과 테스트이다. 애플리케이션의 복잡성을 대응하는 첫 번째 전략은 확장과 변화를 고려한 객체지향적 설계와 그것을 효과적으로 담아낼 수 있는 IoC/DI 같은 기술이고, 두 번째 전략은 만들어진 코드를 확신할 수 있게 해주고, 변화에 유연하게 대처할 수 있는 자신감을 주는 테스트 기술이다. 또한 테스트는 스프링을 학습하는 데 있어 가장 효과적인 방법 중 하나다. 테스트의 작성은 스프링의 다양한 기술을 활용하는 방법을 이해하고 검증하고, 실전에 적용하는 방법을 익히는 데 효과적으로 사용될 수 있다. 테스트의 유용성 테스트는 내가 예상하고 의도했던 대로 코드가 정확히 동작하는지를 확인해서, 만든 코드를 확신할 수 있게 해주는 작업이다. 기존에 수행하..