- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- JWT
- 팀네이버 공채
- spring
- container
- 책
- 캐싱전략
- chrome80
- docker
- Project
- 후기
- SPRING JWT
- EntityTransaction
- 리뷰
- JPA
- redis
- 프로젝트
- 만들면서 배우는 클린 아키텍처
- network
- Java
- infra
- LazyInitialization
- 브랜치전략
- Kotlin
- jenkins
- websocket
- Spring Security
- 팀네이버
- 스프링
- SpringBoot
- 젠킨스
PPAK
[책 리뷰] 자바 웹 프로그래밍 Next Step (Feat. 책 스터디) 본문
최근 한 달 동안 책 스터디를 운영하면서 친구들과 책을 읽고 한 주에 한번 모여 서로 정리한 내용을 공유하고 질문하는 시간을 가졌다.
이번 한달 동안 읽은 책은 자바 웹 프로그래밍 Next Step 과 리팩터링 2판 인데 이번 포스팅에서는 전자에 대해서 이야기해보려고 한다.
책읽기의 효용은 저마다 다를 수 있지만 나에게 책읽기는 생각정리에 특히 도움이 많이 되는 것 같다.
근 6달 동안 쉼없이 웹 프로젝트를 진행하다 보니 그 과정에서 겪은 경험을 되돌아보고, 조금은 산재된 지식들을 정리할 필요성이 느껴졌고, 최근 들어 내가 작성하고 있는 코드와 시스템 설계가 과연 효과적인가(혹은 올바른가) 에 대한 고민을 하면서 생긴 궁금증을 해소하기 위해 책을 읽어야 겠다는 생각을 했다.
그러던 도중 운이 좋게도 자바 웹 프로그래밍 Next Step 이라는 책을 선물받았고, 책의 내용 중 자바 진영의 웹 프로그래밍 기술의 발전 과정부터 MVC 프레임워크에 대한 근본적인 기술을 직접 코드로 작성해보고 리팩토링 해나가는 방식이 마음에 들어 스터디에서 읽을 책으로 선정 되었다.
이제 마지막 장을 남겨두고 책을 읽은 소감을 한 마디로 정리하자면, 자바 웹 프로그래밍(서블릿이던 스프링이던) 을 하면서 생긴 그래서 어떻게? 라는 질문에 대한 속시원한 답변을 들은 듯한 느낌이다.
'어떻게 동작하는가' 라는 것은 모듈이던 프레임워크던 사용하는 사람 입장에서 처음부터 세세하게 알 필요 없다는 것에는 어느 정도 동의한다. 나도 여전히 기초적인 원리만을(심지어 책을 읽기 전에는 이보다 더 적게) 이해하고 있지만 개발을 하는데 큰 지장은 없었던 것 같다. 때문에 솔직하게 이 책을 읽기 전의 나는 굉장히 오만하게도 서블릿이나 MVC 프레임워크에 대해 어느정도 이해하고 있다고 생각해서 다른 책을 읽는 것이 낫지 않을까 라는 생각을 했다. 그도 그럴 것이 성장에 집착한 조급한 마음이 스스로 멈춰 서는 것은 아닌가에 대한 두려움으로 변해 더 나에게 맞는 것, 이 상황에 가장 효과적인 것을 찾고만 있었기 때문이다.
정말 큰 오산이였다. 책의 챕터를 넘어갈 때마다 내가 생각하지 못했던 질문을 받고, 이해하고 있다고 생각했던 영역을 말로 설명하지(코드로 작성하지) 못할 때면 책을 읽기 전의 내 모습이 조금 부끄럽기도 했다.
다음으로 아래의 질문에 대한 답이 궁금하신 분들께 이 책을 적극적으로 추천하며, 책에 대한 간단한 이야기를 해보려고 한다. (물론 책을 통해 더 많은 것들을 알 수 있다)
1. 나는 웹 환경에서 클라이언트와 서버 간 사용되는 대표적인 통신 프로토콜을 알고, 자바(서버) 내에서 어떻게 구현할 수 있는지 알고 있다.
2. 서블릿(더 나아가 서블릿 컨테이너)은 왜 필요한지(필요했는지) 알고있다.
3. DispatcherServlet 이 필요한 이유를 알고 있다.
4. Bean 과 DI 의 필요성을 알고, 리플렉션을 사용해 구현할 수 있다.
외에도 MVC 아키텍처의 동작 과정, 다양한 리팩토링 방법 등등 웹 프로그래밍의 핵심이 되는 내용을 담고 있다.
짧은 정리
본서에서 매 챕터 별 진행 과정은 비슷하다. 먼저 웹 프로그래밍 기반 기술을 소개하고, 시스템 요구사항 보고 실제로 해당 기술을 구현해본다. 다음으로 모범 코드와 비교해 직접 작성한 코드를 수정한다.
이 포스팅에서 책에 나온 모든 내용을 나열할 수 없지만 책을 읽으면서 몇 가지 느낀점을 적어보려고 한다.
가장 첫 번째로 놀랐던 것은 복잡하게만 느껴졌던 웹 핵심 기술을 외부 모듈(혹은 프레임워크) 의 도움 없이 순수 자바 코드만으로 손쉽게(?) 구현할 수 있다는 것이다. 물론 최신의 기술과 비교하면 그 기능이 부족하다고 볼 수 있지만 굉장히 합리적인(혹은 명확한) 요구사항을 바탕으로 개발하니 핵심 기술들을 이해하는데에 큰 도움이 됐다고 느꼈다.
두 번째는 책에서 제시하는 요구사항에 따라 시스템을 구축해보니 자연스레 관련 기술이 개발된 이유에 대해 납득이 됐다. 책의 내용을 조금 언급하자면
1. 최초 클라이언트 요청(HTTP request) 데이터를 파싱해서 사용하다 보니 해당 역할을 수행하는 클래스를 분리할 필요가 있었다.
2. 새로운 시스템을 개발할 때마다 요청과 응답을 관리하고, 비즈니스 로직을 작성하기 위해 발생하는 중복 코드를 제거하기(+ 요청 처리 방식 통합하기) 위해 서블릿과 같은 인터페이스가 필요했다.
3. 개발자는 비즈니스 로직 작성(대표적으로 서블릿 상속클래스)에만 집중하고 어느 시스템에서나 같은 사용자 요청과 응답 처리에 필요한 작업을 시스템 스스로 수행하는 서블릿 컨테이너가 필요했다.
4. 유연한 개발 환경을 구축하기 위해서 관심사 별로 레이어를 나누고, DI 를 적용해 클래스를 작성했다.
5. 상태 값을 가지지 않는 객체를 생성하는 과정에서 전통적인 싱글톤 패턴 구현 방식의 한계를 알고 객체 Mapping 방식으로 개선, 그리고 이 과정을 시스템에서는 Bean 으로 생성해 관리하는 과정(리플렉션) 이 필요하다.
세 번째는 책에서 제시하는 리팩토링 방식이 굉장히 유용하다는 것이다.
나는 이 책과 이 책의 저자인 박재성님께서 추천하신 리팩터링 2판을 함께 읽고 있는데, 추천하신 책인 만큼 리팩토링 두 책에서 제시하는 리팩토링 방식과 결이 비슷해 리팩토링만을 위한 책이 아님에도 코드를 작성하는 방식을 익히는데 큰 도움이 된 것 같다.
한 가지 리팩터링 책보다 좋았던 점은 웹 프로그래밍 요구사항에 맞춰 개발하는 과정에서 자연스럽게 리팩토링을 적용하기 때문에 리팩토링 효용성을 납득하기에 효과적이었다는 것이다.
아래와 같은 리팩토링 방법의 적용에 대해 궁금하다면 이 책을 읽어보면 좋을 것 같다. (몇개 이름은 내 마음대로 지었다. . .)
1. 메소드를 클래스로 추출
2. 템플릿 메소드 패턴
3. 함수 내 익명 클래스의 지역 변수 사용
4. 함수 바꿔치기
5. 추상 메소드 인터페이스로 추출하기
6. 예외 바꿔치기
7. 제네릭을 통한 런타임 타입 추론
8. 함수형 인터페이스 (자바 내 일급 함수 생성)
아래 링크는 책을 읽으면서 혼자 정리해본 샘플 코드를 공유한다.
https://ppaksang.notion.site/Next-Step-e797e4f06f72472fb25f4b4260b44884
리팩토링 (Next Step)
메소드를 클래스로 추출
ppaksang.notion.site
마무리
글을 작성하다 보니 뭔가 무조건 읽어야 한다는 식으로 표현했는데, 아직까지 개발 관련 서적이라곤 얼마 읽지않은 코린이가 느낀 점을 정리한 것이란걸 감안하면 좋을 것 같다.
그럼에도 불구하고 웹 프로그래밍 학습을 위해 무엇을 해야하나 고민하고 있는 분들이나 (나처럼) 웹 프로젝트를 돌아보면서 생각을 정리하고 싶은 분들에게는 이 책을 적극적으로 추천하고 싶다!!
'후기' 카테고리의 다른 글
[책 리뷰] 객체지향의 사실과 오해, 오브젝트 (0) | 2023.09.10 |
---|---|
[책 리뷰] 만들면서 배우는 클린 아키텍처 (2) | 2023.08.16 |
2023 상반기 팀네이버 공채 합격 후기 (feat. 백엔드) (50) | 2023.07.20 |
우아한테크캠프 6기 합격 후기 (26) | 2023.07.10 |
2022년 톺아보기 (4) | 2022.12.24 |