8월 7일 (수) 회고 - dev-FEFIVE/NadoCat GitHub Wiki
각자 자유로운 형식으로 작성해주세요.
휴가를 가느라 하지 미뤄뒀던 개발을 시작했다. 오늘은 관심글 페이지의 레이아웃을 구현했다. 팀원중에 프론트 개발을 시작한 분이 없어서 상대단위로 할지 px로 할지, theme은 만들어야 할지 등 고민을 하다가 결국 그냥 px로 구현을 했다. 관심글을 미리 보는 레이아웃을 구현했는데 px로 구현을 하니 화면의 비율을 조정해도 움직이지 않아서 다 구현하고 이게 맞나,,? 싶었다. 내일 회의때 다 같이 얘기해봐야겠다.
- 원본을 fork해온 로컬 브랜치긴 했지만, 실수로 develop을 날려먹어서 당황했다가 검색해서 브랜치 복구하는 방법을 알게 되었다. vscode에서 원래 좌측하단에 브랜치가 checkout할때마다 바뀌었는데 어느 순간부터 안 바뀌고 있어서 일단 git branch를 쳐서 확인해가며 작업하는 중이다. 나중에 더 불편해지면 찾아봐야지
- 내가 DB 및 API 설계를 담당했고 구현은 다른 팀원이 맡기로한 파트에 대한 커뮤니케이션 누락이 있었음을 확인했다. 전달하긴 했었는데, 그냥 지나가듯이 말했던 것 같다. 중요한 내용은 분명하게 전달하도록 하고, 다시 확인할 수 있도록 꼭 어딘가에 적어놓아야겠다.
- 이미지와 태그 관련 부분에서 createMany가 count만 리턴하기 때문에 Promise.all과 create를 조합하는 형태로 구현했었다. 구글링을 좀 해봤는데 Promise.all만 사용하게 되면 문제가 발생하기 이전의 값은 그대로 테이블에 저장된다는 것을 알게 되었다. 그래서 해결 방법으로 prisma.$transaction을 적용했다. 기존에 transaction을 잘못 사용한 부분도 수정하였다.
(공식 문서가 약간 가독성이 안좋다..)일단 원하는 동작을 하는 것 같지만 코드를 분리했더니 tx를 하나하나 넘겨줘야 한다는 점이 조금 그렇긴 하다.
await prisma.$transaction(async (tx: Prisma.TransactionClient) => {
// ...
const newImages = await Promise.all(
images.map((url: string) => addImage(tx, url))
);
// ...
}
export const addImage = async (tx: Prisma.TransactionClient, url: string) => {
return await tx.images.create({
data: {
url,
},
});
};
- Postman으로 테스트했을 때는 원하는 동작을 잘 하긴 하는데 백엔드를 잘 몰라서 "이게 맞나...?"라는 생각이 조금씩 들기 시작했다. 그리고 코드를 너무 내 맘대로 작성하고 있는 게 아닐까라는 생각도 든다. 구글링도 좀 많이 해보고 고민을 좀 해봐야겠다.
- prisma scheme를 migrate할 때 테스트했던 데이터가 날아가서 다시 넣는게 은근히 귀찮은 일이다. workbench를 사용중이었기 때문에 쿼리문으로 추출할 방법이 없나 찾아봤는데 테이블 쿼리 추출은 있어도 데이터 추출은 없는 것 같았다. 어쩔 수 없이 DB가 리셋될 때 마다 필수로 필요한 데이터는 따로 쿼리문을 저장해 놓고 사용했다.
- Promise.all 메소드를 처음으로 사용해보았다. images.map((url: string) => addImage(url))가 Promise[]를 반환했기 때문이다. addImage는 비동기 함수이므로 images.map이 반환하는 Promise 객체를을 처리하기 위해 Promise.all을 사용했다. 이후 비동기 작업이 예상되로 작동하게 되었고, 이미지 처리 로직이 정상적으로 처리되었다. 반환되는 데이터 구조와 객체의 유효성을 주의 깊게 검토하는 습관을 갖는 게 좋을것 같다.