프로젝트 소개
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로 잡고, 도커 이미지관리를 하지 않아서 서버용량이 꽉찬덕에 서버가 멈춘적이 있다. (이때가 프로젝트 발표 당일이었다.)
•
도전은 언제나 나를 성장시키지만, 생각없는 도전은 그만큼 피를 보게된다는걸 깨닫게 되었다.
•
그래도 많은걸 배우게되었고, 이후에도 서버배포를 담당하며 진행중이다.