[제목] 스타트 스프링 부트

[부제] 초급 개발자들을 위한 가볍고 넓은 스프링 부트

저자: 구멍가게 코딩단
출판사: 남가람북스
발행일: 2017-07-20
ISBN: 979-11-954845-7-7
가격: 30000
페이지:584 
판형: 182*232*25
바코드: 9 791195 484577 93000

[상세 페이지]

 

[저자 소개]
프로그래밍을 좋아하지만, 남들 앞에 나설 용기가 없는 10년차 이상 개발자, 현업 관리자, 강사들의 비공개 모임. 어린 시절 구멍가게 앞 아저씨들이 인생의 진리를 가볍게 던졌던 것처럼 프로그래밍의 오의(奧義)를 가볍게 던지고 싶은 사람들의 모임.
http://cafe.naver.com/gugucoding을 통해서 독자들과 커뮤니케이션을 하고 있으며, 스프링 외에도 여러 주제에 대한 자료를 제공하며, 저서로는 《코드로 배우는 스프링 웹 프로젝트》가 있음.


[책 소개]
이 책은 Spring Boot와 Spring Data JPA, Thymeleaf를 이용해서 프로젝트를 사용하는 방법에 대해 설명합니다. 이 책의 대상 독자는 Spring 프레임워크를 어느 정도 학습해본 초급 개발자들을 대상으로 현실적인 개발 가이드를 제공하는 것을 목표로 하고 있습니다.

 * JSP와 서블릿 등 Java 관련 웹 개발 경험이 있는 분들
 * Spring Framework를 사용해본 경험이 있는 분들
 * 기타 JDBC 및 SQL 등을 사용해 본 경험이 있는 분들

이 책에서 다루는 내용

 * Spring Boot를 이용한 프로젝트의 생성과 설정들
 * Spring Data JPA를 이용한 JPA 사용해 보기
 * Thymeleaf와 Spring Boot의 연동
 * Spring Security와 Spring Boot를 이용한 보안 처리

 

[출판사 리뷰]
스프링 부트로 인해 기존의 스프링 프레임워크가 얼마나 간편해졌는지  느낌을 가지도록 하는 것이 이 책의 목표입니다. 최소한의 설정과 자동 설정을 이용해서 복잡한 설정 없이 프로젝트의 개발이 가능하게 된 점, Spring Data JPA를 이용해서 ORM을 경험해 보는 데 중점을 둡니다.

스프링 부트는 기존의 스프링 프레임워크를 이용해왔던 사용자들에게 좀 더 빠른 개발이 가능하고, 손쉽게 프로젝트를 구성할 수 있는 다양한 방식을 제공합니다. 때문에 이 책은 스프링 부트라는 이름을 달고 있기는 하지만, 책의 내용은 스프링 부트 자체보다는 Spring Data JPA나 Thymeleaf에 대한 내용이 주를 이루게 될 것입니다. 책의 내용이 이렇게 되는 이유를 굳이 변명하자면 ‘스프링 부트가 자동으로 하는 일이 너무 많아서’라고 해야 할 것 같습니다.

스프링 부트를 사용하다 보면 기존에 스프링으로 개발하던 방식에서 어려웠던 설정이나, 개발 환경 등이 하나의 선물 세트처럼 만들어졌다는 느낌이 듭니다. 스프링 개발에 필요했던 복잡한 설정이나 라이브러리 간의 충돌 등 여러 문제가 해결되어 있기도 하고, 개발 부분에 있어 설정이 자동화된 부분이 많아져서 개발 자체에 집중할 수 있는 환경을 갖추고 있습니다.

이 책에서는 다음과 같은 기술이나 라이브러리들을 이용해서 프로젝트를 생성할 것입니다.
 * 데이터베이스 MySQL 5.7
 * JDK 버전 1.8 이상
 * 스프링 부트 버전 1.5.4/ 2.0.0(M2)

 

[목차]

PART 1 Spring Boot/Spring Data JPA 사용해보기 

1. 프로젝트를 위한 준비
 
1.1   통합 개발 도구 설정 
1.1.1 Eclipse와 스프링 플러그인
1.1.2 Spring Starter Project를 이용한 프로젝트 생성
1.1.3 생성한 프로젝트 실행 
1.2   스프링 프레임워크와 스프링 부트
1.2.1 스프링 부트 내의 빈(Bean) 테스트 하기
1.3   Lombok 라이브러리 소개/설치 
1.3.1 Lombok 라이브러리 설치
1.3.2 Lombok 사용해 보기 
1.4   스프링 부트 프로젝트의 실행과 테스트
1.4.1 Controller의 테스트 진행

2. Spring Data JPA 맛보기

2.1   JPA 소개
2.1.1 엔티티(Entity), 엔티티 매니저(EntityManager)
2.1.2 영속 컨텍스트(Persistence Context)와 엔티티 객체
2.1.3 기존의 JPA 개발과 Spring Data JPA 
2.2   Spring Data JPA를 위한 프로젝트 생성
2.2.1 프로젝트 실행과 DataSource 설정 
2.2.2 엔티티 클래스 설계
2.2.3 JPA 처리를 담당하는 Repository 인터페이스 설계하기 
2.2.4 작성한 엔티티 테스트
 
3. Spring Data JPA를이용한단순게시물의처리

3.1   쿼리 연습을 위한 준비
3.1.1 쿼리 메소드 이용하기
3.1.2 페이징 처리와 정렬 
3.1.3 Page<T> 타입
3.2   @Query를 이용하기
3.2.1 단순 게시물의 처리를 위한 @Query 작성
3.2.2 @Query의 활용
3.2.3 @Query와 Paging 처리/정렬
3.3   Querydsl을 이용한 동적 SQL의 처리
3.3.1 Querydsl을 위한 준비
3.3.2 Predicate 준비
3.3.3 Predicate 생성 및 테스트

PART 2 JPA 연관관계와 Thymeleaf

4. 다양한 연관관계 처리

4.1   연관관계 처리의 순서와 사전 설계
4.1.1 관계형 데이터베이스의 설계와 JPA
4.1.2 작성하려는 예제의 개요 
4.2   회원과 프로필 사진의 관계 - 단방향 처리1 
4.2.1 예제 프로젝트 작성
4.2.2 각각의 엔티티 클래스 설계
4.2.3 연관관계의 설정과 단방향/양방향 
4.2.4 Repository 작성
4.2.5 테스트를 통한 검증
4.2.6 단방향의 문제와 Fetch Join 
4.3   자료실과 첨부 파일의 관계 - 단방향 2
4.3.1 엔티티 클래스 작성
4.3.2 등록과 Cascading 처리
4.3.3 첨부 파일 수정과 @Modifying, @Transactional
4.3.4 첨부 파일 삭제
4.3.5 조인 처리
4.4   게시물과 댓글의 관계 - 양방향
4.4.1 연관관계의 설정
4.4.2 Repository 작성
4.4.3 테스트 코드 
4.4.4 게시물의 페이징 처리와 @Query
4.4.5 게시물 조회와 인덱스

5. Thymeleaf 사용해 보기

5.1   프로젝트 설정 
5.1.1 기타 환경 설정
5.2   Thymeleaf 동작 확인하기
5.2.1 컨트롤러 작성 
5.2.2 템플릿 페이지 작성
5.2.3 Eclipse에 Thymeleaf 플러그인 설치하기
5.3   Thymeleaf 간단한 예제 몇 가지
5.3.1 객체를 화면에 출력하기
5.3.2 리스트를 화면에 출력하기
5.3.3 지역변수의 선언, if ~unless 제어 처리
5.3.4 인라인 스타일로 Thymeleaf 사용하기
5.4   Thymeleaf의 유틸리티 객체
5.4.1 유틸리티 객체
5.5   Thymeleaf 링크 처리
5.6   Thymeleaf의 레이아웃 기능
5.6.1 th:insert를 이용해서 페이지의 헤더와 푸터 처리하기 
5.6.2 Thymeleaf layout dialect를 이용한 레이아웃 재사용하기
 
PART 3 웹 애플리케이션 구성 

6. Spring MVC를 이용한 통합

6.1   프로젝트의 기본 구조 생성하기
6.1.1 레이아웃 분리해 두기
6.1.2 컨트롤러 생성 및 화면 확인하기
6.1.3 엔티티 클래스와 Repository 설계
6.1.4 Querydsl 설정
6.1.5 테스트 코드 작성
6.2   페이징, 검색 처리
6.2.1 Repository 페이징 테스트 
6.2.2 컨트롤러의 페이징 처리
6.2.3 검색 조건의 처리 
6.3   새로운 게시물 등록
6.3.1 게시물의 입력과 처리
6.4   게시물의 조회 
6.4.1 컨트롤러의 처리
6.4.2 조회 페이지에서의 링크 처리
6.5   게시물의 삭제와 수정
6.5.1 게시물 수정/삭제를 위한 페이지
6.5.2 삭제 처리
6.5.3 수정 처리

7. REST 방식의 댓글 처리와 JPA 처리

7.1   프로젝트의 구성과 @RestController 
7.1.1 REST 방식과 @RestController 
7.2   JPA의 설계와 Repository의 설계/테스트
7.2.1 연관관계의 설정
7.2.2 ReplyRepository 추가
7.2.3 WebReplyRepository의 테스트
7.3   ReplyController의 설계
7.3.1 특정 게시물의 댓글 등록 처리
7.3.2 REST 방식 테스트
7.3.3 댓글 등록 후 목록 처리
7.3.4 댓글 삭제
7.3.5 댓글 수정
7.3.6 댓글 목록
7.4   화면에서의 댓글 처리
7.4.1 댓글 목록의 출력
7.4.2 댓글 추가
7.4.3 댓글 삭제 처리
7.4.4 댓글 수정 처리
7.5   게시물 리스트에서의 댓글 개수 처리
7.5.1 게시물과 댓글 수의 문제
7.5.2 @Query의 한계
7.5.3 사용자 정의 쿼리 - 동적으로 JPQL 처리
7.5.4 컨트롤러와 화면 처리

PART 4 스프링 웹 시큐리티 적용하기 

8. Spring Web Security

8.1   예제 프로젝트 생성
8.1.1 시큐리티의 기본 설정 추가하기
8.1.2 샘플 URI 생성
8.2   회원과 권한 설계
8.2.1 도메인 클래스 설계 
8.2.2 Repository 생성
8.2.3 테스트를 통한 데이터 추가/조회 
8.3   단순 시큐리티 적용 
8.3.1 로그인/로그아웃 관련 처리
8.4   다양한 인증 방식 
8.4.1 스프링 시큐리티의 용어에 대한 이해
8.4.2 JDBC를 이용한 인증 처리 
8.4.3 사용자 정의(custom) UserDetailsService 작성하기
8.4.4 MemberRepository와의 연동
8.5   화면에서 로그인한 사용자 정보 사용하기
8.5.1 Thymeleaf에서 스프링 시큐리티 처리하기
8.6   Remember-Me 인증하기
8.6.1 로그인 화면에서 ‘remember-me’ 체크박스 처리
8.6.2 SecurityConfig에서의 설정 
8.6.3 remember-me를 데이터베이스에 보관하기 
8.7   기타 시큐리티 설정
8.7.1 MVC에 어노테이션 처리하기
8.7.2 PasswordEncoder 사용하기
8.7.3 컨트롤러를 이용한 회원가입 처리

9. Spring MVC와 Web Security의 통합

9.1   프로젝트 구성
9.1.1 기존 프로젝트 통합 
9.1.2 시큐리티 설정 
9.2   게시물 작성 부분
9.2.1 게시물 작성 시 사용자 아이디 편집
9.3   게시물 조회
9.3.1 게시물 수정/삭제 버튼의 제어
9.4   게시물의 수정/삭제
9.5   Ajax의 시큐리티 처리
9.5.1 댓글 추가
9.5.2 댓글 수정/삭제
9.6   기타 설정 - 로그인 후 페이지 이동
9.6.1 인터셉터 추가
9.6.2 인터셉터 설정
9.6.3 AuthenticationSuccessHandler 추가

APPENDIX 부록
 
A.  오라클11g이하데이터베이스시퀀스사용하기
A.1 오라클 11g Express Edition/SQL Developer 설치
A.2 JDBC 드라이버 설정 및 JPA 테스트

B.  MyBatis 이용하기

C.  JSP 이용하기

D.  Gradle 사용하기
D.1 Gradle Buildship 이용하기
D.2 STS Gradle 사용하기

E.  MySQL 설치

F.  Intellij 사용하기
F.1 Intellij 설치 
F.2 Maven 스프링 부트 프로젝트 생성하기 
F.2.1 Lombok의 처리와 실행 
F.2.2 프로젝트 자동 종료 문제
F.2.3 Maven 환경에서의 Querydsl 설정 
F.3   Gradle 스프링 부트 프로젝트 생성하기
F.3.1 Gradle 환경에서 Querydsl 설정 

찾아보기

 

 

신고
Posted by 남가람북스 남가람북스

댓글을 달아 주세요

 

[제목]
코드와 그림으로 마스터하는 알고리즘

[부제]
이 정도는 알아야만 Google에서 일할 수 있다!


저자: 이상진
출판사: 남가람북스
발행일: 2016-11-02
ISBN: 979-11-954845-6-0
가격: 28000
페이지: 508
판형: 182*232*22
바코드: 9 791195 484560 93000

[상세 페이지]

 

[저자 소개]
핸디소프트와 삼성 SDS에서 개발자로 근무하였으며 현재는 (주)소만사에서 기업용 보안 소프트웨어를 개발하고 있습니다.
머신 러닝 기반의 검색 및 추천 알고리즘으로 서울대학교에서 박사 학위를 받았고 저서로는 《자료구조 입문》, 《열혈강의 C 언어 정복 리얼 교과서》, 《정보 보안 가이드북》 등이 있습니다.

[책 소개]
이 책은 알고리즘을 통해 여러분의 개발 실력을 향상시키는 최선의 해결책을 제시합니다. 이 책은 기능을 구현하는 방법에 대한 질문에 알고리즘이라는 해답을 제시합니다.

알고리즘이 여러분의 고민에 명쾌한 답이 될 수 있도록 다음 2가지에 집중합니다.

#. 분명한 개념 전달
알고리즘을 완벽히 이해하는 것은 물론 쉽지 않습니다. 알고리즘은 파헤치면 파헤칠수록 깊고 넓은 분야이기 때문입니다. 알고리즘의 이러한 특성으로 많은 분이 알고리즘의 핵심이 아닌 주변부 내용 때문에 알고리즘이 이해하기 어렵다고 이야기합니다.
따라서 불필요한 부분을 모두 제외하고 알고리즘의 가장 중심이 되는 개념만을 정확하게 전달하기 위해 노력했습니다. 또한, 그림으로 다소 어렵게 느껴질 수 있는 개념 설명을 시각화하였으며 설명을 간결화하여 이해도를 높였습니다.

#. 알고리즘의 실제 구현
알고리즘의 개념을 이해했더라도 실제 소스 코드로 구현하지 못한다면 알고리즘을 제대로 이해했다고 보기 어렵습니다. 소스로 구현되지 못한 알고리즘은 실제 동작이 불가능하기 때문입니다.
이 책은 각 알고리즘의 예제 소스를 제시할 뿐 아니라 알고리즘의 개념이 실제 소스로 어떻게 구현되었는지 글과 그림을 통해 설명하였습니다. 따라서 독자 여러분이 책의 설명을 따라서 직접 소스를 입력하고 실행하는 과정 가운데 알고리즘이 동작하는 개념을 보다 빨리 이해할 수 있을 것입니다.
지면 관계상 생략된 일부 소스는 남가람북스 홈페이지에서 다운로드 받을 수 있습니다.

이 책의 대상 독자는 알고리즘을 프로그램 개발에 사용하려는 분들입니다. 이분들은 C 언어와 같은 프로그래밍 언어와 자료구조를 어느 정도 알고 있는 학생일 수 있습니다.
혹은 개발자 취업 준비생이거나 정체된 개발 실력으로 고민하고 있는 경력 개발자일 수도 있습니다.

 

[출판사 리뷰]
이 책은 C 언어를 기본 구현 언어로 사용합니다. 따라서 C 언어에 대한 기초 문법과 개발 도구인 Visual Studio 혹은 XCode의 간단한 사용 방법을 익힌 분들이라면 충분히 이 책을 시작할 수 있습니다.
또한, 기본적인 자료구조(리스트, 스택, 큐 등)를 어느 정도 알고 있다고 가정합니다. 그래서 알고리즘의 설명에 꼭 필요한 사항이 아닌 이상 자료구조 자체에 대한 설명은 최소화하였습니다.

#. 누구를 위한 책인가요?

- 소프트웨어 개발에 관심 있거나 배우고 있는 고등학생, 대학생, 대학원생
- 개발 현장에서 일하고 있으며 알고리즘에 대해 알고 싶어하는 개발자
- IT 기업의 면접을 준비하고 있는 개발자

#. 이 책의 구성

1장 들어가며
알고리즘을 시작하기 전에 기본 지식을 배우는 부분입니다. 알고리즘의 개념 및 이 책에서 다루는 알고리즘의 종류와 성능 평가 방법 등을 다룹니다.

2장 정렬 알고리즘
알고리즘 중에서 가장 기본이 되는 정렬 알고리즘을 배웁니다. 선택 정렬을 먼저 배우고 이보다 효율적인 퀵 정렬과 병합 정렬을 소개합니다.

3-4장 검색 관련 알고리즘
3장과 4장에 걸쳐 찾고자 하는 자료를 빨리 검색하는 문제에 대한 알고리즘을 배웁니다. 3장에서는 계산을 통해서 자료를 찾는 해시 검색 알고리즘을, 4장에서는 검색 키 값을 비교하여 자료를 찾는 균형 검색 트리를 배웁니다. 이 책에서는 균형 검색 트리 중에서도 B-트리에 대해서 살펴보겠습니다.

5장 그래프 관련 알고리즘
5장에서는 그래프 자료구조를 활용한 알고리즘들을 살펴봅니다. 이러한 알고리즘 중에서 가장 대표적인 최단 경로를 구하는 알고리즘과 최소 신장 트리를 구하는 알고리즘을 배웁니다. 최단 경로 문제를 크게 시작점이 하나인 경우와 여러 개인 경우로 나눠 각 경우에 대한 대표적인 알고리즘으로 다이크스트라 알고리즘, 플로이드 알고리즘을 다룹니다. 아울러, 최소 신장 트리를 구하는 알고리즘으로는 크루스칼 알고리즘과 프림 알고리즘을 살펴보겠습니다.

6장 탐욕 알고리즘
6장에서는 문제의 각 단계에서 최선의 선택을 하여 문제를 해결하는 비교적 단순한 탐욕 알고리즘을 배웁니다. 또한, 동전 거스름돈 문제, 부분 배낭 문제, 압축 문제에 탐욕 알고리즘을 적용하여 실제 알고리즘으로 문제를 해결하는 방식을 살펴보겠습니다.

7장 분할 정복 알고리즘
7장에서는 하나의 큰 문제를 여러 개의 하위 문제로 쪼개서 차례로 해결하는 분할 정복 알고리즘을 배웁니다. 또한, 가장 가까운 두 점 찾기 문제와 연쇄 곱셈 행렬 문제에 분할 정복 알고리즘을 적용하여 실제 알고리즘으로 문제를 해결하는 방식을 살펴보겠습니다.

8장 동적 계획법
8장에서는 분할 정복 알고리즘과 같이 큰 문제를 작게 쪼개서 기존에 구한 값을 재활용하는 동적 계획법을 배웁니다. 또한, 동전 거스름돈 문제, 0-1 배낭 문제, 편집 거리 문제에 동적 계획법을 적용하여 실제 알고리즘으로 문제를 해결하는 방식을 살펴보겠습니다.

9장 백트래킹 알고리즘
9장에서는 문제의 답을 찾을 때까지 모든 가능성을 시도해 보는 백트래킹 알고리즘을 배웁니다. 또한, 외판원 문제, 8퀸 문제, 미로 문제에 백트래킹 알고리즘을 적용하여 실제 알고리즘으로 문제를 해결하는 방식을 살펴보겠습니다.


[목차]

서문

이 책을 보는 방법
이 책의 구성
이 책의 구성 요소
학습 로드맵

01  들어가며

1.1. 이 책에서 다루는 알고리즘
1.2. 알고리즘의 성능 평가
1.2.1 시간 복잡도
1.2.2 점근적 표기: 빅-오 표기법
1.2.3 점근적 표기의 다른 방법들

02 정렬 알고리즘

2.1. 정렬의 개념
2.2. 정렬 알고리즘의 종류
2.3. 선택 정렬
2.3.1 선택 정렬의 과정
2.3.2 선택 정렬의 구현
2.3.3 선택 정렬의 특성
2.4. 퀵 정렬
2.4.1 퀵 정렬의 과정
2.4.2 퀵 정렬의 구현
2.4.3 퀵 정렬의 특성
2.5. 병합 정렬
2.5.1 병합 정렬의 과정
2.5.2 병합 정렬의 구현
2.5.3 병합 정렬의 특성
2.6. 연습 문제

03 해시

3.1. 해시의 개념
3.1.1 해시 함수
3.1.2 해시 검색
3.1.3 해시 검색의 과정
3.2. 해시 함수
3.2.1 나머지(제산: Division) 함수
3.2.2 접기(접지: Folding) 함수
3.2.3 중간 제곱 함수(Mid-square function)
3.2.4 숫자 분석 기반의 해시 함수
3.3. 첫 번째 충돌 해결 방법: 개방 주소법
3.3.1 선형 조사법
3.3.2 제곱 조사법
3.3.3 이중 해시
3.4. 해시 테이블의 추상 자료형
3.5. 해시 검색의 첫 번째 구현: 개방 주소법 사용
3.5.1 해시 테이블의 생성
3.5.2 자료 추가
3.5.3 자료 검색
3.5.4 자료 제거
3.5.5 기타
3.6. 두 번째 충돌 해결 방법: 체이닝
3.7. 해시 테이블의 두 번째 구현: 체이닝 사용
3.7.1 해시 테이블의 생성
3.7.2 자료 추가
3.7.3 자료 검색
3.7.4 자료 제거
3.8. 해시 검색의 성능 분석
3.8.1 키 값 밀도
3.8.2 적재 밀도
3.9. 연습 문제

04 균형 검색 트리

4.1. 이진 검색 트리
4.2. 다원 검색 트리
4.3. B-트리
4.4. B-트리의 연산
4.4.1 B-트리에서의 자료 추가
4.4.2 B-트리에서의 자료 제거
4.4.3 예제: 자료 추가 및 제거
4.5. B-트리의 구현
4.5.1 B-트리 생성
4.5.2 검색 연산
4.5.3 자료 추가
4.5.4 자료 제거
4.5.5 기타
4.6. 간단한 형태의 B-트리
4.6.1 2-3 트리
4.6.2 2-3-4 트리
4.7. B-트리의 변형
4.7.1 B+트리
4.7.2 B*트리
4.8. 연습 문제

05 그래프

5.1. 그래프 자료구조
5.2. 최단 경로 구하기
5.2.1. 하나의 시작점에서 구하기: Dijkstra(다이크스트라) 알고리즘
5.2.2 모든 시작점에서 경로 구하기: Floyd(플로이드) 알고리즘
5.2.3 도달 가능성 구하기
5.3. 최소 비용 신장 트리
5.3.1 신장 트리란?
5.3.2 최소 비용 신장 트리란?
5.3.3 크루스칼(Kruskal) 알고리즘
5.3.4 프림(Prim) 알고리즘
5.4 연습 문제

06 탐욕 알고리즘

6.1. 탐욕 알고리즘의 개념
6.2. 동전 거스름돈 문제
6.2.1 탐욕 알고리즘의 적용
6.2.2 탐욕 알고리즘의 구현
6.3. 부분 배낭 문제
6.3.1 탐욕 알고리즘의 적용
6.3.2 탐욕 알고리즘의 구현
6.4. 허프만 코딩
6.4.1 탐욕 알고리즘의 적용
6.4.2 탐욕 알고리즘의 구현
6.5. 연습 문제

07 분할 정복 알고리즘

7.1. 이진 검색을 통해 알아보는 분할 정복 알고리즘
7.2. 팩토리얼 문제
7.3. 가장 가까운 두 점 찾기 문제
7.3.1 분할 정복 알고리즘의 적용
7.3.2 분할 정복 알고리즘의 구현
7.4. 연쇄 행렬 곱셈 문제
7.4.1 연쇄 행렬 곱셈 문제란?
7.4.2 분할 정복 알고리즘의 적용: 행렬이 4개인 경우
7.4.3 일반적인 경우에 분할 정복 알고리즘의 적용
7.4.4 분할 정복 알고리즘의 구현
7.5 연습 문제

08 동적 계획법

8.1. 피보나치 수열로 알아보는 동적 계획법
8.2. 동전 거스름돈 문제
8.2.1 분할 정복법의 적용과 구현
8.2.2 동적 계획법의 적용
8.2.3 동적 계획법의 구현
8.3. 0-1 배낭 문제
8.3.1 분할 정복법의 적용과 구현
8.3.2 동적 계획법의 적용
8.3.3 동적 계획법의 구현
8.4. 편집 거리 문제
8.4.1 분할 정복법의 적용과 구현
8.4.2 동적 계획법의 적용
8.4.3 동적 계획법의 구현
8.5 연습 문제

09 백트래킹 알고리즘

9.1. 외판원 문제
9.1.1 백트래킹의 적용
9.1.2 백트래킹의 구현
9.2. 8퀸 문제
9.2.1 백트래킹의 적용
9.2.2 백트래킹의 구현
9.3. 미로 문제
9.3.1 백트래킹의 적용
9.3.2 백트래킹의 구현
9.4 연습 문제

연습문제 정답

찾아보기

신고
Posted by 남가람북스 남가람북스

댓글을 달아 주세요

[제목]
시작하는 드로너를 위한 아두이노 드론 마스터 북

[부제]
부품 구입부터 코딩까지 쉽게 배우는 DIY 아두이노 드론


저자: 김윤래
출판사: 남가람북스
발행일: 2016-09-15
ISBN: 979-11-954845-5-3
가격: 22000
페이지: 304
판형: 182*232*13.2
바코드: 9 791195 484553 13000

[상세 페이지]

 

[저자 소개]
늘 무언가를 만드는 것을 좋아하고 새로운 것을 익히는 것으로 스트레스를 푸는 괴짜 개발자입니다.
로봇을 전공했으며 현재는 삼성 전자에서 12년째 휴대폰을 개발하고 있습니다.
어린 시절 꿈꾸던 미래의 내가 지금의 내가 아닌 무언가를 만들고 있을 때의 나라는 것을 깨달은 것은
2012년 재능 기부로 삼성전자 주니어 소프트웨어 아카데미에서 아두이노 관련 교재 집필에 참여하면서 였습니다.
또한, 아이들을 가르치는 것이 얼마나 기분 좋은 것인지도 알게 되었습니다.
그 이후 개인 프로젝트로 무언가를 만들면서 드론까지 만들게 되었고, 4년전부터 프로보노 ICT 멘토링 멘토를 하고 있으며 올해는 한이음 ICT 멘토링 멘토로도 활발하게 활동하고 있습니다.
또한, 삼성전자 투마로우 솔루션 이그니스 팀을 리딩하고 있습니다.

[책 소개]
드론은 이제 낯선 비행 물체가 아닌 누군가에게는 열정적인 취미로서, 일부 직업군에게는 필수품으로서, 미래에 관여하는 새로운 기술로서 자리잡고 있습니다.
현재까지 한국에 출간된 드론 책은 드론의 역사와 종류 그리고 비행법을 다루는 이론서부터 직접 코딩하고 기체를 조립하는 실용서까지 다양한 책이 출간되었지만,
이 책처럼 직접 드론 부품 구매부터 조립, 프로그램, 비행까지 단계별로 진행하면서 컴퓨터를 잘 모르는 일반인도 마치 장난감을 조립할 수 있는 설명서 같이 친절한 책은 없었습니다.
단계별 진행은 물론 필자가 직접 드론을 구입하고 비행하면서 겪었던 문제점과 곤란했던 상황들을 세세하게 짚어줍니다.
또한, 드론의 보다 자세한 시스템과 프로그램에 대한 내용을 살펴보면서 좀 더 드론을 깊게 공부하고자 하는 여러분에게도 많은 도움이 될 것입니다.


[출판사 리뷰]
드론을 처음 접하는 분들에게 마치 곁에서 하나하나 알려주는 선생님과 같은 지침서는 물론, 시작점을 몰라 헤매는 미래의 드로너를 위한 내비게이션이 되어 줄 것입니다.

* 이 책에서 다루는 내용

- 드론에 필요한 부품 가이드 및 구매 방법

- 조립 방법

- 프로그래밍 방법

- 비행 방법

- 각 부품들에 대한 자세한 설명

- Open source review

 

* 이 책의 대상 독자

- 드론을 만들고자 하는데 어디서부터 해야 할지 모르는 독자

- 아들과 직접 드론을 만들고자 하는 부모님

- 드론을 학문적으로 시작하는 학생들

 
*예제 내려받기 및 문의 사항
이 책에 게재된 예제는 남가람북스 홈페이지 [자료실] 및 저자 블로그 sulac.egloos.com에서 내려받을 수 있습니다.
URL: www.namgarambooks.co.kr

드론 제작에 문제점이 발생할 경우 저자 블로그 sulac.egloos.com 이나 이메일 younlea.kim@gmail.com으로 문의하면 가능한 한 답변해 드립니다. 


[목차]
서문
이 책을 내며…
 
Part 01 _드론 만들기 

1장  준비하기
드론? 쿼드콥터? MultiWii(멀티위)? 
부품 선정 
구매  

2장  아두이노 & 센서 
아두이노PC 연결 및 테스트 환경 설정 
아두이노 개발 환경 설치 
센서 연결 

3장  조립하기 
기체 조립 
소스 코드 빌드 & 다운로드 
MultiWii configuration 연동 
송수신기 RF 바인딩 및 동작 신호 확인 
모터 연결 확인
 
4장  비행 
프로펠러 연결 
비행 모드 세팅 
드론 띄우기 
조종 방법 가이드
 
Part 02 _드론 좀 더 깊게 알아보기 

5장  드론을 구성하는 모든 것 
프로펠러 
모터 
ESC(Electronic Speed Control) 
배터리 
프로세서 
송수신기 

6장  MultiWii 소스 코드 
소스 코드 리뷰 
Multilwii configuration 

7장  오픈소스 플랫폼 
Multiwii 기반 소스 코드 
오픈파일럿 기반 소스 코드  
3D robotics사 소스 코드 
드론 보드 
시뮬레이터 

찾아보기 

신고
Posted by 남가람북스 남가람북스

댓글을 달아 주세요

 

 

[제목]
PHP+MySQL 웹 개발 마스터 북

 

[부제]
로그인부터 회원 관리까지 쉽게 배우는 PHP와 MySQL

 

[원서]
PHP+MySQL マスターブック

저자: 나가타 요리노부(永田 順伸)


출판사: 남가람북스
역자: 김동섭
발행일: 2016-07-13
ISBN: 979-11-954845-4-6
가격: 28000
페이지: 480
판형: 188*254*20
바코드: 9 791195 484546 93000

 

[상세 페이지]

 

[역자 소개]
경북대학교에서 지능형 에이전트로 석사 학위를 받았고, 2006년부터 수년간 일본 동경에서 Orix, NTT Comware, Canon사에서 시스템 분석 및 설계, 개발 업무를 담당하였다. 현재는 NHN Technology Services에 재직 중이다.
홈페이지: http://www. abreqadhabra.com/

 

[책 소개]
이 책은 PHP와 MySQL의 입문서입니다. PHP는 가장 널리 이용하는 언어 중 하나로서 웹 애플리케이션 개발의 효율성을 높여주고 언어 자체가 습득하기 쉬워 초심자가 다루기 수월하기 때문입니다. 게다가 MySQL과 같은 데이터베이스와 연계가 간단하다는 것도 또 하나의 이유입니다. 이 책을 집필하는 시점에서 가장 최신 버전인 PHP 5.4와 MySQL 5.5를 기반으로 기초부터 단계적으로 살펴 봅니다. 또한, 기본적인 예제 소스를 가지고 PHP와 MySQL의 동작을 전반적으로 확인할 수 있도록 하였습니다.
예제와 관련된 항목은 몇 번이고 반복함으로써 여러분이 완전히 이해할 수 있도록 구성하고 있습니다. 이 책의 후반에서는 꼭 필요한 기능만 갖춘 회원제 사이트를 만들면서 PHP를 살펴봅니다. 전반부와 마찬가지로 기초적인 기능부터 단계적으로 살펴보면서 회원 등록이나 검증에 필요한 기술을 습득할 수 있습니다.

 

[출판사 리뷰]
프로그래밍에 대한 경험이 없는 사람도 프로그래밍의 기초를 배우는 것을 목표로 한 입문서입니다. 먼저, 이 책의 특징을 소개하고 읽어 나가는 방법에 대하여 설명합니다. 다양한 그림과 칼럼, 연습문제와 예제 소스로 착실하게 실력을 쌓을 수 있습니다.

 

PHP+MySQL 웹 개발 마스터북의 특징

* 코드 설명은 같은 페이지에
프로그램 코드와 코드에 대한 설명을 같은 페이지에서 볼 수 있습니다. 설명을 읽기 위해 페이지를 넘길 필요가 없으므로 번거로움 없이 학습을 진행할 수 있습니다.

 

* 연습문제로 능력 향상
각 Chapter 끝에는 학습한 것을 확인하고 실력을 키울 수 있는 연습문제가 있습니다.
 
* 하고 싶은 것, 알고 싶은 것을 골라 읽으면서 효율적으로 마스터
각 Section은 [~하려면]과 [~란?]처럼 목적별로 구성되어 있습니다. 따라서 자신이 하고 싶은 것이나 알고 싶은 것만 찾아 읽을 수 있습니다. PHP 언어에 재입문한 독자들에게도 최적입니다.
 
*예제 내려받기
이 책에 게재된 예제는 남가람북스 홈페이지 [자료실]에서 내려받을 수 있습니다.
URL: www.namgarambooks.co.kr

 
* Section 타이틀
각 Section은 [~하려면]과 [~란?] 등의 목적별로 구성되어 있어 하고 싶은 것, 알고 싶은 것을 간단하게 찾을 수 있습니다.
 
*서브 타이틀
학습할 문법 항목의 이름을 나타냅니다.
 
*왼쪽 페이지 가장자리
각 Chapter의 타이틀이 들어 있습니다.
 
*구문
프로그램 언어의 문법 사항 예시입니다. 이 색의 문자가 학습할 항목을 나타냅니다.
 
*오른쪽 페이지 가장자리
학습할 항목의 이름으로 필요한 Section을 찾을 수 있습니다.
 
*코드
코드에 대한 설명을 추가하고 있습니다. 설명하고 있는 부분은 이 색으로 되어 있습니다.
 
*칼럼
이 책에서는 다음과 같이 5종류의 칼럼이 준비되어 있습니다. 본문과 아울러 칼럼을 참조하면서 좀 더 폭넓은 지식을 쌓을 수 있습니다.
- Grammar (문법): 문법 사항에 대한 주의점을 설명합니다.
- Point (요점): 조작이나 프로그래밍의 포인트를 설명합니다.
- Caution (주의): 틀리기 쉬운 곳을 설명합니다.
- Term (용어): 전문적인 용어를 설명합니다.
- In detail (상세한 해설): 코드의 의미 등을 상세히 설명합니다.

 

[목차]
1 장 PHP 의 개발 환경
Section 01 PHP 는 어떤 언어 ?
Section 02 Windows 에서 실행하려면 (XAMPP)
Section 03 Mac 에서 실행하려면
Section 04 Linux 에서 실행하려면
Section 05 Apache 를 설정하려면
Section 06 PHP 를 설정하려면
Section 07 PHP 의 동작을 확인하려면
Section 08 개발 도구를 사용하려면
연습문제

 

2 장 PHP 의 기초
Section 09 PHP 코드를 작성하려면
Section 10 문자를 표시하려면
Section 11 HTML 에 PHP 를 삽입하려면
Section 12 상수를 사용하려면
Section 13 변수에 데이터를 저장하려면
Section 14 데이터를 열거하여 조작하려면
Section 15 데이터와 키를 관련시켜 저장하려면
Section 16 연산자를 사용하려면
Section 17 조건을 판단하고 처리를 분기하려면
Section 18 여러 조건에서 처리를 분기하려면
Section 19 어떤 조건까지 처리를 되풀이하려면
Section 20 지정한 횟수만큼 처리를 되풀이하려면
Section 21 배열과 연관 배열을 한번에 처리하려면
Section 22 처리를 건너뛰어 반복하거나 중단하려면
Section 23 다른 파일에서 작성한 처리를 읽어 들이려면
Section 24 처리를 한 군데로 모으려면
Section 25 함수에 인수를 넘기려면
Section 26 함수에서 값을 받아들이려면
Section 27 변수의 유효 범위를 정하려면
연습문제

 

3 장 PHP 의 내장 함수
Section 28 문자열을 조작하려면
Section 29 배열을 조작하려면
Section 30 날짜 / 시간을 사용하려면
Section 31 파일을 조작하려면
Section 32 HTTP 헤더를 조작하려면
Section 33 메일을 송신하려면
Section 34 정규표현을 이용하려면
연습문제

 

4 장 웹에서의 PHP
Section 35 폼에서 송신된 텍스트를 받으려면
Section 36 여러 행의 텍스트를 받으려면
Section 37 hidden 태그의 데이터를 받으려면
Section 38 송신 버튼의 데이터를 받으려면
Section 39 체크박스의 데이터를 받으려면
Section 40 라디오 버튼의 데이터를 받으려면
Section 41 풀다운 메뉴의 데이터를 받으려면
Section 42 리스트 박스의 데이터를 받으려면
Section 43 쿠키를 받으려면
Section 44 세션을 관리하려면
Section 45 파일을 업로드하려면
Section 46 이미지를 축소하려면
Section 47 메일을 수신하려면
Section 48 외부 명령을 실행하려면
연습문제

 

5 장 클래스와 객체
Section 49 클래스를 작성하려면
Section 50 인스턴스를 생성하려면
Section 51 메소드를 이용하려면
Section 52 클래스에서 새로운 클래스를 작성하려면
Section 53 클래스를 설계하려면
Section 54 디자인 패턴을 이용하려면
연습문제

 

6 장 데이터베이스 준비
Section 55 데이터베이스란 ?
Section 56 MySQL 에 접속하려면
Section 57 MySQL 을 설정하려면
Section 58 데이터베이스를 작성하려면
Section 59 사용자의 작성과 권한 설정
연습문제

 

7 장 데이터 조작의 기본
Section 60 테이블을 작성하려면
Section 61 데이터를 테이블에 입력하려면
Section 62 테이블에서 데이터를 검색하려면
Section 63 데이터를 수정하려면
Section 64 데이터를 삭제하려면
연습문제

 

8 장 PHP 에서 데이터베이스를 조작하기
Section 65 데이터베이스에 접속하려면
Section 66 PDO 를 이용하려면
Section 67 SQL 문을 발행하려면
Section 68 등록화면에서 데이터를 입력하려면
Section 69 데이터를 검색하여 표시하려면
Section 70 데이터를 수정하려면
Section 71 데이터를 삭제하려면
Section 72 기능을 연계하려면
연습문제

 

9 장 PHP 와 MySQL 로 만드는 회원제 시스템 - 회원 기능
Section 73 회원에게만 화면을 표시하려면
Section 74 접근 제한을 하려면
Section 75 회원제 시스템의 구성
Section 76 테이블을 설계하려면
Section 77 설정과 기능 확인
Section 78 Smarty 를 이용하려면
Section 79 HTML_QuickForm 으로 입력을 확인을 하려면
Section 80 인증 기능을 구현하려면
Section 81 제어구조를 만들려면
Section 82 회원 정보를 등록하려면
Section 83 메일로 본인을 확인하려면
Section 84 회원 정보를 수정하려면
Section 85 회원 정보를 삭제하려면
연습문제

 

10 장 PHP 와 MySQL 로 만드는 회원제 시스템 - 관리 기능
Section 86 관리 화면을 표시하려면
Section 87 회원 정보 목록을 분할 표시하려면
Section 88 관리 화면에서 회원 정보를 등록하려면
Section 89 관리 화면에서 회원 정보를 수정하려면
Section 90 관리 화면에서 회원 정보를 삭제하려면
Section 91 기능을 추가하려면
Section 92 로그인을 자동 해제하려면
연습문제

 

11 장 데이터베이스의 운용
Section 93 MySQL 명령행 도구
Section 94 로그 취득과 동작 확인
Section 95 데이터를 백업하려면
연습문제

 

12 장 PHP 의 응용
Section 96 위치 정보를 취득하려면
Section 97 서버 호스팅을 이용하려면
연습문제

 

연습문제 해답
찾아보기

 

신고
Posted by 남가람북스 남가람북스

댓글을 달아 주세요



[제목]
바쁜 개발자들을 위한 C#

[부제]
빠르게 익히는 C# 핵심 개념

[원서명]
The C# Programming Yellow Book

저자: 롭 마일즈(Rob Miles)
출판사: 남가람북스
역자: 테크트랜스 그룹 T4
발행일: 2016-01-07
ISBN: 979-11-954845-3-9
가격: 22,000원
페이지: 456
판형: 182*232*19

[상세 페이지]

 

[책소개]
이 책은 영국의 헐 대학교(Hull University) 컴퓨터 공학과 Rob Miles 교수의 강의 자료를 바탕으로 구성되었습니다. 각종 문법이나 용어에 대해 깊이 있고 구체적으로 다루진 않지만, 유용한 실무 코드 예제를 사용해서 쉽고 빠르게 C# 언어에 대한 전반적인 내용을 다루고 있다는 것이 가장 큰 특징입니다.
이전에 C, C++ 혹은 Java 등 다른 프로그래밍 언어를 경험한 적이 있다면 가장 이상적인 독자입니다. 아니라면 많이 어렵겠지만 용기를 잃지 말고 쭉 읽어가길 바랍니다. 여기서 프로그래밍에 실질적으로 필요한 것들을 많이 배울 수 있습니다.

[출판사 리뷰]
많은 개발자들이 그 가치를 알아주는 C#은 .NET Framework에서 실행되는 다양한 응용 프로그램을 만들기 위해 디자인된 프로그래밍 언어입니다. C++, 자바와 비슷한 문법을 가지고 있으며 간결하고, 강력하며, 형식이 안전한 개체 지향적인 언어입니다. 이 책은 C# 프로그래밍을 위한 기본적인 내용을 제공하는 것 외에도 솔루션을 만드는 방법과 고급 프로그래밍에 대한 내용을 다룹니다.
이 책을 통해서 C#에 대한 전반적인 내용을 단순간에 살펴볼 수 있을 것이며, 기본부터 시작해서 고급 수준까지 가는데, 디딤돌이 될 수 있기를 바랍니다.

-이 책의 대상 독자-

이 책은 다음과 같은 선수 지식이 필요합니다.
* C/C++과 .Net 프레임워크에 대한 기본 지식
* 객체 지향 프로그래밍에 대한 지식
* 소프트웨어 엔지니어링에 대한 지식

다음과 같은 개발자를 대상으로 합니다.
* C/C++을 배운 후에 C#으로 확장하여 개발 경험을 쌓으려는 개발자
* C# 뿐만 아니라 프로그래밍에 대한 전반적인 지식을 얻으려는 개발자
* C#의 초급부터 고급까지 전반적인 내용을 짧은 시간 안에 습득하려는 개발자

-이 책의 구성-

이 책의 구성은 크게 다음과 같습니다.
1장: 컴퓨터와 프로그램
2장: 간단한 데이터 프로세싱
3장: 프로그래밍하기
4장: 솔루션 만들기
5장: 고급 프로그래밍
6장: 중요 용어 사전

이 책에 나오는 주요 소스 코드는 남가람북스 자료실 www.namgarambooks.co.kr에서 다운로드할 수 있습니다.
이 책의 원서명은 The C# Programming Yellow Book(Rob Miles 저)이며, 아마존에서 킨들판으로 판매하고 있습니다.

-개발 환경 설정-

마이크로소프트는 C# 프로그래밍이 가능한 통합 개발 환경을 다음과 같이 제공합니다.

Visual Studio (유료)
Visual Studio Express (무료)
Visual Web Developer(무료)

C# 프로그래밍을 공부하는 데 무료 버전을 사용해도 괜찮습니다. 무료 버전은 Visual Studio 공식 사이트(https://www.visualstudio.com/downloads/download-visual-studio-vs)에서 다운로드 가능합니다.
Mono(http://www.mono-project.com/)라는 오픈소스 버전인 Net 프레임워크를 사용하면 리눅스와 Mac에서도 사용 가능합니다.

[목차]

Chapter 01 컴퓨터와 프로그램
1.1 컴퓨터
1.1.1 컴퓨터와 관련된 서론부
1.1.2 하드웨어와 소프트웨어
1.1.3 데이터와 정보
1.2 프로그램과 프로그래밍
1.2.1 프로그래머란 무엇인가?
1.2.2 간단한 예제
1.3 프로그래밍 언어
1.4 C#
1.4.1 위험한 C
1.4.2 안전한 C#
1.4.3 C#과 객체지향
1.4.4 C#으로 동작하게 만들기
1.4.5 C# 프로그램 만들기
1.4.6 C# 프로그램은 무엇으로 구성되는가?

Chapter 02 간단한 데이터 처리
2.1 첫 번째 C# 프로그램
2.1.1 프로그램 예제
2.2 데이터 다루기
2.2.1 변수와 데이터
2.2.2 숫자 저장하기
2.2.3 텍스트(text) 저장하기
2.2.4 불린(Boolean) 방식을 사용하여 상태 저장하기
2.2.5 식별자(Identifiers)
2.2.6 변수에 값 대입하기
2.2.7 데이터 타입 변경하기
2.2.8 표현식에서 데이터 타입
2.2.9 프로그램과 패턴
2.3 프로그램을 만드는 요령
2.3.1 소설 같은 소프트웨어
2.3.2 프로그램 흐름(Program Flow) 제어하기
2.3.3 루프(반복문)
2.3.4 복합할당 연산자(operator shorthand)
2.3.5 잘 정돈된 출력
 
Chapter 03 프로그램을 만들 때 필요한 것들
3.1 메소드(Methods)
3.1.1 메소드의 필요성
3.1.2 메소드의 파라미터(매개변수)
3.1.3 반환값(Return Valules)
3.1.4 인수와 파라미터(Arguments and Parameters)
3.1.5 유용한 메소드
3.1.6 이름을 가지는 파라미터와 이름이 없는 파라미터
3.1.7 파라미터로 값을 전달하는 방식(Parameter Passing By Value)
3.1.8 참조(Reference)를 전달하는 방식(Parameter Passing By Reference)
3.1.9 결과를 위한 참조 전달 방식 (Passing Parameters as “out” references)
3.1.10 메소드 라이브러리
3.2 변수와 범위
3.2.1 범위와 블록(Scope and blocks)
3.2.2 중첩된 블록(Nested Blocks)
3.2.3 클래스 선언 아래에 있는 클래스 변수(Data Member in classes)
3.3 배열(Arrays)
3.3.1 배열은 왜 필요한가
3.3.2 배열 요소(Array Elements)
3.3.3 많은 데이터를 담는 배열
3.3.4 2차원 배열 만들기
3.3.5 배열과 룩업테이블(Arrays and Lookup Tables)
3.3.6 2차원 이상
3.4 예외와 에러(Exceptions and Errors)
3.4.1 예외와 Parse 메소드
3.4.2 예외 처리(Catching Exceptions)
3.4.3 예외 객체
3.4.4 중첩된 예외의 처리
3.4.5 Finally 절 추가하기
3.4.6 예외 처리
3.4.7 예외 처리의 기본 매너
3.5 Switch문
3.5.1 다중 결정하기
3.5.2 if문을 사용하여 선택하기
3.5.3 Switch문 사용하기
3.6 파일 사용하기
3.6.1 스트림과 파일
3.6.2 출력 스트림 만들기
3.6.3 스트림으로 저장하기
3.6.4 스트림 닫기(완료하기)
3.6.5 스트림과 네임스페이스(Streams and Namespaces)
3.6.6 파일 읽기
3.6.7 C#에서 파일 경로

Chapter 04 프로그램 제작 연습
4.1 사례: 친절한 은행
4.1.1 은행 시스템의 범위
4.2 열거형 타입(Enumerated Types)
4.2.1 열거와 상태(Enumeration and States)
4.2.2 enum 타입 만들기
4.3 구조체
4.3.1 구조체(Structures)란?
4.3.2 구조체 만들기
4.3.3 구조체 사용하기
4.4 객체, 구조체, 참조(Objects, Structures and References)
4.4.1 객체와 구조체
4.4.2 참조(reference)
4.4.3 참조 사용에 주의해야 하는 이유
4.5 객체를 이용해서 설계하기
4.5.1 객체 내 데이터
4.5.2 객체 내 데이터 보호
4.5.3 완전한 Account 클래스
4.5.4 테스트 주도 개발
4.6 정적 변수
4.6.1 클래스와 static
4.6.2 클래스에서 static을 이용한 변수 사용하기
4.6.3 클래스 내에서 static 메소드 사용하기
4.7 객체 생성
4.7.1 기본 생성자
4.7.2 생성자
4.7.3 생성자 오버로딩(overloading)
4.7.4 생성자 관리
4.7.5 생성자는 실패하면 안 된다.
4.8 객체에서 컴포넌트까지
4.8.1 컴포넌트와 하드웨어
4.8.2 컴포넌트와 인터페이스
4.8.3 C#에서 인터페이스 구현하기
4.8.4 인터페이스에 대한 참조
4.8.5 인터페이스 사용하기
4.8.6 다중 인터페이스 구현하기
4.8.7 Interfaces를 사용하여 설계하기
4.9 상속
4.9.1 부모 클래스 확장하기
4.9.2 오버라이딩 메소드
4.9.3 base 메소드 사용하기
4.9.4 대체 메소드 만들기
4.9.5 오버라이딩 멈추기
4.9.6 생성자와 계층 구조
4.9.7 추상(abstract) 메소드와 클래스
4.9.8 객체와 컴포넌트로 설계하기
4.9.9 패닉에 빠지지 말자
4.10 객체 사용 방법
4.10.1 객체와 ToString
4.10.2 객체와 이퀄(equal) 테스팅
4.10.3 객체와 this
4.11 strings과 chars의 강력한 기능
4.11.1 문자열 다루기
4.11.2 불변(immutable) 문자열
4.11.3 문자열 비교
4.11.4 문자열 편집
4.11.5 문자열 길이
4.11.6 대소문자
4.11.7 빈 문자열 제거
4.11.8 문자 명령어
4.11.9 StringBuilder를 사용하여 문자열 사용하기
4.12 프로퍼티
4.12.1 클래스에 선언되는 프로퍼티
4.12.2 Get과 Set 메소드 만들기
4.12.3 프로퍼티 사용하기
4.12.4 프로퍼티와 인터페이스
4.12.5 프로퍼티 문제점
4.12.6 위임 사용하기
4.13 은행 프로그램 만들기
4.13.1 배열로 계좌 저장하기
4.13.2 검색과 성능
4.13.3 해시 테이블(Hash Table)을 사용하여 계좌 저장하기
4.13.4 C# 해시 테이블 컬렉션 사용하기

Chapter 05 고급 프로그래밍 기법들
5.1 제네릭과 컬렉션(Generics and Collections)
5.1.1 ArrayList 클래스
5.1.2 List 클래스
5.1.3 Dictionary 클래스
5.1.4 제네릭 코드 작성하기
5.2 비즈니스 객체 저장하기
5.2.1 계좌 저장하기
5.2.2 계좌 불러오기
5.2.3 다중 계좌
5.2.4 다른 타입의 계좌 다루기
5.3 비즈니스 객체와 편집(editing)
5.3.1 비즈니스 객체의 역할
5.3.2 텍스트 기반의 편집 시스템
5.4 스레드와 스레드 기법(Threads and Threading)
5.4.1 스레드란 무엇인가?
5.4.2 왜 스레드를 사용해야 하나?
5.4.3 스레드와 프로세서
5.4.4 스레드 사용하기
5.4.5 스레드와 동기화
5.4.6 스레드 제어
5.4.7 스레드 제대로 활용하기
5.4.8 스레드와 프로세스
5.5 구조화된 예외의 처리
5.5.1 예외 클래스
5.5.2 자신의 예외 타입 만들기
5.5.3 예외 발생
5.5.4 다중 예외 타입
5.6 프로그램 구조
5.6.1 분리된 소스 파일 사용하기
5.6.2 네임스페이스
5.6.3 여러 파일의 네임스페이스
5.7 그래픽 사용자 인터페이스
5.7.1 XAML 마크업 언어
5.7.2 완전한 XAML 프로그램 만들기
5.8 디버깅
5.8.1 결함 보고서
5.8.2 버그 찾기
5.8.3 완벽한 소프트웨어 만들기
5.9 끝?
5.9.1 계속 개발하기
5.9.2 더 읽어봐야 할 것

Chapter 06 용어 사전
추상(abstract)
접근자(Accessor)
베이스(Base)
호출(Call)
클래스(Class)
코드 재사용(Code Reuse)
응집력(Cohesion)
컬렉션(Collection)
컴파일러(Compiler)
컴포넌트(Component)
생성자(Constructor)
커플링(Coupling)
창조적 지연(Creative Laziness)
선언적 언어(Declarative language)
위임(Delegate)
의존성(Dependency)
이벤트(Event)
예외(Exception)
기능 설계 명세서(Functional Design Specification)
GUID(Globally Unique Identifier)
계층 구조(Hierarchy)
불변(Immutable)
상속(Inheritance)
인터페이스(Interface)
라이브러리(Library)
기계어 부호(Machine code)
메타데이터(Metadata)
메소드(Method)
뮤테이터(Mutator)
네임스페이스(Namespace)
오버로드(Overload)
오버라이드(Override)
이식성(Portable)
Private
프로퍼티(Property)
Protected
Public
참조(Reference)
시그니처(Signature)
소스 파일(Source file)
정적(Static)
스트림(Stream)
구조(Structure)
서브스크립트(Subscript)
문법 하이라이트(Syntax Highlighting)
견고성 테스트(Test harness)
This
타입세이프(Typesafe)
유닛 테스트(Unit test)
값 타입 (Value type)
버추얼(가상) 메소드 (Virtual method)

Appendix
Visual Studio 설치와 예제 실행
Visual Studio 2015 다운로드
Visual Studio 2015 Community 에디션 다운로드와 설치
Visual Studion 2015 설치
Visual Studio 실행과 프로젝트의 생성
프로젝트 선택
C# 프로젝트 생성
프로젝트 실행과 디버깅
디버깅 모드(단축키 F5)
디버깅(debugging)하지 않고 실행(단축키 Ctrl + F5)
프로젝트에 여러 개의 클래스를 사용하는 방법
클래스 추가하기
추가한 클래스에 Main 작성하기
프로젝트의 시작 개체 변경하기

찾아보기





신고
Posted by 남가람북스 남가람북스

댓글을 달아 주세요

 

 

 

 

 

-제목-
코드로 배우는 스프링 웹 프로젝트

-부제-
현업 개발을 위한 단계별 실습서

저자: 구멍가게 코딩단
출판사: 남가람북스
발행일: 2015-08-16
ISBN: 979-11-954845-2-2
가격: 32,000원
페이지: 744
판형: 182*232*356
바코드: 9 791195 484522 93000

-저자 소개-
지은이: 구멍가게 코딩단
프로그래밍을 좋아하지만, 남들 앞에 나설 용기 없는 10년 차 이상 개발자, 현업 관리자, 강사들의 비공개 모임. 유일한 공통점은 집필 담당인 강요천의 지인이라는 점.
어린 시절 구멍가게 앞 아저씨들이 인생의 진리를 가볍게 던졌던 것처럼 프로그래밍의 오의(奧義)를 가볍게 던지고 싶은 사람들의 모임.
http://zerockcode.blogspot.kr를 통해서 세상과 소통을 시작하고 있고, 조만간 동영상 강의, 오프라인 교육 등의 계획을 발표할 예정임.


-책소개-
이 책의 주제는 Spring Framework(이하 스프링)를 이용해서 말 그대로 ‘웹 프로젝트’를 어떻게 진행하는지를 설명하는 책입니다. 웹 프로젝트라고 거창하게 표현을 하지만 좀 더 구체적으로는 스프링으로 웹 프로젝트에서 사용되는 게시물 관리를 만들어 보는 것이 주된 목적입니다.

모든 웹 프로젝트는 그 성격에 따라 구성과 구조가 다르긴 하지만 결과적으로는 게시물 관리 모듈의 집합체라고 볼 수 있습니다. 이 책에서는 웹 프로젝트에 사용되는 게시물을 다음과 같은 예제들로 작성합니다.
* 단순한 등록, 수정, 삭제, 조회, 페이징 처리가 필요한 게시물 관리
* Ajax를 이용해서 동작할 필요가 있는 게시물 관리
* 자료실과 같이 첨부파일 기능이 필요한 게시물 관리
* 모바일에서 사용할 수 있는 REST 기반의 게시물 관리
* 보안처리가 필요한 게시물 관리

-출판사 리뷰-
현재까지 출간된 스프링관련 많은 서적들은 주로 스프링의 내부 구조나 원리 등 이론적인 배경에 초점을 두었지만, 이 책은 그보다는 개발 현장에서 사용하는 도구로서 스프링을 취급합니다.

<이 책의 대상 독자>
이 책은 웹 프로젝트를 진행하는 과정에서 스프링을 사용하기 때문에 다음과 같은 선수지식이 필요합니다.
* Java 언어에 대한 기본 지식
* Servlet/JSP의 실습 경험 및 기본 지식
* HTML/JavaScript/CSS에 대한 기본 지식

이 책은 다음과 같은 개발자를 대상으로 합니다.
* 프레임워크를 사용해서 개발 경험을 쌓으려는 개발자
* 웹 개발 지식과 경험은 있지만, 스프링을 사용해 본 적이 없는 개발자
* 최근에 변화된 스프링을 이용해서 개발하고 싶은 개발자
* 웹 프로젝트를 진행하면서 어떤 개발 단계를 거쳐야 하는지 알려는 개발자

<이 책의 구성과 활용방법>

이 책의 구성은 크게 다음과 같습니다.
#. Part 1: 프로젝트의 기본 구조 구성
     스프링의 몇 가지 특징
 스프링 MVC, MyBatis 개발 환경 설정
 개발에 사용하는 MySQL 데이터베이스의 설정과 테스트

#. Part 2: 기본적인 기능의 게시물 관리
 단순한 등록, 수정, 삭제, 조회와 리스트 기능의 게시판 만들기
 페이징 처리와 검색기능

#. Part 3: Ajax 댓글 처리
 REST 방식의 개발과 @RestController
 jQuery와 Ajax를 이용하는 서버 호출
 Ajax와 REST 방식을 이용하는 게시물에 대한 댓글 처리

#. Part 4: AOP와 트랜잭션 처리
 AOP의 개념과 설정
 트랜잭션 관리의 설정과 테스트 

#. Part 5: 게시물의 첨부파일 기능 
 <form>을 이용하는 파일 업로드
 Ajax를 이용하는 파일 업로드
 썸네일 이미지 처리와 다운로드

#. Part 6: 인터셉터를 활용하는 로그인 처리
 인터셉터와 필터
 로그인 처리와 로그인 체크
 세션 방식으로 로그인 처리
 자동로그인 처리


-목차-

들어가며

PART 1 프로젝트의 기본 구조 구성

1. 개발 환경의 설정
1.1 STS의 설치와 개발환경
1.2 스프링 프로젝트를 시작하는 두 가지 방법
1.3 Spring Project를 이용한 프로젝트 생성
1.4 라이브러리의 초기화
1.4.1 프로젝트의 실행 점검
1.4.2 JDK 버전의 처리
1.4.3 스프링 MVC 프로젝트 템플릿의 구조
1.4.4 Spring 프레임워크의 버전 변경
1.4.5 Tomcat 8 설치 및 사용
1.4.6 설치 작업 정리

2. 스프링에 대한 간단 소개
2.1 스프링 프레임워크가 개발의 대세가 된 이유
2.2 스프링의 주요 특징
2.2.1 POJO 기반의 구성
2.2.2 의존성 주입(DI)을 통한 객체 간의 관계 구성
2.2.3 AOP의 지원
2.2.4 트랜잭션의 지원

3. 예제를 위한 MySQL의 설정과 스프링 테스트
3.1 MySQL의 설치
3.2 MySQL Workbench의 활용
3.2.1 계정 연결
3.2.2 MySQL의 새로운 스키마 추가
3.2.3 사용자의 기본 스키마 설정
3.2.4 DB 테스트
3.3 MySQL 연결 테스트와 jUnit
3.3.1 MySQL 테스트 관련 라이브러리
3.3.2 JDK 1.7이상의 JDBC 코딩
3.4 작업 내역의 정리
 
4. 스프링 + MyBatis + MySQL의 설정
4.1 일반적인 스프링 웹 프로젝트의 구성
4.1.1 이 책의 프로젝트 구성
4.2 MyBatis와의 구성
4.3 MyBatis 연동을 위한 준비
4.3.1 spring-jdbc, spring-test, MyBatis, mybatis-spring 추가
4.3.2 Spring Project에서 root-context.xml 파일의 수정
4.4 MySQL과의 연결을 담당하는 DataSource 설정하기
4.4.1 DataSource의 테스트 진행
4.5 MyBatis 연결
4.5.1 SqlSessionFactory 객체 설정
4.5.2 mybatis-config.xml 파일의 추가
4.5.3 MyBatis의 연결 테스트
4.6 작업 내역의 정리

5. 모델 2 방식과 스프링 MVC
5.1 모델 2 패턴의 이해
5.1.1 모델 2에서 Front Controller 패턴으로
5.1.2 스프링 MVC의 구조
5.2 스프링 MVC의 컨트롤러
5.2.1 Spring Project의 servlet-context.xml 파일
5.2.2 스프링 MVC에서 주로 사용하는 애노테이션의 종류
5.2.3 기초적인 컨트롤러 생성 실습
5.3 WAS없이 컨트롤러를 테스트하기

6. 스프링 + MyBatis
6.1 테이블 생성 및 개발 준비
6.1.1 데이터베이스의 테이블 생성
6.1.2 도메인 객체를 위한 클래스의 설계
6.2 DAO 인터페이스의 작성
6.3 XML Mapper의 작성
6.3.1 Mapper 파일의 저장 경로
6.3.2 XML Mapper의 작성
6.3.3 myBatis-Spring에서 XML Mapper 인식
6.4 DAO 인터페이스의 구현
6.4.1 SqlSessionTemplate의 설정
6.4.2 구현 클래스 작성하기
6.5 스프링에 빈으로 등록하기
6.6 테스트 코드의 작성
6.7 MyBatis의 로그 log4jdbc-log4j2
6.8 Mybatis의 #{ } 문법
6.9 정리

PART 2 기본적인 기능의 게시물 관리

1. 등록, 수정, 삭제, 조회 기능의 구현
1.1 개발 목표 인식
1.2 각 영역에 따른 개발의 준비
1.3 프로젝트의 생성
1.4 개발 전 준비 - 데이터베이스 관련
1.4.1 DataSource의 등록
1.4.2 DataSource의 테스트
1.4.3 개발 패키지 구성
1.4.4 테이블의 생성 작업
1.4.5 테스트를 위한 SQL 준비
1.5 스프링의 UTF-8 처리 필터 등록
1.6 CSS, JavaScript 준비
1.6.1 프로젝트의 템플릿 적용
1.7 작업 내역 정리

2. 영속(persistence) 계층, 비즈니스 계층
2.1 BoardVO의 작성
2.2 DAO의 생성과 XML Mapper 작업
2.2.1 XML 네임스페이스의 추가
2.2.2 SessionFactory, SqlSessionTemplate의 추가
2.2.3 BoardDAO의 생성
2.2.4 XML Mapper에서의 SQL 처리
2.2.5 BoardDAO의 구현 클래스 BoardDAOImpl
2.2.6 BoardDAO의 테스트
2.2.7 <typeAliases>의 적용
2.3 계층별 구현 - 비즈니스 계층
2.3.1 비즈니스 계층의 구현
2.3.2 비즈니스 계층의 테스트

3. 등록 구현 - 컨트롤러와 프레젠테이션 계층
3.1 컨트롤러의 구현
3.1.1 컨트롤러 관련 고민들
3.1.2 컨트롤러의 선언
3.2 컨트롤러의 동작 확인과 루트 경로 지정
3.3 뷰(view)의 구현 - 등록
3.3.1 컨트롤러에서의 데이터 전달
3.3.2 결과 페이지의 문제점 - 새로 고침
3.3.3 리다이렉트(redirect)와 결과 데이터
3.3.4 RedirectAttributes를 이용한 숨김 데이터의 전송

4. 전체 목록 구현
4.1 컨트롤러의 완성 및 JSP의 완성
4.1.1 각 목록에 링크 처리하기
4.2 목록에 추가로 구현해야 하는 사항들

5. 조회 구현
5.1 BoardController의 기능 추가와 뷰 처리
5.1.1 조회용 페이지 작성
5.2 수정, 삭제로의 링크 처리

6. 삭제/수정 처리
6.1 삭제 처리
6.2 수정 처리

7. 예외 처리
7.1 예외 처리에 대한 팁
7.1.1 Exception을 화면으로 전달하기

8. 페이징 처리 - 영속(persistence) 계층, 비즈니스 계층
8.1 페이징 처리 방식
8.1.1 페이징 처리의 원칙
8.2 페이징 처리 개발에 필요한 지식
8.2.1 MySQL의 limit를 이용한 페이지 출력 SQL
8.3 MyBatis의 BoardDAO 처리
8.3.1 BoardDAO, XML Mapper, BoardDAOImpl의 처리
8.3.2 페이징 처리의 SQL 테스트
8.4 DAO 처리를 도와줄 Criteria 클래스 만들기
8.4.1 BoardDAO 인터페이스의 수정
8.4.2 XML Mapper의 수정
8.4.3 BoardDAOImpl의 수정
8.4.4 BoardDAOTest에서의 테스트 작업
8.5 BoardService 수정하기

9. 페이징 처리 -컨트롤러와 프레젠테이션 계층
9.1 1차 화면 테스트
9.2 화면 하단의 페이징 처리
9.2.1 endPage 구하기
9.2.2 startPage 구하기
9.2.3 totalCount와 endPage의 재계산
9.2.4 prev와 next의 계산
9.3 페이징 처리용 클래스 설계하기
9.4 BoardController와 뷰 처리
9.4.1 listPage.jsp의 처리
9.5 페이징을 위한 SQL 문의 처리
9.5.1 BoardDAO의 수정
9.5.2 XML Mapper의 수정
9.5.3 BoardDAOImpl의 수정
9.5.4 BoardService/BoardServiceImpl의 수정
9.5.5 BoardController의 수정
9.6 페이징 처리의 개선을 위한 Tip
9.6.1 스프링 MVC의 UriComponentsBuilder를 이용하는 방식
9.6.2 JavaScript를 이용하는 링크의 처리
9.7 목록 페이지와 정보 유지하기
9.7.1 BoardController의 수정
9.7.2 readPage.jsp의 작성
9.7.3 수정 페이지와 삭제 페이지의 처리

10. 검색 처리와 동적 SQL
10.1 검색에 필요한 데이터와 SearchCriteria
10.2 SearchBoardController의 작성
10.2.1 JSP 페이지의 준비
10.3 검색에 필요한 JSP 수정
10.3.1 searchType과 keyword 링크 처리
10.3.2 검색 버튼의 동작 처리
10.4 MyBatis 동적 SQL
10.4.1 BoardDAO의 수정
10.4.2 XML Mapper 수정
10.4.3 BoardDAOImpl의 수정
10.4.4 BoardDAO의 테스트
10.4.5 동적 SQL 문의 추가
10.5 BoardService와 SearchBoardController의 수정
10.6 조회, 수정, 삭제 페이지의 처리
10.6.1 게시물의 조회 처리
10.6.2 게시물의 삭제 처리
10.6.3 게시물의 수정 처리
10.7 등록 페이지 처리
10.8 최종적인 결과 확인
10.9 정리

PART 3 Ajax 댓글 처리

1. RestController와 Ajax
1.1 @RestController의 소개
1.2 예제 프로젝트의 생성
1.3 테스트용 컨트롤러 생성하기
1.3.1 @RestController의 용도
1.3.2 단순 문자열의 경우
1.3.3 루트 컨텍스트로 실행하기
1.3.4 객체를 JSON으로 반환하는 경우
1.3.5 컬렉션 타입의 객체를 반환하는 경우
1.3.6 ResponseEntity 타입

2. 댓글 처리와 REST
2.1 Advanced REST Client를 이용한 테스트
2.2 REST와 Ajax
2.3 댓글 처리를 위한 준비
2.3.1 전달 방식과 처리 방식의 결정
2.3.2 데이터 전송 방식의 결정
2.3.3 댓글을 위한 테이블 설정
2.3.4 댓글을 위한 도메인 객체 설계
2.3.5 ReplyDAO
2.3.6 ReplyService/ReplyServiceImpl 작성
 
3. REST 방식의 ReplyController 작성
3.1 등록 처리
3.2 특정 게시물의 전체 댓글 목록의 처리
3.3 수정 처리
3.3.1 HiddenMethod의 활용
3.4 삭제 처리
3.5 페이징 처리
3.5.1 ReplyDAO 처리
3.5.2 XML Mapper 처리
3.5.3 ReplyDAOImpl 처리
3.5.4 ReplyService 페이징 처리
3.5.5 ReplyController에서의 페이징 처리

4. 화면에서의 Ajax 호출
4.1 개발의 순서 결정
4.1.1 테스트를 위한 컨트롤러와 JSP
4.2 전체 댓글 목록의 테스트
4.2.1 전체 댓글 목록 출력
4.2.2 전체 목록에 대한 함수 처리
4.3 댓글 등록 화면 및 테스트
4.3.1 jQuery의 $.post( )를 사용하지 않는 이유
4.3.2 댓글 등록 후 전체 댓글 목록의 갱신
4.4 댓글 조회 및 수정/삭제
4.4.1 수정과 삭제를 위한 <div>
4.4.2 <div>에 댓글 보이기
4.4.3 삭제 호출하기
4.4.4 수정 작업 처리하기
4.5 댓글의 페이징 처리
4.5.1 댓글 페이지를 위한 <ul> 처리
4.5.2 페이지 번호 이벤트 처리
 
5. 게시물 관리의 댓글 적용
5.1 조회 화면의 수정
5.2 handlebars를 이용한 템플릿
5.2.1 handlebars 사용 연습
5.3 댓글 목록 처리
5.3.1 댓글 목록의 이벤트 처리
5.3.2 댓글 페이징의 이벤트 처리
5.4 새로운 댓글의 등록
5.4.1 댓글 등록의 이벤트 처리
5.5 수정과 삭제를 위한 Modal창
5.5.1 각 댓글의 버튼 이벤트 처리
5.6 수정과 삭제의 처리
5.7 정리

PART 4 AOP와 트랜잭션 처리

1. Spring의 AOP와 트랜잭션 관리
1.1 AOP라는 용어와 의미
1.1.1 AOP와 관련된 용어
1.1.2 Advice의 종류

2. 샘플 프로젝트의 생성과 AOP의 적용 준비
2.1 추가해야 하는 라이브러리와 설정
2.1.1 root-context.xml의 설정
2.2 샘플용 테이블 설계
2.3 샘플용 도메인 객체, DAO, XML Mapper, 서비스
2.3.1 도메인 객체 MessageVO
2.3.2 DAO 설정
2.4 서비스 객체 설정

3. AOP 연습하기
3.1 Advice 생성하기
3.1.1 SampleAdvice의 작성
3.2 컨트롤러의 작성과 테스트하기
3.3 실행 시에 전달되는 파라미터 파악하기
3.4 가장 강력한 Around

4. Spring의 트랜잭션 처리
4.1 트랜잭션에 대한 기본 설명
4.1.1 트랜잭션의 기본 원칙
4.1.2 트랜잭션을 처리하는 상황 이해하기
4.2 @Transactional 애노테이션
4.3 트랜잭션 매니저의 설정
4.3.1 root-context.xml의 처리
4.4 트랜잭션 적용 테스트
4.4.1 정상적인 경우의 테스트
4.4.2 트랜잭션이 처리되지 않은 비정상적인 경우의 테스트
4.4.3 MessageService의 트랜잭션 처리 후 테스트
4.4.4 트랜잭션에 따른 로그 변화
4.5 @Transactional의 적용 순서

5. 게시물의 댓글에 따른 트랜잭션 처리
5.1 댓글 카운트의 처리
5.1.1 BoardVO의 변경
5.1.2 boardMapper.xml의 SQL 문 변경
5.1.3 BoardDAO, ReplyDAO 변경
5.1.4 ReplyServiceImpl의 수정
5.1.5 조회 화면의 댓글 수 출력
5.1.6 조회 화면에서 댓글의 숫자 출력
5.2 조회 숫자의 처리
5.2.1 BoardDAO, XML Mapper, BoardDAOImpl의 처리
5.2.2 BoardService의 처리
5.3 정리

PART 5 게시물의 첨부파일 기능

1. 스프링 MVC의 파일 업로드
1.1 파일 업로드의 활용
1.2 예제 프로젝트의 생성
1.2.1 실습을 위한 라이브러리 추가
1.2.2 파일 업로드 관련 <bean> 설정
1.3 일반적인 파일 업로드 이해하기
1.3.1 POST 방식의 파일 업로드 처리
1.3.2 업로드 파일의 저장
1.3.3 <iframe>을 이용한 파일 업로드의 결과 처리
1.4 Ajax 방식의 파일 업로드
1.4.1 Ajax 업로드용 컨트롤러와 JSP작성하기
1.4.2 이벤트 처리하기
1.4.3 FormData를 이용한 서버 호출

2. 전송된 파일의 저장
2.1 파일 업로드용 클래스 설계하기
2.1.1 업로드 기능의 설계
2.1.2 업로드 폴더의 생성 처리
2.1.3 썸네일 생성하기
2.1.4 최종적인 파일 업로드 순서
3. UploadController의 재구성

4. 전송된 파일을 화면에 표시하기
4.1 파일 데이터 전송하기
4.1.1 UploadController의 파일 전송 기능 구현
4.1.2 일반 파일인 경우의 다운로드 테스트
4.1.3 이미지 타입의 파일인 경우의 테스트
4.2 JSP에서 파일 출력하기
4.2.1 파일 링크 처리

5. 첨부파일의 삭제
5.1 UploadController의 삭제 처리
5.2 JSP에서의 첨부파일 삭제 처리
5.2.1 파일 삭제 후 화면에서의 제거

6. 게시물 등록의 파일 업로드
6.1 개발 목표의 정리
6.2 게시물 등록 준비
6.2.1 데이터베이스에 테이블 추가
6.2.2 도메인 객체의 변화
6.2.3 BoardDAO의 변화
6.2.4 BoardService의 변경과 트랜잭션의 처리
6.3 게시물 등록을 위한 화면 처리
6.3.1 파일 업로드를 위한 register.jsp 페이지 수정하기
6.3.2 업로드 된 파일 이름의 처리를 위한 JavaScript
6.3.3 <form> 태그의 submit 처리

7. 조회 페이지와 파일 업로드
7.1 BoardVO 객체의 조회
7.1.1 BoardDAO의 처리
7.1.2 BoardService의 처리
7.1.3 컨트롤러의 수정
7.2 조회 화면에서의 처리
7.2.1 원본 이미지의 조회와 다운로드 처리

8. 게시물 수정, 삭제 작업의 파일 업로드
8.1 수정 작업 시의 BoardDAO
8.1.1 수정 작업에 대한 서비스의 트랜잭션 관리
8.1.2 수정 화면의 처리
8.1.3 삭제 처리
8.1.4 삭제 화면의 처리
8.2 정리

PART 6 인터셉터(Interceptor)를 활용하는 로그인 처리

1. Spring MVC의 인터셉터(Interceptor)
1.1 Filter와 인터셉터의 공통점과 차이점
1.2 Spring AOP 기능과 HandlerInterceptor의 차이
1.2.1 HandlerInterceptorAdapter 클래스
1.3 예제를 위한 프로젝트의 생성
1.3.1 패키지의 생성과 SampleInterceptor
1.3.2 servlet-context.xml의 인터셉터 설정
1.3.3 HomeController의 수정
1.3.4 SampleInterceptor의 처리
1.3.5 실행 및 결과
1.4 인터셉터의 request, response 활용하기
1.4.1 preHandle( )의 Object 파라미터
1.4.2 postHandle( )을 이용해서 추가적인 작업하기

2. HttpSession을 이용하는 로그인 처리
2.1 준비 작업
2.1.1 테이블 생성 및 객체 처리
2.1.2 UserDAO의 생성 및 SQL 처리
2.1.3 UserService와 UserServiceImpl 처리
2.2 컨트롤러의 처리
2.2.1 UserController의 작성
2.3 LoginInterceptor의 작성 및 설정
2.3.1 LoginInterceptor의 설정
2.3.2 로그인의 화면 처리
2.4 AuthInterceptor의 작성
2.4.1 AuthInterceptor의 설정
2.4.2 자동 페이지의 이동 처리

3. 게시물의 세부 기능 적용
3.1 인터셉터 URI mapping
3.1.1 servlet-context.xml의 설정
3.2 각 JSP 별 로그인 처리
3.2.1 게시물의 등록 페이지
3.2.2 게시물의 조회 페이지

4. 자동 로그인과 쿠키
4.1 쿠키를 이용하는 자동 로그인 방식
4.1.1 LoginInterceptor에서의 쿠키 생성하기
4.1.2 브라우저 종료 후 다시 접속하기
4.1.3 자동 로그인 구상하기
4.2 자동 로그인의 구현
4.2.1 데이터베이스의 변경
4.2.2 코드의 변경
4.2.3 UserController의 변경
4.2.4 AuthInterceptor의 변경
4.2.5 자동 로그인 테스트
4.3 로그아웃 처리
4.4 보완이 필요한 부분
4.5 정리

부록

1. MyBatis의 Mapper 인터페이스 활용
1.1 예제 프로젝트의 생성
1.1.1 XML 네임스페이스 지정
1.1.2 DataSource, SqlSessionFactory의 설정
1.2 Mapper 인터페이스의 작성
1.3 인터페이스 Mapper의 인식
1.3.1 자동으로 매퍼 인식하기
1.4 Mapper의 테스트
1.5 @Param을 이용한 다중 파라미터 처리
1.6 Mapper 인터페이스와 XML을 같이 활용하기
1.6.1 root-context.xml 파일의 수정
1.7 Dynamic SQL과 @SelectProvider
1.7.1 #{id}와 ${id}, @SelectProvider

2. 스프링 부트를 이용한 프로젝트 생성
2.1 STS 상에서 스프링 부트 프로젝트 생성하기
2.1.1 프로젝트의 실행
2.2 Controller 작성
2.3 스프링 부트에서의 데이터베이스 설정
2.3.1 application.properties 파일 설정
2.3.2 DataSource의 설정과 테스트
2.3.3 DataSource의 테스트
2.4 스프링 부트에서의 MyBatis 설정
2.4.1 SqlSessionFactory의 설정
2.5 Mapper 인터페이스의 작성과 설정 실습
2.5.1 도메인 클래스의 설계
2.5.2 Mapper 인터페이스의 작성
2.5.3 Mapper의 인식
2.5.4 Mapper 인터페이스의 테스트
2.5.5 XML 매퍼를 이용해야 하는 상황
2.6 스프링 부트의 뷰(View) 처리
2.6.1 JSP를 위한 설정 변경
2.6.2 컨트롤러의 작성 및 테스트
2.6.3 한글 테스트와 필터 처리
2.6.4 인터셉터의 설정
2.7 Thymeleaf의 설정

찾아보기

 

신고
Posted by 남가람북스 남가람북스

댓글을 달아 주세요

  1. 목이 2015.09.20 11:31 신고 Address Modify/Delete Reply

    스프링을 공부중인데 이 책의 도움을 많이 받고있습니다. 스프링이 이렇게 쉽고 재미난 프레임워크인줄 전에는 몰랐습니다. 앞으로도 좋은 책 많이 내주세요^^ !!

  2. 구멍가게 코딩단/남가람북스 2015.09.20 11:34 신고 Address Modify/Delete Reply

    감사합니다! 저희 남가람북스는 독자에게 도움이 되는 좋은 도서를 계속해서 만들어 가겠습니다.
    앞으로 많은 응원 부탁드립니다.

  3. 최재영 2015.10.06 21:53 신고 Address Modify/Delete Reply

    안녕하세요. 이번에 책을 알라딘에서 구입 해서 보게 되었습니다.^^
    어느정도 기본을 땐 친구들에게 어떤 책으로 다시 한번 다지는게 좋을까 싶어 이 책을 고르게 되었는데요. 혹시 EBOOK으로도 나올 계획이 있으신가요?

    • 구멍가게 코딩단/남가람북스 2015.10.06 21:58 신고 Address Modify/Delete

      안녕하세요, 남가람북스입니다.
      책이 출간된 지 얼마되지 않아 아직 eBook 발행 계획은 없습니다. 감사합니다.

  4. 히바리쿄야 2015.11.25 14:35 신고 Address Modify/Delete Reply

    예스 24 에서 책 구입해서 실습 하고 있습니다. 그런데
    197 페이지 실습하면서 이해가 안되는 점이 있네요 우선 ex01 로 실습을 했는데
    서버탭에서 ex01 로 프로젝트를 추가한다는 내용을 이해를 못하겠네요
    프로젝트 이름이 같으면 중복되서 같은 이름은 추가가 안되는 것으로 알고 있구요
    또한 톰캣 서버에 모듈즈 로 가보면 패스 가 /controller 로 나오지
    않고 /web 으로 나옵니다.. 그래서 모듈 추가 해서 경로를 콘트롤러 라고 바꿨는데도
    /web 으로 고정되더군요 여기서 부터 막히고 있어서 질문 드립니다..
    그리고 질문 게시판 이 있으면 좋겠네요 질문 할 곳도 없어서 당황스럽네요

    • zerockcode 2016.02.15 21:41 신고 Address Modify/Delete

      너무나 답변이 늦어서 죄송합니다.

      구멍가게 코딩단의 블로그가 있어서 대부분 질문이 그쪽으로 올 것이라고 생각하고 소홀한 점 사과드립니다.

  5. 김동억 2016.01.21 12:10 신고 Address Modify/Delete Reply

    107페이지 중간부분에 보면
    "(프로젝트 생성 시 마지막 패키지의 이름이 경로가 되므로 지금은 /web경로가 됩니다.)"
    이 부분은 완전 잘못된 설명 아닌가요?
    패키지와 컨텍스트 패스가 무슨 관계인가요..

    • zerockcode 2016.02.15 21:47 신고 Address Modify/Delete

      책을 집필할 당시의 STS는 MVC 프로젝트의 패키지의 마지막 이름이 경로로 설정되었습니다.

      최신버전에서는 약간의 차이가 있습니다.
      재판 발행시에 수정하도록 하겠습니다.

      답변이 너무 늦어서 죄송합니다.

  6. BruceLee 2016.01.30 00:10 신고 Address Modify/Delete Reply

    책 잘보고 있습니다.
    책을 보고 실습을 하던중에 381page에서 Advanced REST Client로 테스트 하는 부분이 있는데...
    책과 조금 달라서 문의합니다.
    책에서는 Set "Content-Type" header to overwrite this value. 에 Select창이 있어서
    application/json설정 할 수 있다고 하던데 실제로 그 사이트에는 그밑에 Select 창이 없습니다.
    그리고 계속 아래의 에러가 뜨는데 해결을 못하겠네요. 빨리 진도 나가고 싶은데 막히니깐 힘드네여
    도와 주십시오
    <h4>Could not read document: Can not instantiate value of type [simple type, class org.zerock.domain.ReplyVO] from String value ('replytext'); no single-String constructor/factory method
    at [Source: java.io.PushbackInputStream@c8c21; line: 1, column: 1]; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [simple type, class org.zerock.domain.ReplyVO] from String value ('replytext'); no single-String constructor/factory method
    at [Source: java.io.PushbackInputStream@c8c21; line: 1, column: 1]</h4>
    <ul>

  7. zerockcode 2016.02.15 21:57 신고 Address Modify/Delete Reply

    얼마전에 새로 나온 버전에서는 Header 부분을 Content-Type: application/json 으로 수정하셔서 테스트 하시면 됩니다.

    답변이 너무 늦어서 죄송합니다.

  8. 2Be 2016.02.21 20:09 신고 Address Modify/Delete Reply

    열심히 책보고 거의 다 만들었는데 세션값이 비는 문제가 생겨서 질문드립니다.

    1. 첫페이지 home메서드에서 로그인할때 받아온 세션속성값(login)을 유지할 수 있는 방법이 있는지 문의드립니다.
    로그인→UserController(loginPost)→로그인인터셉터postHandle통과→loginPost.jsp에서 첫페이지로 오도록 redirect→HomeController home메서드에서 return 'index'로 오도록 하면, 로그인인터셉터postHandle할때 세션에 지정한 login속성값이 home메서드에서 null값으로 들어오는 현상이 생깁니다.

    2. request.getSession();을 컨트롤러와 인터셉터에 각각 다르게 true, false로 지정해야 하는지요?

    3. 페이지마다 <%@ page session="false"%>를 없애거나 true로 바꿔줘야 하는지요?

    4. 519p에 파일업로드예제프로젝트 생성시 반드시 경로를 '/'로 해야 하는 이유가 궁금합니다.
    저는 '도메인명/프로젝트명'으로 만들어야 해서, CSS경로는 다 바꿔주고 하는 중이거든요.

    5. 194p, BoardController 글쓰기메서드인 registGET(BoardVO board, Model model)는 페이지 이동만 하므로 void반환형에 따라 요청경로값(value="/register")만 반환하므로, registerGET()처럼 매개변수가 없어도 registerPOST메서드 처리에 문제가 없지 않는지 궁금합니다.

  9. 제록코드 2016.02.24 14:55 신고 Address Modify/Delete Reply

    제가 질문을 완벽히 이해했는지 조심스럽지만.. 아래와 같이 생각하시면 될 듯 합니다.

    1. 질문하신 내용이 로그인 후에 세션 자원이 유지되지 않는 문제이신 듯 합니다만.. 우선적으로 home( )의 파라미터를 HttpSession 으로 지정하시고 확인해 보시는게 맞을 듯 합니다. 책의 예제는 세션에 path를 지정하므로 이 역시 확인이 필요합니다.

    2. 둘 중 하나만 지정하셔도 큰 문제는 없습니다.

    3. 서버에서 셰션을 처리해야하면 서버에 부담을 줄 수 있습니다. 셰션 자원을 사용할 페이지와 사용하지 않는 페이지를 구분하는 습관을 가지시는게 좋습니다. (주로 튜닝관련 이슈입니다)

    4. '/' 경로를 기준으로 하면 모든 경로는 절대 경로로 작성할 수 있도록 통일성 있게 진행할 수 있습니다. 인쿠르드나 링크에서 상대 경로를 이용하면 가끔 꼬일 수가 있으니 절대 경로를 이용하시는게 좋습니다.


    5. POST방식의 경우라면 대부분 데이터를 처리하기 위해서이므로 파라미터가 있는 것이 일반적입니다. 파라미터가 없어도 큰 문제는 없습니다.

  10. 강사 2016.06.01 15:32 신고 Address Modify/Delete Reply

    코드로 배우는 스프링 웹 프로젝트 강의할 때 쓰면 좋을 ppt 자료 교안 있는지 궁금합니다

  11. 남가람북스 남가람북스 2016.06.01 15:35 신고 Address Modify/Delete Reply

    네, 강의자료도 있습니다. 메일로 연락 주시면 보내드리겠습니다. ngrbooks@naver.com 감사합니다.

  12. 김은찬 2016.06.23 16:15 신고 Address Modify/Delete Reply

    136페이지에 스프링에서 해당 패키지를 스캔하지 않으면 제대로 스프링의 빈으로 등록되지 못한다. 이 처리는 root-context.xml을 이용해서 아래오 같이 설정한다. 라고 적혀 있는 데, 안되서 찾다 보니까. root-context.xml에 추가하는 게 아니라, servlet-context.xml에 추가하니까 되네요. 만약 제가 틀렸다면 답신 부탁드립니다. 이 책 정주행 중이거든요.

  13. 쿠키 2016.06.23 16:44 신고 Address Modify/Delete Reply

    servlet-context.xml의 경우는 웹과 관련된 설정만을 분리하기 위해서 사용합니다.

    root-context.xml에 추가하시는게 맞는 설정인데요..

    이게 잘못되었다면 대부분은 servlet-context.xml의 component-scan에서 문제를 일으키는 경우가 있을 수 있습니다.

    가능하시면 cookie_00@naver.com으로 지금 작성하시는 프로젝트 코드를 보내주시면 좀 더 자세히 볼 수 있을 겁니다.

    ...그리고 cafe.naver.com/gugucoding 카페를 제가 우선적으로 확인하기 때문에 가능하시면 이쪽으로 질문을 올려주시면 더 빨리 해결하실 수 있을 겁니다^^

  14. 이지훈 2016.07.27 15:59 신고 Address Modify/Delete Reply

    혹시 책에서 환경설정 할때 설치 파일 버전은 없나요?? 이제 막 스프링 한번 시작해보려 하는데 버전이 많이 틀린거 같네요.;;

    • 남가람북스 2016.07.27 17:20 신고 Address Modify/Delete

      안녕하세요. 남가람북스입니다. 저자 선생님께서 운영하시는 카페에 질문을 올려 주시면 빠른 시간 내에 답을 드릴 것입니다. 카페 주소는 cafe.naver.com/gugucoding 입니다. 감사합니다.

  15. 강태민 2016.07.31 21:59 신고 Address Modify/Delete Reply

    329쪽 동적SQL문에서

    <if test="searchType == 't'.toString()"> and title like CONCAT('%',#{keyword},'%')</if>
    이렇게 하면 numberformatexception: for input string:"t"라는 에러가 뜹니다.

    나름 구글링을 열심히 해서

    1. <if test='searchType == "t"'> : 쌍 따옴표와 홈따옴표의 위치 변경

    2. <if test="searchTyp e== &quot;t&quot;"> - HTML 코드 사용

    3. <if test="searchType == 't'.toString()"> - toString() 함수 사용

    이런식의 해결방법을 찾아봤지만 다 numberformatexception가 발생합니다.

    다만, <if test="searchType == 't'"> 그리고 <if test="searchType.equals('t')"> 이 두 가지 방법은 에러가 발생하지 않고
    정상적으로 테스트가 완료됩니다. 하지만, if문이 무조건 false가 나오는 것 같습니다.(if절 내의 쿼리문이 전혀 실행되지 않음)

    구글링을 해도 저에게 맞는 해결방법이 없네요. 꼭 해결방법 부탁드립니다.

  16. 도사 2016.10.31 22:00 신고 Address Modify/Delete Reply

    저 역시 몇일전에 책을 구입했는데..
    저자 카페는 카페 회원만 볼 수 있게 되어있는데..
    꼭 카페에 가입히야하는지요.

    • 구코단 2016.10.31 23:26 신고 Address Modify/Delete

      구멍가게 코딩단 카페는 네이버 카페에 회원제로 관리됩니다.

      굳이 회원제로 운영하는 이유는 최신 원고나 수정에 대해서 회원분들에게 우선적으로 내용을 제공하기 위해서 입니다.

      양해부탁드립니다

  17. 도사 2016.11.16 11:52 신고 Address Modify/Delete Reply

    저의 개발 환경
    1. windows 7 ult, 64bit
    2. java C:\Program Files\Java\jdk1.8.0_111
    jre C:\Program Files\Java\jre1.8.0_111
    3. Spring Tool suite 3.8.2 RELEASE build id : 201610040743
    4. tomcat 8.0
    5. 1장에서 부터 오류입니다. 뭐가 잘못 된건지 알 수가 없어서...
    6. 오류 내용 -- 아래 --
    11월 16, 2016 11:42:03 오전 org.apache.tomcat.util.digester.SetPropertiesRule begin
    경고: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:ex00' did not find a matching property.
    11월 16, 2016 11:42:03 오전 org.apache.catalina.startup.VersionLoggerListener log
    정보: Server version: Apache Tomcat/8.0.38
    11월 16, 2016 11:42:03 오전 org.apache.catalina.startup.VersionLoggerListener log
    정보: Server built: Oct 6 2016 20:51:55 UTC
    11월 16, 2016 11:42:03 오전 org.apache.catalina.startup.VersionLoggerListener log
    정보: Server number: 8.0.38.0
    11월 16, 2016 11:42:03 오전 org.apache.catalina.startup.VersionLoggerListener log
    정보: OS Name: Windows 7
    11월 16, 2016 11:42:03 오전 org.apache.catalina.startup.VersionLoggerListener log
    정보: OS Version: 6.1
    11월 16, 2016 11:42:03 오전 org.apache.catalina.startup.VersionLoggerListener log
    정보: Architecture: amd64
    11월 16, 2016 11:42:03 오전 org.apache.catalina.startup.VersionLoggerListener log
    정보: Java Home: C:\Program Files\Java\jre1.8.0_111
    11월 16, 2016 11:42:03 오전 org.apache.catalina.startup.VersionLoggerListener log
    정보: JVM Version: 1.8.0_111-b14
    11월 16, 2016 11:42:03 오전 org.apache.catalina.startup.VersionLoggerListener log
    정보: JVM Vendor: Oracle Corporation
    11월 16, 2016 11:42:03 오전 org.apache.catalina.startup.VersionLoggerListener log
    정보: CATALINA_BASE: E:\work\spring\.metadata\.plugins\org.eclipse.wst.server.core\tmp0
    11월 16, 2016 11:42:03 오전 org.apache.catalina.startup.VersionLoggerListener log
    정보: CATALINA_HOME: E:\Tomcat80
    11월 16, 2016 11:42:03 오전 org.apache.catalina.startup.VersionLoggerListener log
    정보: Command line argument: -Dcatalina.base=E:\work\spring\.metadata\.plugins\org.eclipse.wst.server.core\tmp0
    11월 16, 2016 11:42:03 오전 org.apache.catalina.startup.VersionLoggerListener log
    정보: Command line argument: -Dcatalina.home=E:\Tomcat80
    11월 16, 2016 11:42:03 오전 org.apache.catalina.startup.VersionLoggerListener log
    정보: Command line argument: -Dwtp.deploy=E:\work\spring\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps
    11월 16, 2016 11:42:03 오전 org.apache.catalina.startup.VersionLoggerListener log
    정보: Command line argument: -Djava.endorsed.dirs=E:\Tomcat80\endorsed
    11월 16, 2016 11:42:03 오전 org.apache.catalina.startup.VersionLoggerListener log
    정보: Command line argument: -Dfile.encoding=MS949
    11월 16, 2016 11:42:03 오전 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
    정보: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre1.8.0_111\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;.
    11월 16, 2016 11:42:03 오전 org.apache.coyote.AbstractProtocol init
    정보: Initializing ProtocolHandler ["http-nio-8080"]
    11월 16, 2016 11:42:04 오전 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
    정보: Using a shared selector for servlet write/read
    11월 16, 2016 11:42:04 오전 org.apache.coyote.AbstractProtocol init
    정보: Initializing ProtocolHandler ["ajp-nio-8009"]
    11월 16, 2016 11:42:04 오전 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
    정보: Using a shared selector for servlet write/read
    11월 16, 2016 11:42:04 오전 org.apache.catalina.startup.Catalina load
    정보: Initialization processed in 443 ms
    11월 16, 2016 11:42:04 오전 org.apache.catalina.core.StandardService startInternal
    정보: Starting service Catalina
    11월 16, 2016 11:42:04 오전 org.apache.catalina.core.StandardEngine startInternal
    정보: Starting Servlet Engine: Apache Tomcat/8.0.38
    11월 16, 2016 11:42:04 오전 org.apache.catalina.core.ContainerBase startInternal
    심각: A child container failed during start
    java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/web]]
    at java.util.concurrent.FutureTask.report(Unknown Source)
    at java.util.concurrent.FutureTask.get(Unknown Source)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:915)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:871)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1407)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1397)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
    Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/web]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
    ... 6 more
    Caused by: org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.webresources.StandardRoot@50e4dcfb]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
    at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4969)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5099)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    ... 6 more
    Caused by: org.apache.catalina.LifecycleException: Failed to initialize component [org.apache.catalina.webresources.JarResourceSet@4a3c3471]
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:135)
    at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:706)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    ... 9 more
    Caused by: java.lang.IllegalArgumentException: java.util.zip.ZipException: invalid LOC header (bad signature)
    at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:113)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    ... 12 more
    Caused by: java.util.zip.ZipException: invalid LOC header (bad signature)
    at java.util.zip.ZipFile.read(Native Method)
    at java.util.zip.ZipFile.access$1400(Unknown Source)
    at java.util.zip.ZipFile$ZipFileInputStream.read(Unknown Source)
    at java.util.zip.ZipFile$ZipFileInflaterInputStream.fill(Unknown Source)
    at java.util.zip.InflaterInputStream.read(Unknown Source)
    at sun.misc.IOUtils.readFully(Unknown Source)
    at java.util.jar.JarFile.getBytes(Unknown Source)
    at java.util.jar.JarFile.getManifestFromReference(Unknown Source)
    at java.util.jar.JarFile.getManifest(Unknown Source)
    at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:111)
    ... 13 more

    11월 16, 2016 11:42:04 오전 org.apache.catalina.core.ContainerBase startInternal
    심각: A child container failed during start
    java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
    at java.util.concurrent.FutureTask.report(Unknown Source)
    at java.util.concurrent.FutureTask.get(Unknown Source)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:915)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:441)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:787)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
    Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1407)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1397)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
    Caused by: org.apache.catalina.LifecycleException: A child container failed during start
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:923)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:871)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    ... 6 more

    11월 16, 2016 11:42:04 오전 org.apache.catalina.startup.Catalina start
    심각: The required Server component failed to start so Tomcat is unable to start.
    org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8005]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
    Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardService[Catalina]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:787)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    ... 7 more
    Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:441)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    ... 9 more
    Caused by: org.apache.catalina.LifecycleException: A child container failed during start
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:923)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    ... 11 more

    11월 16, 2016 11:42:04 오전 org.apache.coyote.AbstractProtocol pause
    정보: Pausing ProtocolHandler ["http-nio-8080"]
    11월 16, 2016 11:42:04 오전 org.apache.coyote.AbstractProtocol pause
    정보: Pausing ProtocolHandler ["ajp-nio-8009"]
    11월 16, 2016 11:42:04 오전 org.apache.catalina.core.StandardService stopInternal
    정보: Stopping service Catalina
    11월 16, 2016 11:42:04 오전 org.apache.coyote.AbstractProtocol destroy
    정보: Destroying ProtocolHandler ["http-nio-8080"]
    11월 16, 2016 11:42:04 오전 org.apache.coyote.AbstractProtocol destroy
    심각: Failed to destroy end point associated with ProtocolHandler ["http-nio-8080"]
    java.lang.NullPointerException
    at org.apache.tomcat.util.net.NioEndpoint.releaseCaches(NioEndpoint.java:316)
    at org.apache.tomcat.util.net.NioEndpoint.unbind(NioEndpoint.java:492)
    at org.apache.tomcat.util.net.AbstractEndpoint.destroy(AbstractEndpoint.java:821)
    at org.apache.coyote.AbstractProtocol.destroy(AbstractProtocol.java:551)
    at org.apache.catalina.connector.Connector.destroyInternal(Connector.java:1023)
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:292)
    at org.apache.catalina.core.StandardService.destroyInternal(StandardService.java:589)
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:292)
    at org.apache.catalina.core.StandardServer.destroyInternal(StandardServer.java:877)
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:292)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:633)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)

    11월 16, 2016 11:42:04 오전 org.apache.coyote.AbstractProtocol destroy
    정보: Destroying ProtocolHandler ["ajp-nio-8009"]
    11월 16, 2016 11:42:04 오전 org.apache.coyote.AbstractProtocol destroy
    심각: Failed to destroy end point associated with ProtocolHandler ["ajp-nio-8009"]
    java.lang.NullPointerException
    at org.apache.tomcat.util.net.NioEndpoint.releaseCaches(NioEndpoint.java:316)
    at org.apache.tomcat.util.net.NioEndpoint.unbind(NioEndpoint.java:492)
    at org.apache.tomcat.util.net.AbstractEndpoint.destroy(AbstractEndpoint.java:821)
    at org.apache.coyote.AbstractProtocol.destroy(AbstractProtocol.java:551)
    at org.apache.catalina.connector.Connector.destroyInternal(Connector.java:1023)
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:292)
    at org.apache.catalina.core.StandardService.destroyInternal(StandardService.java:589)
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:292)
    at org.apache.catalina.core.StandardServer.destroyInternal(StandardServer.java:877)
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:292)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:633)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)

  18. 도란도란 2017.07.11 09:50 신고 Address Modify/Delete Reply

    정말 완벽합니다. 굳굳

  19. 장병학 2017.08.07 15:06 신고 Address Modify/Delete Reply

    8판 462쪽에 SQL문 문의입니다.
    책에는 tbl_message테이블을 생성하는 쿼리문이 두번 똑같이 반복되어 나오는데요,
    461쪽을 보면 tbl_user라는 테이블을 함께 사용하는걸로 보입니다.
    아마, 하나는 tbl_message테이블, 하나는 tbl_user테이블을 생성하는 쿼리문이 와야하는거 같은데...
    지금 이대로 쿼리문을 작성하면 동일한 테이블을 생성하는거에서 걸릴테고,
    밑에 외래키지정에도 없는테이블의 없는 컬럼값이라고 오류가 뜰텐데...
    정오표는 책과 동일하네요. 수정된 내용이 없어요.



 


예제 소스가 실행 안 되는 문제는 Xcode 버전 차이에 따른 것입니다.예제 소스 안의
import Cocoa를  import UIKit변경해주세요.

더불어 버전 차이로 인한 오류는 Xcode 메뉴 중

[Edit] -> [Convert] -> [To Latest Swift Syntax]로 확인할 수 있습니다.

 

나머지 소스코드 오탈자는 자료실의 정오표를 참조하세요.

-제목-

누구나 재밌게 배우는 마법 Swift

-원서명-

Swift for Beginners 

저자: 보이시 G. 피트르(Boisy G. Pitre)

출판사: 남가람북스

역자: 정혜경

발행일: 2015-06-29

ISBN: 979-11-954845-1-5

가격: 26,000

페이지: 408

판형: 182*232

바코드:9 791195 484515 93000

 

-저자 소개-

저자 Boisy G. Pitre Affectiva사의 모바일 비저너리이자 iOS 수석개발자입니다. Affectiva사는 MIT Media Lab에서 분사되었으며 감정기술을 선도하는 기업으로 모바일 기기로 감정을 읽을 수 있는 모바일 SDK 앱을 최초로 개발했습니다. 저자는 Nuance Communications사의 Mac Products Group의 멤버로 근무하며 Dragon Dictate 앱 개발팀과 함께 일한 경험이 있습니다.

저자는 날씨 및 데이터 수집 시장을 확인할 수 있는 Mac iOS 애플리케이션용 소프트웨어 회사 Tee-Boy를 소유하고 있으며, MacTech 매거진의 Developer to Developer 칼럼을 매달 연재하고 있습니다.

Bill Logguidice와 함께 Taylor & Francis 출판사에서 출간한 CoCo: The Colorful History of Tandy's Underdog Computer를 공동으로 집필했습니다.

Boisy G. Pitre는 루이지애나대학교 Lafayette 캠퍼스에서 컴퓨터 공학 석사 학위를 받았으며 루이지애나 Prairie Ronde의 조용한 외곽지역에 살고 있습니다. Mac iOS 개발 이외에도 레트로 컴퓨팅(retro-computing), 햄 라디오(ham radio), 자동판매기 및 오락실용 게임 복원, 농사짓기, 남부 루이지애나의 프랑스 음악을 연주하는 등 다양한 취미를 가지고 있습니다.

 

-책소개-

새로운 프로그래밍 언어를 배우는 것은 벅찬 일입니다. 애플은 Swift 언어로 Cocoa Cocoa Touch의 혁신적이고 새로운 프로그래밍 언어를 개발자들에게 제공함으로써 iOS OS X 앱을 개발할 수 있는 진입 장벽을 낮추었습니다.

 Swift 언어가 처음 접하는 언어라면 이 책이 여러분에게 적합한 책입니다. C, C++, Objective-C 언어를 경험하지 못한 독자들에게도 이 책을 추천합니다. 이 책을 가이드 삼아 Swift 코드를 작성하고 플레이그라운드로 즉각적인 결과를 확인할 수 있습니다. 저자 Boisy G. Pitre는 변수, 상수, 타입, 배열, 딕셔너리 등 Swift 언어의 개념을 잡는데, 확실한 근거를 제시해줍니다. 개념 설명이 끝나고 나서 iOS OS X용 앱을 개발하는데 Swift의 혁신적인 Xcode 통합 개발 환경을 사용하는 방법도 보여줍니다.

 이 책에 포함된 내용:

#. 자세한 설명, 충분한 그림, 명확한 예제

#. 실세계의 안내 및 조언

#. 노련한 Mac iOS 개발자가 주는 훌륭한 실무

#. Xcode, 플레이그라운드, REPL 사용 방법 설명

 Boisy Pitre의 주요 매킨토시 개발 프로젝트에 참여하고 MacTech 매거진에 글을 기고하는 경험을 바탕으로 애플의 새로운 프로그래밍 언어 Swift를 쉽고 자세하게 설명했습니다.”

 -출판사 리뷰-

Swift는 애플이 출시한 새로운 프로그래밍 언어로 iOS Mac OS용 앱을 개발하기 위한 언어이며 모바일뿐만 아니라 데스크톱 컴퓨터를 통틀어 최고의 컴퓨터 언어가 될 것입니다. Swift는 배우기 어려운 프로그래밍 언어인 Objective-C와 비교하면 배우기 쉽고 사용하기 편한 언어라는 장점이 있습니다. 애플은 오랫동안 자사 플랫폼의 프로그래밍 언어로 Objective-C를 주로 사용해 왔지만 Swift를 선보이고 나서 Swift가 주력 프로그래밍 언어가 되어 가고 있습니다.

Swift는 배우기 쉬울 뿐만 아니라 매우 강력한 도구이기도 합니다. 이 책을 통해 Swift의 강점을 경험할 수 있습니다.

이 책의 대상 독자(WHO IS THIS BOOK FOR?)

이 책은 초급자를 위한 책입니다. Swift 자체가 출시된 지 얼마 되지 않은 언어인지라 우리 모두 이 언어에 대해서는 초급자라고 볼 수 있습니다. Swift가 첫 프로그래밍 언어이거나 다른 언어를 접해보고 두 번째로 배우고자 하는 분들도 있을 것입니다. 그 중 많은 분이 Objective-C, C, 그리고 C++와 같은 프로그래밍 언어가 처음일 것입니다.

컴퓨터 언어를 이해하고 사용한 경험이 있는 분이 이 책의 가장 이상적인 독자입니다. 그렇지만 이 책은 학습 의욕을 가진 초보자를 위해 만들었습니다. 경험이 많은 개발자 입장에서 보면 다른 프로그래밍 언어에도 사용되는 개념이 Swift에도 많아 책의 앞부분은 가볍게 읽는 수준이지만 초보자에게는 이 앞부분이 매우 중요한 부분입니다.

독자 여러분의 수준이나 이전 경험에 상관없이누구나 재밌게 배우는 마법 Swift’ Swift를 배우고자 하는 모든 사람에게 적합합니다.

책 이용 방법(HOW TO USE THIS BOOK)

다른 유사한 책처럼누구나 재밌게 배우는 마법 Swift’는 처음부터 끝까지 읽을만한 가치가 있습니다. 각 장에 나오는 코드 예제들은 이전 장에서 가져온 예제를 기반으로 하고 있습니다. 하지만, 몇 가지 예제만 제외하면 코드 예제는 해당 장에만 국한됩니다.

이 책에 상당히 많은 코드 예제를 실었지만, 독자들이 버거워할 만큼 많지는 않습니다. 문장 사이에 스크린 샷을 많이 넣어 초급자들이 Swift Xcode 도구를 쉽게 사용할 수 있도록 했습니다.

 

-목차-

Section Ⅰ

기본(The Basics)

 

1 Swift 소개(Introducing Swift)

혁명과도 같은 진화(EVOLUTIONARY, YET REVOLUTIONARY)

성공을 위한 준비(PREPARING FOR SUCCESS)

준비! 시작!(READY, SET...)

Swift 실행하기(DIVING INTO SWIFT)

선언의 힘(THE POWER OF DECLARATION)

상수는 변하지 않는 값(CONSTANTS ARE CONSISTENT)

자료 타입(THIS THING CALLED A TYPE)

문자열(STRINGS AND THINGS)

계산하기(MATH AND MORE)

참 또는 거짓(TRUE OR FALSE)

출력도 쉽게(PRINTING MADE EASY)

앨리어스 사용(USING ALIASES)

데이터를 튜플로 묶기(GROUPING DATA WITH TUPLES)

옵셔널(OPTIONALS)

요약(SUMMARY)

 

2장 컬렉션 사용하기(Working with Collections)

사탕 항아리(THE CANDY JAR)

딕셔너리(THE DICTIONARY)

배열 중의 배열(ARRAYS OF ARRAYS?)

처음부터 시작하기(STARTING FROM SCRATCH)

컬렉션 반복(ITERATING COLLECTIONS)

요약(SUMMARY)

 

3장 제어하기(Taking Control)

추가 팁(FOR WHAT IT’S WORTH)

플레이할 시간(IT’S TIME TO PLAY)

의사 결정(MAKING DECISIONS)

요약(SUMMARY)

 

4장 함수와 클로저 사용하기(Writing Functions and Closures)

함수(THE FUNCTION)

클로저 사용하기(BRINGING CLOSURE)

요약(SUMMING IT UP)

잠깐 예습(STAY CLASSY)

 

5장 클래스와 구조체로 구성하기(Organizing with Classes and Structures)

객체 사용의 무한 가능성(OBJECTS ARE EVERYWHERE)

세련된 Swift 객체(SWIFT OBJECTS ARE CLASSY)

상속(INHERITANCE)

복습 및 예습(LOOKING BACK, LOOKING AHEAD)

 

6장 프로토콜과 확장으로 형식화하기(Formalizing with Protocols and Extensions)

프로토콜 따라 하기(FOLLOWING PROTOCOL)

확장으로 확장하기(EXTENDING WITH EXTENSIONS)

요약(SUMMARY)

 

Section Ⅱ

Swift로 개발하기 (Developing with Swift)

 

7 Xcode로 작업하기(Working with Xcode)

Xcode의 역사(XCODE’S PEDIGREE)

Swift로 첫 프로젝트 만들기(CREATING YOUR FIRST SWIFT PROJECT)

시작하기(DIVING DOWN)

흥미 유발(PIQUING YOUR INTEREST)

드디어 앱 생성(YOU MADE AN APP!)

 

8장 더 나은 앱 만들기(Making a Better App)

복리(COMPOUNDING)

버그를 만났을 때(WHEN THINGS GO WRONG)

테스트의 값(THE VALUE OF TESTING)

요약(WRAPPING UP)

 

9 Swift로 모바일 앱 개발하기(Going Mobile with Swift)

모바일 대 컴퓨터(IN YOUR POCKET VS. ON YOUR DESK)

여러분의 기억력은 어떻습니까?(HOW’S YOUR MEMORY?)

프로젝트 생성하기(CREATING THE PROJECT)

사용자 인터페이스 만들기(BUILDING THE USER INTERFACE)

모델 뷰 컨트롤러(THE MODEL-VIEW-CONTROLLER)

게임 코딩하기(CODING THE GAME)

스토리보드로 돌아가기(BACK TO THE STORYBOARD)

게임 실행(TIME TO PLAY)

 

10장 앞으로 전진(Advancing Ahead)

Swift로 메모리 관리하기(MEMORY MANAGEMENT IN SWIFT)

논리적으로 생각하기(THINKING LOGICALLY)

제네릭(GENERICS)

연산자 오버로딩(OVERLOADING OPERATORS)

동등 대 동일(EQUAL VS. IDENTICAL)

스크립트와 Swift(SCRIPTING AND SWIFT)

SOS 요청하기(CALLING S.O.S.)

, 이제 진정한 여행의 시작(AND NOW, YOUR JOURNEY BEGINS)

 

찾아보기

APPENDIX



신고
Posted by 남가람북스 남가람북스

댓글을 달아 주세요

  1. 장난하나 2015.07.20 12:22 신고 Address Modify/Delete Reply

    완전 비추 책.....예제 다 틀리고 줄도 재멋대로에......보다 보면 욕나오는 책임

  2. 남가람북스 남가람북스 2015.07.27 14:34 신고 Address Modify/Delete Reply

    예제 소스가 실행 안 되는 문제는 Xcode 버전 차이에 따른 것입니다.예제 소스 안의
    import Cocoa를 import UIKit로 변경해주세요.

    더불어 버전 차이로 인한 오류는 Xcode 메뉴 중

    [Edit] -> [Convert] -> [To Latest Swift Syntax]로 확인할 수 있습니다.

  3. 뭐냐 2015.08.28 19:21 신고 Address Modify/Delete Reply

    윗댓글 완전 공감!!!오타 너무 많고 버전업 되니까 안되는 것들도 있고 참나 입문자용인데 이렇게 날림으로 내면 어떡합니까? 일 좀 제대로 하세요 진짜


 

-제목-

지식 제로부터 배우는 소프트웨어 테스트


-부제-

테스트 업계 일인자가 말하는 현장에서 꼭 필요한 방법


저자: 타카하시 쥬이치

출판사: 남가람북스

역자: 안동현

발행일: 2015-06-29

ISBN: 979-11-954845-0-8 

가격: 20,000원

페이지: 248

판형: 신국판(152*224)

바코드: 9 791195 484508 93000 


-저자 소개-

지은이: 타카하시 쥬이치(高橋?一)


정보공학 박사. 1964년 도쿄 출생. 플로리다 공과대학 대학원에서 Cem Kaner 박사, James Whittaker 박사에게 소프트웨어 테스트를 지도받은 다음, 히로시마 시립대학에서 소프트웨어 테스트 연구로 박사 학위 취득. 미국 Microsoft 사, 독일 SAP 사에서 소프트웨어 테스트 업무에 종사하였으며 지금은 일본 대형 가전제조사에서 근무 중.

저서로는 《知識ゼロから?ぶソフトウェアプロジェクト管理(지식 제로부터 배우는 소프트웨어 프로젝트 관리)》(쇼에이샤), 《現場の仕事がバリバリ進むソフトウェアテスト手法(현장 업무가 척척 진행되는 소프트웨어 테스트 방법)》(기술평론사)이 있습니다.


-책소개-

테스트 엔지니어 필독서로써 베스트셀러가 8년만에 다시 등장! 

엔지니어로서의 마음가짐이나 소프트웨어 테스트를 할 수 있는 것과 할 수 없는 것 등 초보자가 먼저 알아야 할 것들에 대해서 설명합니다.

또한 반드시 실시하는 각종 테스트 기법의 기초와 포인트, Agile 등 새로운 개발 방법을 지원하는 테스트의 생각 등 테스트 기술자에게 필수적인 지식과 정보를 친절한 설명과 예시로 알기 쉽게 해설 한 책입니다.

테스트 기술자의 입문 서적이고 최적의 기본서로서, 소프트웨어 개발 현장의 요구에 입각한 내용을 엄선했고, 더 쉽게 업그레이드했습니다. 소프트웨어 테스트에 종사하는 초급 엔지니어나 테스트 기술자를 육성 및 양성하는 리더 층에도 알맞은 책입니다.


이 책의 특징


#. 애자일·클라우드 시대의 소프트웨어 테스트

#. 신뢰와 실적 넘버원의 인기 입문서! 리뉴얼판 등장!

#. 테스트 업계 일인자가 말하는 현장에서 꼭 필요한 방법 + 필수 이론

#. 애플리케이션 개발, 시스템 개발, 임베디드 개발, 거기에 애자일과 클라우드까지

#. 다양한 테스트를 통해 중요한 지식을 알기 쉽고 배우기 쉽도록



-출판사 리뷰-

이미 출간된 《지식 제로부터 배우는 소프트웨어 테스트》도서는 일본 아마존 베스트셀러입니다. 테스트 업계에서는 '돼지 책'(이전 판 표지 그림의 벌레가 돼지처럼 보임)이라 불리거나 ‘글자가 큼에도 비쌈’ 등 외형적인 비판은 많았습니다만, 하지만 내용에 대해서는 비판이 없었습니다. 

독자분들에게 인정을 받았다는 것은 사실인듯하므로 지엽적인 부분은 건드리지 않은 채 개정판이 나왔습니다.

이 책에서는 어려운 내용을 간단히 쓰고자 노력했습니다. 또한, 시중에 나온 테스트 관련 서적 중에는 자신의 실제 체험에서의 경험만을 다룬 것이 많습니다. 이 책에서는 이를 방지하고자 항상 참고 문헌을 참고하여(필자의 경험만을 전한다면 단순한 실패 사례집이 될 것입니다.) 올바른 소프트웨어 세계를 전달하고자 노력했습니다. 


[개정판에서 달라진 부분]

이번 판에서 달라진 부분을 정리하고자 합니다. 이전 판과 달리 소프트웨어 테스트 세상도 많이 달라졌습니다. 그 당시는 최선이라고 생각했으나 지금의 시대와 맞지 않는 부분이라면 과감히 삭제하고 시대가 요구하는 것들을 추가했습니다.

[탐색적 테스트(4장)]

탐색적 테스트는 이전 판이 나왔던 때부터 있었던 것으로, 탐색적 테스트를 제창한 Cem Kaner가 스승이었기도 하므로 다루었어야 했었지만, 일본에서는 그리 널리 알려지지 않아서 이전 판에서는 일부러 포함하지 않았었습니다. 그 후 일본에서도 조금씩 알려지기 시작하였으며 대규모·단기간 개발에서는 유용하다고 생각하므로 이번에 추가하게 되었습니다. 

[신뢰성 테스트]

눈물을 삼키고 ‘MBTF (평균고장간격: Mead Time Between Failure)’ 등을 포함했습니다(5.4 등). 소프트웨어의 품질과 관련된 사람으로서 소프트웨어 신뢰성의 정의를 모른다는 것도 좀 그렇기도 해서입니다(실제로 잘 모르는 사람도 많습니다만…).

[데이터 흐름 테스트]

데이터 흐름 테스트는 강력한 테스트 방법입니다만, 이를 지원하는 도구가 없다는 것과 망라 테스트와 마찬가지의 접근 방식이므로 제외했습니다.

[정적 해석 도구]

정적 해석 도구의 진화는 놀라우며 그 효용과 투자 대비 효과는 아주 뛰어납니다만, 해마다 달라진다는 점을 고려하여 해당 장을 삭제했습니다(다만, 보안에 관한 설명은 남겨 두었습니다[5.3.4]). 2013년 현재 C/C++와 관련해서는 Coverity Prevent나 GRAMMATECH CodeSonar*라는 것이 유용하며, Java와 관련해서는 FindBugs[ANE08] 등의 오픈 소스 도구가 몇 가지 있으므로 선택하고자 할 때는 최신 정보를 참고하시기 바랍니다. 

[새로운 장]

'그래도 테스트가 잘 안 되는 분께'라는 장을 추가했습니다(9장). 실제 학자가 생각하는 소프트웨어 테스트와 소프트웨어 테스트 실무 담당자가 생각하는 것과의 사이에는 괴리가 있습니다. 이 장에서는 학자이자 실무자인 필자의 경험담(실패담)을 설명합니다. 

[용어와 관련하여]

용어는 많은 부분 ISTQB (International Software Testing Qualifications Board)를 기준으로 했습니다. 그러나 ISTQB와 테스트 업계에 알려진 논문과 용어가 다를 때는 논문에 사용한 것을 채택하기도 했습니다. 또한, 책에서 용어가 통일되지 않을 때 필자의 판단으로 다른 용어를 사용한 곳도 있습니다. 이럴 때는 각주를 이용하여 함께 적도록 하겠습니다.


-목차-

1장 시작하며
1.1 테스트를 시작하기 전에 - ‘버그’란 무엇인가?
1.2 버그 때문에 일어난 우주 개발 사고 - 소프트웨어 불량이란?
1.3 버그 때문에 일어난 우주 개발 사고
1.4 테스트 담당자의 마음가짐
- 선배로부터 배우는 소프트웨어 테스트 비법
1.5 완전무결한 소프트웨어 테스트가 가능한가?
- 100만 번의 테스트조차도 충분하다고는 말할 수 없음
1.6 소프트웨어 테스트 실력 점검 - 당신의 테스트 능력 확인

2장 소프트웨어 테스트의 기본 - 화이트박스 테스트
2.1 화이트박스 테스트란? - 프로그램 내부 구조를 철저하게 분석
2.1.1 어떤 테스트 방법이 효과적인가?
2.2 프로그램의 동작 상태를 테스트 - 제어 흐름 테스트
2.3 인기 게임 소프트웨어의 버그
2.4 스테이트먼트 커버리지
2.5 브랜치 커버리지
2.6 커버리지 기준
2.6.1 커버리지 테스트에 포함되지 않은 코드
2.7 커버리지 테스트로 검출할 수 없는 버그
2.7.1 프로그램 루프
2.7.2 요구 사항 자체가 틀렸거나 기능이 준비되지 않은 버그
2.7.3 데이터와 관련된 버그
2.7.4 멀티 태스크나 인터럽트 관련 버그
2.8 커버리지 테스트의 함정
2.9 화이트박스 테스트의 부활(TDD)
2.9.1 애자일이란 것
2.9.2 TDD 단위 테스트 작성
2.9.3 리팩토링(코드 청소)

3장 엔지니어가 자주 사용하는 방법
3.1 블랙박스 테스트의 기본 - 등가 분할과 경계값 분석
3.1.1 간단한 등가 분할·경계값 분석의 예
3.2 어떤 입력이라도 바르게 처리하려면 - 등가 분할법
3.2.1 테스트 케이스 작성 - 아주 강력한 테스트 케이스
3.2.2 테스트 케이스 수를 줄이려면 - 실천적인 테스트 케이스
3.3 버그가 있는 곳 찾기 - 경계값 분석법
3.3.1 테스트 케이스 작성
3.3.2 경계를 테스트하려면 - On-Off 포인트법
3.3.3 경험칙에 따른 테스트 케이스
3.4 복잡한 입출력을 위한 데이터 - 디시전 테이블
3.5 GUI 테스트 - 상태 전이 테스트
3.5.1 상태 전이란?
3.5.2 상태 전이 테스트에서 발견할 버그
3.6 원숭이도 할 수 있는 테스트? - 무작위 테스트
3.7 정리

4장 탐색적 테스트
4.1 테스트 케이스 기반 테스트 - vs. 탐색적 테스트
4.1.1 테스트 설계·케이스 작성을 초기 단계에서 수행할 때의 단점
4.1.2 같은 테스트 케이스를 수없이 실행할 때의 단점
4.2 탐색적 테스트 예제
4.2.1 기준 결정
4.2.2 탐색적 테스트의 태스크 실행
4.3 비기능 요구에 대한 탐색 테스트 접근 방법
4.4 탐색적 테스트 정리

5장 모든 기능을 테스트하고 가장 어려운 테스트에 도전
- 비기능 요구 테스트
5.1 비기능 요구 테스트의 어려움
5.2 기대 대로 특성을 이끌어 내려면 - 성능 테스트
5.2.1 성능 테스트 5단계
5.3 공격에 견디는 소프트웨어 구축 - 보안 테스트
5.3.1 보안 테스트의 중요성
5.3.2 공격의 역사와 종류
5.3.3 모듈 지향 테스트
5.3.4 정적 분석 도구
5.3.5 기본적인 테스트 방법
5.4 신뢰성을 제대로 이해하고 있는지? - 신뢰도 성장 곡선

6장 소프트웨어 테스트 운영의 기본 - 테스트 성공의 방정식
6.1 최악의 소프트웨어 출하를 피하려면 - 비용과 품질의 균형-
6.2 테스트 계획 작성 방법 - IEEE 829 테스트 계획 템플릿
6.2.1 IEEE 829 테스트 계획 템플릿
6.2.2 테스트 계획 문서 번호(Test plan identifier)
6.2.3 참고 자료(Reference)
6.2.4 소개 글(Introduction)
6.2.5 테스트 아이템(Test items)
6.2.6 테스트해야 하는 기능(Features to be tested)
6.2.7 테스트할 필요가 없는 기능(Features not to be tested)
6.2.8 접근 방법(Approach)
6.2.9 인원 계획, 훈련 계획(Staffing and traing needs)
6.2.10 인원과 시간을 어떻게 예상해야 하는가?
6.2.11 일정(Schedule)
6.2.12 테스트 일정은 개발 일정에 의존한다
6.2.13 일정을 관리하는 요령
6.2.14 위험과 대책(Risks and contingencies)
6.2.15 승인(Approvals)
6.2.16 종료 기준
6.2.17 테스트 계획의 이상과 현실
6.3 테스트 케이스 작성 방법 - 효율적인 테스트 케이스 작성과 관리
6.3.1 테스트 케이스 작성 예
6.3.2 테스트 케이스 관리 도구 사용
6.3.3 테스트 케이스는 얼마나 필요할까?
6.4 테스트 케이스 실행 - 어떤 테스트를 어떤 순서로 실행할 것인가?
6.5 테스트 시작 시점 - 테스트 담당자는 어느 단계에서
프로젝트에 참여하는가?
6.6 출하 전날 버그를 발견했을 때의 대처 - 출하 연기를 판단하는 포인트

7장 소프트웨어 품질 관리의 기본 - 소프트웨어 품질 매트릭스
7.1 품질을 눈에 보이도록 하려면? - 매트릭스 선택의 기본
7.1.1 버그의 수를 관리하는 버그 매트릭스
7.1.2 버그 수정에 드는 시간
7.1.3 모듈에서 발견된 버그
7.2 코드 줄 수에서 알 수 있는 의외의 사실 - 소스 코드 매트릭스
7.2.1 코드 줄 수와 버그 밀도
7.3 복잡한 코드일수록 버그가 많음 - 복잡도 트릭스
7.4 Microsoft는 어떤 매트릭스를 사용하는가?
- 올바른 매트릭스 선택 예
7.5 그대여 사람은 측정하지 말라 - 매트릭스를 잘못 사용한 예

8장 테스트 자동화라는 악마 - 왜 자동화는 실패하는가?
8.1 이 자동화 도구는 제 역할을 하나요? - 테스트 자동화의 장단점
8.1.1 테스트 자동화는 왜 실패하는가?
8.2 테스트 담당자가 빠지기 쉬운 함정 - 테스트 자동화의 진짜 문제점

9장 그래도 테스트가 잘 안 되는 분께
9.1 조합 테스트 중지
9.2 품질 낮은 모듈 철저하게 파고들기
9.2.1 Google 알고리즘



신고
Posted by 남가람북스 남가람북스

댓글을 달아 주세요

티스토리 툴바