Unity 클라이언트 개발 인턴십 회고
회사명: (주)아이디어 노트
기간: 1개월 (팀 스파르티 인턴십 프로그램)
직무: Unity 클라이언트 개발자 인턴
업무: 클라이언트와 서버 통신이 되는 환경에서 클라이언트 기능 구현
1. 인턴십 개요
- 팀 스파르티의 지원으로 (주)아이디어 노트에서 Unity 클라이언트 개발자로 1개월간 인턴십 수행.
- 서버-클라이언트간 프로토타입 기능 개발을 담당.
- 기획서를 기반으로, 사수님이 작성한 기존 코드 위에서 새로운 기능을 개발.
- 프로젝트 전반을 이해하고 협업하며 실무 개발 프로세스를 경험.
2. 주요 업무 경험
- 서버와 클라이언트 간의 통신 기능 구현.
- 기존 코드 흐름을 분석하고, 사수님의 피드백을 기반으로 기능 수정.
- 기획서를 기반으로 UI 및 기능 구현.
- Mermaid AI를 활용한 기능 플로우 차트 작성.
3. 인턴십을 통해 배운 점
3.1 코드 흐름 이해의 중요성
- 기능만 동작하는 것이 아닌, 언제 호출되어야 하는지, 어떤 흐름 위에 있어야 하는지 이해하는 것이 중요함.
- 기능이 작동한다고 해서 그것이 올바른 구조와 위치라는 보장은 없음.
- 사수님의 조언에 따라, 포스트잇이나 Mermaid AI를 활용해 플로우 다이어그램을 그리는 습관을 기름.
3.2 모르는 것을 두려워하지 말고 적극적으로 소통하기
- 일정이 촉박한 실무 환경에서는 혼자 끙끙대는 것보다 빠르게 질문하고 소통하는 것이 효율적임.
- 모르는 것을 최소한으로 고민하고, 해결이 되지 않으면 즉시 팀원과 소통하여 일정 내 해결하는 것이 중요함.
3.3 기획서를 기준으로 개발하기
- 개발 도중에도 기획서를 반복해서 확인하거나, 기획자에게 직접 질문하는 습관이 필요함.
- 기획서와 실제 구현 사이의 불일치로 인해 발생하는 시간 낭비를 줄일 수 있음.
3.4 AI 및 개발 도구 적극 활용
- AI(ChatGPT) 및 개발 도구를 적절히 활용하면, 작업 속도는 빨라지고 결과물의 품질도 향상됨.
- 팀원들이 항상 여유가 있는 것은 아니기 때문에 도구를 통한 자가 해결 능력은 중요함.
4. 추천받은 학습 키워드 및 도구
서버 | UGS | Unity Gaming Services - 유니티에서 제공하는 서버 기능 |
서버 | RPC, Firebase, AWS, GCP | 서버 및 클라우드 서비스 관련 용어 |
네트워크 | OSI 7계층, TCP Segment | 네트워크 기본 개념 |
알고리즘 | 잡 큐 시스템 | 하스스톤처럼 턴제 로직이 필요한 게임에 사용 |
동시성 | Concurrency, 멀티스레딩 | 비동기 처리 및 스레드 관련 개념 |
성능 | 멀티코어 프로세싱 | 여러 CPU 코어를 사용하는 방식 |
데이터 처리 | 마셜링 | 서로 다른 시스템 간의 데이터 변환 방식 |
일정 관리 | WBS, Slack, Confluence, Trello | 협업 및 일정 관리 도구 |
코드 분석 | DotPeek | .NET 코드 디컴파일러 (하스스톤 코드 참고 가능) |
5. 개인적으로 느낀 개선이 필요한 점
5.1 생각 정리 및 코드 흐름 이해 부족
- 전체 플로우에 대한 인식 없이 일부분만 보고 기능을 구현함.
- 팀 내 코드 컨벤션 및 정책을 제대로 따르지 않아 협업에서 마찰이 발생함.
5.2 C# 기본 개념 부족
- 기본 문법이나 키워드에 대한 개념이 모호하여, 사수님의 설명을 즉시 이해하지 못하는 경우가 있었음.
- 단순히 머릿속에 알고 있는 것이 아닌, 정확한 개념의 언어화가 필요함.
6. 향후 계획 및 다짐
- C# 문법 및 기본 이론 학습에 집중하여, 용어에 대한 정확한 이해를 기반으로 대화와 구현 능력 향상.
- 다양한 프로젝트 코드 분석 (Unity Learn, Asset Store 등)을 통해 구조적 사고 방식 습득.
- 서버 개발자가 아니더라도, 기본적인 서버/네트워크 이론은 숙지할 예정.
- Mermaid 등의 시각화 도구를 활용해 코드 플로우 시각화 능력을 꾸준히 훈련할 것.
해당 내용 정리하기 전의 글 원문
팀 스파르티의 지원을 받아 한달동안 인턴을 할 수 있는 시스템이 있어
(주)아이디어 노트의 Unity 클라이언트 개발자 인턴을 하였다.
회사에서는 클라<>서버를 연결하는 프로토타입의 기능 구현 업무를 맡았다.
기획서를 보고 판단하여 사수님이 작성하신 코드 위에서 기능들을 개발하는 작업을 하였다.
개발에서 잊지 않도록 인턴 생활을 하며 느끼고 배운점을 작성하려고 한다.
0.생각 정리 연습 부족 및 코드의 정책에 따르지 않음
내가 기능 개발을 할 때, 해당 코드의 전체적인 플로우를 이해한 줄 알았다.
하지만 사수님이 해당 기능을 추가하거나 수정이 필요하다고 말하면 나는 해당 과정을 이해하는데 너무 오래 걸렸고
심하면 왜 이 기능이 이 호출시점에 추가되야되는지 이해를 하지 못했다.
(왜냐면 이 호출시점에 없어도 내가 개발한 기능은 구현이 되기 때문)
이것이 반복되니 협업에서 마찰이 생기기 시작하였다.
그리고 사수님이 "ㅇㅇ씨, 해당 프로젝트의 전체 플로우 워크를 한번 그려보세요 "라고 지시를 받았고
플로우를 그려보려니 전체 플로우의 초기부분 마저 제대로 그리지 못하였다.
그렇다. 나는 기능 개발을 하기위해 한 부분만 보고 "해당 기능이 이 호출시점에 추가되면 되겠구나"
이렇게 생각하고 위험하게 개발을 하고 있었던것이다.
내가 A ~ Z 까지 다 작성한 코드면 내가 언제든지 작성하고 수정하면된다.
하지만 회사에서의 프로젝트 코드는 회사 사람들이 다같이 참여하며 첨삭한 코드이다.
팀 그라운드룰 , 코드컨벤션 및 정책을 짜는 이유는 해당 코드의 일관성을 지키기 위해서다.
하지만 내 방식은 그것을 완전 위반하는 개발 방식이였다.
사수님은 " ㅇㅇ씨는 역기회으로 플로우를 많이 그려보세요 , 코드 분석하실때 해당 플로우들을 포스트잇으로 하나하나 적고 그것을 순서대로 나열하는 연습을 하는게 좋을것같아요" 라고 내 생각을 정리하는 방법을 추천해주셨고
https://www.mermaidchart.com/mermaid-ai
Mermaid Chart
A smarter way of creating diagrams.
www.mermaidchart.com
다이어그램 플로우차트를 그리는 웹 <머메이드 AI>를 추천받았고 실제로 해당 프로젝트에서 서버 <> 클라 통신을 하기에
남은 시간에 해당 프로젝트의 플로우를 그리는 연습을 하였고 실제로 코드의 플로우가 생각이 정리가 되었다.
1. 모르는 것을 두려워 하지마라 + 소통하는것을 지향하자
개발자라면 코드 분석 및 기능 개발시 어떤 방법(자료구조,알고리즘등등..)을 이용해서 분석 및 구현할지 고민을 하게 되는경우가 정말 많다.
하지만 현업 에서는 결국 데드라인이 존재하고, 해당 일정까지 완료를 해야된다.
나 또한 작업을 하면서 해당 코드에 대해 시간을 써서 코드를 더 분석하게 된 경우가 있었다.
그 날 결국 야근을 하게 되었고, 사수님의 작업에도 결국에 악영향을 끼쳤다.
사수님은 "생각하는 것은 개발자 소양이지만 이 생각이 일정에 문제가 생기면 안된다.
만약 모르는 것이 있거나 해당 방법이 효율적인지 알고 싶으면 다른 팀원에게 한번 소통을 해봐라" 라고 제안해주셨다.
이후에 실제로 기능 개발중에 애매한 것이 있어 팀원에게 스몰토크 하는겸 말 걸었고 해당 정보에 대해 공유를 하자
바로 좋은 생각이 떠올라 해당 기능에 코드를 추가 하였던 경험이 있었다.
이 경험으로 모르는 것이 있으면 최소한으로 생각하고 그래도 결과가 나오지 않으면 해당 문제에 대해서 소통 및 질문을 통해서 빨리 해결하는것이 일정내에 프로젝트를 진행하는 실마리라는것을 알았다.
2. 개발을 하면서 기획서를 상시로 확인하거나 기획자에게 질문을 많이 하자
보통 포트폴리오 제작 및 팀/개인 작업 진행시 프로젝트에서 기획서를 내가 또는 팀원이 즉시 수정하고 작업하였다.
하지만 현업에서는 [기획자]라는 포지션이 존재 하였고 프로그래머는 기획서에 의해 해당 기능을 개발 및 구현을 한다.
내가 맡은 기능을 개발 중 기획서의 플로우만 확인하고 작업 하였고 , 사수님이 확인을 하시는 중
UI가 이렇게 동작하는 것이 맞냐고 물어보자 , 나는 맞다고 확신하였다.
하지만 기획서를 확인해보니 완전 다르게 구현을 하게 된것이다.
내가 구현하면서 한번만이라고 기획서를 다시 보거나 기확자님에게 다시 물어봤으면 이렇게 시간을 오래 잡을 일이
아니였던것이었다.
3.작업시 AI 및 도구의 지원을 받을 수 있으면 적극적으로 활용하자
위에 말한 1번 2번 질문에는 결국 팀원과의 소통이 베이스로 깔려있다.
하지만 프로젝트 라는 것이 여유있는 사람은 없고 다들 바쁘기에 질문에 답 해주기 매우 곤란할 것이다.
해당 문제를 극복하기 위해서는 AI(Chat Gpt)를 적극적으로 활용해야 된다.
회사 보안의 선을 잘 지키며 적극적으로 활용해서 작업시간을 줄이고 결과물은 퀄리티를 올려야된다.
또한 인턴생활을 하며 해당 키워드에 대해 공부를하면 개발시에 도움이 많이 될것이라고 알려주셨다.
1.UGS : 유니티에서 제공하는 서버
2.RPC , FireBase , AWS ,GCP : 서버(네트워크) 용어
3.OSI 7계층, 전송 계층 , ICP Segment : 서버 용어
3.잡 큐 시스템 : 하스스톤과 같이 턴제 게임에서 사용되는 알고리즘
4.동시성( Concurrency ) -> 멀티스레딩
5.멀티코어 프로세싱
6.마셜링
7. WBS (Work Breakdown Structure) -> 일정 조율 웹 페이지 : slack , 컨플루언스 , 트렐로
9.DOT Peek : 해당 프로그램을 통해 하스스톤의 소스코드를 확인할 수 있다.
인턴 하면서 더욱 많은 것을 배웠지만 우선 메모 해놓은 것은 이정도가 된것같다.
이 밑에 내용은 인턴 생활을 하며 개인적으로 느끼고 이 부분을 빨리 고쳐나가야된다고 생각한 점을 정리했다.
C# 기본 문법 및 코드 작성시 단어의 개념이 내가 많이 부족하다고 판단 했다.
사수님이 말하는 것을 듣고 바로 파악이 되지 않은 경우가 있었다.
이건 내가 머릿속으로는 아는데 다른 사람의 말을 듣고 해당 단어의 개념이 제대로 안박혀있기에 일어난 문제였다.
사수님도 인턴이 끝나면 코드 개발보다 이론을 공부하여 개념을 확립하는게 더 좋아보인다고 추천해주셨다.
또한 다른 프로젝트의 코드를 많이 모사하는 것을 권장하였다(Unity Learn 또는 AssetStore의 Asset 분석)
회사에서는 프로토타입에 서버를 연결하여 테스트하기를 원하였고
개인적으로 내가 서버에 대해서는 winSock으로 winAPI를 이용하여 만듬 체스게임 정도만 간단하게 서버를 구현 해봤고
그 이후로 서버를 따로 공부하지 않았는데 이번 기회에 서버에 대한 지식이 많이 부족하단것을 알았고 서버개발자가 되는것은 아니지만 서버에 대한 이론은 익혀야 된다고 판단하였다.