프로 ASP.NET MVC 5 프레임워크 프로 시리즈 5
애덤 프리먼 지음, Taeyo.NET 번역팀 옮김, 송원석 감수 / 비제이퍼블릭 / 2014년 10월
평점 :
절판


 


2000년 초에 ASP를 사용하다가 중간에 ASP.NET이 나와 C# 프로젝트를 진행해 본게 ASP를 사용해본 전부였다. 그러다 갑자기 'ASP.NET MVC는 뭘까?'하는 생각이 들었다. (서버 스크립트의 트랜드인 MVC의 패러다임을 얼마나 녹여놨을까하는 그런 궁금증이였다.)


이 책을 선택한 이유는 테오 번역팀의 참여와 바이블 급(아마존에서도 높은 순위도 고려했다.)으로 정리가 된 것 같아 선택했다. (어느 정도 번역은 아주 마음에 들었다. 한가지 아쉬운 점은 공동 번역이다보니 조금은 다른 느낌을 갖는 챕터도 있는 것 같다. 그냥 느낌일까..ㅎ)


 


ASP.NET WEB FORM의 문제점은 아래와 같다.

ViewState로 인한 변화

페이지 수명주기

취약한 관심사의 분리

제한적인 HTML 제어

빈약한 추상화

테스트의 어려움


ASP.NET MVC의 장점은 아래와 같다.

- 웹 표준과 REST

애자일과 테스트 주도 개발

- Node.js

- MVC 아키텍처

- 확장성

- HTML과 HTTP에 대한 강력한 제어

- 테스트 용이성

강력한 라우팅 시스템

- 현대적인 API

- 오픈 소스


책은 2부로 구성되어 있으며, 초반부는 프레임워크의 현황과 스포츠스토어 예제 프로젝트를 예제로 MVC에 대해서 논하고 있으며, 후반부는 프레임워크의 내부 동작 방식을 자세하게 설명하고 있다.


​이 책을 읽으면서 몇 가지 도움이 된 부분이 있다면 어트리뷰트를 통한 URL 라우팅과 헬퍼 메서드 관련한 내용이였다. 이 책의 분량이 상당하기 때문에 책을 전체를 정독하기 보다는 프레임워크에 대한 기초 부분에 대한 이해와 예제 프로그램 작성(SportStore)을 해보고, 추후 프로젝트를 진행하면서 필요한 기능 (유효성 검사, 바인딩, 헬퍼 메서드, 필터, 라우팅) 들을 살펴보면 될 것 같다.

증보판(버전업)이기 때문에 상당히 이전 판에 비하면 많은 변경이 있지 않지만, 이 책을 처음 본다면 깔끔하게 정리된 내용으로 ASP.NET MVC로 코딩하는데 많은 도움을 받을 수 있을 것이라고 판단된다.




댓글(0) 먼댓글(0) 좋아요(1)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
안드로이드 멀티스레딩 - 비동기 메커니즘으로 날렵하고 안정적인 앱 만들기
안데르스 예란손 지음, 한대희 옮김 / 한빛미디어 / 2015년 3월
평점 :
절판


 


안드로이드를 어느 정도 사용하다보면 멀티스레딩 관련하여 한번씩 문제에 봉착하는 경우가 많다. (또는 좀 더 원리를 터득하여 효과적인 사용법을 익히보고 싶은 생각이 나는 경우가 있다.)

그리고 한단계 높은 프로그래밍 실력을 갖추길 원한다면 멀티스레딩은 꼭 넘어야 할 산과 같다. (C를 배울때 포인터가 산인 것처럼..)


프로그래밍을 하다보면 아래와 같은 경우가 많이 발생하는데, 대부분 스레드를 사용함에 따라 문제가 발생하는 경우가 많다.(잘못걸리면 정말 찾기 어려운 런타임에러가 발생한다.%EB%86%80%EB%9E%8C%20%EC%9C%A0%EB%A0%B9)

 


게다가 일반적인 스레드 사용법뿐만 아니라 안드로이드에서 사용하는 비동기 메커니즘(Loader, Executeor, 비동기 핸들러, AsyncQueryHandler) 또한 정확히 알고 있어야 더욱 안정적이고 효과적인 프로그래밍(반응성이 높고 구조화가 잘된 멀티스레딩)이 가능하다. 그리고 이 책을 통해 아래와 같은 것들을 배울 수 있다. (이책은 멀티스레딩 스킬 향상, 앱 성능 향상, 시니어 개발자되기 원하는 주니어 안드로이드 개발자가 대상이다.)


- 자바 및 안드로이드 플랫폼에서의 멀티스레딩 기초를 이해한다.

- 프로세스 내부 및 프로세스 간 스레드 통신을 배운다.

- 메모리 누수의 위험을 줄일 수 있는 전략을 사용한다.

- 기본 스레드의 생명주기를 관리한다.

- 핸들러 스레드를 사용해 백그라운드에서 태스크를 순차적으로 실행한다.

- 자바 Executeor 프레임워크를 사용하여 스레드를 관리 및 취소한다.

- AsyncTask 및 IntentService를 통해 백그라운드 태스크 실행을 처리한다.

- AsyncQueryHandler를 통해 콘텐츠 프로바이더에 접근한다.

- 로더를 이용해 UI에 새로운 데이터를 업데이트한다.

 


이 책은 2부로 구성되어 있고, 1부는 스레드의 기초와 스레드가 응용프로그램에 미치는 영향에 대해 설명했으며, 2부에서는 응용프로그램에서 사용되는 비동기 메커니즘의 처리에 대해서 설명하고 있다.

아래는 각장을 요약하여 정리한 것이다.

1-1. 안드로이드 응용프로그램의 다양한 구성요소와 안드로이드 런타임 구조가 어떻게 스레드와 멀티프로세싱의 사용에 영향을 미치는지 설명한다.

1-2. 자바에서 동시 실행의 기본을 다룬다.

1-3. 안드로이드가 스레드를 처리하는 방법과 응용프로그램의 스레드가 리눅스 OS에서 실행되는 방법을 설명한다. 여기에는 스케줄링과 컨트롤 그룹control group뿐만 아니라 응답에 미치는 영향과 같은 중요한 주제도 포함한다.

1-4. 스레드 간의 기본 통신 수단으로 공유 메모리shared memory, 시그널signal, 그리고 일반적으로사용하는 안드로이드 메시지를 다룬다.

1-5. RPC, 메시징 등과 같은 메커니즘으로 안드로이드가 리눅스의 IPC 메커니즘을 향상시키는 방법을 보여준다.

1-6. 시스템을 저하시키고 사용자가 응용프로그램을 삭제하게 만드는 원인이 되는 누수를 피하는 방법을 설명한다.

2-1. 가장 기본인 비동기 구문(java.lang.Thread )을 설명하고, 스레드의 다양한 상태와 발생 할 수 있는 문제를 처리하는 방법을 살펴본다.

2-2. 백그라운드에서 태스크를 순차적으로 실행하는 편리한 방법을 살펴본다.

2-3. 스케줄링, 에러, 그리고 스레드 풀과 같은 스레드 처리의 다른 측면을 다루는 기술을 제공한다.

2-4. 가장 많이 사용하는 비동기 기법인 AsyncTask를 살펴보고, 이 기법의 위험을 피해 올바르게 사용하는 방법을 다룬다.

2-5. 여러 응용프로그램에 제공되는 기능이나 백그라운드 실행을 하는 동안 응용프로그램이 살아 있도록 하는 데 유용하게 쓰이는 필수 서비스 구성요소를 설명한다.

2-6. 이전 장을 기반으로, 기본 UI 스레드를 실행하기 위한 유용한 기술에 대한 논의를 다룬다.

2-7. 콘텐트 프로바이더content provider에 대한 빠른 비동기식 접근을 간소화하는 높은 수준의 메커니즘을 다룬다.

2-8. 변경된 데이터가 전달될 때마다 비동기식으로 새로운 데이터가 전달되는 로더를 통해 UI를 업데이트하는 방법을 알아본다.

2-9. 이 책에서 기술된 모든 기법을 고려해볼 때, 어떻게 응용프로그램에 알맞은 기법을 선택할 수 있을까? 이 장에서는 이러한 선택을 위한 지침을 제공한다.


 


이 책을 전반부에 스레드에 대한 기초적인 설명이 있지만, 간략하게 소개하기 때문에 조금 더 자세한 부분들은 직접 찾아 볼 필요가 있다. 후반부에서 안드로이드의 비동기 메커니즘을 설명하는 부분은 난이도가 조금 있지만 반드시 이해하고 넘어가길 바란다. 적재적소에 쓸 수 있는 기술을 배울 수 있기 때문이다. 이 책을 읽으면서 조금 아쉬운 부분은 번역이 조금 매끄럽지 못한 부분이 눈에 띈다는 것이다. 이에 반해 편집은 무난하게 된 것 같다. 아마 다음판에는 매끄럽지 못한 번역 부분은 정리할 것이라 생각된다.

이 책 한권으로 안드로이드 고수가 될 수는 없지만, 자신의 실력을 향상하는데 있어 벽돌 한장의 역할은 충분히하는 것 같다. 이 책은 비동기 메커니즘을 정리한 거의 유일한 책이므로 한번쯤은 꼭 읽어보길 권합니다. 


 

 


댓글(0) 먼댓글(0) 좋아요(1)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
프로 AngularJS 프로 시리즈 6
애덤 프리먼 지음, 유윤선 옮김 / 비제이퍼블릭 / 2015년 1월
평점 :
장바구니담기


 


가뭄에 단비같이 AngularJS 책이 출간되었다. 이제 국내에서도 어느정도 AngularJS를 사용하는 사람들이 늘고 있기 때문에 앞으로도 많은 책이 출간되라라고 생각된다. 

현재 회사에서 신규 웹 프로젝트를 진행있으며, 프레임워크와 라이브러리의 선택하는 과정에서 AngularJS를 사용하기로 했기 때문에 이 책을 선택하여 보내 된 것이다.

AngularJS를 선택하면서 제일 고민했던 부분은 배우는데 투자하는 시간이 필요하다는 것이고, 추후 AngularJS가 인기가 없어지면서 사람들이 사용하지 않을 경우 유지보수의 어려움과 투자대비 가성비가 떨어지지 않을까하는 부분이었다. %EC%8B%9D%EC%9D%80%EB%95%80%20%EC%9C%A0%EB%A0%B9 

그럼에도 불구하고 선택하여 진행하고 있는 이유는 협업하기 쉬우며, 개발 속도가 빨라지고 데이터 바인딩에 따른 뷰의 업데이트가 쉽고 코드량이 감소하기 때문이다. %ED%98%B8%ED%83%95%20%EC%9C%A0%EB%A0%B9 (앞으로 국내에서 많이 사용되리라 생각된다.)

 

line_characters_in_love-15 


이 책의 크게 3부로 나눠져있으며, 준비과정과 AngularJS 사용법, 모듈 및 서비스 방안에 대해서 논하고 있다.

 


준비 과정에서 AngularJS의 셋팅 과정을 설명하는 부분은 따로 정리해둘 필요가 있어 아래와 같이 정리했으며, 특히 깨알같은 livereload 툴은 나름 효율을 높이는 좋은 툴인 것 같다. ㅎㅎ


1. 구글 크롬 브라우저

 - AngularJS Batarang : 크롬 확장 플러그인


2. 편집기

 - 웹스톰 : www.jetbrains.com/webstorm

 - 서브라임 텍스트 : www.sublimetext.com


3. Node.js

 - nodejs.org

 - 웹서버 : npm install -g connect

 - 테스트 시스템 : npm install -g karma

 

4. AngularJS

 - angularjs.org

 - 확장 파일 : angular-touch.js, angular-animate.js, angular-mocks.js, angular-route.js, angular-sanitize.js, angular-locale-fr-fr.js


5. 부트스트랩

 - getbootstrap.com

 

6. 라이브리로드

 - livereload.com

 - 폴더 내 파일을 모니터링하고 변경 사항을 감지하면 자동으로 부라우저를 리로드

 - 브라우저 확장 플러그인 추가 설치 필요

 

7. Deployd 서버

 - deployd.com


프론트앤드 개발자가 처음 접하면 조금 다른 사용방법 때문에 당황할 수 있을 것이다.

기존 방식(DOM 제어방식)은 변경이 필요한 대상 DOM 요소를 먼저 선택하고, 이후 필요한 작업을 수행하는 형태로 진행하게 된다. 반면 AngularJS는 출력할 데이터에 초점을 맞추어 작업이 수행되며, 데이터의 값이 변경되면 출력도 자동적으로 수행되도록 처리된다.


이 책을 읽으면서 번역이 매끄럽게 되어 분량에 비해 읽기에 무리가 없었다. 하지만 편집 상태는 조금 더 신경썼으면 하는 아쉬움이 남는다.

하지만 이 정도로 상세한 설명이 있는 AngularJS책은 없기 때문에 어느정도 바이블이라고 해도 과언이 아닐 것 같다. 좋은 책 적기에 출시된 것 같아 프로젝트 진행하면서도 많은 도움이 되고 있다.


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
게임 개발자를 위한 물리 - 개정2판, 차량, 스포츠, 폭발, 모바일 등 게임 물리의 모든 것
데이비드 버그 & 브라이언 비발레츠 지음, Pope Kim.이정훈.문정균 옮김 / 한빛미디어 / 2015년 1월
평점 :
절판


 


책의 표지를 보면 묘한 긴장감이 감도는 것 같습니다. 고양이와 쥐가 공수를 물리적으로 생각하는 것 같습니다. 편집자는 고양이와 쥐로 서로의 영민함의 대결을 상징한다라고 쓰여 있네요.ㅎ

오랜 만에 물리책을 들여다보면서 고군분투한 시간들을 뒤로 하고 이 책의 장단점을 몇가지 적고자 합니다.

 


우선 이 책의 분량은 아주 적정한 것 같습니다. 분량은 600페이지로 내용안에 군더더기가 별로 없다고 느껴집니다. 역자(김포프)의 매끄러운 번역과 구어체를 사용하여 자칫 딱딱하게만 전개될 것 같은 물리책이 조금은(?) 쉽게 느껴지기도 합니다.(아마 쉽다고 생각한건 구어체 말투로 인한 기분상이라 생각되며, 실제로는 책 내용의 20%밖에 이해가 안가더군요..%ED%9D%91%ED%9D%91%20%EC%9C%A0%EB%A0%B9 이게 현실인가 싶네요. 최소 고등학교 (원문: 대학교) 물리 정도는 이해하고 있어야 한다고 전제하고 있네요. 또한 삼각함수, 벡터, 행렬수학 또한 기본 전제..)

그리고 이책의 모든 내용이 바로 실무와 연결되는 것은 아닙니다. 하지만 일부 내용은 실무에서 사용하진 않지만, 문제를 풀어감에 있어 힌트가 되거나, 간략한 버전 작업시 도움이 되기도 합니다.


아래 첨부한 내용은 3D 게임에 대해서 정말 한마디로 적절하게 표현한 것 같습니다.


추천사에서도 강조하고 있지만, 게임개발자 이외에도 대부분의 3D 프로그래밍을 개발하는 사람에게는 물리라는 단어는 공포로 다가오는 존재이지요. 대부분 물리는 필수라고 생각하지만 막막하기 때문에 이런 사람들을 위해 쓰여진 책이라고 생각됩니다. (이책조차 조금은 버거운게 사실입니다. 천천히 필요할 때 곱씹으며 읽어야 하는 책이라고 생각됩니다.)

물리에 관한 기초 지식을 제공하여 독자 스스로 다양한 문제 해결 능력을 심어주는게 이 책의 목적이며, 원리 및 샘플 프로그램과 계산 과정을 보여주어 한층 심화된 내용을 알려줍니다.

 


일반적인 물리이론을 기초로 설명한 부분도 좋았지만, "디지털 물리" ​을 별도의 챕터로 설명한 부분은 앞으로 다양한 입력장치와 센서들에 대한 부분이 굉장히 중요한 부분이 될 것으로 저자는 생각하고 있는 것 같다. (최첨단 시대니깐..주변기기도 최첨단으로 바뀔 것이므로..ㅎㅎ)


아래는 이 책은 4부(26장)로 구성되어 있으며, 간략하게 아래와 같이 정리할 수 있습니다.

1) 물리학의 기초 (역학 복습)

 1. 기본개념 : 이 책에서 사용하는 가장 기본적인 원칙을 설명합니다. 질량과 질량의 중심, 뉴턴의 법칙, 관성, 단위와 측정, 백터 등의 주제

 2. 운동학 : 선형속도 및 각속도, 가속도, 운동량, 2차원과 3차원에서 파티클과 리지드바디의 일반적인 운동을 설명

 3. 힘 : 힘과 회전력의 원리. (저항력, 역장, 압력 등 힘의 일반적인 분류를 논함)

 4. 동역학 : 동역학에 대해 설명하고 운동학과 동역학 사이의 차이를 설명, 2차원과 3차원에서 파티클 및 리지드바디의 동역학 설명

 5. 충돌 : 파티클 및 리지드바디의 충돌반응에 대해 설명

 6. 발사체 : 발사체의 물리법칙 간략 설명


2) 리지드바디 동역학 (실시간 시뮬레이션을 소개)

 7. 실시간 시뮬레이션 : 수치적분기법 및 안전성과 튜닝에 대한 설명

 8. 파티클 : 파티클 시뮬레이션을 구현하는 법 설명

 9. 2D 리지드바디 시뮬레이터 : 리지드바디 시뮬레이터를 구현하는 법 설명 (회전, 관성텐서)

 10 .충돌반응 구현하기 : 충돌검출과 충돌반응을 더해 실시간 충돌을 구현

 11. 3D 리지드바디 시뮬레이션에서의 회전 : 회전를 처리하는 법 및 관성텐서/2D를 3D로 확장하는 법

 12. 3D 리지드바디 시뮬레이션 : 다수의 리지드바디 충돌법 및 안정성/사실성 문제 소개

 13. 연결된 물체 : 리지드바디 연결하는 법 / 커넥터 (인체, 자동차 등)

 14. 물리엔진 : 물리모델, 시뮬레이션 물체 관리자, 충돌, 힘 이펙터, 수치적분기


3) 물리모델 만들기 (실세계 물리 법칙)

 15. 비행기 : 추진력, 저항, 기하학, 질량, 양력

 16. 배 : 부력, 안정성, 부피, 저항, 속력

 17. 차량과 호버크라프트 : 공기동역학적 저항, 회전저항, 제동거리, 뱅크 등 자동차 물리법칙 및 공중부양, 공기정역학적 양력, 방향 조정 등 호버크라프트

 18. 총/폭발 : 폭발 강도, 반동, 탄도

 19. 스포츠 : 야구, 골프, 테니스. 투구/타격/방망이/공의충돌/스윙/충돌


4) 디지털 물리 (가속도계, 터치스크린, GPS)

 20. 터치스크린 : 촉각 인터페이스 사용법 및 제스처를 통한 물리와 교류하는 법 설명

 21. 가속도계 : 가속도 데이터를 적분하여 속도와 변위 및 회전을 구하는 법

 22. 위치기반 : GPS 데이터를 미분하여 속력과 가속도를 구하는 법

 23. 입력센서와 로드셀 : 압력센서의 물리이론

 24. 3D 디스플레이 : 광학추적장치의 물리이론

 25. 광학추적 기법 : 스테레오스코픽 디스플레이, 자동 스테레오스코픽 디스플레이

 26. 소리 : 소리의 속력과 도플러효과 등 소리 물리


부록 A) 백터연산 : 2D/3D 시뮬레이션에 필요한 벡터연산을 C++ 클래스로 구현

부록 B) 행렬연산 : 3X3 행렬을 처리하는 데 필요한 연산을 C++ 클래스로 구현

부록 C) 쿼터니언 연산 : 3D 리지드바디 시뮬레이션에서 처리하는 쿼터니언 연산자를 클래스로 구현



이 책을 읽으면서 정말 기초가 중요함을 뼈져리게 느낀 것 같습니다. 물리학에 대한 용어부터 막히기 시작하면서 인터넷(구글)에서 검색해가며 이해하고 읽어가니 정말 시간이 많이 필요함을 느낍니다. 이 책을 어느 정도 이해하려면 고등학교때 배운 수학과 물리 지식을 총동원해야 합니다. 그렇다고 이 책의 가치를 폄해하는게 아니라 오히려 물리 및 수학에 자신이 없다고 하더라도 꼭 한번은 읽어보라고 말씀드리고 싶습니다. 정말 하루에 한페이지씩만 자신의 것으로 만든다는 각오로 1년정도 생각한다면 충분히 셥렵가능하리라 생각됩니다. 저 또한 20%이하로 이해되지만 몇 번이고 필요할 때 읽어가며 도전하려고 합니다.




댓글(0) 먼댓글(0) 좋아요(1)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
자바 퍼즐러 - 세상에서 가장 재미있는 자바 책
조슈아 블로크 & 닐 개프터 지음, 윤인성 옮김 / 한빛미디어 / 2014년 12월
평점 :
절판


 

 

자바 퍼즐러는 번역서로 2007년에 지앤선에서 출시했다가 절판됐었는데, 이번에 한빛미디어에서 윤인성 역자와 함께 재출간하였다. (재출판한 것만 봐도 이 책의 가치는 어느 정도 검증됐다고 할 수 있다.) ( 책 부제는 '세상에서 가장 재미있는 자바 책'인데 약간 오버아닌가 생각된다..ㅎ)

 

이 책은 자바 개발자뿐만 아니라 다른 언어 개발자가 읽어도 무리가 없으며 자바언어 자체를 의사코드라고 생각해도 된다. 그리고 코드가 예전꺼라 후지다고 생각하지 마라. 책의 내용들이 지금도 우리가 겪는 문제들이니까..ㅎ (코드는 자바 최신버전에서 테스트했으니 걱정말고 읽으시길..)

 

지은이는 조슈아 블로크로 '이펙트브 자바 2판'의 저자이고, 컬렉션 프레임워크와 java.math 패키지와 assert 매커니즘을 설계한 자바의 대가이다. (이런분이 자바 퍼즐 책이 지었으니 재미와 언어의 심호함(모호함)을 느낄 수 있었다.)

 

저자는 퍼즐 풀때 아래와 같은 절차를 지켜주기를 당부한다.

1. 퍼즐의 프로그램을 살펴보고 고민하라. (컴퓨터로 돌려보지 말고, 결과를 예측하자. 함정이 안보여도 시간을 두고 고민하자.)

2. 프로그램 무엇을 출력할지 예측했으면 실행하라. (생각대로 작동하지 않으면 왜 그런지 고민해 보자.)

3. 프로그램이 잘못 작성되었다면 가정하고, 어떻게 고쳐야 할지 고민하자.

4. 위 과정 후 해답을 읽어보자.

 

 

 

이 책은 총 10장과 부록으로 구성되어 있으며, 각 내용은 아래와 같다.

1. 소개

2. 표현식 퍼즐 : 자료형, 변수, 진수 관련

3. 문자 퍼즐 : 문자처리 관련, 이스케이프, 클래스 이름, 라인 출력

4. 반복문 퍼즐 : 시프트 연산자, 큰 정수

5. 예외 처리 퍼즐 : 스트림, 클래스 분할

6. 클래스 퍼즐 : 생성자, 정적 메서드, Null, Void

7. 라이브러리 퍼즐 : 해시, 정렬

8. 클래스 심화 퍼즐 : private 접근 제한자, 패키지, final, import

9. 추가적인 라이브러리 퍼즐 : 초기화, 리플렉션, 강제 중단

10. 어려운 퍼즐 : 제너릭, 직렬화, 셔플, 슈퍼클래스

 

아래 그림은 착시를 잃으키는 그림이며, 퍼즐러의 함정과 일맥상통하는 부분이 있다. (착시=함정)

(ㅎㅎ 눈을 초점없이 보면 선이 고정되어 보인다.) 

 

 

잘 모르겠다고 쉽게 해답을 보지 말고, 읽고 싶을때 한번씩 꺼내 보면 (특히 화장실에 두고) 좋을 것 같은 생각이 든다. 장황하게 설명하지 않아 적당한 긴장감을 가지고 볼 수 있게 구성되어 있는 것이 마음에 들고, 실무에서 한번씩은 겪을 만한 것이 많이 있었으며, 가끔 왜 그럴까 무심코 넘겼던 부분도 있었다. 회사내의 팀원들에게 한번씩 재미있는 퀴즈로 활용하는 것도 좋을 것이다.

이 책을 읽는다고 프로그램을 잘 개발하진 않겠지만, 프로그래밍 소양을 쌓는데는 도움이 될 것이다.

소장용으로 추천하는데 한표를 던진다.


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo