도서상세
장바구니에 상품을 담았습니다.
바로가기
  1. 도서정가제
  2. 소득공제
품절
물량이 확보되는 대로 재입고하도록 하겠습니다.
34,000원
30,600원
10%
최대 적립 포인트
2,000 원
  • 구매 적립
    적립금 안내
    • 상품 적립금
    • 상품 적립금은 고객님이 웬디북에서 상품을 구매하실 경우 이에 대한 마일리지 개념으로 구매금액의 일부를 적립해 드리는 제도이며 사용은 예치금과 같이 현금처럼 사용가능하십니다.
    • 멤버십 적립금
    • 멤버십 적립금은 고객님의 멤버십(고객)등급에 따라 도서 구매액의 1 ~ 4%에 해당하는 적립금이 추가로 적립되며 적립금은 다음 주문시 현금처럼 사용이 가능합니다.
    • 다만 적립금은 예치금과는 달리, 현금으로 환불하실 수 없고 적립금의 적립일로 부터 12개월 이내에 사용하시지 않으면 자동으로 소멸됩니다.
  • 상품 적립금
    1,700원
  • 리뷰 적립
  • 최대 리뷰 적립금
    300원
30,600원
· 쿠폰 및 적립금은 결제 시 적용해 주세요
바로구매
장바구니 담기
품절
이 책을 구입하신 분들이 산 책
상세 이미지 더보기
상세 이미지
목차 더보기
목차
옮긴이 머리말 xiii
머리말 xv
베타리더 후기 xvii

PART I | 라라벨 기초 1
CHAPTER 1 | 라라벨 개요 1
1-1 라라벨이란? 3
1-1-1 라라벨의 특징 3
1-1-2 개발 정보 5
1-2 환경 구축 6
1-2-1 라라벨 세일을 이용한 환경 구축 6
1-2-2 홈스테드를 이용한 환경 구축 19
1-3 첫 번째 애플리케이션 31
1-3-1 라라벨의 디렉터리 구성 31
1-3-2 Welcome 페이지 처리 32
1-3-3 첫 번째 페이지 36
1-3-4 첫 번째 테스트 코드 37
1-3-5 사용자 등록 구현 40
1-3-6 사용자 인증 47
1-3-7 이벤트 52

CHAPTER 2 | 라라벨 아키텍처 57
2-1 라이프 사이클 59
2-1-1 라라벨 애플리케이션 실행 흐름 59
2-1-2 엔트리 포인트 60
2-1-3 HTTP 커널 62
2-1-4 라우터 63
2-1-5 미들웨어 64
2-1-6 컨트롤러 65
2-2 서비스 컨테이너 67
2-2-1 서비스 컨테이너란? 67
2-2-2 바인드와 리졸브 68
2-2-3 바인드 69
2-2-4 리졸브 75
2-2-5 DI와 서비스 컨테이너 77
2-2-6 퍼사드 82
2-3 서비스 프로바이더 86
2-3-1 서비스 프로바이더 동작 기본 87
2-3-2 DeferrableProvider 인터페이스 지연 실행 89
2-4 컨트랙트 91
2-4-1 컨트랙트 기본 91
2-4-2 컨트랙트를 이용한 기능 대체 93

CHAPTER 3 | 애플리케이션 아키텍처 99
3-1 MVC와 ADR 101
3-1-1 MVC 101
3-1-2 ADR 108
3-2 아키텍처 다루기 116
3-2-1 프레임워크와 아키텍처 설계 116
3-2-2 아키텍처 설계의 포인트 117
3-2-3 레이어드 아키텍처 118
3-2-4 레이어드 아키텍처 이후의 세계 123

PART II | 실천패턴 125
CHAPTER 4 | HTTP 요청과 응답 125
4-1 요청 핸들링 127
4-1-1 요청 취득 127
4-1-2 Request 퍼사드 128
4-1-3 Request 객체 130
4-1-4 폼 요청 131
4-2 밸리데이션 135
4-2-1 밸리데이션 규칙 지정 방법 136
4-2-2 밸리데이션 규칙 137
4-2-3 밸리데이션 이용 140
4-2-4 밸리데이션 실패 처리 143
4-2-5 규칙 커스터마이즈 146
4-3 응답 149
4-3-1 다양한 응답 149
4-3-2 리소스 클래스를 조합한 REST API 응답 패턴 155
4-4 미들웨어 165
4-4-1 미들웨어 기본 165
4-4-2 기본 제공 미들웨어 166
4-4-3 커스텀 미들웨어 구현 169

CHAPTER 5 | 데이터베이스 173
5-1 마이그레이션 175
5-1-1 마이그레이션 처리 흐름 175
5-1-2 마이그레이션 파일 작성 176
5-1-3 정의 기술 178
5-1-4 마이그레이션 실행과 롤백 183
5-2 시더 186
5-2-1 시더 작성 186
5-2-2 시더 클래스 이용 설정 187
5-2-3 시딩 실행 188
5-2-4 Faker 이용 188
5-2-5 Factory 이용 예 190
5-3 Eloquent 193
5-3-1 클래스 작성 193
5-3-2 규약과 속성 194
5-3-3 데이터 검색 및 업데이트 기본 197
5-3-4 데이터 조작 응용 200
5-3-5 연관성이 있는 테이블 그룹의 값을 일괄 조작한다(릴레이션) 205
5-3-6 실행된 SQL 확인 207
5-4 쿼리 빌더 210
5-4-1 쿼리 빌더 형식 211
5-4-2 쿼리 빌더 얻기 211
5-4-3 처리 대상 및 내용의 특징 213
5-4-4 쿼리 실행 215
5-4-5 트랜잭션과 테이블 락 217
5-4-6 데이터 조작 기본 218
5-5 리포지터리 패턴 220
5-5-1 리포지터리 패턴 개요 220
5-5-2 리포지터리 패턴 구현 221
5-5-3 리팩터링 224

CHAPTER 6 | 인증과 인가 231
6-1 세션 기반 인증 233
6-1-1 인증 지원 클래스 및 그 기능 233
6-1-2 인증 처리 이해 234
6-1-3 데이터베이스/세션을 이용한 인증 처리 237
6-1-4 폼 인증 적용 242
6-1-5 인증 처리 커스터마이즈 244
6-1-6 비밀번호 초기화 249
6-2 토큰 인증 252
6-2-1 api_token 저장용 테이블 작성 253
6-2-2 시더를 이용한 레코드 작성 255
6-2-3 커스텀 인증 프로바이더 작성 257
6-2-4 토큰 인증 이용 방법 263
6-3 JWT 인증 265
6-3-1 tymon/jwt-auth 설치 265
6-3-2 tymon/jwt-auth 이용 준비 266
6-3-3 tymon/jwt-auth 이용 267
6-3-4 토큰 발행 268
6-4 OAuth 클라이언트를 이용한 인증 및 인가 272
6-4-1 Socialite 272
6-4-2 깃허브 OAuth 인증 273
6-4-3 동작 확장 276
6-4-4 OAuth 드라이버 추가 278
6-5 인가 처리 283
6-5-1 인가 처리 이해 283
6-5-2 인가 처리 283
6-5-3 Blade 템플릿을 이용한 인가 처리 293

CHAPTER 7 | 이벤트와 큐를 이용한 처리 분산 297
7-1 이벤트 299
7-1-1 이벤트 기본 299
7-1-2 이벤트 작성 300
7-1-3 이벤트를 이용한 견고한 옵저버 패턴 303
7-1-4 이벤트 취소 306
7-1-5 비동기 이벤트를 이용한 분리 패턴 307
7-2 큐 310
7-2-1 큐 기본 310
7-2-2 비동기 실행 드라이버 준비(Queue 드라이버) 311
7-2-3 큐 사양 312
7-2-4 큐를 이용한 PDF 파일 출력 패턴 312
7-2-5 Supervisor를 이용한 상주 프로그램 패턴 317
7-2-6 손쉬운 분산 처리 패턴 321
7-3 이벤트와 큐를 이용한 CQRS 325
7-3-1 CQRS(커맨드 쿼리 책임 분리) 325
7-3-2 애플리케이션 사양 326
7-3-3 애플리케이션 구현 준비 329
7-3-4 리뷰 등록 기능 구현 334
7-3-5 리뷰 작성 컨트롤러 구현 337
7-3-6 리스너 클래스를 이용한 엘라스틱서치 조작 339
7-3-7 Command 실행과 Query 구현 343

CHAPTER 8 | 콘솔 애플리케이션 347
8-1 Command 기초 349
8-1-1 클로저를 이용한 Command 작성 349
8-1-2 클래스를 이용한 Command 작성 350
8-1-3 Command로의 입력 353
8-1-4 Command에서의 출력 356
8-1-5 Command 실행 358
8-2 Command 구현 361
8-2-1 샘플 구현 사양 361
8-2-2 Command 생성 363
8-2-3 유스케이스 클래스와 서비스 클래스 분리 364
8-2-4 유스케이스 클래스 모형 작성 366
8-2-5 서비스 클래스 구현 367
8-2-6 유스케이스 클래스 구현 369
8-2-7 Command 클래스 마무리 371
8-3 배치 처리 구현 375
8-3-1 배치 처리 사양 375
8-3-2 Command 클래스 구현 377
8-3-3 유스케이스 클래스 구현 378
8-3-4 Command 클래스 사양 381
8-3-5 배치 처리 로그 출력 385
8-3-6 스케줄 태스크를 이용한 배치 처리 실행 390

CHAPTER 9 | 테스트 397
9-1 단위 테스트 399
9-1-1 테스트 대상 클래스 399
9-1-2 테스트 클래스 생성 401
9-1-3 테스트 메서드 구현 404
9-1-4 데이터 프로바이더 활용 407
9-1-5 예외 테스트 410
9-1-6 테스트 전처리 및 후처리 412
9-1-7 테스트 설정 414
9-2 데이터베이스 테스트 417
9-2-1 테스트 대상 테이블과 클래스 417
9-2-2 데이터베이스 테스트 기초 424
9-2-3 Eloquent 클래스 테스트 430
9-2-4 서비스 클래스 테스트 433
9-2-5 목을 이용한 테스트(서비스 클래스) 435
9-3 WebAPI 테스트 438
9-3-1 WebAPI 테스트 기능 438
9-3-2 테스트 대상 API 443
9-3-3 API 테스트 구현 450
9-3-4 WebAPI 테스트의 편리한 기능 456

CHAPTER 10 | 에러 핸들링과 로그 활용 463
10-1 에러 핸들링 465
10-1-1 에러 표시 465
10-1-2 에러 종류 465
10-1-3 에러 핸들링 기초 466
10-1-4 Fluentd 활용 467
10-1-5 예외 메시지 표시 템플릿 변경 469
10-1-6 에러 핸들링 패턴 471
10-2 로그 활용 패턴 475
10-2-1 로그 기본 475
10-2-2 로그 출력 설정 476
10-2-3 엘라스틱서치를 이용한 커스텀 로그 드라이버 구현 479

PART III | 애플리케이션 개발 485
CHAPTER 11 | 테스트 주도 개발 실천 485
11-1 테스트 주도 개발이란? 487
11-1-1 가능한 작게 구현 487
11-1-2 샘플 애플리케이션 사양 488
11-1-3 데이터베이스 사양 489
11-1-4 API 엔드포인트 491
11-2 API 엔드포인트 작성 493
11-2-1 애플리케이션 작성 및 사전 준비 493
11-2-2 첫 번째 테스트 493
11-2-3 테스트 메서드 작성 내용 495
11-2-4 최소한의 구현 498
11-2-5 두 번째 이후의 테스트 498
11-2-6 하나의 테스트 메서드에서는 한 가지만 검증 500
11-2-7 테스트 코드 확인 501
11-3 테스트용 데이터베이스 설정 505
11-3-1 데이터베이스 설정 505
11-3-2 마이그레이션/모델/팩토리 508
11-3-3 초기 데이터 입력용 시더 준비 515
11-4 데이터베이스 테스트 517
11-4-1 테스트용 트레이트 이용 및 초기 데이터 입력 517
11-4-2 데이터베이스 관련 테스트 518
11-4-3 임시 구현을 통한 빠른 테스트 520
11-4-4 첫 번째 리팩터링 521
11-4-5 반환값 내용 검증 521
11-4-6 성공하는 테스트 추가 524
11-4-7 데이터 추가 검증 525
11-4-8 의존 테스트 수정 527
11-4-9 밸리데이션 테스트 528
11-5 리팩터링 유스케이스 531
11-5-1 컨트롤러 사용 531
11-5-2 프레임워크 표준에 맞는 리팩터링 ① 534
11-5-3 정확한 테스트를 쓸 수 없을 때의 대처 방법 535
11-5-4 프레임워크 표준에 맞는 리팩터링 ② 538
11-5-5 서비스 클래스 분리 540

찾아보기 544
저자 소개
저자 : 다케자와 유키
스타 페스티벌 주식회사 소속. PHP, Go, 스칼라를 중심으로 데이터 분석 기반, 플랫폼 개발 및 엔지니어 매니지먼트를 하고 있다. 일본 내 PHP 커뮤니티나 콘퍼런스 등에서 발표도 활발히 하고 있다. 저서로는 《라라벨 엑스퍼트 양성 가이드》(기술평론사), 《라라벨 레퍼런스》(임프레스), 《PHP 프레임워크 라라벨 웹 애플리케이션 개발》(소시움) 등이 있다.
블로그: https://blog.ytake.jp.net

저자 : 구리우 가즈아키
딥 주식회사 소속. 테크 리더로 PHP나 Go 등을 이용한 제품 개발과 개발 매니지먼트를 담당하고 있으며, 엔지니어 채용에도 참여하고 있다. Laravel Meetyp Tokyo에 스텝으로 참여했으며, 《라라벨 레퍼런스》(임프레스)의 리뷰를 맡기도 했다. 저서로는 《PHP 프레임워크 라라벨 웹 애플리케이션 개발》(소시움)이 있다.
트위터: https://twitter.com/kurikazu

저자 : 신바라 마사시
1×1 주식회사의 대표이사. PHP 중심의 웹 시스템 개발이나 기술 지원을 주로 하고 있으며, 기술 이벤트 등에서의 강연 및 ‘PHP 현장’이라는 팟캐스트도 운영하고 있다. 저서로는 《라라벨 레퍼런스》(임프레스), 《서버/인프라 엔지니어 양성 가이드 DevOps편》(기술평론사), 《라라벨 전문가 양성 가이드》(기술평론사), 《PHP 프레임워크 라라벨 웹 애플리케이션 개발》(소시움) 등이 있다.
블로그: https://blog.shin1x1.com

저자 : 오무라 소타로
오사카를 거점으로 주로 ERP 계열의 웹 데이터베이스 시스템 개발과 운용을 하고 있다. 저서로는 《PHP 엔지니어 양성 가이드》(기술평론사), 《라라벨 레퍼런스》(임프레스), 《PHP 프레임워크 라라벨 웹 애플리케이션 개발》(소시움) 등이 있다.
블로그: https://blog.omoon.org

역자 : 김모세
대학 졸업 후 소프트웨어 엔지니어, 소프트웨어 품질 엔지니어, 애자일 코치 등 다양한 부문에서 소프트웨어 개발에 참여했다. 재미있는 일, 나와 조직이 성장하고 성과를 내도록 돕는 일에 보람을 느끼며, 나 자신의 한계에 도전하고 더 나은 사람이 되기 위해 항상 노력하고 있다. 저서로 《코드 품질 시각화의 정석》(지앤선)이 있고, 역서로는 《그림으로 공부하는 TCP/IP》(제이펍), 《애자일 컨버세이션》(에이콘출판사), 《제대로 배우는 수학적 최적화》(한빛미디어) 등이 있다.
저자 소개 더보기
출판사 서평 더보기
출판사 서평
책 속으로

이 책은 라라벨 프레임워크를 이용하여 웹 애플리케이션을 만드는 전반적인 내용을 다룹니다. 웹 애플리케이션의 아키텍처, HTTP 요청과 응답, 데이터베이스 조작과 관리, 사용자 인증과 인가, 권한 설정, 이벤트와 분산 처리, 콘솔 애플리케이션 작성, 테스트 주도의 개발 방식, 에러 핸들링까지 개발 라이프 사이클 전체를 다루고 있습니다. 이미 출시한 지 다소 오래된 버전의 라라벨 프레임워크를 유지보수하며 사용하는 분들이라면 최신 라라벨에서 사용할 수 있는 멋진 기능을 적용해 볼 기회가 될 것이고, 이제 막 라라벨 프레임워크를 접하시는 분들에게는 새로움에 대한 두려움을 이겨 낼 수 있는 좋은 무기가 될 것입니다. _viii쪽

sail down 명령어로 컨테이너를 종료할 수 있습니다. sail up 명령어를 이용해 컨테이너를 포그라운드에서 실행했을 때는 컨테이너 안에서 실행되는 처리가 계속 표시되므로 [Ctrl] 키(맥오에스에서는 [control] 키)와 [C] 키를 눌러 종료합니다. _17쪽

미들웨어에서는 경로에 지정된 처리를 실행한 전후에 임의의 처리를 실행할 수 있습니다. 주된 용도로는 Request나 Response에 포함된 값의 업데이트나 암호화(복호화) 또는 세션 실행, 인증 처리 등이 있습니다. 여러 미들웨어를 연결할 수 있어서 각각의 미들웨어는 한 가지 역할만 하고 이들을 조합해 임의의 처리를 할 수 있습니다. _64쪽

앞에서 설명한 것처럼 migrate 명령어는 database/migrations 디렉터리에 있는 마이그레이션 파일에서 실행되지 않은 것만 반영하며, migrate:rollback 명령어는 직전에 실행한 마이그레이션만 롤백합니다. 그렇다면 그 실행 상태는 어디에서 관리할까요? _185쪽

앞에서 설명한 것처럼 Socialite를 이용하면 라라벨 기능 확장 방법과 거의 같은 형태로 OAuth 인증 드라이버를 추가할 수 있습니다. 라이브러리 자체를 크게 수정하지 않고 확장할 수 있기 때문에 확장 방법을 파악해 두면 다양한 애플리케이션에 쉽게 대응할 수 있습니다. _282쪽

get 메서드와 달리 cursor 메서드는 호출 시점에서는 레코드의 내용을 읽지 않습니다. cursor 메서드는 제너레이터를 포함하고 있는 LazyCollection을 반환하므로 이후 처리에서 foreach문을 이용해 각 레코드를 차례대로 읽어 들입니다. 이런 코드를 이용함으로써 대량의 레코드를 다룰 때도 메모리 사용량을 최소한으로 억제할 수 있습니다. 콘솔 애플리케이션에서는 대량의 데이터를 처리하는 경우가 있으므로 이런 방법을 익혀 두는 것이 좋습니다. _369쪽

이 책의 대상 독자
- PHP를 배우고자 하는 타 언어 웹 프로그래머
- 최신 라라벨을 배우고자 하는 PHP 초보 프로그래머
- 개발을 넘어 애플리케이션 설계를 하고 싶은 PHP 중급 프로그래머
리뷰(0)
0 / 5.0
리뷰 작성
•
리뷰를 작성하시면 소정의 적립금을 드립니다.
•
도서의 첫번째 리뷰부터 10번째 리뷰까지는 기본 적립금의 2배를 적립해 드리며, 이후 리뷰부터는 기본 적립금이 적립됩니다.
리뷰 혜택 및 유의사항
배송방법

배송은 CJ대한통운(전화 : 1588-1255)을 이용해서 보내드리고 있습니다.

3만원 이상 구매시 무료배송 가능하며, 3만원 미만의 경우 2500원의 배송비가 발생합니다.

배송기간

15시 이전에 입금확인된 주문까지는 당일날 발송하며, 일반적인 경우 다음날 책을 받아보실 수 있습니다.

주말 또는 공휴일이 있거나 시기적으로 배송이 많은 기간인 경우는 지역에 따라 1~2일이 더 소요될 수 있습니다.

주문 후, 5일이 경과해도 책이 도착하지 않는 경우에는 웬디북 고객센터(전화 : 1800-9785)로 전화를 주시거나 고객센터 > 1:1 문의를 통해 문의글을 남겨주시면 확인 후 신속히 조치하도록 하겠습니다.

묶음배송

묶음배송 원하시는 모든 주문서의 상태가 "입금대기" 또는 "결제완료" 상태일 경우에만 처리가 가능하며, 고객센터 > 1:1 문의에서 신청 할 수 있습니다.

반품안내

변심반품의 경우 도서주문일로부터 15일이내에 반품접수가 가능하며, 반품 배송비는 고객님 부담입니다.

부분 반품의 경우, 3만원 이상 주문으로 무료배송 받았으나 일부 상품 반품으로 주문금액이 3만원이 안될 경우, 이전 주문의 배송비를 포함한 왕복 배송비를 부담하셔야 합니다.

반품절차는 고객센터의 반품교환신청 페이지에서 신청을 해주시면 웬디북 고객센터에서 지정택배사에 회수요청을 하고, 방문한 택배기사님을 통해 반품도서를 보내주시면 됩니다.

운송 중 책이 손상되지 않도록 포장을 해주신 후, 포장 겉면에 “반품도서”라고 기재해주시기 바랍니다. 회수된 상품은 요청해주신 환불방법에 따라 적립 또는 환불 진행해드립니다.

(특히 팝업북 등은 조그만 충격에도 책이 손상될 수 있으므로 주의해 주시기 바랍니다.)

• 반품이 불가한 경우
  • 1. 고객에게 책임 있는 사유로 상품(띠지 또는 더스트커버 포함)이 멸실 또는 훼손된 경우
  • 2. CD 나 소프트웨어 포함, 포장이 되어 있는 모든 상품의 포장 개봉
  • 3. 만화책 및 단시간 내에 완독이 가능한 잡지
  • 4. 상품과 함께 발송된 추가사은품이 분실되거나 훼손된 경우
  • 5. 고객의 사용 또는 일부 소비에 의하여 상품의 가치가 현저히 감소한 경우
  • 6. 명시된 반품가능 기한이 지난 경우
  • 7. 세트상품중 일부 반품
교환안내

파본도서 혹은 오배송으로인한 교환은 도서주문일로부터 15일 이내에 신청하셔야 하며 이 경우 배송비는 웬디북에서 부담합니다.

(단, 팝업북과 CD가 세트인 책은 책의 특성상 7일 이내에 해주셔야 합니다.)

교환절차는 고객센터의 반품교환신청 페이지에서 신청을 해주시면 웬디북에서 새 책을 보내드리고 새 책을 받으실 때 교환도서와 맞교환 하시면 됩니다.

교환은 동일도서에 한하며, 다른 도서로 교환은 불가합니다.

운송도중 책이 손상되지 않도록 포장을 해주신 후, 포장 겉면에 “반품도서”라고 기재해주시기 바랍니다.

(특히 팝업북 등은 조그만 충격에도 책이 손상될 수 있으므로 주의해 주시기 바랍니다.)

• 교환이 불가한 경우
  • 1. 고객에게 책임 있는 사유로 상품이 멸실 또는 훼손된 경우
  • 2. 포장 상품의 포장을 해체한 경우
  • 3. 고객의 사용 또는 일부 소비에 의하여 상품의 가치가 현저히 감소한 경우
  • 4. 물품 수령 후, 15일이 경과한 경우
  • 5. 동일상품으로 교환하신 후, 다시 교환하시고자 할 경우 (이 경우에는 환불처리 해드립니다.)
신고하기
신고사유 선택
도서 입고 알림 신청
입고알림 신청하셨습니다.
입고시 {{tel}}로 문자 발송됩니다

바로 확인 하시겠습니까?
예

휴대폰 번호, 이메일 주소는

마이 페이지 > 회원정보수정에서 확인해 주세요.

관심 시리즈 신간 알림 신청
시리즈명:{{ series_name }}
관심 시리즈 신간 입고 알림 신청하셨습니다.
입고시 {{ tel }}로 문자 발송 또는
앱푸시, 이메일 등으로 알려드리겠습니다.

바로 확인 하시겠습니까?
예

휴대폰 번호, 이메일 주소는

마이 페이지 > 회원정보수정에서 확인해 주세요.

입고 알림 수신 방법 변경은

마이 페이지 > 알림 > 알림 설정에서 확인해 주세요.

푸시 알림이 오지 않을 시,

스마트폰 설정 > 알림 > 웬디북 앱 설정을 확인해 주세요

관심 작가 신간 알림 신청
작가명:{{ series_name }}
관심 작가 신간 입고 알림 신청하셨습니다.
입고시 {{ tel }}로 문자 발송 또는
앱푸시, 이메일 등으로 알려드리겠습니다.

바로 확인 하시겠습니까?
예

휴대폰 번호, 이메일 주소는

마이 페이지 > 회원정보수정에서 확인해 주세요.

입고 알림 수신 방법 변경은

마이 페이지 > 알림 > 알림 설정에서 확인해 주세요.

푸시 알림이 오지 않을 시,

스마트폰 설정 > 알림 > 웬디북 앱 설정을 확인해 주세요

{{title}}
{{content}}
{{title}}
{{content}}