SlideShare uma empresa Scribd logo
1 de 13
2014 하반기 R&D인턴 프로젝트
배틀 테트리스
R&D 인턴 이동우
2 / 13
목차
1. 게임 구현 사항
1-1. 개발 사항 및 변경사항
1-2. 클라이언트 요청 처리 방식
2. 동영상 시연
3. FeedBack 적용 사항 소개
3-1. Wall-Kick과 T-Spin 기능
3-2. 관전 모드 기능
3-3. 어려웠던 점
4. 마무리
1. 게임 구현 사항
1-1. 개발 사항 및 변경 사항
2014 하반기 R&D 프로젝트 – 배틀 테트리스
3 / 13
1. 게임 구현 사항
1-1. 개발 사항 및 변경 사항
2014 하반기 R&D 프로젝트 – 배틀 테트리스
4 / 13
1. 게임 구현 사항
1-1. 개발 사항 및 변경 사항
2014 하반기 R&D 프로젝트 – 배틀 테트리스
5 / 13
1. 게임 구현 사항
1-2. 클라이언트 요청 처리 방식
2014 하반기 R&D 프로젝트 – 배틀 테트리스
6 / 13
브라우저 JSP 페이지
Controller
Servlet
Logic 처리
Servlet DB
2. 시연동영상 2014 하반기 R&D 프로젝트 – 배틀 테트리스
◎ 시연 Key-Point
- 사용자 정의 맵 생성
- T-Spin, Wall-Kick 기능
7 / 13
3. FeedBack 적용 사항 – Wall Kick과 T Spin
3-1. Wall Kick 기능 참고 : http://tetrisconcept.net/
2014 하반기 R&D 프로젝트 – 배틀 테트리스
◎ 구현 방식
=> SRS 알고리즘 적용
1. 회전 Count 파악
2. 5가지 회전 경우의 확인
◎ Wall Kick 정의 : 회전을 할 때 다른 블록이나 벽이
블록과 인접하여 일반적인 회전이
어려울 경우 블록의 위치를 옮겨서
회전하는 기능
8 / 13
3. FeedBack 적용 사항 – Wall Kick과 T Spin
3-1. T-Spin 기능
◎ T-Spin 정의 : ‘T’자형의 블록을 이용한
Tight space에서의 회전에 대한 보상
※Tight Space란? ‘T’자형 블록을 포함하는 3x3 박스에서
5개의 코너 블록에서 3개의 블록의 점유한 상태
2014 하반기 R&D 프로젝트 – 배틀 테트리스
◎ 구현 방식
1. 중심축을 통일 시킨 회전
2. 각 코너 별 블록 점유 상태 확인
9 / 13
3. FeedBack 적용 사항 – 관전 모드
3-2. 관전 모드 기능
2014 하반기 R&D 프로젝트 – 배틀 테트리스
1 : 블록의 최종 위치 확정
2 : 플레이어의 보드(Board) 정보 전송
3-a : 보드 정보 송신
3-b : ObserverSocketServlet.getInstance()를 이용해 보드 정보 송신 함수 호출
4 : 보드 정보를 관전자들에게 송신
5 : 수신 받은 보드 정보를 캔버스에 업데이트 10 / 13
3. FeedBack 적용 사항 – 어려웠던 점
3-3. 어려웠던 점
◎ 발생 원인
- 방 입장과 소켓 생성 사이의 시간차
- 룸 정보를 이용한 메시지 전송
2014 하반기 R&D 프로젝트 – 배틀 테트리스
◎ 발생 오류
- 존재하지 않는 Socket End-Point로 인한 웹 소켓 서버 기능 중단
◎ 해결 방안
- 룸 정보와 Socket Session 정보를
활용한 메시지 전송
- 관전자를 관리하는 전용 소켓 서버 추가
◎ 무엇이 부족했나?
- 설계 당시 파악하지 못한 에러 가능성
- 인터넷에 의존한 정보 검색
- Break Point에만 의존한 디버깅
- 코드만 보는 좁은 시야
11 / 13
4. 마무리
프로젝트를 마무리하며
◎ 새로운 것들을 만나면서
- 설계가 있는 개발
- 숲을 보는 개발
- 알고 하는 개발
2014 하반기 R&D 프로젝트 – 배틀 테트리스
- ‘어떻게’ 하면
내가 더 그럴싸해 보일까?
◎ 잘못된 ‘어떻게’ 사용법
생각의 변화
“어떻게 하면 상대방이
더욱 정확하게 알 수 있을까?”
- “앞으로 무엇을 더 배울 수 있을까?”
- “더 성장 하고 싶다”
설렘
욕심
◎ “전과 잘했다”
12 / 13
감사합니다
2014 하반기 R&D인턴 프로젝트
R&D 인턴 이동우

Mais conteúdo relacionado

Semelhante a [최종발표]이동우 배틀테트리스 For_slideshare

지스타 참가업체 매뉴얼(최종) (1)
지스타 참가업체 매뉴얼(최종) (1)지스타 참가업체 매뉴얼(최종) (1)
지스타 참가업체 매뉴얼(최종) (1)sophie510
 
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉iFunFactory Inc.
 
폴리아트VR세미나-가상현실(VR) 기기 특성과 게임 개발 장르의 선택
폴리아트VR세미나-가상현실(VR) 기기 특성과 게임 개발 장르의 선택폴리아트VR세미나-가상현실(VR) 기기 특성과 게임 개발 장르의 선택
폴리아트VR세미나-가상현실(VR) 기기 특성과 게임 개발 장르의 선택Jong Won Park
 
Provisioning Dedicated Game Server on Kubernetes Cluster
Provisioning Dedicated Game Server on Kubernetes ClusterProvisioning Dedicated Game Server on Kubernetes Cluster
Provisioning Dedicated Game Server on Kubernetes ClusterJinwoong Kim
 
[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...
[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...
[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...OpenStack Korea Community
 
Meteor Korea DEV School 1st day
Meteor Korea DEV School 1st dayMeteor Korea DEV School 1st day
Meteor Korea DEV School 1st dayseung-hyun Park
 
GOTHAM 오픈소스 메쉬 네트워킹 소프트웨어 패키지
GOTHAM 오픈소스 메쉬 네트워킹 소프트웨어 패키지GOTHAM 오픈소스 메쉬 네트워킹 소프트웨어 패키지
GOTHAM 오픈소스 메쉬 네트워킹 소프트웨어 패키지Kyunghee Univ
 
[Open-infradays 2019 Korea] jabayo on Kubeflow
[Open-infradays 2019 Korea] jabayo on Kubeflow[Open-infradays 2019 Korea] jabayo on Kubeflow
[Open-infradays 2019 Korea] jabayo on Kubeflow석환 홍
 
Win10 iot core_pi2
Win10 iot core_pi2Win10 iot core_pi2
Win10 iot core_pi2WeAreDev
 
스마일게이트 서버개발캠프 - QuadCore - BTS Deck
스마일게이트 서버개발캠프 - QuadCore - BTS Deck스마일게이트 서버개발캠프 - QuadCore - BTS Deck
스마일게이트 서버개발캠프 - QuadCore - BTS DeckServerDevCamp
 
어려웠다, WebRTC를 활용한 360º 영상통화 트러블 슈팅
어려웠다, WebRTC를 활용한 360º 영상통화 트러블 슈팅어려웠다, WebRTC를 활용한 360º 영상통화 트러블 슈팅
어려웠다, WebRTC를 활용한 360º 영상통화 트러블 슈팅ksdc2019
 
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기Chang W. Doh
 
Openstack Demo-virtual checkpoint FW and virtual suricata IDS
Openstack Demo-virtual checkpoint FW and virtual suricata IDSOpenstack Demo-virtual checkpoint FW and virtual suricata IDS
Openstack Demo-virtual checkpoint FW and virtual suricata IDSYoung moo Ryu
 
Futsal Manager 프로젝트(소프트웨어 마에스트로 2차 최종발표)
Futsal Manager 프로젝트(소프트웨어 마에스트로 2차 최종발표)Futsal Manager 프로젝트(소프트웨어 마에스트로 2차 최종발표)
Futsal Manager 프로젝트(소프트웨어 마에스트로 2차 최종발표)hogyun yu
 
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발Jeongkyu Shin
 

Semelhante a [최종발표]이동우 배틀테트리스 For_slideshare (15)

지스타 참가업체 매뉴얼(최종) (1)
지스타 참가업체 매뉴얼(최종) (1)지스타 참가업체 매뉴얼(최종) (1)
지스타 참가업체 매뉴얼(최종) (1)
 
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
 
폴리아트VR세미나-가상현실(VR) 기기 특성과 게임 개발 장르의 선택
폴리아트VR세미나-가상현실(VR) 기기 특성과 게임 개발 장르의 선택폴리아트VR세미나-가상현실(VR) 기기 특성과 게임 개발 장르의 선택
폴리아트VR세미나-가상현실(VR) 기기 특성과 게임 개발 장르의 선택
 
Provisioning Dedicated Game Server on Kubernetes Cluster
Provisioning Dedicated Game Server on Kubernetes ClusterProvisioning Dedicated Game Server on Kubernetes Cluster
Provisioning Dedicated Game Server on Kubernetes Cluster
 
[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...
[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...
[OpenInfra Days Korea 2018] (Track 4) Provisioning Dedicated Game Server on K...
 
Meteor Korea DEV School 1st day
Meteor Korea DEV School 1st dayMeteor Korea DEV School 1st day
Meteor Korea DEV School 1st day
 
GOTHAM 오픈소스 메쉬 네트워킹 소프트웨어 패키지
GOTHAM 오픈소스 메쉬 네트워킹 소프트웨어 패키지GOTHAM 오픈소스 메쉬 네트워킹 소프트웨어 패키지
GOTHAM 오픈소스 메쉬 네트워킹 소프트웨어 패키지
 
[Open-infradays 2019 Korea] jabayo on Kubeflow
[Open-infradays 2019 Korea] jabayo on Kubeflow[Open-infradays 2019 Korea] jabayo on Kubeflow
[Open-infradays 2019 Korea] jabayo on Kubeflow
 
Win10 iot core_pi2
Win10 iot core_pi2Win10 iot core_pi2
Win10 iot core_pi2
 
스마일게이트 서버개발캠프 - QuadCore - BTS Deck
스마일게이트 서버개발캠프 - QuadCore - BTS Deck스마일게이트 서버개발캠프 - QuadCore - BTS Deck
스마일게이트 서버개발캠프 - QuadCore - BTS Deck
 
어려웠다, WebRTC를 활용한 360º 영상통화 트러블 슈팅
어려웠다, WebRTC를 활용한 360º 영상통화 트러블 슈팅어려웠다, WebRTC를 활용한 360º 영상통화 트러블 슈팅
어려웠다, WebRTC를 활용한 360º 영상통화 트러블 슈팅
 
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
 
Openstack Demo-virtual checkpoint FW and virtual suricata IDS
Openstack Demo-virtual checkpoint FW and virtual suricata IDSOpenstack Demo-virtual checkpoint FW and virtual suricata IDS
Openstack Demo-virtual checkpoint FW and virtual suricata IDS
 
Futsal Manager 프로젝트(소프트웨어 마에스트로 2차 최종발표)
Futsal Manager 프로젝트(소프트웨어 마에스트로 2차 최종발표)Futsal Manager 프로젝트(소프트웨어 마에스트로 2차 최종발표)
Futsal Manager 프로젝트(소프트웨어 마에스트로 2차 최종발표)
 
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
 

[최종발표]이동우 배틀테트리스 For_slideshare

  • 1. 2014 하반기 R&D인턴 프로젝트 배틀 테트리스 R&D 인턴 이동우
  • 2. 2 / 13 목차 1. 게임 구현 사항 1-1. 개발 사항 및 변경사항 1-2. 클라이언트 요청 처리 방식 2. 동영상 시연 3. FeedBack 적용 사항 소개 3-1. Wall-Kick과 T-Spin 기능 3-2. 관전 모드 기능 3-3. 어려웠던 점 4. 마무리
  • 3. 1. 게임 구현 사항 1-1. 개발 사항 및 변경 사항 2014 하반기 R&D 프로젝트 – 배틀 테트리스 3 / 13
  • 4. 1. 게임 구현 사항 1-1. 개발 사항 및 변경 사항 2014 하반기 R&D 프로젝트 – 배틀 테트리스 4 / 13
  • 5. 1. 게임 구현 사항 1-1. 개발 사항 및 변경 사항 2014 하반기 R&D 프로젝트 – 배틀 테트리스 5 / 13
  • 6. 1. 게임 구현 사항 1-2. 클라이언트 요청 처리 방식 2014 하반기 R&D 프로젝트 – 배틀 테트리스 6 / 13 브라우저 JSP 페이지 Controller Servlet Logic 처리 Servlet DB
  • 7. 2. 시연동영상 2014 하반기 R&D 프로젝트 – 배틀 테트리스 ◎ 시연 Key-Point - 사용자 정의 맵 생성 - T-Spin, Wall-Kick 기능 7 / 13
  • 8. 3. FeedBack 적용 사항 – Wall Kick과 T Spin 3-1. Wall Kick 기능 참고 : http://tetrisconcept.net/ 2014 하반기 R&D 프로젝트 – 배틀 테트리스 ◎ 구현 방식 => SRS 알고리즘 적용 1. 회전 Count 파악 2. 5가지 회전 경우의 확인 ◎ Wall Kick 정의 : 회전을 할 때 다른 블록이나 벽이 블록과 인접하여 일반적인 회전이 어려울 경우 블록의 위치를 옮겨서 회전하는 기능 8 / 13
  • 9. 3. FeedBack 적용 사항 – Wall Kick과 T Spin 3-1. T-Spin 기능 ◎ T-Spin 정의 : ‘T’자형의 블록을 이용한 Tight space에서의 회전에 대한 보상 ※Tight Space란? ‘T’자형 블록을 포함하는 3x3 박스에서 5개의 코너 블록에서 3개의 블록의 점유한 상태 2014 하반기 R&D 프로젝트 – 배틀 테트리스 ◎ 구현 방식 1. 중심축을 통일 시킨 회전 2. 각 코너 별 블록 점유 상태 확인 9 / 13
  • 10. 3. FeedBack 적용 사항 – 관전 모드 3-2. 관전 모드 기능 2014 하반기 R&D 프로젝트 – 배틀 테트리스 1 : 블록의 최종 위치 확정 2 : 플레이어의 보드(Board) 정보 전송 3-a : 보드 정보 송신 3-b : ObserverSocketServlet.getInstance()를 이용해 보드 정보 송신 함수 호출 4 : 보드 정보를 관전자들에게 송신 5 : 수신 받은 보드 정보를 캔버스에 업데이트 10 / 13
  • 11. 3. FeedBack 적용 사항 – 어려웠던 점 3-3. 어려웠던 점 ◎ 발생 원인 - 방 입장과 소켓 생성 사이의 시간차 - 룸 정보를 이용한 메시지 전송 2014 하반기 R&D 프로젝트 – 배틀 테트리스 ◎ 발생 오류 - 존재하지 않는 Socket End-Point로 인한 웹 소켓 서버 기능 중단 ◎ 해결 방안 - 룸 정보와 Socket Session 정보를 활용한 메시지 전송 - 관전자를 관리하는 전용 소켓 서버 추가 ◎ 무엇이 부족했나? - 설계 당시 파악하지 못한 에러 가능성 - 인터넷에 의존한 정보 검색 - Break Point에만 의존한 디버깅 - 코드만 보는 좁은 시야 11 / 13
  • 12. 4. 마무리 프로젝트를 마무리하며 ◎ 새로운 것들을 만나면서 - 설계가 있는 개발 - 숲을 보는 개발 - 알고 하는 개발 2014 하반기 R&D 프로젝트 – 배틀 테트리스 - ‘어떻게’ 하면 내가 더 그럴싸해 보일까? ◎ 잘못된 ‘어떻게’ 사용법 생각의 변화 “어떻게 하면 상대방이 더욱 정확하게 알 수 있을까?” - “앞으로 무엇을 더 배울 수 있을까?” - “더 성장 하고 싶다” 설렘 욕심 ◎ “전과 잘했다” 12 / 13
  • 13. 감사합니다 2014 하반기 R&D인턴 프로젝트 R&D 인턴 이동우

Notas do Editor

  1. 안녕하십니까? 배틀 테트리스를 개발한 이동우입니다.
  2. 발표는 4부분으로 나누어져 있습니다. 먼저 게임 구현 사항에 대한 설명입니다.
  3. 회색 음영처리 된 부분은 중간 발표 이후로 새롭게 추가된 사항들이고 붉은색 음영처리 된 부분은 축소되거나 삭제된 사항들입니다. 축소/삭제 사항만 언급을 하고 넘어가도록 하겠습니다. 서버 측에서는 스코어 랭킹 게시판을 상위 10명의 플레이어만 제공하는 방식으로 축소하였습니다. 그리고 슬라이드 4page에 있는 5가지 예외처리 사항 외 다른 예외처리들을 구현하지 못했습니다. 예를 들면 게임 중 네트워크 중단이 그 예입니다.
  4. 클라이언트 측에서는 기존 3가지 아이템 구현에서 지우개 아이템 하나로 축소하였고 시간에 따른 게임 속도 증가 기능을 제외 하였습니다. 제외 혹은 축소된 이유는 새롭게 추가되는 사항들을 우선시 개발하면서 개발을 완료하지 못했기 때문입니다.
  5. 게임 구현에 있어서 제외사항과 구현된 5가지 예외처리 사항들입니다.
  6. 다음으로 서버 구조입니다. 사용자의 Request는 Controller Servlet을 거쳐서 로직이 처리되고 사용자의 페이지를 새롭게 변경시켜주는 방식으로 이루어져있습니다.
  7. 시연 동영상을 먼저 보도록 하겠습니다. 시연 사항으로는 PC와 모바일 환경의 게임 진행, T-Spin, Wall-Kick 기능, 블록 Hold기능, 관전모드, 라인삭제에 따른 상대방 맵 상승 기능을 보여드리겠습니다. 좌측 화면은 PC환경, 우측 상단은 모바일 환경, 우측 하단은 관전모드 입니다. Host Player는 마우스 버튼을 이용하여 게임에 사용할 맵을 생성합니다. 다음은 T-Spin입니다. T스핀은 “T’자형 블록을 이용한 Tight한 공간에서의 회전을 의미합니다. 다음과 같이 벽으로 둘러 쌓인 공간에서 회전을 하여 추가 점수를 획득하는 것 다음은 블록을 저장해 두었다가 필요할때 꺼내서 사용하는 Hold 기능입니다. Wall-Kick입니다. 보시는 것과 같이 벽이 인접한 상황에서 회전을 하게 되면 벽을 밀면서 회전을 하게 됩니다. 이상으로 시연 동영상을 마치겠습니다.
  8. Wall-Kick Super Rotation System을 이용하였습니다. 각각의 회전마다 5가지의 회전 경우의 수를 확인을 하고 유효한 회전으로 블록을 변경하게 됩니다.
  9. T-Spin을 구현하기 위해서 블록의 회전 중심을 통일을 해주었습니다. 이후 4x4 배열에 정의된 블록을 3x3 배열에 옮겨 닮고 4개의 모서리의 점유 여부를 판단하는 방식으로 구현을 하였습니다.
  10. 직접 피드백 받은 사항은 아니지만 관전 모드를 새롭게 적용해 보았습니다. 이에 대한 시퀀스 다이어그램 입니다.
  11. 개발 진행간 해결하는 데 가장 오랜 시간이 걸린 이슈입니다. 관전 모드를 추가하게 되면서 게임 도중 관전자를 입장시키는 과정에서 오류가 발생하였습니다. 룸 입장과 소켓 생성 사이의 시간차가 존재하는데 이때 메시지를 송신하려는 시도가 있었기 때문입니다. 이 문제를 해결하기 위해 룸 정보 뿐만 아니라 연결된 세션 정보 함께 파악해 메시지를 전송하는 방식을 사용하였습니다. 또한 추가적으로 관전자를 따로 관리하는 소켓 서버를 추가하였습니다. 이 문제를 해결하는데 많은 시간이 소요 되었는데 그 원인에 대해 한 번 생각해 보았습니다. 가장 큰 원인은 단순히 Break Point만을 이용해서 디버깅을 시도하였다는 점입니다. 숲을 보지 못하고 나무에 있는 수 많은 나뭇잎 중에서 썩은 나뭇잎 하나만을 찾으려고 했던 것입니다. 또 인터넷에서 뭐가 문제다 하면 이거 바꿔보고 저거 바꿔보고 이렇게 안되면 저렇게 해보자라는 식의 해결이 원인으로 생각됩니다.
  12. 인턴신 과정에서 이러한 문제들을 통해 인턴십 전에는 생각조차 하지 못했던 것들을 생각해 볼 수 있었습니다. 설계의 중요성, 숲을 보는 시야, 내가 하는 것이 무엇인지, 또 어떤 원리로 동작하는지 알고 하는 개발 역량, 그리고 코드 정리의 필요성입니다. 새로운 것들을 생각할 수 있게 되면서 저는 설렘과 욕심을 갖게 되었습니다. “앞으로 무엇을 더 배울 수 있을지”, 그리고 내가 얼마나 더 성장할 수 있을지 하는 것입니다. 또 그 동안 “어떻게”에 대한 사용법에 큰 오류가 있음을 알게 되었습니다. 특히 발표를 진행하면서 알게 되었는데 “어떻게 하면 내가 더 그럴싸해 보일까?”라는 생각과 행동을 하고 있는 제 자신을 보게 되었습니다. 저는 이러한 생각들이 얼마나 편협한 사고이고 치사한 사고인지 알게 되었습니다. 마지막으로 인턴십 내내 “전과를 정말 잘했구나"라는 생각을 하게 되었습니다. 저는 중국통상학과로 입학을 하였는데 처음 제가 컴퓨터 공학부로 전과를 한다고 했을 때 주변에서는 “할 수 있어?“라는 반응을 보이곤 했습니다. 누군가는 저에게 “넌 아니야”라고 할지도 모르겠습니다. 하지만 인턴십 과정에서 개발 과정이 너무나도 즐거웠고 또 즐거웠습니다. 제 자신의 선택이 옳았음을 확인할 수 있었던 소중한 계기가 되었습니다. 이상으로 발표를 마치겠습니다. 감사합니다.
  13. 감사합니다