3.기본 기능 구현하기 [일지 작성하기]

dasd412·2022년 2월 1일
0

포트폴리오

목록 보기
23/41

작동 흐름

클라이언트 단

  1. 혈당 일지 폼의 경우, '값'을 읽어 온다.
  2. 식사 혈당 폼의 경우, '값'을 읽어 온다.
  3. '음식 추가' 버튼을 클릭 시, 음식용 캐시에 추가한다.
    '음식 삭제' 버튼 을 클릭 시, 음식용 캐시에서 빼낸다.
  4. '저장하기' 버튼을 클릭 시, PostManipulator 객체의 save()함수가 호출된다.
  5. 데이터의 유효성을 검증한 후, ajax를 이용해 컨트롤러에 JSON 데이터를 전달한다.

음식용 캐시를 활용한 이유

같은 식사 내 음식 이름의 경우 '중복 비허용'이므로 캐시 내의 set을 활용해서 중복 검사를 진행하고자 하였다.
(예: 아침에 김치 2번 기입은 안된다. 단, 아침에 김치, 점심에 김치는 가능.)

음식 li 태그 id 값 지급하기

음식의 경우, '추가' 또는 '삭제' 클릭 시 빈번하게 li 태그가 추가되고 삭제 된다.
따라서 동적으로 li 태그의 id 값을 지급할 필요가 있다.

이를 해결하기 위해 PostManipulator의 cacheAddFoods() 호출 시, 반드시 최근 li 태그 id 값 + 1로 id를 지정해 주었다.(auto increment와 똑같은 방식이다.)


서버 단

  1. 클라이언트 단에서 받은 DTO를 전달 받는다. 단, JSON 직렬화 error 때문에 날짜 데이터를 LocalDateTime 형태로 바로 받을 수는 없다.
    따라서 String 형태로 전달 받은 후, 컨트롤러 쪽에서 파싱한다.
  2. 스프링 시큐리티 세션에서 @AuthenticationPrincipal 어노테이션을 활용해 현재 세션 정보를 받아온다.
  3. 1.과 2.의 정보를 조합해 서비스 레이어에 전달한다.
  4. 리포지토리 로직들을 호출하고 받은 리턴 값들은 최종적으로 컨트롤러에 전달된다.
  5. RestController 공통 response 규격인 ApiResult로 감싸서 DTO를 클라이언트에 건내 준다.

profile
시드 레벨 스타트업의 2호 직원으로서 백엔드 시스템의 70%를 설계 및 개발하였고, TIPS 5억 투자 유치에 기여한 서버 개발자입니다. (Go/Python/MSA/Spring)

0개의 댓글