처음 맡은 프로젝트 설계 : 어떻게 시작하지?

kameals·2020년 4월 17일
13
post-thumbnail

📕 개요

어느날 갑자기 회사에서 제품 설계를 나에게 지시한다면?
어느날 갑자기 팀 리더가 퇴사하면서 내가 프로젝트의 설계를 담당하게 됐다면?

이런 일은 개발자라면 언젠가 있을수도 있는 일인 것 같습니다.
저는 최근에 처음으로 회사의 새로운 프로젝트의 설계를 담당하게 되었습니다.

처음 든 생각은

어디서부터 시작해야 하지?
무엇을 해야하지?
내가 잘 할 수 있을까?
팀의 협업을 잘 작동하게 하려면 어떻게 설계해야하지?

등등 이었습니다.

이 글은 제가 설계를 담당하게 된 처음, 참고한 서적과 조언들에 대한 글입니다.

📗 본문

📚 처음엔 무슨 책을 읽기 시작했는가

우선 가장 먼저 한 것은 왠지 도움될 것 같은 책들을 마구잡이로 읽기 시작했습니다.

  • 클린아키텍쳐 : "설계는 아키텍쳐지! 이걸 읽어보자!"
  • DDD : "예전에 어디서 들어봤는데 좋다던데 읽어보자!"
  • TDD : "TDD워크숍도 좋았고 실제로 해보니 좋던데! 제대로 읽어보자!"
  • 클린 코드 : "내 못난 코드도 고쳐야하고 팀원들의 코드를 제대로 리뷰하려면 읽어야겠지?! 읽어보자!"

책을 읽기 시작하니, 보이지 않던 세상이 보이는 듯하고 제가 성장하는 것 같은 기분이 들어 고무되었습니다.

하지만... 막상 어떻게 시작하면 되는지에 대해서는 여전히 막막했습니다.

🔖 조언을 구하다

그래서 나보다 먼저 이 길을 걸으신 개발자 선배님들께 조언을 구해보자고 생각했습니다.

아래는 실제로 제가 속한 개발자 커뮤니티Kodeveloper: 일본에서 일하는 한국인 개발자 모임의 슬랙 채널에 올린 질문글입니다.

안녕하세요!
제가 최근에 회사의 기존 제품의 기능을 완전히 업그레이드(full replace?)하는 프로젝트의 설계를 담당하게 되었는데요!
뭐부터 시작해야 할 지 막막하면서도 할 수 있는 것부터 차근차근 해보려고 합니다!
혹시 아래 사항을 읽어보시고 제가 고려해야 할 부분들이 있다면 가감 없이 조언해주신다면 정말 감사하겠습니다!

현재 마련되어 있는 것

  • 비즈니스 사이드에서 마련한 제품의 요건(사양서)
  • 기존 제품의 인프라(서버, 데이터베이스 등) 및 로직

해야하는 것, 하고 싶은 것 (마음의 부담이 되는 것)

  • 다른 팀원들이 개발하기 쉽게 잘 설계하기(업무 분담하는 것도 ㅠㅠ)
  • 필요한 경우 데이터베이스의 구조도 변경(가능성이 큼) 또는 새로운 데이터베이스(Redis) 등 도입도 고려
  • 문서 잘 남기기

먼저 아래는 제가 읽고 있거나, 읽을 예정인 도서들입니다!

  • 클린아키텍쳐 : 거의 다 읽어 가는중입니다!
  • DDD : 읽을 예정입니다!
  • TDD : 경험은 있으나, 도서도 읽을 예정입니다!
  • 클린 코드 : 읽는 중입니다!

아래는 제가 공부중인 내용입니다!

  • uml 작성법 : 시퀀스, 유스케이스, 클래스, 컴포넌트 다이어그램, 스테이트 다이어그램
  • 소프트웨어 설계 이론

그런데 문제는 지식은 조금씩 쌓이지만, 이런 설계 경험이 없어서 어디부터 손을 대야할지를 잘 모르겠습니다!

아래의 방법으로 조금씩 해보려고 하는데 이렇게 하는게 맞을까요? ㅠㅠ

  • 먼저 요건을 읽고, 어떤 데이터 흐름이 있는지를 잘게 쪼개고, 유저가 어떤 행동을 하는지를 잘게 쪼갠다.
  • 핵심 업무 규칙이 무엇인지를 명확히 한다. (‘명확히 한다’ 라는 것을 어떻게 정리해야 할 지 잘 모르겠습니다.
  • 유스케이스를 명확히 한다.
  • 이렇게 하다보면 점점 다음 할 게 보이기 시작하면 좋겠습니다(?)
  • 기존 로직에서 사용 가능한 것이 있는지 리스트화하기

개발자 선배님들께서는 처음 설계를 시작하셨을 때 어떻게 하셨나요 ㅠㅠ
제가 글로 다 표현하지 못한 부분도 많아 이해가 어려운 부분도 있을 수 있습니다 죄송합니다!
조언해주신다면 정말 감사하겠습니다! 😭

🚀 IBM 시니어 개발자 선배님께 조언을 얻다!

질문을 올리고 답을 해주시는 분이 계실까 조마조마하면서도 한 마디라도 듣고 싶다는 지푸라기를 잡는 심정으로 기다리고 있었습니다.

그러자 약 30분 뒤에 누군가 댓글을 달아주셨습니다. (한 줄기 빛이라고 생각했는데 태양광이었습니다😭정말정말 감사합니다ㅠㅠ)

(업로드를 허락해주신 Sa-ryong Kang님 감사드립니다!)

🚀 구글 재팬 개발자 선배님께 조언을 얻다!

그리고 또 다른 분께서도 댓글을 달아주셨습니다! (또 다른 태양광선 ㅠㅠ)
(업로드를 허락해주신 manggu님 감사드립니다!)

🚀 생각의 전환

가장 먼저 익혀야 할 것은 DDD였다는 것을 알게 되었습니다.

조언을 얻기 전에는 클린아키텍쳐의 내용을 바탕으로 어떻게 구현해야 할지 고민했었다면,
이제는 도메인 주도 설계를 더 우선적으로 체득하고 구현하기 위해 노력하는 중입니다.

조언을 얻은 후 먼저 도메인 주도 설계 구현 이라는 책을 구매했고,
읽고 있는 책들에서 자주 언급된 익스트림 프로그래밍 이라는 책도 추가로 구매해서 읽는 중입니다.

🚀 무엇을 적용하기 시작했는가

팀에서 공통으로 사용할 언어집을 작성하기 시작했습니다.

도메인 전문가가 요청한 사양서(요건들이 적힌 문서)를 읽고 이해하며
도메인 모델을 만들기 위한 유비쿼터스 용어집 을 작성하고 있습니다.

사용할 용어를 통일하는 것이 중요하다는 것을 알게 되었습니다.

기존 서비스에도 영어단어 선택이 어색하거나
같은 의미인데 만든 사람에 따라서 달랐던 부분들이 있어서 소통에 가끔 불편할 때가 있었는데
그 이유가 이거였구나! 하고 알게되어 가장 먼저 해야할 것이 명확해졌던 것 같습니다.

본질적인 가치를 고민하기 시작했습니다.

또한 사양서를 단순히 읽고 이해하는 것이 아닌, 요건이 본질적으로 어떤 가치를 제공해야 하는지를 고민하기 시작했습니다.

흔들리지 않는 방향성을 제시하는 것이 중요하다는 것을 알게되었습니다.
내가 모든 것을 정하는 것이 아니라, 디테일은 팀원들에게 맡긴다는 생각으로
중요한 것은 팀원들이 한 방향으로 진행할 수 있게 최대한 심플한 방향성을 제시하기 위해 노력하게 되었습니다.

📚 앞으로의 과제

목표는 제품이 완성되어도 그 이후에 어떤 새로운 기능을 추가하더라도 쉽게 추가할 수 있는 시스템을 만드는 것입니다.

항상 고민하고 또 고민하고 어떻게 하면 더 좋은 방법이 있는지를 도메인 전문가와 팀원들과 고민하며 완성시키기 위해 노력하겠습니다.

📘 마치며

설계를 처음 시작해보는 많은 개발자분들께 조금이나마 제가 얻은 조언과 경험을 공유하고자 작성해보았습니다.

설계는 여전히 진행 단계이며, 앞으로 많은 시행착오를 겪게 될 것을 각오하고 있습니다.

하지만 개발자인 이상 언젠가는 프로젝트의 설계부터 담당하게 될 시기가 찾아올 것이라 생각하고 있었기 때문에 좋은 기회가 찾아왔다고 생각합니다.

이번 기회에 많이 경험하고 극복하고 성장해서 더 멋진 스스로와 팀이 되기 위해 노력하겠습니다.

profile
팀의 윤활유 역할이 되고 싶은 소박한 개발자입니다. 좌우명은 '밝고 바르고 튼튼하자'

6개의 댓글

comment-user-thumbnail
2020년 4월 17일

책 저도 사러가야겠네요 ㅎㅎ 감사합니다

1개의 답글
comment-user-thumbnail
2020년 4월 17일

잘봤습니다 감사합니다.

1개의 답글
comment-user-thumbnail
2020년 4월 17일

같은 하늘 아래 두개의 태양은 없..다...☆★

잘 읽고 갑니다~~~

1개의 답글