로보 77 구현기 0일 차 - 왜 이 도전을 하는가?

 

들어가며

화, 수, 목 3일 간의 고민을 마치고, 마침내 도전 주제를 선정하였다👏🏻👏🏻👏🏻👏🏻

로보 77이라는 최종 주제를 선택하기까지 여러 주제를 떠올리며 우여곡절이 많았는데,

내게 도전이란 정의는 무엇인지, 프리코스 기간 동안 뭘 얻고자 했는지, 어떤 개발자가 되고 싶은지, 무엇을 할 때 몰입할 수 있는지 등 스스로 자문자답 한 결과, 다행히도 2주 동안 즐기면서 몰입할 수 있는 주제를 찾을 수 있었다.

따라서 도전에 앞서 '도전을 기획한 이유'와 '도전을 통해 얻고싶은 것'에 대해 기록하여,

2주 후 돌아보았을 때 무엇을 이루어냈는지 확인해보고자 한다.

 

오늘 한 일

  • 도전 기획 이유 정리하기
  • 도전 실행 계획 수립하기

 

📌 프로젝트 기획 이유

 

나의 개발자로서 목표는 단순히 “기능을 구현할 수 있는 사람”이 아니라, “변화에 유연하게 대응할 수 있는 프로그램을 만드는 개발자”가 되는 것이다.

끊임없이 변하는 요구사항 속에서 빠르고 안정적으로 대응하려면, 유지보수하기 쉬운 코드를 작성할 수 있는 역량이 필수적이라고 생각하기에 나는 객체지향 설계를 핵심 도구로 삼았다.

이로 인해 지난 3주 간의 프리코스 동안, 아래 질문을 스스로에게 끊임없이 던지며, 가독성과 유지보수성이 높은 코드에 대한 나만의 기준을 세워왔다.

“이 구조는 변경에 얼마나 유연한가?”,

“어떤 이유와 근거를 가지고 코드를 작성했는가?”,

"객체가 맡은 책임이 명확한가?"

 

이 기준은 정답이 없는 상황에서도 스스로 문제를 판단하고 해결할 수 있는 근거가 되어주었다.

하지만 매주 새로운 미션에 집중하다 보니, 내가 세운 기준이 실제 변화 앞에서도 여전히 유효한지 검증할 기회는 없어 아쉬웠다.

그래서 이번 오픈 미션에서는 1–3주차 동안 쌓아온 나만의 객체지향 기준이 현실의 복잡한 요구사항 속에서도 통하는지 직접 시험해보는 도전을 하고자 한다.

불확실한 상황 속으로 의도적으로 뛰어들어, 내가 세운 원칙이 어디까지 통하고, 언제 흔들리는지를 온몸으로 체감해 보고싶다.

만약 원칙이 무너진다면 그 순간을 회피하지 않고, 그 원인과 한계를 끝까지 파고들어 새로운 기준으로 발전시켜 가고자 한다.

 

📌 왜 '로보 77'인가?

 

'로보 77'은 단순 숫자 합산 게임처럼 보이지만, 턴 관리, 카드 규칙, 합계 계산, 우승 조건 판단 등 객체 간 협력이 필수적인 복잡한 구조를 가지고 있다.

특히 카드의 종류나 우승 조건 같은 게임 규칙이 다양하게 변경될 수 있는 도메인이기 때문에,

요구사항의 변화에 얼마나 유연하게 대응할 수 있는 지 검증하기에 최적이라고 생각했다.

 

나아가 2주차에는 콘솔 기반 프로그램을 디스코드 봇으로 전환하고자 한다.

평소 디스코드에서 여러 봇들이 메시지를 자동으로 응답하고, 게임을 관리하는 모습을 보며

“저건 어떤 구조로 동작할까? 나도 만들어볼 수 있을까?”라는 막연한 궁금증을 갖고 있었다.

그래서 내가 즐기던 ‘로보 77’을 디스코드 봇으로 구현하여 별도의 소스코드 실행 없이도 누구나 디스코드에서 플레이할 수 있게 만든다면, 단순히 나 혼자 실행하는 프로그램을 넘어서 친구들과 함께 즐길 수 있는, 재미있고 의미 있는 도전이 될 것이라 생각했다.

 

마지막으로 디스코드 봇 관련 로직을 추가하는 과정에서 객체 간 책임과 계층이 자연스럽게 재검토될 수밖에 없기에,

내가 세운 객체지향 원칙이 변화와 확장 속에서 얼마나 견고하게 작동하는지 시험할 수 있는 환경이 된다.

따라서 로보 77을 개발하는 것이 내가 진짜 성장하고 싶은 방향과 정확히 맞닿아 있는 도전이라 생각했다.

 

📌 이 도전이 나에게 의미 있는 이유

 

사실 나는 작년 우아한테크코스 7기 프리코스에도 참여했다.

그중 4주 차 편의점 미션은 가장 많은 열정을 쏟은 미션이었지만, 결과적으로는 내 한계를 명확히 마주한 경험이었다.

밤을 새워 몰입했음에도 복잡해진 로직 속에서 클래스 간의 책임이 뒤섞이고,

객체 간의 관계가 점점 얽히면서 테스트 코드를 작성할 수 없을 정도로 코드가 무너졌다.

(서비스 로직이 한 메서드에 얽히고설킨 채 50줄이 나와버렸,,ㅎ)

결국 요구사항을 모두 충족하지 못한 채 미션을 제출해야 했고, 

이 실패는 복잡한 문제를 마주할 때마다 나를 주저하게 만드는 오래된 두려움으로 남아 있었다.

이번 프리코스를 진행하면서도 "복잡한 요구사항이 나오면, 내가 또 무너지지 않을까?"라는 불안이 계속 따라다녔다.

매 미션마다 AI 도움 없이 코드를 작성하며 스스로의 역량을 확인했지만, 정말 복잡한 도메인 앞에서 지금의 내가 어디까지 버틸 수 있을지는 여전히 의문이었다.

 

이번 도전은 그때의 한계를 다시 마주하고, 나아가 한 단계 더 성장하고 싶다.

따라서 ‘객체 간 협력’이 중심이 되는 복잡한 시스템 객체지향적으로 설계하고 유지하는 도전을 통해,

아무리 복잡한 요구사항이여도 스스로 해결할 수 있다는 확신을 얻고자 한다.

더하여 각 객체의 책임을 어떻게 재조정하고, 시스템을 무너지지 않게 유지할 것인가에 대한 과정을 스스로 경험하며 나만의 기준을 다듬어가고자 한다.

 

📌 도전 실행 계획

 

“완전히 낯선 문제 앞에서 객체지향적 사고를 처음부터 끝까지 적용해 보는 도전"을 통해 나는 세 가지를 기대한다.

 

1. 복잡한 비즈니스 규칙을 가진 문제를 객체지향 원칙으로 스스로 해결할 수 있다는 확신을 가진다.

2. 작년 편의점 미션에서 겪었던 실패를 반복하지 않고 잃었던 자신감을 되찾는다.

3. 그동안 쌓은 나의 기준이 언제 흔들리고 언제 빛나는지를 직접 경험하며, 더 단단하고 유연한 객체지향 설계 기준으로 발전시킨다.

 

이를 위해 도전 과정을 두 실행 계획으로 나누었다.

 

1주 차에는 콘솔 기반의 로보77 게임 개발을 목표로 한다.

턴 관리, 카드 규칙, 우승 조건 등 복잡한 게임 로직을 객체지향 원칙과 프리코스 공통 피드백, 그리고 프로그래밍 요구사항 기준에 맞춰 설계하고 구현한다.

 

2주 차에는 콘솔 기반 게임을 디스코드 봇으로 확장하는 것을 목표로 한다.

자바 디스코드 라이브러리를 학습하며 새로운 기술 경험을 쌓고, 확장 과정에서 내 설계를 검증한다.

 

마치며

재밌을 것 같으면서도 해낼 수 있을지 겁이 나지만 어쩌겠는가,, 해봐야 아는 법!

2주 동안 열심히 몰입하여 후회없는 경험을 쌓아보자!