View Code? Open in Web Editor
NEW
[라포랩스 이직] 카페 테이크아웃 주문 서비스
Java 82.25%
HTML 17.56%
Shell 0.19%
cafe-guide-book's Introduction
☕ Takeout Coffee Ordering Service
![](https://camo.githubusercontent.com/ad8d6a3b040d4931ea079a99678e0f642dc689f854195b8bc1506767de0aeec1/68747470733a2f2f696d616765732e756e73706c6173682e636f6d2f70686f746f2d313439353437343437323238372d3464373162636464323038353f697869643d4d6e77784d6a4133664442384d48787761473930627931775957646c664878386647567566444238664878382669786c69623d72622d312e322e31266175746f3d666f726d6174266669743d63726f7026773d3134373026713d3830)
![](https://user-images.githubusercontent.com/44136364/137728757-93fa3559-2446-4dc4-b1e8-e70a828486ef.png)
- 단순히 기능을 빠르게 구현하는것보다 중요한 것은
사용 기술을 정확하게 이해
하고 사용하는 것이라고 생각합니다.
- 새로운 기술을 적용할 때
기술서적과 공식문서를 통해 해당 기술에 대한 깊이 있는 학습
을 진행하여 이를 최대한 코드에 녹이기 위해 노력했습니다.
- 올바른 기능 구현과
예상한대로 코드가 동작하는지 검증
하기 위해 새로운 기능을 구현할 때 마다 통합테스트 및 단위테스트를 구현
하도록 하였습니다.
- 새로운 개발자가 합류했을 경우 기능을 추가하거나 수정할 때 테스트 코드를 통해 문제가 없음을 보장하고 자신감을 줌으로써 빠르게 프로젝트에 적응할 수 있습니다.
- 또한 테스트 코드는 작성된 코드에 대한
문서
자체의 역할을 하기도 합니다.
- 새로운 개발자가 중간에 프로젝트에 참여하더라도 Wiki와 같은 문서를 통해 프로젝트에 대해 쉽게 이해하고 적응할 수 있도록 하였습니다.
- PR, Issues, Commit Template을 통해 협업하는 개발자간의
커뮤니케이션 미스에 대한 비용을 최소화
하기 위해 노력하였습니다.
4. 사소한 이슈라도 끝까지 파헤쳐서 원인 파악하기
- 발생한 이슈가 사소한것일지라도 추후에 다시 문제가 생기지 않도록 예방해야 합니다.
- 문제의 원인을 파악하기 위한 학습을 진행하였고 이를 기술블로그에 정리하였습니다.
5. 대용량 트래픽 환경에서도 안정적인 서비스 구현하기(진행중)
- 프로젝트를 시작하게된 동기와 최종목표는 대용량 트래픽에도 견고하고 안정적인 서비스를 개발하는 것입니다.
- nGrinder를 통한 부하테스트를 진행하면서 이를 지키기 위해 노력했습니다.
☕ Entity Relation Diagram
![](https://user-images.githubusercontent.com/44136364/142628592-48f2f134-d004-46ac-9dd7-12881fe2ea7e.png)
- Java 11
- Spring Boot
- JUnit5
- Mockito
- MySQL
- MyBatis
- Jenkins
- nGrinder
- Pinpoint
- AWS
cafe-guide-book's People
cafe-guide-book's Issues
개요
- 해당 PR은 #67 의 브랜치로부터 브랜치를 땄습니다.
- #67 해당 이슈의 PR이 머지되면 리베이스 하도록 하겠습니다
작업사항
개요
AS-IS
- 어드민이 신규 카페에 대한 승인 및 반려 기능이 없습니다.
TO-BE
- 어드민이 신규 카페에 대한 승인 및 반려 기능을 구현합니다.
- 카페의 등록 상태를 정의한
CafeRegistration
열거형 타입 (PENDING
, DENY
, APPROVAL
) 를 MyBatis에서 다루기 위해 TypeHandler를 적용합니다
참고
작업사항
개요
AS-IS
- 서비스의 기본적인 기능인 회원가입 기능이 없습니다.
TO-BE
진행상황
개요
AS-IS
- 비밀번호 업데이트 기능이 없어 해당 기능을 구현이 필요합니다.
TO-BE
- 로그인 체크 AOP에 대한 PR이 Merge된 이후에 로그아웃 상태에서 비밀번호를 변경 했을 때 적절한 예외를 던지고 이를 검증하는 단위테스트와 통합테스트를 추가할 예정입니다.
RestDocs
에 대한 PR이 머지된 이후에 문서 자동화 목록에 회원탈퇴 기능에 대한 명세를 추가할 예정입니다.
진행상황
참고
- HTTP의
PATCH
메서드를 사용하여 구현하였습니다.
- 공식문서에 다음과 같이 되어있습니다.
-
A PATCH
request is considered a set of instructions on how to modify a resource.
-
PATCH
는 리소스를 수정하는 방법에 대한 지침으로 간주된다.
- (
User
의 password
만 변경되므로 PUT
대신 PATCH
를 사용하였습니다.
- 비밀번호 변경 성공시 상태코드 204를 리턴합니다.
개요
AS-IS
- 카페에 달린 리뷰들을 확인할 수 있는 기능이 없습니다.
TO-BE
- 카페에 달린 리뷰들을 확인할 수 있는 기능을 구현합니다.
- 카페 리뷰 기능에 대한 코드가 필요하여 #27 의 브랜치로부터 새로운 브랜치를 생성하였습니다.
- #27 에 대한 PR이 머지되면 리베이스 하도록 하겠습니다.
진행상황
개요
AS-IS
- API에 대한 문서가 없어 다른 사람이 작성한 API에 대한 스펙을 알 수 없고 이를 알기 위한 추가적인 커뮤니케이션 비용이 발생합니다.
- 일일이 API에 대한 명세를 작성할 수 있겠지만 이를 자동화하는 것이 좋아보입니다.
TO-BE
- RestDocs를 활용하여 API 문서화를 자동화합니다.
진행상황
RestDocs 참고사항
문서화 양식
- 크게 프로젝트의 개요와 REST API 명세부로 나눴습니다. (추후에 필요한 섹션은 추가될 수 있습니다.)
- 우선 요청 성공에 대한 케이스만 명세하였습니다.
- 요청 파라미터 or 필드, 요청 방법, 응답(성공시) 순으로 명세하였습니다.
![스크린샷 2021-09-06 오후 9 34 59](https://user-images.githubusercontent.com/44136364/132218334-3721ac1c-a93b-4b21-bca5-871ffd1e4277.png)
![스크린샷 2021-09-06 오후 9 35 17](https://user-images.githubusercontent.com/44136364/132218366-b4b2a42e-fe8b-46c8-84e8-bca1df7e6c3b.png)
![스크린샷 2021-09-06 오후 9 38 43](https://user-images.githubusercontent.com/44136364/132218801-993876fd-fdd4-4c75-b2da-56210d9701c0.png)
개요
AS-IS
- 카페 등록시 카페 아이디를 등록할 때 중복되어도 등록되는 문제가 있음
TO-BE
진행상황
개요
AS-IS
- 회원가입시 이메일 중복 검사를 실시하지 않습니다.
TO-BE
- 회원가입 시 이메일 중복검사를 통해, 가입된 이메일이 없을시에만 회원가입이 가능합니다.
- 중복된 이메일이 있을시 422 status code를 리턴하도록 하였습니다.
진행상황
개요
AS-IS
- 카페 주인이 개별 카페를 삭제하는 기능이 없습니다.
TO-BE
- 카페 주인이 개별 카페를 삭제할 수 있는 기능을 추가합니다.
진행상황
개요
AS-IS
- 서비스의 기본적인 기능인 회원정보 조회 기능이 없습니다.
TO-BE
진행상황
개요
AS-IS
- 로그인이 꼭 필요한 기능에 로그인 여부를 체크하는 코드들이 중복되어 나타나는 문제가 있습니다.
TO-BE
- AOP를 통해 로그인 여부를 체크하는 로직을 Aspect로 모듈화 합니다.
진행상황
개요
AS-IS
- mybatis에서 enum 타입 데이터를 바인딩하지 못하는 문제가 있습니다.
TO-BE
- MyBatis 환경에서 Enum, Int 상호 변환을 자동으로 핸들링 해주는 TypeHandler를 적용합니다. 따라서 DB에 데이터를 저장하고 관리할 때 코드성 데이터로 관리할 수 있게 됩니다.
진행상황
개요
AS-IS
- 카페 주인이 자신이 등록한 메뉴와 옵션을 삭제할 수 없음
TO-BE
- 카페 주인이 자신이 등록한 메뉴와 옵션을 삭제할 수 있어야 함
진행상황
개요
AS-IS
- 회원에 대한 권한이 분리되어 있지 않습니다.
-
USER : 일반사용자
-
OWNER : 카페사장
-
ADMIN : 어드민
- MyBatis 환경에서 Enum 타입을 Int 타입으로 변환해서 insert 하는 작업에 대해 핸들링 되지 않고 있습니다.
TO-BE
- 회원의 권한을 분리하여 앞으로 구현할 기능에 대비합니다.
- MyBatis 환경에서 Enum, Int 상호 변환을 자동으로 핸들링 해주는 TypeHandler를 도입합니다.
진행상황
개요
AS-IS
TO-BE
- jenkins 서버에서 publish over ssh를 사용해 타겟 EC2 서버에 배포
진행상황
문제 정의
- 팀원간 Pull requests와 Issues의 작성 스타일이 달라 이들이 파편화 되는 문제가 있습니다.
해결 방안
- Discription을 작성하는데 비용을 줄이고 가독성 측면과 커뮤니케이션을 더 원할하게 하기 위해 해당 이슈를 추가하게 되었습니다.
개요
AS-IS
- 카페 오픈 시간과 마감 시간이 되면 카페를 열고 닫을 수 있는 기능이 존재하지 않습니다.
TO-BE
- 카페 주인이 카페 오픈과 마감을 할 수 있도록 기능을 구현합니다.
진행상황
개요
AS-IS
- 유저가 맘에 드는 카페를 추가하는 기능이 없습니다.
TO-BE
- 유저가 맘에 드는 카페를 추가하는 기능을 구현합니다.
- Heart(좋아요) 테이블에 유저의 PK와, 카페의 PK를 추가합니다
진행상황
개요
AS-IS
- 팀원들 간의 코드 스타일이 달라 프로젝트가 파편화 되는 문제가 있습니다.
- Indent를 4칸으로 설정되어 있습니다.
TO-BE
진행상황
개요
AS-IS
- 모바일 클라이언트에 상황에 맞는 푸쉬 알람을 보내야 합니다.
TO-BE
- @async를 통해 해당 비지니스 로직과 별개로 비동기적으로 푸시를 전송할 수 있습니다.
진행상황
- google indented 2칸 수정
- CafeDTO 클래스 id가 아닌 email로 로그인되게 수정
- Cafe 클래스 불필요한 non null 제거
개요
AS-IS
- 카페 정보를 조회하거나 수정하는 기능이 현재 존재하지 않습니다.
TO-BE
- 사장님의 전체 카페를 조회하는 기능을 추가합니다.
- 사장님의 개별 카페를 조회하는 기능을 추가합니다.
- 사장님의 개별 카페를 수정하는 기능을 추가합니다.
진행상황
✅ CI 서버환경 : AWS EC2 Amazon Linux 2
개요
AS-IS
- 카페에서 판매하는 메뉴를 구입하거나, 주문하거나, 찜 리스트에 추가할 수 없다.
TO-BE
- 카페에서 판매하는 메뉴를 등록하는 기능을 추가한다.
진행상황
개요
AS-IS
- 서비스의 기본적인 기능인 로그아웃 기능이 없습니다.
TO-BE
진행상황
개요
AS-IS
- 회원가입시 각 필드에 대한 Validation 이 적용되어 있지 않습니다.
TO-BE
- 컨트롤러에
@Valid
어노테이션을 통해 회원가입시 각 필드에 대한 Validation 을 적용합니다.
진행상황
Fixes #27
개요
AS-IS
- 유저가 작성한 리뷰들을 조회할 수 있는 기능이 없습니다.
TO-BE
- 유저가 작성한 리뷰들을 조회할 수 있는 기능을 구현합니다.
참고
- 해당 PR은 #24 의 브랜치로부터 브랜치를 땄기 때문에 해당 이슈의 PR이 머지되면 리베이스 하도록 하겠습니다
작업사항
Fixes #24
개요
AS-IS
- 유저가 카페에 대한 리뷰를 남길 수 있는 기능이 없습니다.
TO-BE
- 유저가 카페에 대한 리뷰를 남길 수 있는 기능을 구현합니다.
참고
- 해당 PR은 #67 의 브랜치로부터 브랜치를 땄기 때문에 해당 이슈의 PR이 머지되면 리베이스 하도록 하겠습니다
작업사항
개요
AS-IS
- 카페 주인이 자신이 등록한 메뉴와 옵션을 수정할 수 없음
TO-BE
- 카페 주인이 자신이 등록한 메뉴와 옵션을 수정할 수 있어야 함
진행상황
- HikariCP
application-local.properties
spring.datasource.hikari.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.hikari.jdbc-url=jdbc:mysql://localhost:3306/cafeguidebook?serverTimezone=UTC&characterEncoding=UTF-8
spring.datasource.hikari.username=root
spring.datasource.hikari.password=Cafe1234!
spring.datasource.hikari.pool-name=HikariPool
개요
AS-IS
- 서비스의 기본적인 기능인 로그인 기능이 없습니다.
TO-BE
진행상황