우리가 그리는 푸른 발자국이 지구를 구하도록 하루하루 일상 속에서 지구를 지키는 한 발, 그린 스텝🌱
매일매일 달라지는 환경 미션을 달성하고 환경 보호에 이바지해요!🥬
인증 받은 사진을 공유하고 서로에게 칭찬을 나눠요.😍
소셜로그인으로 간편하게! PWA로 편하게! 함께해요!🍏
개발기간 2022.08.26- 2022. 10.05
바로가기🍀: https://greenstepapp.com -> 모바일로 접속해주세요!
- BE: 김현서, 심규현, 하지혜
- FE: 강인호, 김은혜, 우수진
- Designer: 이시은
백엔드
프론트엔드
| # | 기능 명 | 결정된 기술 | 선택한 이유 | #issue or WIKI |
|---|---|---|---|---|
| 1 | 배포 | AWS | AWS 하나로 모든 배포 환경을 체크 할 수 있어 편리하며 새로운 시스템을 도입하는 부담감이 적다. | |
| 2 | 실시간 알람 | SSE | 단방향 통신으로 핸드셰이크 발생량이 웹소켓보다 작고 가벼워 더 합리적이다. | #127 |
| 3 | 이미지 리사이징 | CDN, BufferedImage | 촬영 후 사진이 바로 전송되기 때문에 서버에서 리사이징 하는 것이 적합하다는 의견이 나왔고 추가적으로 CDN을 이용하여 프론트의 랜더링 속도를 안정화 하기로 결정 | #131 |
| 4 | History Table | envers | 간단한 어노테이션으로 특정 테이블의 변경 내역을 자동 생성해주는 점에서 직접 class를 생성하는 것보다 리소스를 적게 차지한다고 판단함 | #69 |
| # | 페이지 | 기능 명 | 사용된 기술 | #issue |
|---|---|---|---|---|
| 1 | 마이 페이지 | 카카오톡 소셜 로그인, 회원탈퇴 | JWT, Kakao Login REST Api | |
| 2 | 마이 페이지 | 포스트 아카이빙 기능 | Spring data JPA | |
| 3 | 마이 페이지 | 포스트 숨기기 기능 | Spring data JPA | |
| 4 | 마이 페이지 | 포인트 적립 기능 | Spring data JPA | |
| 5 | 미션 페이지 | 미션 리스트 기간별로 랜덤하게 제시 | Scheduler, JPQL, native query | |
| 6 | 미션 페이지 | 미션 사진 촬영 기능 | S3, base64 decoding | |
| 7 | 미션 페이지 | 미션 인증 수락 기능 | Spring data JPA | |
| 8 | 미션 페이지 | 미션 인증 피드 업로드 기능 | Spring data JPA | |
| 9 | 피드 페이지 | 전체 피드 기능 | Spring data JPA | |
| 10 | 피드 페이지 | 좋아요 기능 | Spring data JPA | |
| 11 | 피드 페이지 | 피드 숨기기 기능 | Spring data JPA | |
| 12 | 기타 | 실시간 알림 | SSE | |
| 13 | 기타 | 이미지 리사이징 | BufferedImage | |
| 14 | 기타 | 내역 전용 테이블 만들기 | enver |
| # | 문제상황 | 원인 | 해결한 방법 | 상세(WIKI) |
|---|---|---|---|---|
| 1 | update 적용 안되는 문제 | 변경감지가 제대로 작동하지 않고 시행중 데이터가 소실될 위험이 있는 문제 | @Transactional과 member을 토큰이 아닌 memberRepository에서 직접 불러옴으로서 JPA가 적용될 수 있도록 코드 변경 | PatchMapping - update 적용 안되는 문제 |
| 2 | Base64파일 업로드 기능 구현 | multipartFile 변환에 익숙해져 있어 Base64형식에 대한 이해도와 변환 코드에 대한 이해도가 낮아 생긴 문제 | multipart파일로 변환하지 않고 ByteArrayStream을 사용하여 Base64를 바로 InputStream으로 변환 | 촬영한 사진 업로드 |
| 3 | 이미지 리사이징 | S3서버 부하 낮추고 랜더링 속도 개선을 목적으로 진행한 기능 구현 | BufferedImage를 사용하여 같은 비율로 최소값을 모바일 환경에 맞는 320으로 수정하여 S3에 저장, 이후 CDN을 연결하여 로딩 시간 축소 | 이미지 리사이징 |
| 4 | 깃 액션을 이용한 빌드 실패 | properties 파일이 ignore 처리 되어 있어서 깃 허브 레포지토리에 존재하지 않아 생기는 문제 | deploy.yml 파일에 존재하는 깃 액션 과정에 properties 파일을 생성하는 과정을 추가 | 깃 액션을 이용한 빌드 실패 |
| 5 | ACM 인증서 발급이 계속해서 지연되는 문제 | CNAME 레코드를 통해 연결된 호스팅 영역의 NS 레코드 값과 구매한 도메인의 NS 레코드 값이 일치 하지 않아 생기는 문제 | 호스팅 영역의 NS 레코드 값으로 구매한 도메인의 NS 레코드 값을 변경해줌 | ACM 인증서 발급이 계속해서 지연되는 문제 |
| 6 | Code Deploy를 이용한 서버 배포 실패 | health checker(상태 검사) 부분에서 계속 실패하여 발생하는 문제 | health checker의 default로 설정된 성공 코드 200을 서버 환경에 맞게 404로 변경해줌 | Code Deploy를 이용한 서버 배포 실패 |
| 7 | Code Deploy를 이용한 서버 배포 과정이 매우 느리게 진행되는 문제 | health checker과정에서 5분이상 소모되기에 생기는 문제 | health checker를 30초까지만 진행되게 설정을 변경해줌 | Code Deploy를 이용한 서버 배포 과정이 매우 느리게 진행되는 문제 |
| 8 | N+1 문제 | n:1 연관관계 매핑 테이블을 조회해 발생하는 문제 | JPA로 작성한 쿼리문을 JPQL로 변경하여 Fetch Join을 적용 | N+1 문제 |
| 9 | S3 백업 | S3에 대한 이해도를 늘리고, 자료 보관과 리커버리에 대한 경각심 강화 | S3의 버전 관리를 설정하고 사전에 백업 계획을 작성하여 객체가 손실되더라도 복원할 수 있도록 준비해야하며, S3자체가 중요도가 높을 경우, 백업이 가능한 S3 옵션을 사용하거나 지역간 교차 백업, 클라우드 백업등을 이용하여 만약의 상황 준비 | S3 객체 복원 |



