본문 바로가기

공부/TIL

23.10.24

자바 팀프로젝트 시작!

이번에는 호텔 예약 프로그램 구현이다. 

  1. 호텔은 여러 객실, 보유 자산을 가지고 있다.
  2. 객실은 객실 당 하루에 한 사람만 예약이 가능하다.
  3. 객실은 크기, 숙박비를 가진다.
  4. 예약은 객실, 고객의 이름, 고객의 전화번호, 예약 날짜를 가지고 있다.
    1. 전화 번호 제한(XXX-XXXX-XXXX) 정규 표현식 (선택)
    2. 예약 날짜 ****
    3. 날짜는 ISO 8601 형식으로 조합된 UTC 날짜 및 시간 예) 2016-10-27T17:13:40+00:00
  5. 고객은 이름, 전화번호, 소지금을 가진다.
    1. 고객 소지금보다 비싼 방은 예약 불가
  6. 호텔은 모든 예약 목록을 조회 할 수 있다.
  7. 고객은 자신의 예약 목록을 조회 할 수 있다.
    1. 예약 번호로 예약 내역을 조회한다
  8. 고객은 자신의 예약을 취소 할 수 있다.
  9. 고객이 호텔 예약 시에 예약 번호(id)를 반환 (uuid 활용)
    1. 고객이 호텔 예약에 성공하면 예약 번호(id)를 받는다.
    2. 고객이 예약 목록을 조회 시 예약 번호도 같이 조회 된다.
    3. 고객이 예약 취소 시 예약 번호를 통해 자신의 특정 예약을 취소한다.

다음과 같은 기능을 하는 프로그램을 팀단위로 구현한다. 이번 프로젝트의 팀장은 나! 다섯 명의팀원 중 두명이 비전공자인데 그 중 한명이 나다. 비전공자 팀장으로서 부담감이 상당하지만 팀원들도 많이 도와주고, 나도 열심히 해서 폐끼치지 않겠다고 생각해 오히려 좋았다.

처음 한시간은 각자 클래스를 어떻게 구분짓고/ 구현할지 짜서 모이기로 했다. 나는 호텔 클래스/ 방 클래스/ 예약 클래스/ 뷰 클래/ 메인 클래스. 이렇게 다섯개의클래스로 이루어진 프로그램으로 작성하는게 어떻냐고 제안했다. 클래스마다 갖고 있어야할 필드값과 메서드들을 인터페이스처럼 내용물은 비어있지만, 큰틀을 짜서 팀원들에게 보여줬다. 고맙게도 내가 제일 열심히 잘 짜왔다고 해줘서 내가 작성한 프로젝트를 기반으로 프로젝트를 시작했다. 프로젝트를 시작하자마자 깃에 내 프로젝트를 커밋하고, 푸시했다. 이번 팀프로젝트를 하면서 깃을 정말 많이 사용할 것 같다. 깃에 더 익숙해 질 것 같다. 

크게 예약클래스 파트와 뷰클래스파트 두파트로 나누어 진행했다. 나는 예약 클래스를 구현하는 팀으로 들어갔다. 나는 그동안 프로젝트를 할 때 설계를 하는 시간이 거의 없었다 30분도 설계를 하지않고 바로 구현부터 시작햇는데, 전공자 팀원 두명은 설계를 3시간을 했다. 각 클래스가 어떤 필드를 가져야 할지, 어떤 메서드를 가져가야 할지. 정말 많이 고민을 했다. 팀플을 하면서 다른사람들의 작업 방식을 경험해보니 정말 좋았다. 내가 아무생각없이 선언 했던 변수들이 사실 이 클래스에 있는 것 보다, 다른 클래스에 있는게 더 좋다는걸 알았다. 이때 각 필드와 메서들이 있어야 할 곳을 구분짓는 기준을 객체지향 프로그래밍을 위해서.라고 했다.

예를 들어 룸 클래스 안에 [룸배열]이 있는 것은 옳지 않다. [룸 배열]은 룸 클래스가 아닌 호텔 클래스가 가지고 있어야 한다. 라던지 예약 클래스 안에 [고객, 룸, 날짜] 멤버들을 가지고 있어야 하는게 맞다. 또한 [예약 리스트]는 호텔 클래스가 가지고 있어야 한다. 등 멤버 변수와 메서드들이 어디에 있어야 하는지 정말 오래 고민하는 걸 보면서 객체지향 프로그램을 위한 방식을 배웠다. 

물론 모든것이 만족스럽지는 않다. 비전공자인 내가 내는 의견들의 힘이 부족하고, 또 나는 부딪혀 보기 전까지 어떻게 프로그램이 작성될지 아직 볼 수 있는 눈이 밝지 않기에 내 의견들 중 철회된 것들이 있다. 내 생각에는 그리 어렵게 느껴지지 않았는데 해보면 어때요? 라는 말을 하고 싶었지만 꾹참았다. 왜냐하면 그동안 팀원들이 어렵다고 했던 부분들이 나는 당시엔 몰랐지만 내가 구현할 때마다 정말 너무 어려웠기 때문.. 팀원들의 의견을  수용하고 취합하는 방법도 배워야 한다.

물론 모든 의견을 수용하고 취합하는 것도 옳지 않겠지. 그래서 나는 오늘 질문을 많이 했다! 어떤 방식으로 구현할 것인지. 그 로직보단 이 로직이 좀더 직관적이진 않겠는지? 내의견을 내고 의견을 공유하면서 방법을 정해갔다. 그래서 재밌었다. 

아무튼 아직 본격적인 구현을 하기전이다. 내일부터 오늘 설계했던 대로 구현을 시작할것. 좋은 프로그램을 작성했으면 좋겟다. 

 

오늘 팀프로젝트를 시작하면서 깃을 본격적으로 만지게 됐다. 팀장이 나기에 내가 주도적으로 깃허브를 담당했다. 물론 팀원 중 깃허브를 잘 다루는 팀원이 있어 많은 도움을 받았다. 하지만 결국 내가 주체적으로 문제를 해결해야한다. 마침 오늘 깃특강이 있어 깃특강을 보고 많이 배웠다.

오늘의 주제는 브랜치와 실제 협업 과정에 대해 배웠다.

브랜치는 쉽게 말해서 깃허브에 main으로 올라와 있는 파일에 직접 수정을 하는 것이아닌, 복사를 해와서 내 로컬 저장소에서 수정을 하는 방식이다. 그러면 main에 있는 프로그램은 코드 변형이없으니 안전하게 보존이 되고, 내 로컬에서 기능구현 및 테스트를 할 수 있는 아주 바람직한 방식을 제공한다. 브랜치를 이용한 팀 협업 과정을 소개하면 다음과 같다.

1. 팀장의 초기코드 작성 및 github에 레파지토리로 업로드

2. git에 dev 브랜치 생성

3. dev 브랜치를 디폴트 브랜치로 설정

4. 팀원들을 콜라보레이터로 초대

위의 단계를 마치면 팀원들이 초기코드를 다운받을 수 있다. 그리고 dev 브랜치로 코드를 테스트 할 수 있다. 그 후

1. dev브랜치를 기준으로 기능 브랜치 생성

2. 기능 개발 후 git add, git cummit, git push

3. git hub에서 pull request 만들기

4. 리뷰요청 및 승인받기

5.내 로컬 dev에서 코드를 pull해서 가져오기

6. 코드 실행 후 문제 없는지 확인!

7. 문제 없으면 github에 merge하기!

복잡해보이지만 쉽게 설명하면 올라와있는 최종버전은 건드리지 않고 복사해서 내 컴퓨터에서 기능을 구현한다. 그 후 실험용 서버에 내 기능 구현을 테스트해본다. 이때 문제가 되지 않으면, 진짜 최종버전에 업데이트! 라고 정말 간단히 설명할 수 있겠다. 

오늘 나의 깃 활용은! 깃허브에 dev 브랜치를 생성하고, 디폴트 값으로 설정해놨다.

앞으로는 dev브랜치에서 기능구현 코드들이 올라갈것이고, 풀리퀘스트를 해서 팀원들간에 코드 리뷰를 할 것. 

깃 어렵지만 쫄지 않고 우선 내가 당장 해야할 미션들은 전부 해결했으니! 내일도 오늘처럼 쫄지 말고 해보면 된다!

알고리즘은 음.. 지금 풀러 가겠다 요즘 알고리즘을 너무 못풀었다.. 정말 반성하자.. 근데 아직 실버5는 내겐 좀 어려워 시간이 너무 오래걸린다 ㅠㅠ 그래도 못해도 튜터님께서 말씀하신 것처럼 20분씩이라도 생각하는 습관을 갖자. 지금 밤 10시 40분이니 11시까지 오늘의 문제 구현을 못하더라도 로직을 생각하고 자야겠다.

 

'공부 > TIL' 카테고리의 다른 글

23.10.26  (1) 2023.10.26
23.10.25  (0) 2023.10.25
23.10.23  (1) 2023.10.23
23.10.20  (0) 2023.10.20
23.10.19  (0) 2023.10.19