배달의 만족?
예상했던 대로, 우아한형제들의 '배달의 민족' 서비스를 참고하여 진행한 프로젝트이다.
배달의 민족으로 잘못 읽으신 분들께 심심한 사과의 말씀을...
스프링이나 프론트엔드 없이 순수하게 자바만 사용하여 진행된 프로젝트이며, 그런 만큼 자바의 이해 자체에 초점이 맞춰져 진행되었다.
[우아한 남매들] 배달의 만족
https://github.com/woowahan-nammaes/SatisfactionOfDelivery
기능 및 프로세스
4일 동안 진행된 프로젝트인 만큼, 정말 기본 중의 기본 기능만 집중해서 구현하였다.
주요 기능은 다음과 같다.
- 회원 가입 기능
- 로그인 기능
- 로그아웃 기능
- 가게 카테고리별 조회 기능
- 가게별 메뉴 조회 기능
- 메뉴 주문 기능
- 주문 기록 조회 기능
그리고 추가적으로 구현한 부가 기능은 다음과 같다.
- 회원가입 정보 유효성 검사
- 사용자 입력 유효성 검사
KPT 회고
그리고 해당 프로젝트를 진행하면서 느낀 점을 KPT 회고 형식으로 남기고자 한다.
K - Keep
- 구현 전에 팀원들과 모두 요구사항들을 정리하고 설계를 끝낸 다음, 각자 개발을 시작하였다.
- 개발 도중 이슈나 고민거리가 생기면 즉각적으로 팀원들과 논의하였다.
- 도메인 별로 나누어 MVC 패턴에 맞춰 개발을 진행했다.
- 객체지향 개념을 지키고자 했으며, SOLID 원칙 중 특히 SRP는 지키고자 했다.
- 싱글톤 패턴을 통해 데이터 동기화 문제를 해결하고 정합성을 지키고자 했다.
- 클린코드를 지향하면서 인덱스명을 비롯한 사소한 변수들의 이름도 허투루 작성하지 않았다.
P - Problem
- 시간 부족으로 장바구니와 같은 확장 기능으로 열어두었던 기능을 구현하지 못했다.
- 테스트 코드를 작성하지 못하고 Main에서 직접 기능을 사용하면서 테스트를 진행했다.
- 인터페이스를 작성하지 않고 바로 구현 클래스를 작성했다.
- Main 클래스에 MVC 패턴을 적용하지 않아서 컨트롤러와 뷰 중 어떤 것이 진입점인지 판단하기 힘들었다.
- Main 클래스를 제외하고 다른 도메인에서는 모두 컨트롤러가 뷰와 모델을 연결해서 넘겨준다. 하지만 정작 제일 처음 진입하는 부분인 Main으로 생각하면 초기 화면을 print 해서 보여주기 때문에 뷰가 진입점이 아닐까 생각했다.
- 그런데 만약 Main 클래스에 MVC 패턴을 적용했다면?
컨트롤러가 뷰를 호출하기 때문에 컨트롤러가 진입점이 되지 않았을까 생각...!
=> 따라서 진입점은 컨트롤러라는 결론
- 컨트롤러에서 다른 도메인의 여러 서비스에 접근하면서 컨트롤러에 로직이 생성되었다.
T - Try
- 다음 프로젝트에서는 꼭 테스트 코드를 작성해야겠다.
- 인터페이스를 설계해서 확장성을 더 가져가고 싶다.
- Main을 컨트롤러와 뷰로 나누어서 진입점을 명확히 하고 싶다.
- 서비스단에서 다른 도메인의 DAO에 접근하여 컨트롤러의 로직을 삭제하고 싶다.