본문 바로가기

토비11

토비의 스프링 | 6장. AOP4 - AOP란 무엇인가? 이제까지 UserService에 트랜잭션을 적용해 온 과정을 되짚어 보자.1. 트랜잭션 서비스 추상화트랜잭션 적용을 비즈니스 로직과 함께 넣었을 때 문제가 발생한다. 트랜잭션을 제외한 부분에서 수정작업이 있더라도 트랜잭션 적용 코드를 수정해야 하는 심각한 문제가 있었다. 그래서 인터페이스와 DI를 통해 무엇을 하는지를 남기고 분리하는 트랜잭션 추상화를 수행하였다. 트랜잭션 적용은 더 이상 비즈니스 로직 코드에는 영향을 주지 않고 독립적으로 변경할 수 있게 되었다.2. 프록시와 데코레이션 패턴여전히 비즈니스 로직에는 트랜잭션을 어디에 적용할지 경계설정을 담당하는 코드가 남아 있었다. 이를 제거하기 위해 DI를 이용한 데코레이터 패턴을 적용하였다. 클라이언트가 인터페이스와 DI를 통해 접근하도록 설계하고 데.. 2017. 5. 2.
2017 스프링 캠프 첫번째날 후기 올해 첫 대규모 세미나인 스프링 캠프에 참석하게 되었습니다. 어벤져스급 연사님들이 나오시는 세미나에서 하루 동안 많은 꿀팁들을 얻을 수 있었습니다. 모든 것을 다 정리하고 싶은 욕심은 넘쳤지만 정신없이 듣느라 간략하게 제 느낌(?)데로 정리해 보았습니다.0.index1.keynote(박성철님)2.프로세스와 스레드, NIO 그리고 리액티브 스트림(부종민님)3.Async & Spring(토비님)4.Spring Web Flux(토비님)5.Spring Cloud Data Flow(정윤진님)6.gㅏ벼운 RPC, gRPC(빠르고 가벼운 Polyglot RPC framework)(오명운님)1.keynote(박성철님)멍하게 듣다가 시간이 흘러갔습니다. 예전 피씨의 탄생 초창기부터 현재까지 그리고 앞으로는 어떻게 흘러갈.. 2017. 4. 22.
토비의 스프링 | 6장. AOP3 - 프록시 팩토리빈과 포인트컷 프록시 팩토리 빈 방식의 장점/한계장점데코레이터 패턴과 같은 프록시를 도입하려고 했을 때 고민했던 문제점을 거의 완벽하게 해결해 준다.다이내믹 프록시를 이용하여 타깃 인터페이스를 구현하는 클래스를 일일이 만들지 않아도 된다.하나의 핸들러 메소드를 구현하여 부가기능 코드의 중복 문제를 해결한다.DI 설정만으로 다양한 타깃 오브젝트에 적용 가능하다.한계하나의 클래스 안에 여러개의 메소드 적용은 가능하지만 여러 개의 클래스에 공통적인 부가기능을 제공하는 일은 불가능하다.하나의 타깃에 여러 개의 부가기능을 적용하려 할 때도 문제이다.트랜잭션, 보안 기능, 기타 부가기능을 담은 프록시를 추가하려 해도 설정 코드는 그만큼 추가로 늘어나는 한계가 생긴다.TransactionHandler 오브젝트가 프록시 팩토리 빈 .. 2017. 4. 17.
토비님과 저녁식사 후 생각 정리 태기님의 소개로 토비님과 저녁식사를 하면서 궁금했던 질문들을 정리! 1. 디자인패턴을 선행해야하는가?- NO. 디자인패턴은 소통을 위한 언어. 개발을 충분히 한 후 디자인패턴을 한번쯤 보아도 좋다. 2. 웹개발에 알고리즘이 중요한가?- NO. 진짜 할꺼 없으면 해라. 다만 기본적인 방법들이 있다는 것은 알아야함(자료구조처럼). 자바 API와 라이브러리에서 이미 고도화된 것들을 제공하고 있다. 그것을 잘 쓰면 된다. 3. 객체지향을 더 잘하려면 어떻게 해야하는가?- 팁은 없다. 많이 해봐야한다. 책을 읽고 이해하는 것도 중요하지만 자신이 직접 고민하고 구현해 보는게 가장 빠른 길! 4. 웹 개발자가 리액티브 프로그래밍을 잘 해야하는가?- No. 웹 개발 백엔드쪽에서는 리액티브를 할 일이 거의 없다. 안드로.. 2017. 4. 14.
토비의 스프링 | 6장. AOP2 - 다이내믹 프록시 6.3 다이내믹 프록시와 팩토리 빈우리는 트랜잭션 경계설정과 비즈니스 로직 코드를 분리하기 위해 전형적인 전략 패턴을 사용하였다.부가기능은 자신이 핵심기능을 가진 것처럼 꾸며서 클라이언트가 자신을 거쳐 핵심기능을 사용하도록 했다.그렇게 하기 위해 인터페이스를 통해 부가, 핵심기능을 접근도록 하였다.이렇게 마치 자신이 클라이언트가 사용하려고 하는 실제 대상인 것처럼 위장해서 클라이언트의 요청을 받아주는 것을 대리자, 대리인과 같은 역할을 한다고 하여 프록시(Proxy)라 부른다. 프록시를 통해 최종적으로 요청을 위임받아 처리하는 실제 오브젝트를 타깃(tartget) or 실체(real subject)라 부른다.프록시의 특징은 타깃과 같은 인터페이스를 구현했다는 것과 프록시가 타깃을 제어할 수 있는 것이다... 2017. 4. 7.
토비의 스프링 | 3장. 템플릿2 - 응용 3.5 템플릿과 콜백템플릿/콜백의 동작원리템플릿: 어떤 목적을 위해 미리 만들어둔 모양이나 틀을 가리킨다. JSP는 HTML이라는 고정된 부분에 EL과 스크립릿이라는 변하는 부분을 넣은 일종의 템플릿 파일이다. 콜백: 실행되는 것을 목적으로 다른 오브젝트의 메소드에 전달되는 오브젝트를 말한다. 자바에선 메소드 자체를 파라미터로 전달할 방법이 없기 때문에 메소드가 담긴 오브젝트를 전달한다. 이것을 functional object라 한다.UserDao와 StatementStrategy, JdbcContext를 이용한 전략 패턴의 기본 구조에 익명 내부 클래스를 활용한 방식을 템플릿/콜백 패턴이라 한다.전략 패턴의 컨텍스트를 템플릿이라 부르고, 익명 내부 클래스를 콜백이라 부른다.템플릿/콜백 패턴의 콜백은 보.. 2017. 3. 3.
토비의 스프링 | 3장. 템플릿 템플릿이란 변경이 거의 일어나지 않으며 일정한 패턴으로 유지되는 특성을 가진 부분을 자유롭게 변경되는 성질을 가진 부분으로 부터 독립시켜 효과적으로 활용할 수 있도록 하는 방법을 말한다. 3장에서는 템플릿 기법을 적용하는 방법에 대해 살펴본다.3.1 다시보는 초난감 DAOUserDao의 여러가지 면에서 개선작업을 했지만 아직 미흡한 점이 있다. 바로 예외처리이다.public void deleteAll() throws SQLException { Connection c = dataSource.getConnection(); PreparedStatement ps = c.PreparedStatement("delete from users"); ps.executeUpdate(); ps.close(); c.close(.. 2017. 1. 27.
토비의 스프링 | 2장. 테스트 스프링의 가장 중요한 가치를 무엇이냐고 질문한다면 그 가치는 객체지향과 테스트에 있다. 확장과 변화를 고려한 객체지향적 설계와 그것을 효과적으로 담아낼 수 있는 IOC/DI 같은 기술이라면, 만들어진 코드에 확신을 주고 변화에 유연하게 대처할 수 있는 자신감을 주는 테스트 기술이 있다. 2장에서는 테스트란 무엇이며, 그 가치와 장점, 활용 전략, 스프링과의 관계를 살펴본다.2.1 UserDaoTest 다시 보기이전에는 main() 메소드를 이용해 UserDao 오브젝트의 함수를 호출하고 결과물을 출력함으로써 테스트를 수행하였다.테스트란 결국 내가 예상했던 데로 코드가 정확히 동작하는지 확인해서, 내 코드에 대한 확신을 갖게 해주는 작업이다.테스트에서 원치 않는 결함이 나오면 이를 제거해가는 작업, 일명 .. 2017. 1. 13.
토비의 스프링 | 1장. 오브젝트와 의존관계2 애플리케이션 컨텍스트의 동작방식애플리케이션 컨텍스트는 애플리케이션에서 IOC를 적용해서 관리할 모든 오브젝트에 대한 생성과 관계설정을 담당한다. 대신 직접적으로 DaoFactory와 관계를 맺어주는 코드는 따로 없고 그런 생성정보와 연관관계 정보를 별도의 설정정보를 통해 얻는다. 때로는 외부의 오브젝트 펙토리에 그 작업을 위임하고 그 결과를 가져다가 사용하기도 한다.애플리케이션 컨텍스트의 장점클라이언트는 구체적인 팩토리 클래스를 알 필요가 없다.다양한 오브젝트가 생기더라도 이를 일일이 알 필요없이 애플리케이션 컨텍스트를 이용하여 일관된 방식으로 원하는 오브젝트를 가져올 수 있다.애플리케이션 컨텍스트는 종합 IOC 서비스를 제공해준다.단순히 생성과 관계설정의 제공뿐 아니라 만들어지는 방식, 시점과 전략, .. 2017. 1. 9.