실전프로젝트 - 겪었던 어려움 및 B.E 기술스택 정리(Part.01)

Jobmania·2022년 10월 8일
0

항해 과정 기록

목록 보기
9/19

프로젝트 사이트: https://www.frigo.kr/


프로젝트과정 배운 리와인드..

Frio 웹 프로젝트는 냉장고 관리 서비스로 주요 기능은 식재료 기반 추천 레시피, 통계, 캘린더, 쿠킹클래스(방송)이 있다. 진행하면서 가장 많이 느낀 것은 기본이 중요하다라고 느꼈다. JAVA, SPRING에 대한 깊이가 있어야 신기술 적용도 가능하다라고 생각한다.


1.나의 식재료 기반 추천레시피 로직

레시피 DB중 재료Column이 형식이 통일되지 않아서 아래와 같이 전처리로 형식을 통일화 하였고...

[라이스버거] 밥(200g), 맛간장 (15g), 전분가루 (15g), 팽이버섯 (20g), 흰후추 (1g), 달걀 (60g),
[떡갈비] 다진소고기 (50g), 다진돼지고기 (50g), 다진양파 (30g), 다진쪽파 (15g), 맛간장 (10g), 후추 (1g),
[토마토겉절이] 토마토 (80g), 미나리 (20g), 맛간장 (5g), 청고추 (15g), 홍고추 (15g)

기존의 식재료 DB의 명칭으로는 레시피DB 재료Column 을 찾을수 없기 때문에, 검색에 활용될 수 있는 mark_name을 추가하여 재료가 포함된 레시피를 찾을 수 있었다.

2. 홈화면 캐싱처리

화면 구성이 한화면에 여러 API요청들이 많기 때문에 똑같은 요청을 DB로 I/O하는 건 비용 및 속도 측면에서 개선해야 된다고 생각하여 백엔드에서는 Response를 캐싱처리하여 보내주었다. 다만 중요한 건 캐싱데이터의 최신화 문제였다.

프론트 측면에서도 react-query도입하여 서버데이터 변경이 없는 경우, FE에 캐싱한 데이터를 사용한다고 한다.

3. 서버 다운 이슈

개발 과정 서버 다운이 2번이 있었다. (CPU사용률 100% 주금 ㅠㅠ)
1번째는 프론트엔지니어의 실수로 과다한 API요청, 2번째는 새벽에 갑자기 죽어버렸다...
1번째 다운시 많은요청 많은응답을 해결하기위해 API 호출횟수 제한 및 Response 페이징 처리를 하여 이제 안전하겠지라고 생각했는데 바로 다음날 새벽에 서버가 죽었다..

EC2서버환경확인시 위 사진처럼 IDLE상태일때 JAVA가 50~60%메모리 차지를 하고 있었고 메모리사용과다로 서버가 죽는 것으로 판단했다.

그래서 https://sundries-in-myidea.tistory.com/102 참조하여 HDD를 SWAP메모리로 활용하여 RAM의 용량을 늘렸다.

다만 이 방법은! 당연히 RAM보다 속도는 낮아진다. 하지만 오늘 서비스를 이용하며 늦은 반응속도로 인한 불편함은 없었고, 현재까지도 서버는 죽지않고 잘 돌아가고 있다. 금액적인 부분과 타협을 해야한다면 이 방식도 나쁘진... 않을것같다.


엘라스틱 서치

주요 서비스가 재료 검색, 재료를 통한 레시피의 검색이기때문에 기존의 Cotain를 통한 검색보다는 성능개선이 이루어 질것이라 판단하였지만 아쉽게도 일정상 도입은 못하였다. 다만! 도입을 한 다른팀의 프로젝트 수치적인 성능향상을 확인할 수 있었다.

출처 : https://github.com/Billy-Project-Team1/Backend
피드백 요소로 현재 레시피 검색이 이름으로만 검색이 되지만, 포함되는 재료를 통한 검색, 또는 해쉬태그와 같은 검색도 있으면 좋겠다는 개선사항이 있어, 해당 기능은 성능개선을 위해 도입시도를 해보면 좋을 것이다.


CustomExceptionHandler 처리


사용이유 : 다양한 코드로 분기처리를 하면 어떤 에러가 발생하는지 확인이 용이함.


소프트 딜리트

해당 기능은 프로젝트에 활용되진 않았지만 커뮤니티에서 신고기능을 위해 도입될 수 있다
예시) 사용자가 게시글을 삭제하여도 db상에는 남아있지만 실제로는 보이지 않게 처리..
사용용도 : 불법게시글을 올려서 바로 삭제하더라도 Admin은 db를 확인하여 처벌가능.
https://velog.io/@zeros0623/JavaSpring-soft-delete-handling
위의 기능을 사용하지 않더라도

아래와 같이 Column을 하나 더 생성하여 삭제여부를 확인해서 게시 여부를 On/off 할수 있다.(0,1이니 boolean을 쓰는 것도 나쁘진 않을듯!)


HashMap, Set

https://crazykim2.tistory.com/474
https://coding-factory.tistory.com/554
https://n1tjrgns.tistory.com/164
@EqualsAndHashCode(lombok)

1.추천레시피 로직중 냉장고 재료가 포함된 재료가 많을수록 value값이 상승하고 해당 형태를 리스트로 불러온다.

  1. 추천레시피 재료 중복방지를 위해 Set을 사용

    해당 어노테이션을 붙이면 동일성, 동등성 여부를 체크한다.

검색 키워드: (추가 정리할 자료들)
1. SWAP 메모리 ->> JVM 메모리 (런타임과 관련)
2. 트랜잭션 아이솔레이션 레벨
3. 이미지 리사이징 관련 : 클라우드프론트
4. resttemplate동기 , springwebclient 비동기

보충해야할 부분:
깃헙액션(CI/CD)
테스트코드
로그

profile
HelloWorld에서 RealWorld로

0개의 댓글