현장실습(2023.06.26~2023.08.21)간 대구 지역에 있는 SI업체에서 실습을 진행하며 배운것들 입니다.
내가 실습을 진행하였던 F사에서 직원 관리 및 회사 계약에 대한 정보들을 자동화하고, 업무보조를 위한 목적으로
모바일 앱 개발에 대한 프로젝트이다.
현장실습에 지원한 같은과 학생들과 함께 개발을 진행하였다
앱(플러터1명), 서버(스프링2명)으로 구성되었고, 회사에서 멘토분이 우리에게 디자인을 주는 방식이였다.
기획이 없다
이번 프로젝트에서는 개발에 대한 지식이 없는 디자이너분께서 디자인을 내려주고 개발자측에서 하나하나 이 버튼은 무엇이며, 이 메뉴의 종류는 무엇인지를 우리가 직접 물어보고 개발을 진행하여야했다.
이 때문에 프론트와 백에서 모두 개발이 서너번넘게 엎어지며 데이터구조가 계속해서 바뀌고, 디자인도 일주일마다 바뀌는 상황이였다.
모듈화의 중요성
이와 같이 변경사항이 매우 잦은 상황을 겪어가며 왜 코드를 레이어단으로 나누고, 비지니스로직과 UI를 분리해야하는지를 몸으로 체득하는 경험을 하였다.
대표적인 사용 기술들로는 이를 사용하였다.
앱 개발을 나 혼자 진행하게되어 내가 원하는 기술들을 사용할 수 있었고, 아키텍쳐 또한 내가 설계하여야 했다. Domain Layer를 생략하고 MVVM의 구조를 택했다.
Presentation Layer : 컴포넌트 단위로 Provider에서 state와 연결하여 ui를 표시하였다.
riverpod의 stateNotifierProvider를 가장 많이 사용하였다.
복잡한 로직이 따로 존재하지 않았기에 서버에서 넘겨준 DTO를 그대로 사용하는 경우가 많았다.
riverpod의 옵저버 패턴의 역할을 하는 ref.watch가 페이지네이션에 필터값에 따라 페이지내이션 StateNotifier가 바뀌게하는 등 매우 편리하게 사용하였던거 같다.
Domain Layer:
Data Layer: 서버로 부터 API를 가져오는 DioClient와 이를 가져와서 ViewModel와 통신하는 Repository. 이 두가지 구조로 구성하였다.
이를 통해 Domain Layer는 repository에 존재하는 함수를 호출하는 것으로 rest Api에 대한 것을 은닉하게되어 간단하게 가져오는 역할을 하게 하였다.
실제 프로젝트를 해야하는 이유
실습을 진행하기 전, 나 혼자 진행한 토이프로젝트에서는 내가 어떤기술을 알고있고, 이 기술을 활용해서 개발을 해보자라는 클린한? 개발을 하게되는데
회사에서 요구하는 현실세계에서의 문제점을 해결하는 방법으로 이 기술을 사용해야하는, 어느정도 더티한 개발을 하게되는데 이 과정에서 굉장히 많은 깨닳음을 얻은거 같다.
실습기간 초기에 유지보수를 생각하지않고 구현에만 급급하게 코드를 작성하였는데
이를 리팩토링 하는 과정에서 클린코드에 대한 필요성을 느꼈고, 레이어를 나누고, 재사용성이 높은 코드를 작성하려고 노력했다.
클린아키텍쳐에 대한 정보들을 알아보게 되고, 테스팅, CI/CD, rest api,json역/직렬화 와 같이
나 혼자 공부하였을때는 몰랐던 것들을 같이 참여한 동료들을 통해 많이 배웠던거 같다.
또 riverpod에서 수도없이 발생한 에러를 대응하면서 MVVM의 단방향식 데이터흐름에 대해 알게되었던게 가장 큰 깨달음이였다고 생각한다.
느낀점2
졸업 전까지 프로젝트 진행시,
다른 앱개발자와 협업을 하여 깃브랜치 전략을 사용해서 트러블 슈팅에 대응하는 경험을 해보고 싶다.