Skip to content

Instantly share code, notes, and snippets.

@arawn
Created November 12, 2012 02:01
Show Gist options
  • Save arawn/4057114 to your computer and use it in GitHub Desktop.
Save arawn/4057114 to your computer and use it in GitHub Desktop.
토비의 스프링 3.1 읽기모임

모임정보

모임내용 / 1장 오브젝트와 의존관계 - 53~87p

관심사의 분리

질문 : 코드를 작성하면서 관심사의 분리하는 기준이 어떻게 되나요?

답변 : ???

팩토리 메소드 패턴

질문 : 자바에서는 종종 오브젝트를 생성하는 기능을 가진 메소드를 일반적으로 팩토리 메소드라고 부른다. 이때 말하는 팩토리 메소드와 팩토리 메소드 패턴의 팩토리 메소드는 의미가 어떻게 다른가?

답변 : ???

인터페이스

질문 : 상관이 인터페이스를 안써요. 책에 나오는 인터페이스의 장점으로는 상관에게 이빨도 안 들어가요. 상관을 어떻게 설득할 수 있을까요?

답변 : ???

모임정보

인상 / 중요 / 공감 / 느낌

> IoC 대해 다시 한번 생각해보게 되었다.

  • IoC가 스프링에서 나온 개념이라고 생각했는데, 읽어본 후 객체지향에서 나온 개념으로 이해가 되었다.
  • IoC는 스프링을 배우는 첫번째 진입장벽인것 같다.
    • 책-스프링3 레시피 도움이 되었다. (스프링에 깊게 들어가는데…) / 반대 +2
    • 책-웹 개발자를 위한 스프링 2.5, 3.0 도움이 되었다.
    • 서블릿을 알면 도움이 될것 같다.
  • 스프링이 쉽게 IoC를 사용하게 해준다.
  • 스프링을 벗어나면 아무것도 하지 못하는 개발자들이 있다.

> 프레임워크와 라이브러리의 차이점을 설명하는 글에서 끄덕끄덕...

> 스프링은 프레임워크를 넘어 플랫폼이라고 불러도 되지 않을까?

  • SpringSource에서 tool, server 등 다양한 부분을 제공하니까...
  • 플랫폼 보다는 솔루션이 어울린다.
  • SpringSource 진영외에 JBoss 진영이 있다.
    • 더 오래되고 다양한 제품들을 가지고 있다.
    • 기업의 지원을 받아서 성장해서 인지 기업을 바라보는 제품이 많다.
    • 제품들을 널어놓고 멀리서 바라보면 클라우드 플랫폼을 그리고 있는것 같다.

> 쓰레드 세이프(thread-safe)를 꼭 알아두자. (과거의 아픈 추억이 새록새록...)

> 의존관계 주입, 의존성 주입, 의존 오브젝트 주입? (p.112)

> 의존관계 검색 / 의존관계 주입에 대한 쓰임새에 대해 미리 알아놔야겠다.

궁금

> 싱글톤을 보장하지 못하는 두가지 경우를 책에서 알려주고 있지만 구체적으로 어떻게 보장이 되지 않는지가 궁금하다. (p.108)

> 라이브러리(프레임워크) jar와 동일 패키지 구조에 동일 클래스명를 만들어두면 클래스 바꿔치기가 가능하더데... 이게 어떻게 가능하냐?

자바의 클래스로더는 계층구조를 가지고 있다. WAS가 클래스로더를 어떻게 구성하는지 파악하면 답을 얻을 수 있을거다.

> 핫스와핑은 기술적으로 완벽하게 만들 수 없다는 소문(?)이 있던데... 혹시 관련해서 아는 사람?

??? (누군가 알면 가르쳐주세요!)

> 스프링으로 사용하는 애플리케이션에서 prototype을 사용하는 경우가 있나요?

스프링프레임워크와 DDD에 보면 나옵니다.

기타

> 이용혁 : 스프링이 싱글톤을 어떻게 만들어서 관리하는지 궁금하다.

  • 스프링 소스를 열어서 어떻게 관리되고 동작하는지 파악 후 공유하겠다.

모임정보

인상 / 중요 / 공감 / 느낌

> 포괄적인 테스트

  • 성공적인 테스트만 작성하던 부끄러운 경험들
  • TDD를 쓰던 안쓰던, 테스트는 꼭 작성해야한다
  • 테스트 코드도 잘 정리가 되어야 한다. 잘못된 테스트 코드는 향후 오해를 불러일으킨다

> 테스트 코드를 통해 다듬어지는 구현 코드

  • 테스트 코드를 리팩토링하면서 구현 코드가 훨씬 더 깨끗해졌다
  • 신입 개발자들에게 TDD를 지속적으로 할 수 있도록 유도하자

> 학습 테스트는 정말 유용

> 테스트가 유익하게 만들어지는 프로젝트가 되려면 개발자들의 역량이 중요

> 도메인 / 서비스 레벨은 타이트하게 테스트를 유지하면 향후 유지보수가 편해진다

궁금

기타

> 만들어보고 좋든 안좋든 발표하고, 공유하고, 발전시켜나가는 문화를 만들어야 한다

> 타 개발자와 협업시 분쟁 방지 및 기능 확인을 위해 테스트 케이스 작성

> 현실적인 점에서 바라보면...

  • 모든 상황에 대한 테스트 작성은 분명 힘든일이다
  • 복잡한 비즈니스 로직이 있는곳은 테스트를 작성하고, 단순한 로직은 기능 테스트 + QA 팀에게 맡기자
  • 아키텍처, 공통 모듈 개발자라면 확실한 테스트가 필요하다
  • 개발자가 비즈니스 룰을 몰라서 발생하는 버그가 많은편이다. 그런 버그는 QA가 더 잘 찾아낸다.

> JUnit / assertThat는 읽기 편한 코드를 만들어준다

모임정보

  • 일시 : 2012-11-08 / 19:30 ~ 21:30

  • 장소 : CNN the Biz 종로점

  • 참가자 : 박용권, 이용혁, 서일현, 정이현, 강희석, 박재기, 송인경, 윤정부, 장원호

  • 모임내용 :

    • 3장 템플릿: 실습이 필수로 들어가야하기 때문에 3장은 가볍게 짚고 넘어갑니다.
    • 4장 예외: 책을 읽어보시면서 인상 / 중요 / 공감 / 느낌 / 궁금 / 기타에 해당하는 것을 뽑아오셔서 이야기를 나누시면 됩니다.

인상 / 중요 / 공감 / 느낌

> 디자인 패턴

  • 업무에서는 자주 안하다보니… 매번 까먹고 다시 보고..
  • 지속적인 리팩토링(시스템 고도화…)이 없으면 패턴 이야기를 꺼낼 여유가 없다

> 초난감 예외처리 코드

  • 뜨끔!
  • e.printStackTrace() 불러온 참사 : disk full -> server down

> DBMS 벤더사에서 제공하는 JDBC Driver가 내뱉는 SQLException는 정말 불친절하다

> DataAccessException가 없던 시절에는 직접 Mapping 전략을 만들어서 사용했다

> CheckedException

  • 개발자들이 방심하지 않게 경계심을 만들어준다
  • 덕분에 try/catch의 향연으로 개발자를 괴롭게한다
  • 복구가 불가능한 예외는 RuntimeException을 던져줬으면 좋겠다.
    • FileNotFoundException : 파일이 없는데 어떻하라고!? 사용자에게 보여줄건 오류 메시지 뿐...

> try-catch/final

  • JDK 7에 추가된 try-catch 문법은 편하다
  • scala의 try-catch는 더 편하다 ( 신세계!? )

궁금

기타

모임정보

  • 일시 : 2012-11-15 / 19:30 ~ 21:30

  • 장소 : CNN the Biz 종로점

  • 참가자 : 박용권, 이용혁, 서일현, 정이현, 강희석, 박재기, 송인경, 윤정부, 장원호

  • 모임내용 :

    • 5장 서비스 추상화: 책을 읽어보시면서 인상 / 중요 / 공감 / 느낌 / 궁금 / 기타에 해당하는 것을 뽑아오셔서 이야기를 나누시면 됩니다.

인상 / 중요 / 공감 / 느낌

> enum

  • 이렇게 우아하게 사용할 수 있다니 감명 받았다!
  • 입&출력에 변환을 위한 코드가 시스템에 부하를 주지 않을까?
  • 리플렉션 API를 쓰는것보다는 부담이 덜 될것 같은데…
  • 일순간 대량의 트래픽이 몰릴때… 그 때 그런 부분이 힘겨워 지지 않을까?

> 세심한 예외 처리가 유지보수에 미치는 영향이 너무 좋다

> 과거 트랜잭션 처리가 못 미더웠던 시절에는 프로시져를 많이 사용했다

> readOnly 가 실제 데이터베이스에 영향을 끼치는가?

> TransactionSynchronizationManager 내부에서 ThreadLocal을 사용해서 Connection을 동기화 처리

> 단일 책임 원칙(Single Responsibility Principal)

  • 하나의 모듈은 한 가지 책임을 가짐
  • 하나의 모듈이 바뀌는 이유는 한 가지
  • 수정 대상이 명확함
  • 의존관계가 복잡 할 수록 다루기가 어렵다. 실수도 많고.. 버그도... 그래서 테스트가 중요!

> 379p DI라는 단어가 19개나 나오다니… 정말 중요하다고 생각된다! (응?)

> Mock 다루기가 어렵지만, 정말 도움이 된다

궁금

기타

> 5장에서 배울 수 있는 가장 큰게 무엇이라고 생각되냐?

  • 정리 : 첫 문장!
  • 제목 : 서비스 추상화!
  • 379p : Spring을 통해서 좋은 코드를 얻을 수 있을거다
  • 많이 어렵다 ( 토비님의 코드의 방향을 따라가기가 어렵다. 아직은 내 수준이 부족한거 같다 )
  • 좋은 방향으로 유도하는 그런점이 참 좋다
  • SQL 런타임 오류… 그냥 눈에 띤다
  • static final 상수선언 그냥 눈에 띈다
  • 스프링이 복잡함을 다루는 하나의 축

모임정보

  • 일시 : 2012-11-22 / 19:30 ~ 21:30

  • 장소 : CNN the Biz 종로점

  • 참가자 : 이용혁, 서일현, 정이현, 강희석, 박재기, 송인경, 윤정부

  • 모임내용 :

    • 6장 AOP: 책을 읽어보시면서 인상 / 중요 / 공감 / 느낌 / 궁금 / 기타에 해당하는 것을 뽑아오셔서 이야기를 나누시면 됩니다.

인상 / 중요 / 공감 / 느낌

> 문제를 해결하기 위한 핵심 관심 사항(core concern, 핵심 로직)과 전체에 적용되는 공통 관심 사항(cross-cutting concern, 공통 기능)을 기준으로 프로그래밍함으로써 공통 모듈을 여러 코드에 적용할 수 있다

> 고립된 단위 테스트

> 다이나믹 프록시를 깊게 이해하려면 Reflaction API에 대해 공부해봐야한다

> Spring APO는 Proxy 기반이다

궁금

> 트랜잭션외에 활용용도에 대해서 찾아보자

기타

모임정보

  • 일시 : 2012-12-06 / 19:30 ~ 21:30

  • 장소 : CNN the Biz 종로점

  • 참가자 : 박용권, 이용혁, 강희석, 박재기, 송인경, 서일현, 정이현, 윤정부

  • 모임내용 :

    • 7장 스프링 핵심 기술의 응용: 책을 읽어보시면서 인상 / 중요 / 공감 / 느낌 / 궁금 / 기타에 해당하는 것을 뽑아오셔서 이야기를 나누시면 됩니다.

인상 / 중요 / 공감 / 느낌

> SqlService는 마치 스프링의 내부 코드를 보는듯한 느낌

  • 객체지향의 원칙들을 실제 코드로 보는거 같다
  • 점진적인 변화, 진화를 통한 개발 방법을 보았다

> Spring Java Configuration 을 사용하면 Resource 에 대해 잘 알아두기

  • ClassPathResource
  • FileSystemResource
  • ResourceLoader

> 내장 DB는 테스트시에도 유용하다

궁금

기타

모임정보

  • 일시 : 2012-12-13 / 19:30 ~ 21:30

  • 장소 : CNN the Biz 종로점

  • 참가자 : 이용혁, 박용권, 서일현, 송인경, 장원호, 최용은, 강희석

  • 모임내용 :

    • 8장 스프링이란 무엇인가? / 9장 스프링 프로젝트 시작하기: 책을 읽어보시면서 인상 / 중요 / 공감 / 느낌 / 궁금 / 기타에 해당하는 것을 뽑아오셔서 이야기를 나누시면 됩니다.

인상 / 중요 / 공감 / 느낌

> 모든 스프링의 기술과 전략은 객체지향이라는 자바 언어가 가진 강력한 도구를 극대화해서 사용할 수 있도록 돕는 것

> 스프링은 단지 거들 뿐 (왼손을 거들뿐이 생각남)

> POJO가 중요한데... 현장에서 스프링의 기술(사용법)을 중시하는 모습이 안타깝다

> IoC/DI, AOP와 PSA(Portable Service Abstraction)는 애플리케이션을 POJO로 개발할 수 있게 해주는 가능기술(enabling technology)

> "평범한 자바 오브젝트를 사용합니다" 보다 "POJO 방식의 기술을 사용합니다."가 더 세련되고 첨단기술을 쓰는 것 처럼 느껴진다

> AspectJ -> 자바 언어의 한계를 넘어서 언어를 확장

궁금

> EJB의 분산처리가 스프링에서도 가능하냐?

  • Spring Remote로 가능
  • EJB 시절에는 서버가 성능이 약해서 분산처리를 했지만, 요즘은 사실 그다지 의미가...?

기타

> 개발자라면 문제해결 능력을 갖추어야 한다

  • 알고리즘, 자료 구조 등은 꼭 공부해두자
  • 디자인 패턴의 사용법을 익히지 말고, 왜 이렇게 작성하는가에 대한 근본을 고민하자

> @Async 너무 좋아! 사랑해요! (응?)

> 스프링은 개발자에게 축복이자 저주(?)

  • 복잡한걸 숨겨서 쉽게 사용하도록 했다
  • 누구나 쉽게 개발이 가능하지만, Spring을 벗어나면 바보가 되기 쉽상?
  • 그러니 기본을 꼭 공부해야한다 / 취업을 목적으로 마냥 프레임워크 사용법만 배우면 안됨

> 도메인 주도 설계에 대해 처음 보았다 > 어렵다

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment