[Pre Onboarding] 기업과제 마피아 컴퍼니 TIL

2 minute read

[Pre Onboarding] 기업과제 마피아 컴퍼니



1번째 기업 과제가 끝나고 11월 4일 오후 5시부터 11월 6일 오전 10시까지 2번째 과제인 마피아 컴퍼니 과제를 진행했습니다.

저희 팀은 기존에 express 4명, nest.js를 2명이 사용했고 1번째 과제 때에는 nest로 바꿔서 해보고 싶다는 분이 계셔서 express 팀과 nest 팀으로 3명씩 나뉘어서 개발을 했었습니다.

그런데 이번에는 팀원 6명이 모두 모여 기능을 구현하는 방식으로 진행되었기 때문에 먼저 framework를 정해야 했습니다. 기존에 express를 사용하던 팀원분들과 저는 nest.js 를 써보고 싶었고 논의 후에 저희 팀은 nest.js로 과제를 진행하기로 결정했습니다.


2번째 과제는 2개의 기업 중 하나를 선택하는 것이었는데 저희 팀은 대화 끝에 neo4j 라는 graphdb를 사용해볼 수 있는 마피아 컴퍼니 과제를 진행하게 되었습니다.


마피아 컴퍼니의 과제 내용 은 다음과 같았습니다. (자세한 과제 내용은 생략하겠습니다.)

  • Read API - GraphQL API
  • CUD API - RESTful API


팀원분들 중에는 neo4j를 제대로 사용해보신 분이 없어서 먼저 각자 graphDB에 대해 사전 공부를 한뒤 저녁에 회의로 모여 설계를 진행했습니다.

DB Modeling을 진행하고 API 명세서를 작성한 후 개발을 시작했고 팀원이 6명인 만큼 기능 하나 당 두 명씩 짝 프로그래밍(Pair Programming) 으로 진행했습니다. 저와 팀원 한 분이 앨범 생성 API를 진행했고 Nest.js 를 처음 써보다보니 정확히 구조를 몰라 초반에 진행하기에 좀 어려웠습니다. 그래서 먼저 nest.js의 공식 문서를 보며 구조를 파악했고 이 전에 Nest.js를 사용하신 팀원분들에게 어떤 식으로 코드를 작성하는게 좋은 지를 여쭤본 후 제대로 된 개발을 진행했습니다.


짝 프로그래밍은 처음 진행해봤는데 저희는 한 명이 손이 되고 한 명이 뇌가 되어 코드 짜는 방식으로 진행했습니다. 이러한 방식으로 개발을 해보니 제가 코드를 짜면서 실수했던 부분을 바로바로 확인할 수 있고 잘 몰라서 막혔던 부분에 대해 알 수 있었습니다.

그 결과 CUD API의 구현은 생각보다 수월했습니다. 하지만 저희 팀은 요구사항에 적힌 것 외에 뮤지션, 곡, 앨범의 수정과 삭제의 기능도 필요하다고 판단했고 그 기능을 추가하는데 어려움이 있었습니다.


저는 수정 API를 주로 담당했는데 기능 자체만을 추가할 때는 어려움이 없었습니다. Query문을 넣고 구조를 정리하면 수정 기능이 제대로 이루어졌기 때문입니다. 그러나 수정을 진행할 때에는 노래의 제목, 노래 장르, 노래 재생 시간 등을 전부 수정할 수도 있지만 하나만 수정할 수도 있기 때문에 이를 추가하는데에 어려움을 겪었습니다.


const queryArr = [];
for (const [key, value] of Object.entries(data)) {
	if (value) {
		if (typeof value === "number") {
			queryArr.push(`s.${key} = ${value}`);
		} else {
			queryArr.push(`s.${key} = '${value}'`);
		}
	}
}


팀원 분의 도움으로 object의 key, value 값을 불러와 수정 값이 하나라도 있으면 그것에 대한 수정을 진행하고 없다면 오류가 발생하는 방식으로 작성할 수 있었습니다.

이것을 통해 값을 하나씩 불러와 있다면 배열에 저장하고 없다면 넘어가는 형식이 아니라 object 를 이용해 Key, Value를 가져와 자동화 하는 방식을 새롭게 배울 수 있었습니다. key, value 형식을 이용한다면 수정 값이 몇 개가 들어가던 수정할 수 있었고 과제에서는 수정 값이 적지만 후에 다른 곳에서 사용한다면 훨씬 코드가 간단해질 수 있다고 생각이 들었습니다.

혼자 했었다면 이해하고 구조를 파악하는 데에 오래 걸렸을 것이라고 생각합니다. 하지만 짝 프로그래밍과 팀원분들과의 회의를 통해 이와 같은 새로운 지식을 금방 습득할 수 있었습니다.


이번에는 코드 작성이 다 끝난 후에 코드 리팩토링도 진행했습니다. 화면 공유와 회의를 통해 코드 리팩토링을 진행했고 여러명이 코드를 작성하다보니 코드 컨벤션을 정해놓고 진행했음에도 불구하고 구조가 약간씩 다른 모습을 확인할 수 있었습니다.

하나씩 비교를 해가며 구조를 정리했고 그 결과 코드 리팩토링을 진행하기 이전보다 훨씬 깔끔하고 일관성 있는 코드를 작성할 수 있었습니다.

이 경험을 통해 코드 리팩토링 과정은 생각했던 것보다 훨씬 중요하다는 사실을 깨달았고 앞으로의 과제 제출에 있어서 꼭 진행이 되어야 할 과정 중 한 가지라고 생각했습니다.


하나의 과제당 40시간이 주어지는데 그 중 팀원분들과 개발하는 시간은 30시간이 넘습니다. 긴 시간동안 함께 하다보니 지치기 쉬운데 끝까지 노력하며 완성 하는 과정이 뜻 깊은 시간인 거 같습니다.


저희가 만든 결과물은 아래 링크를 통해 확인하실 수 있습니다. 😄

감사합니다~

결과물

Mapia-Nest.js

(Readme가 정말 잘 작성되었습니다. 화이팅!)

Leave a comment