본문 바로가기

Spring/Toby's Spring Reading Club10

1-8. 스프링이란 무엇인가? 8장에서 비로소 스프링이란 무엇인가? 에 대해 설명합니다. 보통의 책들은 1장에서 바로 스프링의 개념에 대해 설명할 텐데, 오히려 토비 님은 책의 마지막에서야 비로소 스프링이 무엇인지 설명합니다. 이는 스프링이 무엇인지 말로 설명해 봤자 이해가 잘 되지 않을뿐더러, 직접 코드로 확인해 봐야 더 잘 이해가 될 것이라는 토비 님의 생각이 담겨 있었기 때문이고, 읽기 모임에서도 여러 번 언급하셨듯이 이를 통해서 토비 님은 스프링이 굉장히 특별한 기술이 아니라는 것을 말하고 싶었던 것 같습니다. 1권을 통해서 스프링 이전에 어떤 문제점들이 있었고, 스프링은 이를 어떻게 해결해 왔는가, 그리고 스프링은 앞으로 어떤 방향성을 가지고 발전해나 가는가에 대해 알 수 있어서 좋았습니다. 스프링의 특징 자바 엔터프라이즈 .. 2023. 1. 15.
1-7. 스프링 핵심 기술의 응용 현실적으로 SQL의 변경 작업은 생각보다 빈번히 일어납니다. 개발 중에는 물론이고 운영 중인 시스템의 SQL을 변경해 달라는 요청도 드물지 않습니다. 그렇다고, 그때마다 DAO 코드를 수정하고 이를 다시 컴파일해서 적용하는 건 번거로울 뿐만 아니라 위험하기도 합니다. (p.558) 이번장은 초난감 DAO에 아직 남아있는 SQL 문자열을 분리하는 과정을 통해 스프링의 여러 추상화된 기술을 설명하며 다시 한번 DI의 중요성에 대해 설명합니다. 1장부터 지금까지 계속해서 DI를 강조하는데, 실제 읽기 모임에서도 토비님은 DI가 정말 중요하다고 거듭 언급하실정도로 스프링을 학습하는 데 있어서 DI는 꼭 빠트릴 수 없는 것 같습니다. DI란 결국 미래를 프로그래밍 하는 것입니다. (p.618) 그리고 DI를 적용.. 2023. 1. 15.
1-6. AOP (2) 이전에 JDK 다이내믹 프락시를 사용해 반복되는 로직을 제거하며, 핵심 기능과 부가 기능을 분리해 보았습니다. 변하지 않는 타깃으로의 위임과 부가기능 적용 여부 판단이라는 부분은 코드 생성기법을 이용하는 다이내믹 프락시 기술에게 맡기고, 변하는 부가기능 코드는 별도로 만들어서 다이나믹 프록시 생성 팩토리에게 DI로 제공하는 방법을 사용했습니다. 그렇다면 반복적인 프락시 메서드 구현을 코드 자동생성 기법을 이용해 해결했다면 반복적인 ProxyFactoryBean 설정 문제는 설정 자동등록 기법으로 해결 할 수 업슬까? 또는 실제 빈 오브젝트가 되는 것은 ProxyFactoryBean을 통해 생성되는 프록시 그 자체이므로 프락시가 자동으로 빈으로 생성되게 할 수는 없을까? 스프링에서는 빈 후처리 기를 이용해.. 2023. 1. 10.
1-6. AOP (1) AOP는 IoC/DI, 서비스 추상화와 더불어 스프링의 3개 기반기술의 하나입니다. AOP는 스프링의 기술 중에서 가장 이해하기 힘든 난해한 용어와 개념을 가진 기술로 악명이 높습니다. ... 필연적인 등장배경과 스프링이 그것을 도입한 이유, 그 적용을 통해 얻을 수 있는 장점이 무엇인지에 대한 충분한 이해가 필요합니다. 그래야지만 AOP의 가치를 이해하고 효과적으로 사용할 방법을 찾을 수 있습니다. (p.401) 이번 6장은 분량이 많아 1, 2로 나누어 포스팅하겠습니다. 6장은 기존의 어떤 문제로 인해 AOP가 등장하게 되었는지, 어떤 방식으로 AOP가 동작하는지 그리고 AOP에 관련된 용어들에 대해 학습합니다. 읽기 모임에서 토비 님께서 직접 AOP가 가장 재미있고 중요하다고 생각한다고 말씀하셨는데.. 2023. 1. 9.
1-5장. 서비스 추상화 5장은 서비스 추상화로 기존의 초난감 DAO에서 기능을 추가하고 리팩토링 과정을 거쳐 더 나은 구조를 설계하는 과정을 소개합니다. 5장에서는 초난감 DAO에서 사용자의 레벨 관리 기능을 가지고 기능 추가 및 리팩토링 과정을 학습합니다. public class User { private String id; private String name; private String password; private static final int BASIC = 1; private static final int SILVER = 2; private static final int GOLD = 3; private int level; /* 사용자 레벨 관리 기능 추가로 level 필드를 추가했다. level 필드는 단순히 int .. 2023. 1. 8.
1-4장. 예외 자바 개발자가 가장 신경 쓰기 귀찮아하는 것 중의 하나가 바로 예외처리입니다. 정상적인 결과와 흐름을 보여주는 코드를 만들기도 버거운데 예외상황까지 처리해야 한다는 사실이 부담스러울 수도 있습니다. 그래서 예외와 관련된 코드는 자주 엉망이 되거나 무성의하게 만들어지기 쉽습니다. 때론 잘못된 예외처리 코드 때문에 찾기 힘든 버그를 낳을 수도 있고, 생각지 않았던 예외상황이 발생했을 때 상상 이상으로 난처해질 수도 있습니다. (p.279) 토비님은 코드를 확인할 때 예외 처리가 제대로 되어 있지 않으면 점수를 깎는다고 합니다. 추가로 학습 테스트나 예제를 작성하는 경우에도 예외 처리를 대충 해서는 안된다고 강조합니다. 예외 처리를 할 때 하지 말아야 할 방법으로는 크게 3가지가 있습니다. 예외를 잡고 아무것.. 2023. 1. 8.
1-3장. 템플릿 템플릿이란 이렇게 바뀌는 성질이 다른 코드 중에서 변경이 거의 일어나지 않으며 일정한 패턴으로 유지되는 특성을 가진 부분을 자유롭게 변경하는 성질을 가진 부분으로부터 독립시켜서 효과적으로 활용할 수 있도록 하는 방법이다. (p209) 3장에서는 초난감 DAO에 "예외 처리"를 추가하면서 템플릿의 필요성에 대해 설명합니다. 초난감 DAO에 예외 처리를 하기 위해서 try-catch-finally 구문을 사용합니다. Connection c = null; PreparedStatement ps = null; ResultSet rs = null; User user = null; try { c = connectionMaker.makeConnection(); ps = c.prepareStatement( "select.. 2023. 1. 7.
1-2장. 테스트 애플리케이션은 계속 변하고 복잡해져 갑니다. 그 변화에 대응하는 첫 번째 전략이 확장과 변화를 고려한 객체지향적 설계와 그것을 효과적으로 담아낼 수 있는 IoC/DI 같은 기술이라면, 두 번째 전략은 만들어진 코드를 확신할 수 있게 해 주고, 변화에 유연하게 대처할 수 있는 자신감을 주는 테스트 기술입니다. (p145) 2장에서 테스트를 설명하면서 토비님은 "스프링으로 개발을 하면서 테스트를 만들지 않는다면 이는 스프링이 지닌 가치의 절반을 포기하는 셈"이라고 하실 정도로 테스트의 중요성을 강조하고 있습니다. 2장은 전반적으로 테스트의 중요성, 그리고 테스트를 작성해야 하는 이유에 대해 친절히 설명하고 있습니다. public static void main(String[] args) throws SQLEx.. 2022. 9. 19.
1-1장. 오브젝트와 의존관계 저는 개인적으로 1장에서 가장 흥미로웠던 부분은 1.1 ~ 1.4까지 이어지는 초난감 DAO의 리팩터링 과정이라고 생각합니다. 예전에 읽었을 때는 못 느꼈지만 이번에 읽어보니 토비 님께서 DI(Dependency Injection)를 설명하기 전에 DI가 왜 필요한지 직접 코드로 보여주셔서 DI라는 개념을 더 쉽게 이해할 수 있었습니다. 관심사의 분리 : 중복 코드 메서드 추출 DB Connection 코드 독립 : 상속을 통한 확장 (is-a) DAO의 확장 : 포함 관계를 통한 확장 (has-a) 인터페이스 도입 관계 설정 책임의 분리 - 인터페이스 구현체 주입을 외부로 분리 관심사의 분리 관심이 같은 것 끼리는 모으고, 관심이 다른 것은 따로 떨어져 있게 하는 것입니다. 상속을 통한 확장 (is-a.. 2022. 9. 5.
토비의 스프링 3.1 시작하기 참여 계기 & 다짐 디스코드에서 토비의 스프링 3.1 저자이신 이일민(이하 토비)님께서 주관하시는 '토비의 스프링 3.1 읽기 모임'이 생긴 걸 알게 되었는데, 좋은 경험과 유익한 시간이 될 것 같아 읽기 모임에 참여하게 되었습니다. 이전에도 읽어본 적이 있기는 하지만 이번에 읽었을 때는 또 어떤 느낌을 받을지, 어떤 것들을 느낄지 기대가 되며 다시 토비의 스프링 3.1을 펼쳤습니다. 하지만 이번에는 다른 분들과 생각을 공유하는 것이기 때문에 이전과의 차이도 둘 겸, 각 챕터별로 읽은 후 블로그에 제 생각과 느낀 점들을 정리하려고 합니다. 또 이번에는 책에 나와 있는 예제들을 실제 코드로 작성해 봅니다. github 주소: https://github.com/kiekk/tobyspringin5 들어가며 토.. 2022. 9. 4.