팀 프로젝트를 완성시키며 발표, 종료를 하며 KPT 회고 진행시간이 있었습니다.

언리얼 엔진을 사용한 첫 프로젝트에서 진행된 만족스러운점, 아쉬운점, 그리고 해결방법들을 회고하는 시간을 가지게 되었습니다.

회고록을 진행하며 다음 프로젝트는 어떻게 기획, 설계해야하는지, 어떤것들을 기록해야하는 것인지를 스스로 학습 및 리마인드 하게 되었으며 해당 내용들을 포스팅을 통해 남기고자 합니다.

이번 포스팅에서는 팀 프로젝트를 진행하며 KPT 회고록 및 프로젝트 진행동안의 개인 피드백을 작성하겠습니다. 

 

KPT 회고

Keep : 현재 만족하고 있는 부분

Problem : 불편하게 느끼는 부분

Try : Problem에 대한 해결책, 당장 실행 가능한 것

 

프로젝트 개인 피드백

UI Part

  • 모작 게임에 대한 레퍼런스를 가지고 있음에도 추가 기능에 대한 미구현.
    이론적인 학습을 위주로 함으로써 개발속도가 느리다고 느껴졌다.
    • 기획단계에서 각각의 기능에 대한 제작 기간을 설계함으로써 기능 구현에 대한 타임라인 만들기
    • 개인프로젝트를 진행하며 개발속도 높이기
  • MVVM 설계 기반이지만, WidgetComponent를 활용한 HUD의 경우에는 MVC패턴의 구조다.
    초기 설계시 구체적인 설계를 하지 않음으로써 발생하는 문제들이 많다.
    • 기획단계에서 어떻게 구현할 것인지에 대한 UML, 시퀀스 다이어그램 작성하기
    • 개발자로써의 설계 및 기획하기 (장르, 담당파트만 정하지 않기)
  • 메모리 관리를 효율적으로 하지 않았다.
    • GC가 관리하지 않는 포인터 참조 변수들에 대한 소멸자 메모리 관리 습관화 하기
  • 최적화에 대한 근거가 없다.
    • 기능 구현 후 단위테스트 진행, 프로파일을 통한 성능 비교 후 우선순위 기록하기
    • 최종 단계에서 기대한 성능이 나오지 않는것들에 대한 최적화 리팩토링 작업
  • 일부 공통기능에 대한 유지보수성 낮은 로직
    • 객체지향 언어의 특징 및 원칙 기반의 설계 진행하기
  • 트러블슈팅을 진행하였지만, 기록하지 않았던 점
    • 발생하는 문제에 대한 원인, 해결 과정, 해결 결과에 대한 트러블슈팅 기록 습관화 하기

 

팀 프로젝트 회고

Keep

  1. 팀원들과 협업하며 프로젝트를 완성했다.
    • 초기 프로젝트 설계시에 필수/도전기능에 대한 구현을 성공적으로 구현. 책임감을 성취했다.
  2. 프로젝트를 진행,기획 하며 학습하지 않은 부분들을 주도적으로 찾아보며 프로젝트에 적용한 점
    • 프로젝트를 진행하며 담당 파트에 대한 추가 학습, 언리얼 기술 스택 향상
    • 주어진 동일한 기능 구현에 대한 심도있는 개발 능력
  3. 지속적인 팀 회의, 좋은 분위기
    • 왜 협업을 하는지에 대한 이유를 알 수 있었던점
    • 긍정적인 분위기 및 원활한 팀회의를 통한 빠른 문제 해결 능력 제공 및 추가 학습
  4. 확장성을 고려한 객체지향적인 개발
    • 당장의 게임 완성을 위한 하드코딩이 아닌, 확장성을 고려한 객체지향적인 코드 작성
    • 게임 내부가 완성도가 높았다.
  5. 담당파트의 구현 로직이 의도한대로 설계된 점
    • Stat FPS를 사용한 프로파일링 및 기획시 의도한 레벨 전환 구현으로 성취감 달성
  6. 아침/저녁 시간마다 회고를 진행한 부분
    • 회고를 통해 자기 자신이 얼마나 학습했는지에 대한 인지
    • 팀원들의 학습을 공유받으며 담당 파트 외에도 추가적인 학습기회 제공
  7. 협업시 Git을 활용한 스킬 향상
    • Git을 활용한 컨벤션에 대한 종류 및 장단점 학습
    • Branch Merge시 발생하는 Conflict원인 및 해결과정 등 병합하는 과정에 대한 이해도 향상
  8. 상황에 맞는 방어코드를 작성함으로써 빌드 오류가 발생하지 않은점.
    • 게임 실행시 크래쉬가 발생하지 않는 방어코드 작성. 패키징 고려한 코드 작성
    • 예외 발생시에 대한 방어코드 및 메모리관리를 철저하게 한 프로그램 내적 완성도 향상
    • 오류가 발생할 수 있는 부분에 대한 참조메모리, 콜스택들을 확인하며 트러블 슈팅을 할 수 있는 방법 학습
    • 어떠한 상황에 Equals, Valid, Check, Ensure를 사용하는지에 대한 방어코드 차이점 학습

Problem 

  1. 추가기능을 대부분 구현하지 않은 점
    • 구현할 수 있는 추가기능들이 다양했지만, 프로젝트 완성까지 적용/시도 하지않았다.
  2. 완성된 기능에 대한 추가적인 개발을 하지 않은점
    • 코드에는 정답이 없다. 다른 방법으로 개발을 할 수 있었는데 하지 않았던 점
    • 코드 리팩토링을 추가적으로 하지 않았음
  3. 언리얼 엔진 내부에 대한 이해도 부족
    • 메모리 관리에 대한 이해도 부족으로 인한 메모리 해제를 제대로 적용하지 않은 점
    • 게임 인스턴스 클래스를 활용한 Object Pooling 적용 실패
    • 액터 라이프사이클에 대한 이해도 부족으로 인한 의도치 않은 결과 발생
  4. 느슨한 초기 기획 설계
    • LFS에 대한 이해도 부족으로 인한 Config 세팅을 개별로 적용하던 점
    • UML 클래스 다이어그램, 초기 GameMode 파일 등을 기획하지 않아 병합시 문제가 발생한점
    • 중복되는 파일,DA,DT들이 존재, 유지보수성이 낮아진 부분
    • Content,Source 폴더 내 디렉토리 구조가 준수되지 않아 팀원들의 파일을 찾기 힘든점
  5. 내부적으로 존재하는 중복되는 코드들에 대한 유지보수성
    • 프로젝트 완성을 목적으로 중복되는 코드들을 리팩토링 하지 않은점
  6. 트러블 슈팅에 대한 기록을 하지 않은점
    • 프로젝트 발표시 트러블 슈팅에 대한 정보 누락
    • 팀 회의를 통해 트러블 슈팅 원인, 해결과정을 인지하지만, 기록하지 않아 리마인드가 힘듬
  7. 최적화에 대한 근거 부족
    • 각자 최적화를 하기위한 설계를 하였지만, 이론상으로만 최적화가 좋아짐.
    • Profile CPU,GPU / Stat Fps를 활용한 성능 비교를 실행하지 않음

Try

  1. 추가기능을 대부분 구현하지 않은 것
    • Render Text와 같이 구현하지 않은것들, 피격 이펙트, 사운드와 같은 추가기능들을 초기 설계시에 디테일하게 기획한다.
    • 프로젝트 제작 기간에 맞는 계획 기간에 맞춘 설계 구현
  2. 완성된 기능에 대한 추가적인 개발을 하지 않은 것
    • 팀원간 회의를 통한 상시 피드백
    • 코드 리뷰를 통한 추가적인 기획 피드백
  3. 언리얼 엔진 내부구조에 대한 이해도 부족으로 인한 문제점
    • 부족한 내용들에 개념을 공식문서, 강의를 통한 추가 학습
    • 팀원들과 공유를 함으로써 개인적인 성장이 아닌 팀 위주의 학습 성장 태도
  4. 느슨한 초기 기획 설계
    • 게임 장르에 대한 설계만이 아닌 개발자로써의 기획 설계 추가
    • 각자의 아이디어를 제공, 적극적인 태도
  5. 내부적으로 존재하는 중복되는 코드 (유지보수성 관련)
    • 객체지향언어의 특징 및 원칙을 추가학습하며 적용하도록 습관화 하기
  6. 트러블 슈팅에 대한 기록을 하지 않은것
    • 기록 습관화
    • 발생 원인, 해결 과정, 해결 결과 세가지를 기록해두기(TIL 등)
  7. 최적화에 대한 근거
    • FPS, CPU, GPU 사용량을 개발하며 체크, 어떤것에서 많이 문제가 발생했는지 기록하기
    • 프로젝트 완성 후 최적화 작업 진행하기
    • 메모리 관리
  1.  

+ Recent posts