시퀀스(Sequence) 다이어그램에 대해

시퀀스(Sequence) 다이어그램에 대해

[패스트캠퍼스X야놀자: 백엔드 부트캠프 1기]

·

2 min read

부트캠프에서의 첫 팀 과제가 주어졌다.

여행, 여정 정보를 관리하는 프로그램으로 CSV, Json 파일 형태로 관리해야 한다.

첫과제여서 그런지 난이도는 어렵지 않았다. RFP도 제공해줘서 어떻게 짜면 좋을지 윤곽도 금세 잡혔다.

평소의 행실(?) 덕분에 필자가 팀장이 되었다.

게더타운에서 진행하여 Intellij 의 CodewithMe 를 사용하여 페어 프로그래밍을 했다.

필자는 개발 단계별 산출물에 대해 부정적인 인식을 갖고 있다. 문서 자체는 좋은데, 문서와 개발 시간을 모두 할애 해야 하기 때문이다. 코드 혹은 문서에 변경사항이 생기면 일치하도록 맞게 수정해야 했다. 그런 점이 싫었다.

그래서 개발한 코드를 자동으로 문서화해서 시간 절약하기 좋은 아이템이 없을까 찾아보다 Sequence 다이어그램을 알게 되었다.

정의

시간의 흐름에 따른 객체들 간의 상호작용을 표현하는 다이어그램

이라고 소개 하고 있다.

장점

  • API 등의 유즈케이스를 디테일하게 알 수 있음

  • 메서드 콜, DB 조회, 타 시스템의 API 호출 등 로직을 모델링할 수 있음

구성

여기 페이지에서 아주 잘 설명해주고 있다.
시퀀스 다이어그램 - IT위키 (itwiki.kr)


아무튼 이 다이어그램을 Intellij에 Generator로 지원해주는 플러그인이 있다!

VanStudio (neocities.org)


지금 과제에 반영을 해서 구현해보자

Intellij Ultimate 기준으로 예시를 들겠다.

먼저 db 연결 해준다. (free는 mysql workbench를 통해 진행)

테이블 들을 생성해준다

생성 도구가 있으나 Sql 쿼리문을 알아야하는 것은 기본이다. 절대 공부하자.

다른 테이블들도 마저 작성하고 관계 매핑까지 했다. 이를 ERD로 추출할 수 있다.

Mysql Workbench 사용자들도 모델링해서 Reverse, Forward 엔지니어링을 통해 쿼리문을 추출할 수 있다.

도메인이 준비되었으니. 이제 비즈니스 로직을 작성하면 된다.

초안 작성 때 이정도면 괜찮지 않나 싶었는데, Sequence 다이어그램을 보고 내 코드는 정말 난장판이었다는 것을 시각적으로 보여주었다. 메뉴 선택별 기능 수행도 명확히 분리가 안되었고, 메서드 명을 통해서 객체가 메시지가 전달이 잘 되어야 하는데, 일관성이 없었다.

아래 Sequence 다이어그램은 리팩토링 후의 코드이다. 다이어그램을 보고 난 후 작성된 코드가 이전 대비 더욱 매끄러워졌다.

덕분에 체크리스트 확인하는데 도움이 되었다.

이 방식으로 개발했을 때 느낀점은 생산속도가 압도적으로 빨라진다.
Service, Repository 등의 컴포넌트는 인터페이스, 추상 클래스, 혹은 빈 메서드로 적당히 반환값만 맞추고, 골조를 작성해나가면서 흐름도를 만드는 것이기 때문에 숙련만 된다면 정말 으뜸이라고 생각한다.

하지만 팀원은 시퀀스 다이어그램을 활용한 개발 스타일이 처음이었고 이 스킬 자체가 러닝 커브가 비교적 높은 편이다. 그렇다 보니 너무 혼자만 골조를 짜지 않았나 싶다. 클래식하게 순서도 작성하고 계층별로 분담하여 코드 작성하는 것이 친숙했을지도 모른다는 생각이 들었다.
뭐.. 그래도 좋은 건 좋은 거니까. 이 압도적인 생산성의 뽕을 팀원들도 느껴봤으면 좋겠다.
꼭 내가 이 스타일을 부트캠프 동료들에게 전파 해보이고 말겠다.
실은 더 좋은게 있는데 내가 놓친 게 있는 건가..? ㅜ.ㅜ

다음 과제는 스프링으로 하던데, 나도 그동안 빡공해야겠다