본문 바로가기

TIL

20210818(수) [항해 73일 차] 생각을 깊게 하자

망각하는 자는 복이 있나니, 자신의 실수조차 잊기 때문이라.
- 프리드리히 니체 -

 

오늘은 빨리 자야지 했는데 하루를 또 넘겨버렸다. 아침에 비밀번호 재설정 관련 코드를 다 짜고 에러핸들링도 추가해줬다. 관련된 부분을 맡고 계신 SG님과 이야기 하고 API표에도 추가했다. 테스트 코드는 회원 탈퇴를 먼저 해야 본격적으로 시작할 수 있을 것 같다.

 

더보기

카드 동시에 옮길 때 복사가 되는 문제가 있는데 이걸 해결하기 위해 로직을 생각해봤다. 

카드에 현재 위치정보가 없어서 생기는 문젠데 위치정보를 추가하거나(로직이 복잡해진다.) drag, drop할 때 drag와 drop한 시간을 각각 Card model에 추가 해준다. 

맨 처음 카드 목록을 불러올 때 담겨있는 카드정보가 있다.

POST, PUT 요청 시 기존에 담겨있던 카드Id와 drag, drop시간을 정보를 서버로 body에 담아 보낸다. 

2. 담겨진 cardID로 card를 조회해서 찾은 Card 내부의 drag, drop 시간을 확인해서 다를 경우 drop시 새로고침한다.

 

2-1. 2에서 drag할 때 drag시간 정보를 body로 보내고, 서버에서 찾은 card의 drag 시간과 동일 할 시 drag시간을 현재 시간으로 바꿔준다. 다를 시 drag시간을 찾은 Card의 시간을 그대로 두고 새로고침한다(드랍할 때 해야될듯?) 

 

2-2 drop할 때 drag 시간과 동일 할 경우에 drop이 성공적으로 이뤄지고 이 때 drop 시간을 현재시간으로 넣어준다. 

     drag시간과 달랐을 경우 drop 시 drop 시간을 건드리지 않고, card위치 수정도 안되게 한다.

 

 

현재 방식과 비교해 DB저장량이 늘어날 것이다.

 

만약 2-1에서 발생한 drag 시간을 현재 시간으로 바꿔줄 때 처리중인 도중에 다른 사람이 동일하게 2-1을 실행한 경우 찾는 카드가 다른 사람의 2-1이 적용되기 전의 카드라 찾은 card drag 시간과 동일하다고 판단하지만 실제로 다른 경우가 발생할 수 있는데 이 때는 drop할 때 처리를 해주면 된다.

 

dragtime이 droptime보다 최신일 경우 현재 수정중인 상태 : 이 때 dragtime을 현재 시각과 비교 해 40초 이상 차이 날 경우 droptime을 현재 시간으로 고침

dragtime이 droptime보다 오래될 경우 현재 수정을 끝마친 상태 : dragtime과 droptime은 40초 이상 차이가 날 경우 누군가 악의적으로 혹은 예상치 못하게 카드 드래그 중 꺼진거임

 

dragtime droptime cardId 보냄 DB의 정보와 일치하는 지 확인함

일치 시 이상없이 전처럼 처리하면됨.

불일치 시 경우의 수를 따져봐야함

dragtime만 다를 경우, dragtime, droptime이 다를 경우, droptime만 다를 경우

dragtime만 다를 경우, 현재 수정중인 상태로 현재 시각과 비교 해

20초 미만 차이 날 경우 drag 시 변동사항 없음 drop 시 새로고침함 

20초 이상 차이 날 경우 drag시 dragtime 리셋, drop 시 droptime을 현재 시간으로 고침(다른 사용자가 드래그 중 비정상적으로 종료하거나 사용중인 것으로 간주) & 전처럼 카드 위치 수정 로직 시작함

 

만약 20초이상 동안 드래그 하고 있다가 놓으면 여전히 카드 복사 버그는 존재하게됨 

이를 막으려면 드랍 할 때 처음 dragtime이 DB상의 dragtime보다 최신일 경우에 카드 수정이 아니라 DB정보를 바꾸지 않고 새로고침 하면 됨 

 

dragtime과 droptime이 둘 다 다를 경우 정상적으로 수정이 완료된 것으로 간주 drag 시 아무것도 안함, drop 시 새로고침함 

 

droptime만 다를 경우 논리적으로 생각하기에는 존재할 수 없음 

 

글을 쓰다보니 정리가 안되었는데 내일 마저 정리하여 팀원과 이야기 해볼 예정이다.

 

AB180 기업설명회 들었다. 

생각보다 기업들이 요구하는 인재상이 나와 비슷하다고 느꼈다. (빠른 성장을 추구, 비즈니스와 관련된 생각이 있었으면 좋겠음, 어떤 문제를 마주쳤을 때 어떻게 최적화 할 수 있을지 해결할 수 있을 지 깊이 고민해봄, 오버엔지니어링과 언더엔지니어링 사이를 고민해봄과 같은 부분)

난이도도 생각보다 의사결정에 중요한 부분을 차지함을 알려주심! 현재 중요성위주로 프로젝트를 진행 중인데 쉬운 것 부터 해결하는 것도 괜찮아보임!

 

채팅에서 방 정보 유효성 검사, 유저가 방에 있는 지 검사 하는 코드를 추가해봤다.(잘 돌아가는 지 모르겠음 DH님이 질문 하셔서 아는 대로 써봤음) 내일 확인해 볼 예정

 

정리 잘하고 싶다... 하지만 글쓰기에 오늘 많은 시간을 투자하긴 싫으니 의식의 흐름대로 써봤다.