Skip to content

Commit bbf618b

Browse files
committed
표지 이미 추가 및 메인 페이지 수정
1 parent 2c48fc2 commit bbf618b

File tree

3 files changed

+14
-9
lines changed

3 files changed

+14
-9
lines changed

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
| | 서점 |
2+
| :-------------: |:-------------:|
3+
| ![자바 웹 프로그래밍 Next Step](jwp-book.jpg) | [예스24]() |
4+
5+
16
# 1부. 첫 번째 양파 껍질
27
이 책의 여기 저기에 “양파 껍질을 벗긴다.”, “첫 번째, 두 번째 양파 껍질”과 같은 표현이 등장한다. 나는 학생들에게 양파 껍질을 벗기듯이 학습하라고 이야기한다. 이 무슨 뚱딴지 같은 소리인가?
38

chapter13/README.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,32 +41,32 @@ ORM을 적용하면 애플리케이션 개발 초기의 설계와 개발 과정
4141
#### 13.2.1 보안
4242
성능과 보안 중 우선순위를 두고 먼저 고려해야할 부분은 보안이다. 물론 성능도 중요하지만 먼저 고려할 부분은 보안이다. 성능은 서비스를 오픈한 후 사용자가 증가하는 시점에 고려해도 괜찮지만 보안과 관련해서는 문제가 발생하면 서비스의 성패를 좌우하는 경우가 많기 때문이다.
4343

44-
##### 13.2.1.1 비밀번호 암호화
44+
##### 13.2.1.1 비밀번호 암호화
4545
서비스 자체적으로 회원가입 기능이 있는 서비스라면 반드시 비밀번호 암호화에 대해 고려해야 한다. 최근에는 라이브러리를 활용해 생각보다 쉽게 적용할 수 있기 때문에 반드시 적용할 것을 추천한다.
4646

4747
안전하게 비밀번호를 저장하는 방법과 관련해서는 http://d2.naver.com/helloworld/318732 문서의 내용을 읽고 적용해도 기본적인 적용은 가능하다.
4848

4949
자바 진영에서 인증/인가, 비밀번호 암호화를 적용할 때 “스프링 Security” 라이브러리를 많이 사용한다. 위 문서에서 제시하는 비밀번호 암호화와 관련한 라이브러리도 지원하고 있다. 단, 초반 설정 과정이 복잡한데 시간 투자 대비 얻을 수 있는 이점이 많기 때문에 스프링 프레임워크 기반으로 개발하고 있다면 적용해 볼 것을 고려해보면 좋겠다. 스프링 Security를 적용하지 않더라도 스프링 Security의 라이브러리의 암호화 라이브러리만 활용하는 것도 의미있겠다.
5050

51-
##### 13.2.1.2 XSS, CSRF, SQL Injection 대응 코드
51+
##### 13.2.1.2 XSS, CSRF, SQL Injection 대응 코드
5252
이 내용과 관련해서는 6장의 추가 학습 자료를 다루면서도 일부 다루었다. 다양한 웹 공격 방법과 이에 대한 대응 전략에 대해 더 깊이 있게 학습하고 싶다면 **안전한 웹을 위한 코딩 한줄의 정석(Hiroshi Tokumaru 저/박건태,신대호 공역, 로드북/2012년)** 책을 통해 추가 학습할 수 있다.
5353

54-
##### 13.2.1.3 SSL/TLS 적용
54+
##### 13.2.1.3 SSL/TLS 적용
5555
다음 단계로 적용했으면 하는 보안 강화 방안은 SSL(Secure Socket Layer) 적용이다. SSL을 적용하려면 인증서가 필요한데 비용을 지불해야 한다. 비용 부담 때문에 SSL을 적용하는 것이 꺼려진다면 최근에는 [Let’s Encrypt](https://letsencrypt.org/)와 같이 무료로 사용할 수 있는 인증서도 있다.
5656
대칭키, 공개키, 개인키 등 SSL 처리 방식에 대한 기본 개념에 대해 더 깊이 있게 학습하고 싶다면 http://minix.tistory.com/395, http://minix.tistory.com/397 두 편의 웹툰을 통해 학습할 것을 추천한다. 웹툰으로 작성되어 있기 때문에 읽는데 부담감도 적고, 어려운 개념을 쉽게 이해할 수 있다.
5757

5858
#### 13.2.2 성능
59-
##### 13.2.2.1 서버에 로컬 캐시 적용
59+
##### 13.2.2.1 서버에 로컬 캐시 적용
6060
먼저 서버 측 성능을 개선하기 위한 1단계로 캐시를 적용할 것을 추천한다. 대부분의 웹 애플리케이션은 최근에 사용한 데이터가 또 다시 사용되는 경향을 갖고 있다. HTTP가 무상태 프로토콜이기 때문에 웹 애플리케이션에 캐시를 적용함으로써 상당한 성능 향상을 높일 수 있다.
6161

6262
로컬 캐시 라이브러리는 [ehcache](http://www.ehcache.org/)를 사용하고 스프링 프레임워크의 캐시 라이브러리를 적용해 구현한다. “spring @cacheable”로 검색해 관련 문서를 찾아 적용할 수 있다.
6363

64-
##### 13.2.2.2 프론트엔드 성능 개선
64+
##### 13.2.2.2 프론트엔드 성능 개선
6565
서버에서 성능을 개선했다면 다음은 클라이언트와 서버 사이, 클라이언트에서 성능을 개선할 필요가 있다. 예를 들어 대부분의 자바스크립트, CSS, 이미지는 일정 기간 동안 변경되지 않는 것이 일반적이다. 따라서 매 요청마다 정적인 웹 자원을 다시 요청해 다운로드하기 보다 웹 브라우저 캐시를 적용하는 것이 성능 측면에서 상당한 개선 효과를 볼 수 있다. 서버에 요청이 많아지면 많아질 수록 성능에 좋지 않다. 따라서 여러 개의 이미지를 하나로 묶어 서비스하는 CSS 이미지 스프라이트 적용도 고려해 볼 수 있다.
6666

6767
이와 관련한 주제는 **웹 사이트 최적화 기법 : UI 개발자를 위한 필수 지침서(스티브 사우더스 저/박경훈 역, ITC/2008년)** 책에 잘 정리되어 있다. 이 책이 제시하는 내용만 적용하더라도 상당한 성능 개선 효과를 볼 수 있다. 이 책이 제안하는 항목을 체크할 수 있는 [YSlow](http://yslow.org/)라는 도구도 있다. 이 도구를 통해 자신의 웹 애플리케이션이 부족한 부분을 확인하고 개선해 나갈 수 있다.
6868

69-
##### 13.2.2.3 한 대의 서버를 n대의 서버로 확장
69+
##### 13.2.2.3 한 대의 서버를 n대의 서버로 확장
7070
앞에서 살펴본 방법은 서버 한 대의 성능을 최대한 높이기 위해 적용해야할 방법이다. 서버 한 대의 성능을 최대화하더라도 사용자가 많아지면 서버 한 대로 모든 사용자의 요청을 처리하기 힘들다. 이 시점에는 여러 대의 서버를 통해 서비스 함으로써 성능을 개선할 수 있다. 여러 대의 서버로 하나의 서비스를 하는 방법은 로드 밸런서를 활용해 가능하다.
7171

7272
한 대의 서버로 서비스를 하다 2대 이상의 서버로 늘어나는 순간 고려해야할 부분이 많아진다. 이 주제와 관련해서는 앞에서 소개한 **IT 인프라 구조 : 그림으로 공부하는(야마자키 야스시,미나와 요시코,아제카츠 요헤이,사토 타카히코 공저/오다 케이지 감수/김완섭 역, 제이펍/2015년)** 책을 통해 기본적인 서버 아키텍처 설계를 학습한 후 사용자 규모와 우선순위에 따라 하나씩 적용해 나갈 수 있다.
@@ -84,7 +84,7 @@ ORM을 적용하면 애플리케이션 개발 초기의 설계와 개발 과정
8484

8585
동적인 웹 페이지 개발을 완료하는 단계가 끝나면 다음 단계는 좀 더 복잡한 웹 페이지를 개발하는 경험을 해본다. 이와 같은 복잡한 웹 페이지를 개발할 때 jQuery만을 활용해보거나, react.js, angular.js 와 같은 자바스크립트 프레임임워크를 활용하는 경험을 해볼 것을 추천한다.
8686

87-
### 13.4 설계, 테스트, 리팩토링
87+
### 13.4 설계, 테스트, 리팩토링
8888
개발자가 갖추어야할 중요한 역량 중 하나는 사람이 읽을 수 있는 깔끔한 코드를 구현하는 것이다. 가장 중요하지만 쉽게 쌓을 수 없는 역량 중의 하나이기도 하다. 어쩌면 개발자로서의 생을 마감하는 순간까지 끊임없이 노력해야 하는 부분이 내가 만족할 수 있는 수준의 코드를 구현하는 것일 수도 있다.
8989

9090
깔끔한 코드를 구현하는 가장 빠른 지름길은 지속적인 리팩토링을 통해 설계를 개선하는 연습을 하는 것이다. 코드를 많이 구현하는 것 보다는 의도적 수련 을 통해 코드를 개선해 나갈 때 자신이 만족하는 깔끔한 코드를 구현하는 단계에 도달할 수 있다.
@@ -102,7 +102,7 @@ ORM을 적용하면 애플리케이션 개발 초기의 설계와 개발 과정
102102

103103
자기가 구현한 코드의 문제점을 파악하고 리팩토링하는 과정은 생각보다 쉽지 않다. 따라서 소스 코드에 대한 리뷰를 주고 받고, 토론할 수 있는 동료 개발자를 찾을 것을 추천한다. 나 또한 위 책을 읽을 때 혼자 읽기 보다는 스터디를 통해 읽으면서 토론하는 과정을 거쳤다. 혼자 코드를 분석하고, 이해하는 것에 비해 몇 배로 더 많은 것을 배우고 느낄 수 있다. 회사 내에서 스터디할 동료를 찾기 힘들다면 외부 커뮤니티에 참여하면 된다. 혼자 학습하지 말고 세상 밖으로 나와 더 많은 개발자들을 만나볼 것을 추천한다.
104104

105-
### 13.5 빌드, 배포 자동화 및 지속적 통합
105+
### 13.5 빌드, 배포 자동화 및 지속적 통합
106106
이 책에서도 배포 자동화와 관련해 일부 다루기는 했지만 배포 자동화를 위한 최소한의 내용만 다뤘다. 애플리케이션 개발을 해보면 애플리케이션 로직을 구현하는 시간보다 환경 세팅, 배포와 같은 작업이 계속해서 발생한다. 시간이 지나면서 이와 같은 부수적인 작업에 더 많은 시간을 투자하고 있는 자신의 모습을 볼 수도 있다.
107107

108108
이와 같이 단순, 반복적으로 발생하는 업무에 최소한의 시간을 투자하고 더 많은 시간을 핵심 로직을 구현하는데 투자하려면 꾸준히 자동화에 시간을 투자해야 한다. 이 작업을 담당하는 전담 개발자가 있으면 좋겠지만 대부분의 조직은 이 작업만을 전담하는 개발자가 없고 백엔드 개발자가 겸하는 것이 일반적이다. 또한 이에 대한 학습이 자신이 단순, 반복적으로 발생하는 업무를 자동화할 수도 있기 때문에 반드시 회사, 프로젝트만을 위한 투자가 아니다. 자신을 위해서라도 충분히 투자할만한 가치가 있다.
@@ -118,7 +118,7 @@ ORM을 적용하면 애플리케이션 개발 초기의 설계와 개발 과정
118118

119119
지속적 배포를 하려면 정말 많은 노력을 기울여야하고, 개발자간에 개발 문화가 정착될 때 가능하다. 현실에서 달성하기 힘들 수도 있다. 하지만 이상적인 꿈을 꾸면서 현재 상태에서 실행가능한 부분을 조금씩 개선해 나간다면 언젠가 이상적인 환경을 구축할 수 있을 것이다.
120120

121-
### 13.6 개발 문화 및 프로세스 학습
121+
### 13.6 개발 문화 및 프로세스 학습
122122
기술적인 내용을 다루고 있는 이 책에 개발 문화, 개발 프로세스에 대한 주제를 넣을까 한참을 망설이다 넣기로 결정했다. 나는 개발자의 길을 걷기 시작하면서부터 불합리한 대한민국의 개발 환경을 접하면서 개발 문화와 개발 프로세스에 관심이 많았다. 불합리한 환경을 개선하기 위해 새로운 시도를 하고 실패와 성공을 맛보는 경험을 했다. 조금씩 조금씩 나아지고는 있지만 아직도 많이 부족하다. 개발자들이 이와 관련해 좀 더 많은 관심을 가지고 변화를 시도했으면 하는 바람으로 추가했다.
123123

124124
나는 다른 어떤 기술적인 부분보다 개발 문화와 프로세스에 대해 관심을 가지고 역량을 쌓고 경험을 하는 것이 중요하다고 생각한다. 아무리 많은 기술적인 역량을 가지고 있더라도 같이 일하는 주변 개발자 혹은 내 자신이 행복하지 않다면 그 얼마나 불행한 일인가? 직장과 가정에 조화를 이루면서 일을 할 수 없다면 얼마나 불행한 일인가? 개발자로서 지속적인 성장을 할 수 없고 보람을 느끼지 못한다면 얼마나 불행한 일인가? 이 모든 것이 개발 문화와 개발 프로세스를 통해 결정된다.

jwp-book.jpg

22.9 KB
Loading

0 commit comments

Comments
 (0)