router 구현 순서

2024년 3월 11일 월요일

Today I Learend

날짜

2024년 3월 11일 월요일

내용

우선 기본적인 구현은 수월하게 진행중!

router 정의 순서

위젯을 렌더링하는 요청을 받을 router를 list-designer/render 엔드포인트로 만들었다. 오류가 발생했는데, int여야하는 widget_id의 타입이 올바르지 않다는 다음과 같은 내용이었다.

1
2
3
4
5
6
7
8
 { "detail": 
	 [ { "loc": 
		 [ "path", "widget_id" ], 
		 "msg": "value is not a valid integer", 
		 "type": "type_error.integer" 
		 } 
		] 
	}

내가 만든 router는 widget_id를 전혀 사용하지 않는데.. 기존에 있는 코드에 문제가 있다고 생각해서 들여다봤지만 아무 문제 없었다. 애초에 문제 있는게 test 서버로 올라올 리도 없고, 다른 곳의 router가 실행도 안됐는데 왜 영향을 끼친다는 건지 이해가 되지 않았다.

선배님의 도움으로 알게 되었는데, 기존에 있던 list-designer/{widget_id} 로 정의한 router 때문이었다. 이 router가 먼저 정의되면 그 이후에 같은 곳으로 요청이 왔을때 render가 경로가 아닌 widget_id의 값으로 들어온 것으로 생각한다. 즉, widget_id의 값으로 “render”를 넣어서 integer가 아닌 string이 들어와 타입오류 처리 된 것이다. 이를 해결하기 위해선

  1. 내 render 관련 router를 먼저 정의하거나
  2. 엔드포인트 경로를 수정하거나 (예시 : list-designer/render/ak47)

둘 중 하나의 방법을 쓰면 된다. 참고 링크

기능 활성화 표시

이전 데이터 형식을 고민할 때, 너무 많은 필드가 생성될까봐 특정 기능의 사용 여부를 따로 표시하지 않았다. 예를 들어, “특정 기간 내에 작성된 리뷰의 수”에 설정할 기준 값을 DB에 저장할 때 -1로 저장하면 해당 기능을 사용하지 않는 것으로 처리하면 되겠다고 생각했다.

값이 “last month”, “7 days” 등이면 그 기준으로 로직을 처리하면 되고 “-1” 이면 해당 기능을 사용하지 않는 것으로 로직을 작성했었다. 두 가지를 문제를 생각하지 못한 결론이었다.

  1. 프론트에선 -1이 integer인지 string인지 신경써야 함.
  2. “일주일”로 설정해 놓던 유저가 일주일 간 사용하지 않다가 다시 사용한다고 했을 때, 기존에 설정해둔 기준을 알 수 없음

이 문제로, 사용 여부를 추가해줬다. 다행히 json 내에 추가하면 되서 데이터베이스 구조가 크게 바뀌진 않았지만 진작에 생각했으면 더 좋았을 텐데.

회고

기능 개발은 너무 재밌다.