개발일지
-
2019-08-28 개발일지개발일지 2019. 8. 28. 14:23
오늘은 프론트 팀에서 전달된 버그 사항을 수정하는 작업을 했다. 공지사항 목록에서 카테고리 별 목록 조회 시 총 게시글 수가 카테고리 별 조회된 게시글 수가 아닌 전체 게시글 수로 전달됨 (페이지네이션 처리 시 문제 발생) 공지사항 목록에서 검색어 목록 조회 시 총 게시글 수가 검색된 게시글 수가 아닌 전체 게시글 수로 전달됨 (페이지 네이션 처리 시 문제 발생) 게시판 목록에서 검색어 목록 조회 시 총 게시글 수가 검색된 게시글 수가 아닌 전체 게시글 수로 전달됨 (페이지 네이션 처리시 문제 발생) 위의 문제들은 다음과 같은 사항 때문에 발생했다. exports.list = async (req, res) => { const findIncludeOptions = { where: { ..., [ Seque..
-
2019-08-27 개발일지개발일지 2019. 8. 27. 14:30
오늘은 쿼리관려해서 문제 하나가 오전부터 오후 2시까지 시간을 잡아먹었다. ㅡ"ㅡ 기존 공지사항 기능에 댓글이 없었는데 댓글이 추가되는 바람에 댓글 테이블을 설계했고, 기존 목록을 조회하는 쿼리를 수정하는 과정에서 문제가 발생했다. 글 제목 (댓글 카운트 수) 이런식으로 제목을 뽑으려고 시퀄라이즈 쿼리 옵션을 이리저리 수정하고 있었는데 쿼리가 계속 래핑되어 수행이 되서 말썽이었다. BoardModel.findAndCountAll({ attributes: [ [ sequelize.fn('COUNT', sequelize.col('board_comments.id')), 'commentCount' ] ], include: [ { model: BoardCommentModel, attributes: [] } ], ..
-
2019-08-26 개발일지개발일지 2019. 8. 26. 14:08
오늘은 게시판 API를 만들고 있다. 현재 댓글 삭제 기능을 구현 중인데, 개발 중 하나의 문제에 봉착했고 이걸 해결한 내용을 작성해보려고 한다. 내가 댓글 삭제에서 구현하고자 하는 로직은 다음과 같다. 댓글이 존재하는가? 댓글이 이미 제거되었는가? 게시글은 존재하는가? 게시글은 삭제되지 않았는가? 댓글의 작성자가 삭제하려는 사람과 동일한 사람인가? 위의 단계에서 3번째 조건문을 타지 않는 것이 확인되었다. 위의 조건을 구현하기 위해 실제 DB에 저장된 게시글의 아이디와, 사용자로부터 URL 쿼리스트링으로 받은 게시글 아이디 값을 비교했다. 그런데 조건을 타지 않았다. console.log()를 통해 찍어본 결과 게시글의 아이디는 같았으나, typeof를 통해 확인해본 결과 시퀄라이즈로 조회해온 값은 s..
-
2019-08-23 개발일지개발일지 2019. 8. 23. 16:19
오늘은 어제 만들었던 CustomError를 좀 손봤다 각각 컨트롤러에서 CustomError 객체를 생성할 때 마다 중복되는 메시지를 일일이 타이핑하는게 넘 귀찮아서(..;;) 그냥 통합 에러 메시지를 만들었다. Class CustomError extends Error { constructor(errCode, errName, errMessage = '', ...params) { super(...params) // 인자 배열을 부모 생성자에게 전달 // 오류가 발생한 위치에 대한 스택 추적 (V8 에진에서만 적용됨) if (Error.captureStackTrace) { Error.captureStackTrace(this, CustomError); } // 디버깅 정보 this.errorCode = er..
-
2019-08-22 개발일지개발일지 2019. 8. 22. 16:19
오늘 작업한 내용은 꽤 재밌는 부분이었다. 나는 지금까지 자바로 타입을 명시해서 에러처리를 해왔어서 자바스크립트의 에러처리는 항상 모호한 문제가 있었는데, 오늘 Error 객체를 extend해서 커스텀 에러 클래스를 만들어서 사용하니 이렇게 편할 수가 없다. Class CustomError extends Error { constructor(errCode, errName, errMessage, ...params) { super(...params) // 인자 배열을 부모 생성자에게 전달 // 오류가 발생한 위치에 대한 스택 추적 (V8 에진에서만 적용됨) if (Error.captureStackTrace) { Error.captureStackTrace(this, CustomError); } // 디버깅 정보..
-
2019-08-19 개발일지개발일지 2019. 8. 19. 13:14
오늘은 Sequelize를 사용해서 SQL 함수를 사용해야하는 상황이 발생했다. PostgreSQL의 ROW_NUMBER() OVER() 함수를 이용하여 조회한 대상에 순차번호를 매겨서 프론트 엔드에 데이터를 넘겨야했다. 이는 시퀄라이즈의 options를 이용해서 처리할 수 있었다. 코드를 보자. const table = await model.findAll({ attributes: [ [ sequelize.literal('ROW_NUMBER() OVER(ORDER BY id ASC)'), 'num' ], [ 'id', 'id' ], [ 'content', 'content' ] ], where: [ something: some ] }); attributes 속성엔 조회 대상 필드에 대한 조작을 할 수 있게..