친구 관계 설정 API
Query logging
jwt 로그아웃
Parent object <User> is not bound to a Session; lazy load operation of attribute cannot proceed
가 requets.user.friends
로 접근할 때 문제가 발생했다.starlette.request
에서 request.state.some_value
와 같이 원하는 값을 저장할 수 있었다. 그래서 request.state.db
에 넣어서 본 API 처리 함수에서 꺼내서 썼다. BEGIN (implicit)
SELECT users.id AS users_id, users.login_id AS users_login_id, users.username AS users_username, users.password AS users_password, users.nickname AS users_nickname, users.create_dt AS users_create_dt, users.update_dt AS users_update_dt
FROM users
WHERE users.id = %(pk_1)s
[generated in 0.00014s] {'pk_1': 1}
BEGIN (implicit)
SELECT users.id AS users_id, users.login_id AS users_login_id, users.username AS users_username, users.password AS users_password, users.nickname AS users_nickname, users.create_dt AS users_create_dt, users.update_dt AS users_update_dt
FROM users
WHERE users.id = %(pk_1)s
[cached since 1.909s ago] {'pk_1': 1}
SELECT users.id AS users_id, users.login_id AS users_login_id, users.username AS users_username, users.password AS users_password, users.nickname AS users_nickname, users.create_dt AS users_create_dt, users.update_dt AS users_update_dt
FROM users, friendships
WHERE %(param_1)s = friendships.user_id AND users.id = friendships.friend_id
[generated in 0.00011s] {'param_1': 1}
- 쿼리 자체는 2번 보낸 것 같다. 두번째꺼는 캐시된 것을 가져온 것 같다. → 캐시된 걸 가져오는데 꽤 오래걸린다... postman에서 2.72s가 떴다.
- 그럼 미들웨어를 안쓰고 그냥 API 함수에서 직접 꺼내서 쓰면 어떻게 되나 궁금했다.
BEGIN (implicit)
SELECT users.id AS users_id, users.login_id AS users_login_id, users.username AS users_username, users.password AS users_password, users.nickname AS users_nickname, users.create_dt AS users_create_dt, users.update_dt AS users_update_dt
FROM users
WHERE users.id = %(pk_1)s
[generated in 0.00016s] {'pk_1': 1}
SELECT users.id AS users_id, users.login_id AS users_login_id, users.username AS users_username, users.password AS users_password, users.nickname AS users_nickname, users.create_dt AS users_create_dt, users.update_dt AS users_update_dt
FROM users, friendships
WHERE %(param_1)s = friendships.user_id AND users.id = friendships.friend_id
[generated in 0.00018s] {'param_1': 1}
- 우선 쿼리는 똑같이 2번인데 캐시된걸 가져오는 것이 빠졌다 (당연히 바로 사용하니깐) → postman에서 0.611s 걸렸다.
- 위에서 캐시된 것을 가져오는 것은 API함수에서 `request.user`를 사용할 때 발생한다. 해당 쿼리를 사용하지 않게 하는 방법은 아직까지 못찾았다.
- 이번에 미들웨어를 써보는 이유가 장고처럼 편하게 현재 로그인 된 유저를 가져오고 싶어서 그랬는데, 이렇게까지 느리면 사용하지 않고, 그냥 필요할때마다 직접 해당 함수에서 사용하는 것이 나을 것 같다.