SlideShare a Scribd company logo
게임 프레임워크의 아키텍쳐와

               디자인 패턴


2007.11.24 박민근 ( 민군 ) agebreak@naver.com
초중급 게임개발자 스터디 데브루키( Dev Rookie)

               DevRookie (박민근)     1
Game Framework


        시작하기 전에…
        게임 프레임워크란 무엇인가 ?
        게임 프레임워크와 게임 엔진
        게임 프레임워크의 아키텍쳐
        자주 사용되는 디자인 패턴들
시작하기 전에…
 게임 프레임워크에 대한 공개 자료 부족

 자신의 경험과 현업의 선배들한테서만 배울 수 있다는 한계성


 아키텍쳐의 능력에 따라 결정되는 디자인


 게임 프레임워크의 표준이나 정석은 존재 하지 않는다 .


 이것은 나의 개인 경험에 의거한 내용일뿐 절대적인것은 아니다
.

           DevRookie (박민근)   3
게임 프레임워크란 ?
   게임 프로그램을 구성하는 커다란 전체틀 (Framework)
   게임 프로그램은 게임 프레임워크로 만들어지는 어플리케이션 이다 .
   MFC – 대표적인 Windows Framework
   게임 엔진 ? 게임 프레임워크 ?
       게임 프레임 워크 >= 게임 엔진 ( 라이브러리 != 프레임워크 )
       게임 엔진중에는 게임 프레임워크를 포함하는 것들도 있다 .
        ( 예 . 언리얼 , 크라이시스 )
   게임의 장르에 상관없이 기본적인 프레임워크는 거의 비슷하다 .
   하지만 플랫폼에 따라서 아키텍쳐가 크게 변경되는 경우도 있다 .
   설계 원칙 : 확장성 , 유연성 , OCP, DIP, etc…



                     DevRookie (박민근)       4
게임 프레임워크란 ?
 현재 실제 개발중인
  프로젝트의 프레임워크
  Layer Base Framework
  Manger Base Framework
  Event Driven Framework
  Scene Base Framework
  여러가지 Framework 패턴들을
  조합하여 자기 게임만의 Framework 를
  만든다 .




                 DevRookie (박민근)   5
게임 프레임워크의 필요성
   게임 프로그램의 커다란 틀을 형성하여 개발의 가이드가 된다 .
   게임 프로그램의 로직 , 알고리즘 , 구조등의 뼈대를 이룬다 .
   프레임워크와 어플리케이션을 분리하여 유연성을 가진다 .
   다양한 장르와 다양한 게임에 활용될 수 있다 .( 재사용성 )
   잘만들어진 프레임워크는 유연성 / 직관성 / 편리성을 가지며 , 이
    것은 게임 개발기간을 결정하는 직접적인 요인이 된다 .
   유연한 프레임워크는 모듈과 로직이 교체 / 변환이 가능하다 .
   다만 설계시에 아키텍쳐적인 설계 능력이 필요하다 .

               DevRookie (박민근)   6
게임 프레임워크의 구성
   렌더링 시스템 (DX 랩핑 , 소팅 , 컬링 , 렌더링… )
   Core Library ( 자료구조 , 스크립트 , 유틸 함수 , 수학 함수
    …)
   게임내 Scene 들의 생성 / 관리 / 소멸 처리
       Login Scene, Lobby Scene, Game Scene…
   게임내의 Entity 객체들의 생성 / 관리 / 소멸 처리
     게임내의 모든 캐릭터 , 오브젝트 , 아이템 , 이펙트…
   게임내의 Update(Tick) 구조 구성
   User 의 Input 에 대한 반응 처리를 구성
   게임내의 로직들의 처리및 구성
   그외 기타 요소들… ( 유닛테스트 , 프로파일러… )

                    DevRookie (박민근)             7
게임 프레임워크에 사용되는 아키텍쳐 (1)

   Layer Base Framework
         각각의 레이어로 구별하여 Framework 를 구성
          Core Layer ( 자료구조 , 알고리즘 , 기초 함수들 )



              Presentation Layer (Rendering Engine)



          Simulation Layer (Game Logic, Network, Script)



              Application Layer (Game C lient, Tool)


                    DevRookie (박민근)             8
Layer Base Framework (1)
   각각의 Layer 는 독립적으로 구성되어 자신의 역할
    만을 처리한다 .

   하위 Layer 는 상위 Layer 를 사용할 수 있지만 ,
    상위 Layer 는 하위 Layer 를 사용할 수 없다 .
    ( 상위 Layer 는 하위 Layer 에 독립적이다 )

   Presentation Layer 변경으로 렌더링 엔진의 교체
    가능 ( 렌더스테이트및 렌더링 방법 )

   Simulation Layer 변경으로 게임 로직의 교체 가능
    ( 장르 변경 )

              DevRookie (박민근)   9
Layer Base Framework (2)
   Application Layer 의 교체로 게임 클라이언트 ,
    맵툴 , 모델툴등의 개발 프레임워크로 사용됨
   잘 설계 / 구현된 Layer 는 다음 게임 개발시에 약간
    의 수정만으로 재사용이 가능하다 .
   프레임워크 설계에 가장 중요하며 , 가장 기본이 되
    는 구조이다 .
   스트레티지 ( 전략 ) 패턴
   MVC 패턴 : 모델 – 뷰 – 컨트롤러

               DevRookie (박민근)   10
게임 프레임워크에 사용되는 아키텍쳐 (2)
   Manager Base Framework
        각각의 시스템 , Entity 를 관리하는 매니저들로 구성

        Scene Manager                      Object Manager




                             Main Thread
                                                UI Manager


           Actor Manager                   FSM Manager
                            AI Manager


                        DevRookie (박민근)        11
Manager Base Framework
   각각의 싱글톤 Manager 들이 하위 객체들의 관리를 담당

   Client 의 요청에 따라 매니저는 등록된 객체들을 생성 / 갱신 / 삭
    제들의 작업들을 처리

   메인 스레드에서 싱글톤 Manager 들의 생성 / 갱신 / 삭제를 처리

   매니저에 속한 객체는 매니저를 통해서만 생성한다 .

   매니저에 속한 객체에 접근하는 경우에는 그 객체의 매니저를 통
    해서만 접근한다 .

   싱글톤 패턴 , 프록시 패턴 , 팩토리 패턴

                DevRookie (박민근)    12
게임 프레임워크에 사용되는 아키텍쳐 (3)
     Event Driven Framework
            각 객체의 메시지를 이벤트를 통해서 명령하는 방식

     Client
                                                         Receiver
                                            Send Event
              Send Event
                                                         Receiver
     Client                 Event Handler

                                                         Receiver


    Client                                               Receiver




                           DevRookie (박민근)               13
Event Driven Framework (1)
   전역으로 생성한 이벤트 핸들러를 통하여 리시버들에
    게 이벤트를 전달하여 동작을 제어하는 방식


   이벤트 생성 주체에 대한 제약이 없기 때문에 서버 /
    더미서버 / 클라이언트 / 유닛 테스트등에 관계없이 리
    시버 객체의 동작을 명령할 수 있다 .


   커플링이 없기 때문에 , 리시버들은 독립적으로 설계
    / 구현 / 교체 될수 있다 .
            DevRookie (박민근)   14
Event Driven Framework (2)
   리시버들은 자신이 필요해서 등록한 이벤트만을 받게된다 .

   객체들이 동작및 로직을 추상화 시킬 수 있다 .

   유연한 클라이언트 / 서버 구조 , GUI 설계등에 유용

   유닛 테스트 / 객체 단위 테스트에 상당히 유용하다

   이벤트의 추가 / 변경 / 삭제만으로 로직의 변경이 간단하다 .

   옵저버 패턴 ( 헐리우드 원칙 )
              DevRookie (박민근)    15
게임 프레임워크에 사용되는 아키텍쳐 (4)
   Scene Base Framework
       게임의 상황에 따라 각각의 Scene 으로 구별하여 처리


Login Scene     Charcter Select Scene    Game Scene




                DevRookie (박민근)         16
Scene Base Framework
   게임상의 로직에 따라서 Scene 단위로 게임을 분리
   게임의 장르에 따라서 분류되는 Scene 의 종류가 다르다 .
    (MMORPG != 캐쥬얼 게임 )
   각각의 Scene 은 자신에게 해당되는 객체들과 로직 / 이벤트들을 관리하며 ,
    일정한 조건에 의해서 다른 Scene 으로 전이 된다 .
   Scene 은 그 자체로 하나의 독립적인 게임이기 때문에 다른 Scene 의 구조에
    관계없이 설계 / 구현이 가능하다 . ( 분할 작업및 구현이 용이 )
   각각의 Scene 은 다른 Scene 과 독립적으로 구성되기 때문에 Scene 의 구
    성및 순서의 교체로 게임 로직의 변화가 가능하다 .
   스트레티지 패턴 , 스테이트 패턴

                  DevRookie (박민근)        17
게임 프레임워크에 사용되는 아키텍쳐
   이것들이 전부는 아니다 !!
    단지 가장 범용적으로 사용되는 아키텍쳐들일뿐…
   실제 프레임워크는 이와 같은 프레임워크 아키텍쳐들의 조합으로
    설계 / 구현된다 .
   자신의 게임에 맞는 프레임워크를 개발하는 것도 중요하지만 , 재
    사용성을 고려하면 다음 게임개발에 유리해진다 .
   그외 기타 아키텍쳐들
       TTC (Thin Transaction Client) – KGC 2007
       N-Tier Base
       Etc…

                      DevRookie (박민근)              18
게임 프레임워크에 사용되는 디자인패턴

   스트래티지 (Strategy) 패턴
       변하지 않는 부분과 변하는 부분을 분리하여 설계
       각각의 레이어및 객체들이 추상화된 인터페이스로만 접근 .
        실제 객체의 구성 및 동작에 대해서는 관여하지 않음
       예 ) Layer Base Framework
   싱글톤 패턴
       전체 프레임워크에서 단 하나의 객체만 생성
       기본 생성자가 아닌 정의된 인터페이스로만 생성
       예 ) 매니저 클래스 생성

                    DevRookie (박민근)   19
게임 프레임워크에 사용되는 디자인패턴
   옵저버 패턴
       메시지 발신자와 메시지 핸들러 , 메시지 리시버로 구성
       이벤트 수신을 등록한 객체에게만 메시지를 전달
       예 ) Event Driven Framework, GUI
   팩토리 패턴
       객체를 직접 생성하지 않고 , 팩토리 객체를 통해서 생성
       클라이언트가 원하는 객체를 팩토리가 대신 생성 / 소멸해줘서
        객체 생성 / 소멸의 추상화
       예 ) 매니저 클래스를 통한 객체들의 생성

                    DevRookie (박민근)       20
게임 프레임워크에 사용되는 디자인패턴
   MVC 패턴
       모델 - 뷰 - 컨트롤러로 역할에 따라 클래스를 분리
       로직 / 렌더링 / 연결을 각각의 역할에 따라 독립적인 Layer 로
        구별
       예 ) MFC
   스테이트 패턴
       현재의 상황 ( 스테이트 ) 에 따라서 동작을 정의
       현재의 상황에서 필요한 이벤트와 동작들만 처리하고 , 조건
        에 따라 다른 동작으로 전이
       예 ) FSM, Scene Base Framework

                    DevRookie (박민근)     21
게임 프레임워크에 사용되는 디자인패턴
   어댑터 패턴
       인터페이스가 다른 객체를 랩핑하여 추상화
       서로 구조 / 인터페이스가 다른 객체들을 같은 종류의 객체들로 처리
        가능하게 함
       예 ) 외부 UI 라이브러리와 자체 라이브러리 통합
   데코레이터 패턴
       생성된 객체에 런타임중에 특별한 기능들을 부착
       동적으로 객체의 추가 기능들을 부착 / 변경 / 삭제가 가능
       예 ) 게임브리오의 프로퍼티 클래스들
   포로토타입 패턴
       기존에 존재하는 객체를 복사하여 새로운 객체를 생성
       예 ) 스타크래프트의 유닛 생산

                 DevRookie (박민근)       22
참고 자료
   현재 개발중인 우리 게임의 프레임워크 (-_-)


   Head First Design Patterns - 한빛미디어




                  DevRookie (박민근)        23
마치며…
   연습용 프로젝트가 아니라면 , 게임 개발의 시작은 프레임워크
    의 설계부터 시작된다 .

   먼저 설계하고 구현하라 . 중간에 프레임워크의 구조를 바꾸는
    것은 사실상 거의 불가능하다 . OCP 와 DIP 를 생각하라 .

   다양한 디자인패턴과 아키텍쳐를 공부하고 , 사용하고 , 이해
    하라 .

   프레임워크 설계에 정답은 없다 . 자신이 만든것이 바로 자신
    만의 프레임워크가 된다 .

              DevRookie (박민근)   24

More Related Content

What's hot

Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architecture
Jongwon Kim
 
NDC 2011 영웅전 런칭팀 박영준
NDC 2011 영웅전 런칭팀 박영준NDC 2011 영웅전 런칭팀 박영준
NDC 2011 영웅전 런칭팀 박영준
영준 박
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
Sang Heon Lee
 
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
Amazon Web Services Korea
 
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
Yongha Kim
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
QooJuice
 
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
devCAT Studio, NEXON
 
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
Ki Hyunwoo
 
GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자
TonyCms
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
devCAT Studio, NEXON
 
[0122 구경원]게임에서의 충돌처리
[0122 구경원]게임에서의 충돌처리[0122 구경원]게임에서의 충돌처리
[0122 구경원]게임에서의 충돌처리KyeongWon Koo
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
devCAT Studio, NEXON
 
NDC 2016 이은석 - 돌죽을 끓입시다: 창의적 게임개발팀을 위한 왓 스튜디오의 업무 문화
NDC 2016 이은석 - 돌죽을 끓입시다: 창의적 게임개발팀을 위한 왓 스튜디오의 업무 문화NDC 2016 이은석 - 돌죽을 끓입시다: 창의적 게임개발팀을 위한 왓 스튜디오의 업무 문화
NDC 2016 이은석 - 돌죽을 끓입시다: 창의적 게임개발팀을 위한 왓 스튜디오의 업무 문화
Eunseok Yi
 
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
강 민우
 
게임 기획 튜토리얼 (2015 개정판)
게임 기획 튜토리얼 (2015 개정판)게임 기획 튜토리얼 (2015 개정판)
게임 기획 튜토리얼 (2015 개정판)
Lee Sangkyoon (Kay)
 
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지
Kwangyoung Lee
 
그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기
Yongha Kim
 
NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템
NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템
NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템tcaesvk
 
취미로 엔진 만들기
취미로 엔진 만들기취미로 엔진 만들기
취미로 엔진 만들기
Jiho Choi
 

What's hot (20)

Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architecture
 
NDC 2011 영웅전 런칭팀 박영준
NDC 2011 영웅전 런칭팀 박영준NDC 2011 영웅전 런칭팀 박영준
NDC 2011 영웅전 런칭팀 박영준
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
 
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
 
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
 
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
 
GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
 
[0122 구경원]게임에서의 충돌처리
[0122 구경원]게임에서의 충돌처리[0122 구경원]게임에서의 충돌처리
[0122 구경원]게임에서의 충돌처리
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
NDC 2016 이은석 - 돌죽을 끓입시다: 창의적 게임개발팀을 위한 왓 스튜디오의 업무 문화
NDC 2016 이은석 - 돌죽을 끓입시다: 창의적 게임개발팀을 위한 왓 스튜디오의 업무 문화NDC 2016 이은석 - 돌죽을 끓입시다: 창의적 게임개발팀을 위한 왓 스튜디오의 업무 문화
NDC 2016 이은석 - 돌죽을 끓입시다: 창의적 게임개발팀을 위한 왓 스튜디오의 업무 문화
 
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
 
게임 기획 튜토리얼 (2015 개정판)
게임 기획 튜토리얼 (2015 개정판)게임 기획 튜토리얼 (2015 개정판)
게임 기획 튜토리얼 (2015 개정판)
 
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지
 
그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기
 
NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템
NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템
NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템
 
취미로 엔진 만들기
취미로 엔진 만들기취미로 엔진 만들기
취미로 엔진 만들기
 

Viewers also liked

[스마트벤처 창업학교] 스타트업 프로젝트를 위한 유니티 게임 개발
[스마트벤처 창업학교] 스타트업 프로젝트를 위한 유니티 게임 개발[스마트벤처 창업학교] 스타트업 프로젝트를 위한 유니티 게임 개발
[스마트벤처 창업학교] 스타트업 프로젝트를 위한 유니티 게임 개발
MinGeun Park
 
예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법
hyun soomyung
 
게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴
예림 임
 
MVP 패턴 소개
MVP 패턴 소개MVP 패턴 소개
MVP 패턴 소개
beom kyun choi
 
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
Sang Don Kim
 
서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015
서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015
서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015
NAVER / MusicPlatform
 
홍성우, 내가 만든 언어로 게임 만들기, NDC2017
홍성우, 내가 만든 언어로 게임 만들기, NDC2017홍성우, 내가 만든 언어로 게임 만들기, NDC2017
홍성우, 내가 만든 언어로 게임 만들기, NDC2017
devCAT Studio, NEXON
 
대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴
대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴
대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴
Terry Cho
 

Viewers also liked (10)

Mvp 이전2
Mvp 이전2Mvp 이전2
Mvp 이전2
 
[스마트벤처 창업학교] 스타트업 프로젝트를 위한 유니티 게임 개발
[스마트벤처 창업학교] 스타트업 프로젝트를 위한 유니티 게임 개발[스마트벤처 창업학교] 스타트업 프로젝트를 위한 유니티 게임 개발
[스마트벤처 창업학교] 스타트업 프로젝트를 위한 유니티 게임 개발
 
예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법
 
게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴게임 개발에 자주 사용되는 디자인 패턴
게임 개발에 자주 사용되는 디자인 패턴
 
MVP 패턴 소개
MVP 패턴 소개MVP 패턴 소개
MVP 패턴 소개
 
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
 
서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015
서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015
서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015
 
홍성우, 내가 만든 언어로 게임 만들기, NDC2017
홍성우, 내가 만든 언어로 게임 만들기, NDC2017홍성우, 내가 만든 언어로 게임 만들기, NDC2017
홍성우, 내가 만든 언어로 게임 만들기, NDC2017
 
대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴
대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴
대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴
 
sungmin slide
sungmin slidesungmin slide
sungmin slide
 

Similar to 게임 프레임워크의 아키텍쳐와 디자인 패턴

[데브루키] 이벤트 드리븐 아키텍쳐
[데브루키] 이벤트 드리븐 아키텍쳐[데브루키] 이벤트 드리븐 아키텍쳐
[데브루키] 이벤트 드리븐 아키텍쳐
MinGeun Park
 
Codex project
Codex projectCodex project
Codex project
Lee Jungpyo
 
[0211 박민근] mmorpg에서의 모델툴 개발
[0211 박민근] mmorpg에서의 모델툴 개발[0211 박민근] mmorpg에서의 모델툴 개발
[0211 박민근] mmorpg에서의 모델툴 개발MinGeun Park
 
모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정
모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정
모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정
funmeate
 
06_게임엔진구성
06_게임엔진구성06_게임엔진구성
06_게임엔진구성noerror
 
Gamebryo LightSpeed (Korean)
Gamebryo LightSpeed (Korean)Gamebryo LightSpeed (Korean)
Gamebryo LightSpeed (Korean)
Gamebryo
 
Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)
Minsu Park
 
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
JinKwon Lee
 
Tizen UIFW - EFL
Tizen UIFW - EFLTizen UIFW - EFL
Tizen UIFW - EFL
Eun Young Lee
 
Big Data platform을 위한 Sencha Ext JS 사례.
Big Data platform을 위한 Sencha Ext JS 사례.Big Data platform을 위한 Sencha Ext JS 사례.
Big Data platform을 위한 Sencha Ext JS 사례.
효근 박
 
전달교육(분석설계모델링)
전달교육(분석설계모델링)전달교육(분석설계모델링)
전달교육(분석설계모델링)gimslide
 
대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014
대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014
대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014
NDOORS
 
Daejeon IT Developer Conference Struts2
Daejeon IT Developer Conference Struts2Daejeon IT Developer Conference Struts2
Daejeon IT Developer Conference Struts2
plusperson
 
Sencha ExtJS를 활용한 Big Data Platform 개발 사례
Sencha ExtJS를 활용한 Big Data Platform 개발 사례 Sencha ExtJS를 활용한 Big Data Platform 개발 사례
Sencha ExtJS를 활용한 Big Data Platform 개발 사례
미래웹기술연구소 (MIRAE WEB)
 
develop android app using intellij
develop android app using intellijdevelop android app using intellij
develop android app using intellij
Sewon Ann
 
피니엔진
피니엔진피니엔진
피니엔진
승우 백
 
Unity 3d study #1
Unity 3d study #1Unity 3d study #1
Unity 3d study #1
Hyunwoo Kim
 
Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1
Dong Chan Shin
 
[액션스크립트] 1부 액션 스크립트 2.0
[액션스크립트] 1부 액션 스크립트 2.0[액션스크립트] 1부 액션 스크립트 2.0
[액션스크립트] 1부 액션 스크립트 2.0MinGeun Park
 

Similar to 게임 프레임워크의 아키텍쳐와 디자인 패턴 (20)

[데브루키] 이벤트 드리븐 아키텍쳐
[데브루키] 이벤트 드리븐 아키텍쳐[데브루키] 이벤트 드리븐 아키텍쳐
[데브루키] 이벤트 드리븐 아키텍쳐
 
Codex project
Codex projectCodex project
Codex project
 
[0211 박민근] mmorpg에서의 모델툴 개발
[0211 박민근] mmorpg에서의 모델툴 개발[0211 박민근] mmorpg에서의 모델툴 개발
[0211 박민근] mmorpg에서의 모델툴 개발
 
모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정
모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정
모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정
 
Game Play System
Game Play SystemGame Play System
Game Play System
 
06_게임엔진구성
06_게임엔진구성06_게임엔진구성
06_게임엔진구성
 
Gamebryo LightSpeed (Korean)
Gamebryo LightSpeed (Korean)Gamebryo LightSpeed (Korean)
Gamebryo LightSpeed (Korean)
 
Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)Ndc2013 정리(upload버전)
Ndc2013 정리(upload버전)
 
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
 
Tizen UIFW - EFL
Tizen UIFW - EFLTizen UIFW - EFL
Tizen UIFW - EFL
 
Big Data platform을 위한 Sencha Ext JS 사례.
Big Data platform을 위한 Sencha Ext JS 사례.Big Data platform을 위한 Sencha Ext JS 사례.
Big Data platform을 위한 Sencha Ext JS 사례.
 
전달교육(분석설계모델링)
전달교육(분석설계모델링)전달교육(분석설계모델링)
전달교육(분석설계모델링)
 
대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014
대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014
대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014
 
Daejeon IT Developer Conference Struts2
Daejeon IT Developer Conference Struts2Daejeon IT Developer Conference Struts2
Daejeon IT Developer Conference Struts2
 
Sencha ExtJS를 활용한 Big Data Platform 개발 사례
Sencha ExtJS를 활용한 Big Data Platform 개발 사례 Sencha ExtJS를 활용한 Big Data Platform 개발 사례
Sencha ExtJS를 활용한 Big Data Platform 개발 사례
 
develop android app using intellij
develop android app using intellijdevelop android app using intellij
develop android app using intellij
 
피니엔진
피니엔진피니엔진
피니엔진
 
Unity 3d study #1
Unity 3d study #1Unity 3d study #1
Unity 3d study #1
 
Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1
 
[액션스크립트] 1부 액션 스크립트 2.0
[액션스크립트] 1부 액션 스크립트 2.0[액션스크립트] 1부 액션 스크립트 2.0
[액션스크립트] 1부 액션 스크립트 2.0
 

More from MinGeun Park

[CSStudy] 코딩인터뷰 완전 분석 #7.pdf
[CSStudy] 코딩인터뷰 완전 분석 #7.pdf[CSStudy] 코딩인터뷰 완전 분석 #7.pdf
[CSStudy] 코딩인터뷰 완전 분석 #7.pdf
MinGeun Park
 
[Cs study] 코딩인터뷰 완전 분석 #6
[Cs study] 코딩인터뷰 완전 분석 #6[Cs study] 코딩인터뷰 완전 분석 #6
[Cs study] 코딩인터뷰 완전 분석 #6
MinGeun Park
 
[Cs study] 코딩인터뷰 완전 분석 #5
[Cs study] 코딩인터뷰 완전 분석 #5[Cs study] 코딩인터뷰 완전 분석 #5
[Cs study] 코딩인터뷰 완전 분석 #5
MinGeun Park
 
[Cs study] 코딩인터뷰 완전 분석 #3
[Cs study] 코딩인터뷰 완전 분석 #3[Cs study] 코딩인터뷰 완전 분석 #3
[Cs study] 코딩인터뷰 완전 분석 #3
MinGeun Park
 
[Cs study] 코딩인터뷰 완전 분석 #2
[Cs study] 코딩인터뷰 완전 분석 #2[Cs study] 코딩인터뷰 완전 분석 #2
[Cs study] 코딩인터뷰 완전 분석 #2
MinGeun Park
 
[Cs study] 코딩인터뷰 완전 분석
[Cs study] 코딩인터뷰 완전 분석[Cs study] 코딩인터뷰 완전 분석
[Cs study] 코딩인터뷰 완전 분석
MinGeun Park
 
[데브루키_언리얼스터디_0525] 애니메이션 노티파이
[데브루키_언리얼스터디_0525] 애니메이션 노티파이[데브루키_언리얼스터디_0525] 애니메이션 노티파이
[데브루키_언리얼스터디_0525] 애니메이션 노티파이
MinGeun Park
 
[데브루키 언리얼 스터디] PBR
[데브루키 언리얼 스터디] PBR[데브루키 언리얼 스터디] PBR
[데브루키 언리얼 스터디] PBR
MinGeun Park
 
[데브루키 언리얼 스터디] 스터디 안내 OT
[데브루키 언리얼 스터디] 스터디 안내 OT[데브루키 언리얼 스터디] 스터디 안내 OT
[데브루키 언리얼 스터디] 스터디 안내 OT
MinGeun Park
 
[데브루키/페차쿠차] 유니티 프로파일링에 대해서 알아보자.
[데브루키/페차쿠차] 유니티 프로파일링에 대해서 알아보자.[데브루키/페차쿠차] 유니티 프로파일링에 대해서 알아보자.
[데브루키/페차쿠차] 유니티 프로파일링에 대해서 알아보자.
MinGeun Park
 
[데브루키] Color space gamma correction
[데브루키] Color space gamma correction[데브루키] Color space gamma correction
[데브루키] Color space gamma correction
MinGeun Park
 
유니티 팁&트릭 Unity Tip & Trick
유니티 팁&트릭 Unity Tip & Trick유니티 팁&트릭 Unity Tip & Trick
유니티 팁&트릭 Unity Tip & Trick
MinGeun Park
 
Live2D with Unity - 그녀들을 움직이게 하는 기술 (알콜코더 박민근)
Live2D with Unity - 그녀들을 움직이게 하는 기술 (알콜코더 박민근)Live2D with Unity - 그녀들을 움직이게 하는 기술 (알콜코더 박민근)
Live2D with Unity - 그녀들을 움직이게 하는 기술 (알콜코더 박민근)
MinGeun Park
 
[RAPA/C++] 1. 수업 내용 및 진행 방법
[RAPA/C++] 1. 수업 내용 및 진행 방법[RAPA/C++] 1. 수업 내용 및 진행 방법
[RAPA/C++] 1. 수업 내용 및 진행 방법
MinGeun Park
 
[Unite17] 유니티에서차세대프로그래밍을 UniRx 소개 및 활용
[Unite17] 유니티에서차세대프로그래밍을 UniRx 소개 및 활용 [Unite17] 유니티에서차세대프로그래밍을 UniRx 소개 및 활용
[Unite17] 유니티에서차세대프로그래밍을 UniRx 소개 및 활용
MinGeun Park
 
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
MinGeun Park
 
[데브루키160409 박민근] UniRx 시작하기
[데브루키160409 박민근] UniRx 시작하기[데브루키160409 박민근] UniRx 시작하기
[데브루키160409 박민근] UniRx 시작하기
MinGeun Park
 
[160404] 유니티 apk 용량 줄이기
[160404] 유니티 apk 용량 줄이기[160404] 유니티 apk 용량 줄이기
[160404] 유니티 apk 용량 줄이기
MinGeun Park
 
[160402_데브루키_박민근] UniRx 소개
[160402_데브루키_박민근] UniRx 소개[160402_데브루키_박민근] UniRx 소개
[160402_데브루키_박민근] UniRx 소개
MinGeun Park
 
[150523] live2d 그녀들을 움직이게 하는 기술
[150523] live2d 그녀들을 움직이게 하는 기술[150523] live2d 그녀들을 움직이게 하는 기술
[150523] live2d 그녀들을 움직이게 하는 기술
MinGeun Park
 

More from MinGeun Park (20)

[CSStudy] 코딩인터뷰 완전 분석 #7.pdf
[CSStudy] 코딩인터뷰 완전 분석 #7.pdf[CSStudy] 코딩인터뷰 완전 분석 #7.pdf
[CSStudy] 코딩인터뷰 완전 분석 #7.pdf
 
[Cs study] 코딩인터뷰 완전 분석 #6
[Cs study] 코딩인터뷰 완전 분석 #6[Cs study] 코딩인터뷰 완전 분석 #6
[Cs study] 코딩인터뷰 완전 분석 #6
 
[Cs study] 코딩인터뷰 완전 분석 #5
[Cs study] 코딩인터뷰 완전 분석 #5[Cs study] 코딩인터뷰 완전 분석 #5
[Cs study] 코딩인터뷰 완전 분석 #5
 
[Cs study] 코딩인터뷰 완전 분석 #3
[Cs study] 코딩인터뷰 완전 분석 #3[Cs study] 코딩인터뷰 완전 분석 #3
[Cs study] 코딩인터뷰 완전 분석 #3
 
[Cs study] 코딩인터뷰 완전 분석 #2
[Cs study] 코딩인터뷰 완전 분석 #2[Cs study] 코딩인터뷰 완전 분석 #2
[Cs study] 코딩인터뷰 완전 분석 #2
 
[Cs study] 코딩인터뷰 완전 분석
[Cs study] 코딩인터뷰 완전 분석[Cs study] 코딩인터뷰 완전 분석
[Cs study] 코딩인터뷰 완전 분석
 
[데브루키_언리얼스터디_0525] 애니메이션 노티파이
[데브루키_언리얼스터디_0525] 애니메이션 노티파이[데브루키_언리얼스터디_0525] 애니메이션 노티파이
[데브루키_언리얼스터디_0525] 애니메이션 노티파이
 
[데브루키 언리얼 스터디] PBR
[데브루키 언리얼 스터디] PBR[데브루키 언리얼 스터디] PBR
[데브루키 언리얼 스터디] PBR
 
[데브루키 언리얼 스터디] 스터디 안내 OT
[데브루키 언리얼 스터디] 스터디 안내 OT[데브루키 언리얼 스터디] 스터디 안내 OT
[데브루키 언리얼 스터디] 스터디 안내 OT
 
[데브루키/페차쿠차] 유니티 프로파일링에 대해서 알아보자.
[데브루키/페차쿠차] 유니티 프로파일링에 대해서 알아보자.[데브루키/페차쿠차] 유니티 프로파일링에 대해서 알아보자.
[데브루키/페차쿠차] 유니티 프로파일링에 대해서 알아보자.
 
[데브루키] Color space gamma correction
[데브루키] Color space gamma correction[데브루키] Color space gamma correction
[데브루키] Color space gamma correction
 
유니티 팁&트릭 Unity Tip & Trick
유니티 팁&트릭 Unity Tip & Trick유니티 팁&트릭 Unity Tip & Trick
유니티 팁&트릭 Unity Tip & Trick
 
Live2D with Unity - 그녀들을 움직이게 하는 기술 (알콜코더 박민근)
Live2D with Unity - 그녀들을 움직이게 하는 기술 (알콜코더 박민근)Live2D with Unity - 그녀들을 움직이게 하는 기술 (알콜코더 박민근)
Live2D with Unity - 그녀들을 움직이게 하는 기술 (알콜코더 박민근)
 
[RAPA/C++] 1. 수업 내용 및 진행 방법
[RAPA/C++] 1. 수업 내용 및 진행 방법[RAPA/C++] 1. 수업 내용 및 진행 방법
[RAPA/C++] 1. 수업 내용 및 진행 방법
 
[Unite17] 유니티에서차세대프로그래밍을 UniRx 소개 및 활용
[Unite17] 유니티에서차세대프로그래밍을 UniRx 소개 및 활용 [Unite17] 유니티에서차세대프로그래밍을 UniRx 소개 및 활용
[Unite17] 유니티에서차세대프로그래밍을 UniRx 소개 및 활용
 
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
유니티의 툰셰이딩을 사용한 3D 애니메이션 표현
 
[데브루키160409 박민근] UniRx 시작하기
[데브루키160409 박민근] UniRx 시작하기[데브루키160409 박민근] UniRx 시작하기
[데브루키160409 박민근] UniRx 시작하기
 
[160404] 유니티 apk 용량 줄이기
[160404] 유니티 apk 용량 줄이기[160404] 유니티 apk 용량 줄이기
[160404] 유니티 apk 용량 줄이기
 
[160402_데브루키_박민근] UniRx 소개
[160402_데브루키_박민근] UniRx 소개[160402_데브루키_박민근] UniRx 소개
[160402_데브루키_박민근] UniRx 소개
 
[150523] live2d 그녀들을 움직이게 하는 기술
[150523] live2d 그녀들을 움직이게 하는 기술[150523] live2d 그녀들을 움직이게 하는 기술
[150523] live2d 그녀들을 움직이게 하는 기술
 

게임 프레임워크의 아키텍쳐와 디자인 패턴

  • 1. 게임 프레임워크의 아키텍쳐와 디자인 패턴 2007.11.24 박민근 ( 민군 ) agebreak@naver.com 초중급 게임개발자 스터디 데브루키( Dev Rookie) DevRookie (박민근) 1
  • 2. Game Framework  시작하기 전에…  게임 프레임워크란 무엇인가 ?  게임 프레임워크와 게임 엔진  게임 프레임워크의 아키텍쳐  자주 사용되는 디자인 패턴들
  • 3. 시작하기 전에…  게임 프레임워크에 대한 공개 자료 부족  자신의 경험과 현업의 선배들한테서만 배울 수 있다는 한계성  아키텍쳐의 능력에 따라 결정되는 디자인  게임 프레임워크의 표준이나 정석은 존재 하지 않는다 .  이것은 나의 개인 경험에 의거한 내용일뿐 절대적인것은 아니다 . DevRookie (박민근) 3
  • 4. 게임 프레임워크란 ?  게임 프로그램을 구성하는 커다란 전체틀 (Framework)  게임 프로그램은 게임 프레임워크로 만들어지는 어플리케이션 이다 .  MFC – 대표적인 Windows Framework  게임 엔진 ? 게임 프레임워크 ?  게임 프레임 워크 >= 게임 엔진 ( 라이브러리 != 프레임워크 )  게임 엔진중에는 게임 프레임워크를 포함하는 것들도 있다 . ( 예 . 언리얼 , 크라이시스 )  게임의 장르에 상관없이 기본적인 프레임워크는 거의 비슷하다 .  하지만 플랫폼에 따라서 아키텍쳐가 크게 변경되는 경우도 있다 .  설계 원칙 : 확장성 , 유연성 , OCP, DIP, etc… DevRookie (박민근) 4
  • 5. 게임 프레임워크란 ?  현재 실제 개발중인 프로젝트의 프레임워크  Layer Base Framework  Manger Base Framework  Event Driven Framework  Scene Base Framework  여러가지 Framework 패턴들을 조합하여 자기 게임만의 Framework 를 만든다 . DevRookie (박민근) 5
  • 6. 게임 프레임워크의 필요성  게임 프로그램의 커다란 틀을 형성하여 개발의 가이드가 된다 .  게임 프로그램의 로직 , 알고리즘 , 구조등의 뼈대를 이룬다 .  프레임워크와 어플리케이션을 분리하여 유연성을 가진다 .  다양한 장르와 다양한 게임에 활용될 수 있다 .( 재사용성 )  잘만들어진 프레임워크는 유연성 / 직관성 / 편리성을 가지며 , 이 것은 게임 개발기간을 결정하는 직접적인 요인이 된다 .  유연한 프레임워크는 모듈과 로직이 교체 / 변환이 가능하다 .  다만 설계시에 아키텍쳐적인 설계 능력이 필요하다 . DevRookie (박민근) 6
  • 7. 게임 프레임워크의 구성  렌더링 시스템 (DX 랩핑 , 소팅 , 컬링 , 렌더링… )  Core Library ( 자료구조 , 스크립트 , 유틸 함수 , 수학 함수 …)  게임내 Scene 들의 생성 / 관리 / 소멸 처리  Login Scene, Lobby Scene, Game Scene…  게임내의 Entity 객체들의 생성 / 관리 / 소멸 처리  게임내의 모든 캐릭터 , 오브젝트 , 아이템 , 이펙트…  게임내의 Update(Tick) 구조 구성  User 의 Input 에 대한 반응 처리를 구성  게임내의 로직들의 처리및 구성  그외 기타 요소들… ( 유닛테스트 , 프로파일러… ) DevRookie (박민근) 7
  • 8. 게임 프레임워크에 사용되는 아키텍쳐 (1)  Layer Base Framework  각각의 레이어로 구별하여 Framework 를 구성 Core Layer ( 자료구조 , 알고리즘 , 기초 함수들 ) Presentation Layer (Rendering Engine) Simulation Layer (Game Logic, Network, Script) Application Layer (Game C lient, Tool) DevRookie (박민근) 8
  • 9. Layer Base Framework (1)  각각의 Layer 는 독립적으로 구성되어 자신의 역할 만을 처리한다 .  하위 Layer 는 상위 Layer 를 사용할 수 있지만 , 상위 Layer 는 하위 Layer 를 사용할 수 없다 . ( 상위 Layer 는 하위 Layer 에 독립적이다 )  Presentation Layer 변경으로 렌더링 엔진의 교체 가능 ( 렌더스테이트및 렌더링 방법 )  Simulation Layer 변경으로 게임 로직의 교체 가능 ( 장르 변경 ) DevRookie (박민근) 9
  • 10. Layer Base Framework (2)  Application Layer 의 교체로 게임 클라이언트 , 맵툴 , 모델툴등의 개발 프레임워크로 사용됨  잘 설계 / 구현된 Layer 는 다음 게임 개발시에 약간 의 수정만으로 재사용이 가능하다 .  프레임워크 설계에 가장 중요하며 , 가장 기본이 되 는 구조이다 .  스트레티지 ( 전략 ) 패턴  MVC 패턴 : 모델 – 뷰 – 컨트롤러 DevRookie (박민근) 10
  • 11. 게임 프레임워크에 사용되는 아키텍쳐 (2)  Manager Base Framework  각각의 시스템 , Entity 를 관리하는 매니저들로 구성 Scene Manager Object Manager Main Thread UI Manager Actor Manager FSM Manager AI Manager DevRookie (박민근) 11
  • 12. Manager Base Framework  각각의 싱글톤 Manager 들이 하위 객체들의 관리를 담당  Client 의 요청에 따라 매니저는 등록된 객체들을 생성 / 갱신 / 삭 제들의 작업들을 처리  메인 스레드에서 싱글톤 Manager 들의 생성 / 갱신 / 삭제를 처리  매니저에 속한 객체는 매니저를 통해서만 생성한다 .  매니저에 속한 객체에 접근하는 경우에는 그 객체의 매니저를 통 해서만 접근한다 .  싱글톤 패턴 , 프록시 패턴 , 팩토리 패턴 DevRookie (박민근) 12
  • 13. 게임 프레임워크에 사용되는 아키텍쳐 (3)  Event Driven Framework  각 객체의 메시지를 이벤트를 통해서 명령하는 방식 Client Receiver Send Event Send Event Receiver Client Event Handler Receiver Client Receiver DevRookie (박민근) 13
  • 14. Event Driven Framework (1)  전역으로 생성한 이벤트 핸들러를 통하여 리시버들에 게 이벤트를 전달하여 동작을 제어하는 방식  이벤트 생성 주체에 대한 제약이 없기 때문에 서버 / 더미서버 / 클라이언트 / 유닛 테스트등에 관계없이 리 시버 객체의 동작을 명령할 수 있다 .  커플링이 없기 때문에 , 리시버들은 독립적으로 설계 / 구현 / 교체 될수 있다 . DevRookie (박민근) 14
  • 15. Event Driven Framework (2)  리시버들은 자신이 필요해서 등록한 이벤트만을 받게된다 .  객체들이 동작및 로직을 추상화 시킬 수 있다 .  유연한 클라이언트 / 서버 구조 , GUI 설계등에 유용  유닛 테스트 / 객체 단위 테스트에 상당히 유용하다  이벤트의 추가 / 변경 / 삭제만으로 로직의 변경이 간단하다 .  옵저버 패턴 ( 헐리우드 원칙 ) DevRookie (박민근) 15
  • 16. 게임 프레임워크에 사용되는 아키텍쳐 (4)  Scene Base Framework  게임의 상황에 따라 각각의 Scene 으로 구별하여 처리 Login Scene Charcter Select Scene Game Scene DevRookie (박민근) 16
  • 17. Scene Base Framework  게임상의 로직에 따라서 Scene 단위로 게임을 분리  게임의 장르에 따라서 분류되는 Scene 의 종류가 다르다 . (MMORPG != 캐쥬얼 게임 )  각각의 Scene 은 자신에게 해당되는 객체들과 로직 / 이벤트들을 관리하며 , 일정한 조건에 의해서 다른 Scene 으로 전이 된다 .  Scene 은 그 자체로 하나의 독립적인 게임이기 때문에 다른 Scene 의 구조에 관계없이 설계 / 구현이 가능하다 . ( 분할 작업및 구현이 용이 )  각각의 Scene 은 다른 Scene 과 독립적으로 구성되기 때문에 Scene 의 구 성및 순서의 교체로 게임 로직의 변화가 가능하다 .  스트레티지 패턴 , 스테이트 패턴 DevRookie (박민근) 17
  • 18. 게임 프레임워크에 사용되는 아키텍쳐  이것들이 전부는 아니다 !! 단지 가장 범용적으로 사용되는 아키텍쳐들일뿐…  실제 프레임워크는 이와 같은 프레임워크 아키텍쳐들의 조합으로 설계 / 구현된다 .  자신의 게임에 맞는 프레임워크를 개발하는 것도 중요하지만 , 재 사용성을 고려하면 다음 게임개발에 유리해진다 .  그외 기타 아키텍쳐들  TTC (Thin Transaction Client) – KGC 2007  N-Tier Base  Etc… DevRookie (박민근) 18
  • 19. 게임 프레임워크에 사용되는 디자인패턴  스트래티지 (Strategy) 패턴  변하지 않는 부분과 변하는 부분을 분리하여 설계  각각의 레이어및 객체들이 추상화된 인터페이스로만 접근 . 실제 객체의 구성 및 동작에 대해서는 관여하지 않음  예 ) Layer Base Framework  싱글톤 패턴  전체 프레임워크에서 단 하나의 객체만 생성  기본 생성자가 아닌 정의된 인터페이스로만 생성  예 ) 매니저 클래스 생성 DevRookie (박민근) 19
  • 20. 게임 프레임워크에 사용되는 디자인패턴  옵저버 패턴  메시지 발신자와 메시지 핸들러 , 메시지 리시버로 구성  이벤트 수신을 등록한 객체에게만 메시지를 전달  예 ) Event Driven Framework, GUI  팩토리 패턴  객체를 직접 생성하지 않고 , 팩토리 객체를 통해서 생성  클라이언트가 원하는 객체를 팩토리가 대신 생성 / 소멸해줘서 객체 생성 / 소멸의 추상화  예 ) 매니저 클래스를 통한 객체들의 생성 DevRookie (박민근) 20
  • 21. 게임 프레임워크에 사용되는 디자인패턴  MVC 패턴  모델 - 뷰 - 컨트롤러로 역할에 따라 클래스를 분리  로직 / 렌더링 / 연결을 각각의 역할에 따라 독립적인 Layer 로 구별  예 ) MFC  스테이트 패턴  현재의 상황 ( 스테이트 ) 에 따라서 동작을 정의  현재의 상황에서 필요한 이벤트와 동작들만 처리하고 , 조건 에 따라 다른 동작으로 전이  예 ) FSM, Scene Base Framework DevRookie (박민근) 21
  • 22. 게임 프레임워크에 사용되는 디자인패턴  어댑터 패턴  인터페이스가 다른 객체를 랩핑하여 추상화  서로 구조 / 인터페이스가 다른 객체들을 같은 종류의 객체들로 처리 가능하게 함  예 ) 외부 UI 라이브러리와 자체 라이브러리 통합  데코레이터 패턴  생성된 객체에 런타임중에 특별한 기능들을 부착  동적으로 객체의 추가 기능들을 부착 / 변경 / 삭제가 가능  예 ) 게임브리오의 프로퍼티 클래스들  포로토타입 패턴  기존에 존재하는 객체를 복사하여 새로운 객체를 생성  예 ) 스타크래프트의 유닛 생산 DevRookie (박민근) 22
  • 23. 참고 자료  현재 개발중인 우리 게임의 프레임워크 (-_-)  Head First Design Patterns - 한빛미디어 DevRookie (박민근) 23
  • 24. 마치며…  연습용 프로젝트가 아니라면 , 게임 개발의 시작은 프레임워크 의 설계부터 시작된다 .  먼저 설계하고 구현하라 . 중간에 프레임워크의 구조를 바꾸는 것은 사실상 거의 불가능하다 . OCP 와 DIP 를 생각하라 .  다양한 디자인패턴과 아키텍쳐를 공부하고 , 사용하고 , 이해 하라 .  프레임워크 설계에 정답은 없다 . 자신이 만든것이 바로 자신 만의 프레임워크가 된다 . DevRookie (박민근) 24