먹고 사는 이야기
-
[toby의스프링] 11장 - 데이터 액세스 기술
예전에.. 적어도 "웹프로그램" 이란 것은 DB 기술에 의존하는 부산물 같은 것이라고 생각했다. 실제로 중요한 것은 DB 기술이고, 웹프로그램에서 제어하는 것은 프레젠테이션 수준의 것이라고 생각했던 것이다. 사실 90년대 말에서 2000년 대 초반까지 주류를 이루던 asp니 jsp니 php니 하는 것들에 대해서는 크게 틀린 말도 아니었을 것이다. 물론 지금도 일반적인 의미에서 "웹프로그램"이 하는 주요 역할은 DB(뿐 아니라 어떤 형태든)의 데이터를 특정한 방법으로 가공해 사용자의 브라우저에 표시해주고, 다시 사용자의 입력을 받아 DB에 저장하는 일련의 상호작용일 것이다. 그렇지만 최근 들어 각광받고 있는 여러 ORM 기술들 덕분에 개발에서 차지하는 DB제어 기술의 비중이 예전의 그것과 사뭇 달라진 것 ..
-
[toby의스프링] 10장 - IoC 컨테이너와 DI
이번 장의 분량은 꽤 많다. 약 140p - 장수로는 70장 - 소설처럼 술술 읽히지 않는 특성 상 글자를 읽는데만 서너시간씩 걸린다. 눈꺼풀은 어찌나 무겁던지.. 처음 이 책을 들었을 때 철저히 숙독해야겠다고 마음 먹었다. 먹고 살기 위한 공부가 아니라 공부를 위한 공부를 해 보겠다고 말이지. 사실 이미 아는 내용이거나, 실무에서 빈번하게 쓰이지 않는 부분은 그냥 대충 읽고 넘어가도 좋을텐데.. 얼마간은 바보 같은 짓인것 같기도 하다. 이 책은 한번 읽고 따라해보는 스타일이 아니라 원리를 이해하고 계속해 두고 보는 바이블 스타일이다. 그래서 단시간에 읽고 이해하기도 어렵지만 정리하기는 더욱 어려운 것 같다. 이번 장에서는 스프링 컨테이너에서 Bean을 DI하는 법에 대해 말하고 있다. 사실 실무에서 늘..
-
[toby의스프링] 8장/9장 - 스프링이란 무엇인가? / 스프링 프로젝트 시작하기
이 책은 1장 부터 8장까지를 1부로, 나머지 9장부터 16장까지를 2부로 하고 있다. 1부에서 자바와 스프링 프레임워크에 대한 이론적인 접근을 하고 있다면, 2부에서는 이를 실전에서 어떻게 활용하는가를 다루고 있다. 그러므로 8장과 9장을 한번에 정리한다는 것은 일견 잘못된 것이 아닌가 생각할 수 있다. 하지만 1부 마지막 장에서 스프링 프레임워크에 대해 정리하고, 이 정리된 내용을 2부 첫 장에서 다시 다루고 있기 때문에 이 두 장을 한번에 정리하는 게 좋을 것이다. 8장. 스프링이란 무엇인가? '스프링이란 무엇인가?' 라는 화두를 놓고 책에서 수십쪽에 걸쳐 다루었는데, 이를 다시 몇개의 문장으로 정리한다는 것은 쉬운 일이 아니다. 하지만 누군가, 스프링이 뭐냐고 물었을 때 『toby의 스프링』8장(..
-
[toby의스프링] 7장 - 스프링 핵심 기술의 응용
이전 장까지 스프링의 핵심 기술인 IoC/DI, 추상화, AOP에 대해 학습했다. 그리고 이번 장에서는 이러한 스프링의 제반 기술들을 응용하는 방법을 소개한다. 누차 강조하지만, 스프링이 만들어진 이유, 스프링을 사용해야 하는 이유는 결국 OOP를 위함이다. 따라서 모듈을 설계할 때는 반드시(라 불러도 좋을 만큼) 인터페이스를 기본으로 하는 DI를 적용하고, 특정 기술이나 특정 상황에 한정해 작성하지 않고 추상화를 적용한다. 특히 이 장에서는 스프링에 기본적으로 내장되어 있는 여러가지 내장 기술들을 적용하는 방법을 제시한다. 1. SQL을 코드에서 분리하기 먼저 SQL 구문을 코드에서 분리해 별도의 파일로 저장해 두는 상황을 가정해 보자. 아주 무식하게 생각하면.. 각 SQL 구문을 탭과 캐리지리턴으로 ..
-
[toby의스프링] 6장 - AOP
이전 장에서 말한 것처럼 Spring에서 가장 중요한 3가지 개념 중 하나인 AOP(Aspect Oriented Programming:애스펙스 지향 프로그래밍) 이다. 계속 말하지만, Spring이 추구하는 가장 중요한 개념은 서비스 추상화이다. (이것은 결국 객체지향 프로그램의 근본적인 목표이기도 하다.) 그리고 AOP 역시 서비스 추상화의 한 축을 담당하고 있는 것이다. 일반적으로 서비스 추상화를 위해서는 IoC/DI 개념을 바탕으로 인터페이스를 사용하면 된다. 하지만 책에서 소개된 바와 같이 트랜잭션과 같은 경우 각 메소드에 강한 응집력을 가지고 있지만, 해당 메소드의 코드 내에 트랜잭션 관련 코드를 매번 삽입해야 하므로 낮은 결합도를 유지할 수 없다. 따라서 일반적인 방식의 서비스 추상화를 이루기..
-
[toby의스프링] 5장 - 서비스 추상화
Spring에서 중요한 3가지 개념이 있는데, 바로 IoC/DI, 서비스 추상화, AOP 이다. 이 중 JAVA라는 객체지향 프로그램과 이를 이용한 Spring 프레임워크가 지향하는 가장 중요한 개념을 꼽으라면 바로 서비스 추상화일 것이다. (심지어 IoC/DI는 이 서비스 추상화를 용이하게 하기 위한 부차적인 개념이라고 봐도 무방하다는 생각이다.) 추상화란 하위 시스템의 공통점을 뽑아내서 분리시키는 것을 말한다. 그렇게 하면 하위 시스템이 어떤 것인지 알지 못해도, 또는 하위 시스템이 바뀌더라도 일관된 방법으로 접근할 수가 있다.(본문 p.371) 다시 말해 서비스 추상화를 적용한다는 것은, 코드들을 비슷한 것들끼리 모으고(강한 응집력) + 서로 다른 코드들이 서로를 구속하지 않는(낮은 결합도) 프로그..
-
[toby의스프링] 4장 - 예외
지난 번에 다니던 회사에서는.. 경우에 따라(라고 쓰고 매번이라 읽어야 한다) 다른 사람들이 만들어 놓은 소스를 수정해야 할 필요가 있었다. 보통 프로젝트를 진행한 사람들은 따로 있고, 이 사람들이 일을 대충 해 놓고 사라지면 그 일을 마무리 하거나 버그를 수정해야 하는 건 모조리 내 몫이었기 때문이다. 대개 이런 경우 - 일이 하기 싫었는지, 아니면 시간이 턱없이 부족했는지, 그것도 아니면 애초에 실력이 부족한건지, 아니면 그 모든 이유가 복합적으로 작용했든지.. 상식적으로 이해하기 어려운 코드들이 작성된 경우가 많았다. 그 중에서도 특히 잦은 것은, 예외처리가 되어 있지 않은 경우였다. 다수의 메소드가 하나의 프로세스를 이룰 때, 어느 하나에서 오류가 나는데도 그냥 프로그램은 흘러간다거나.. 아니면 ..
-
[toby의스프링] 3장 - 템플릿
이번 장에서는 템플릿과 콜백의 개념, 그리고 이것들을 적용해야 할 상황과 이를 구현하는 방식에 대해 설명한다. 템플릿과 콜백은 객체지향 설계의 핵심 원칙인 개방폐쇄원칙과 깊은 관계가 있다. 개방폐쇄원칙 개발된 코드 중 어떤 부분은 변경을 통해 그 기능이 다양해지고 확장하려는 성질이 있고, 어떤 부분은 고정되어 있고 변하지 않으려는 성질이 있을 때 변화의 특성이 다른 부분을 구분해주고, 각각 다른 목적과 다른 이유에 의해 다른 시점에 독립적으로 변경될 수 있는 효율적인 구조를 만들어 주는 원칙을 말한다. (본문 211p) 한마디로 말해서, 반복적으로 재사용 되는 코드를 별도로 묶어서 언제든 재활용할 수 있도록 만들어야 한다는 것이다. 사실 이게 객체지향의 핵심인데, 그 중 템플릿/콜백은 메소드나 클래스와는..