Search
Duplicate
🐈

[프로젝트] 냥그릇

상태
완료
팀/개인
기술스택
React
Spring Boot
JPA
AWS
Docker
Jenkins
기간
2023/01/09 → 2023/02/17
참고 노트
2 more properties

프로젝트 소개

NOTE
도시와 길 고양이의 공존을 위한 길고양이 급식소 위치 선정 ‘커뮤니티 서비스'.
썸네일 이미지
우리팀 팀원!
최종 아키텍쳐!

서비스 기획배경

NOTE
도시와 길 고양이의 공존을 위한 길고양이 급식소 위치 선정 ‘커뮤니티 서비스'.

목적

지역주민과 길 고양이의 공존
급식소 위치를 사회적 합의를 통해 정함으로써 주민과 길고양이의 공존을 이룬다.

현 상황

캣맘/캣대디의 무분별한 급식소 운영의로 개체수 파악이 어려움. 대구 ‘길냥이’ 생존권 두고 지자체·캣맘 갈등
방치된 급식소와 관리되지 않은 길고양이가 쓰레기통을 뒤지거나 멸종위기 철새를 잡아먹음 을숙도 철새·고양이 공존 '빨간불'… 환경·동물단체 엇갈린 반응
고양이에 대한 혐오와 캣맘/캣대디의 갈등 길고양이 밥 주지 말랬지…캣맘 무자비 폭행 당했다 이슈
길 고양이 급식소 위치에 대한 지자체와 지역 주민들과의 갈등 길고양이 급식소, 찬반 논란 넘어 공존 방안 찾을 때

서비스 해결책

NOTE
IOT 냥그릇의 도입으로, 급식소 위치에 대한 소통이 가능하며, 급식소 상태관리와 길고양이 개체수 파악을 통해 효율적으로 관리할 수 있게된다!

기대효과

현재 길고양이 관련 악순환
냥그릇 도입으로 인한 선순환 기대효과

서비스 시연화면

NOTE
Login & Profile
Pins on Map and Detail Page
Vote & Community CRUD
Registration IoT Feeder
Show Data from IoT and Export Data to excel and png form

프로젝트 역할

FrontEnd + BackEnd

NOTE
React 화면 설계
React에서 HTML/CSS를 활용해서 화면 레이아웃을 설계했습니다.
ERD, JPA 설계
프로젝트의 전체적인 ERD를 작업하고, 그에 따른 JPA Entity 설계했습니다.
N+1 문제및, 복잡성을 줄이기 위해 양방향 설계를 풀어내고, SpringBoot JPA를 활용해서 Repository를 만들었습니다.
API 인터페이스 설계
요청에 따른 응답과, 어떠한 DTO와 파라미터를 받을지 그리고 예외상황을 설계했습니다.
개발단계 중에는 BE에서 더미데이터를 반환시켜 FE에서 해당 데이터를 받아, 컴포넌트에 뿌려주는 작업을 진행했다.

DevOps

NOTE
AWS 서버배포 및 S3서버 구축
배포하기 위한 AWS서버 생성과 관리를 담당했고, 이미지 서버가 필요했기에 S3서버를 만들어서 사용했습니다.
S3를 사용하기 위해 AWS 사용자 생성및 토큰을 Springboot에 적용했습니다.
Jenkins CI/CD 구축
Jenkins를 사용했으며, GitLab에 Webhook을 걸어 만약 Master 브랜치에 Push가 발생하면, Pipeline에서 자동적으로 빌드/배포가 이루어지도록 작업했습니다.

UCC 제작

NOTE
UCC의 촬영 및, 편집을 담당했습니다.

프로젝트 회고록

좋은 설계란 무엇일까?

NOTE
이번 프로젝트에서 코드량은 적었지만, 기능 구현에서 수정에서 생기는 버그나, 모듈화되지 않은 코드로 유지보수가 많이 어려웠다.
스프링 데이터 JPA를 사용하면서 CRUD와 같은 기본적인 Repository나 다른 공통로직을 하나의 클래스 로 빼면 좋지 않았을까?
로그인 처리를 위해 모든 컨트롤러에서 Header값을 받아서, 토큰값을 비교하는 로직이 있었는데 이후에 AOP를 활용해서 이를 해결할 수 있다는걸 알았다. 프로젝트 도중에는 도입하지 못헀지만 이후에는 꼭 도입해서 코드 최적화를 이뤄내려고 한다.
Entity나 DTO에서 Builder패턴을 사용했는데 변환하는 코드를 한곳에 담아두려니 너무 지저분해지는거 같아 분리해야 할거같다고 생각했다.
테스트코드 작성을 시도하며 많은 생각을 했다. 단순히 값을 확인하는 정도면 상관없었으나 JPA에서 값이 정상적인지, Controller호출이 정상적으로 돌아가는 지 등 처음 생각보다 많은 요소를 고려 해야해 도입하지 못했다. 이후에 배포를 하면서 테스트 커버리지가 높아야 배포를 더 안정적으로 할 수 있다는걸 알아 다음에 다시 시도해보려 한다.

처음 해보는 데브옵스..

NOTE
이번 프로젝트에서 처음으로 Docker, Jenkins, AWS를 사용해본다! ⇒ 너무많은 삽질..
팀원들이 모두 안해보기도 했고, 서버배포 기술에 흥미가 있어 내가 지원해서 담당하게 되었다. 지금생각하면 Linux도 모르고, 진짜 아무것도 몰랐는데 대체 무슨 깡이었나 싶다.
당연히 Linux도 모르니 도입하기에 바쁘고, 컨테이너 개념이 무엇인지, 젠킨스 파이프라인에 작성된 코드가 무엇인지는 추상적인 개념으로만 이해했다.
AWS EC2 small버전으로 서버를 관리했는데, 서버 EBS를 20GB로 잡고, 도커 이미지관리를 하지 않아서 서버용량이 꽉찬덕에 서버가 멈춘적이 있다. (이때가 프로젝트 발표 당일이었다.)
도전은 언제나 나를 성장시키지만, 생각없는 도전은 그만큼 피를 보게된다는걸 깨닫게 되었다.
그래도 많은걸 배우게되었고, 이후에도 서버배포를 담당하며 진행중이다.