대략적인 결제 flow는 프론트쪽에서 결제가 완료 된 후 서버사이드로 결과를 보내주면 DB에서 검증하고 저장하는 대략적인 flow이다. 로컬 호스트와 브라우저에서 직접 테스트를 할 때 cors에러가 뜨는데, 이 에러는 브라우저에서 막는 것이기 때문에 결제가 완료 된 후 서버 사이드로 신호를 보낼 때 나는 것이다. 그렇기 때문에 결제는 완료 되었지만 서버에서는 검증할 방법이 없게 된 것이다. 현재는 cors에러만 그러하지만 결제 서버가 아닌 기록만 저장하는 DB와 서버가 이상이 생겼을 경우는 어떻게 처리되는지, 그전에 처리는 어떻게해야 하는지에 대한 고민이 생겼다.
현재 gcp에서 Mysql데이터베이스를 사용 하고 있다. 편리한 점은 DB 데이터들이 쌓인다는 것이다. 불편한 점은 DB 데이터들이 쌓인다는 것이다.
테스트를 할 때 회원정보를 미리 저장하고 다른 데이터를 쌓아가면 조회 API를 테스트 할 때 편리하다. 하지만 Entity Column을 추가하고 데이터를 추가하다 보면 이전 데이터는 null값이 발생하게 되는데 이로인하여 오류가 발생하는 경우가 종종 있다. 그렇기 때문에 localhost에서는 데이터베이스를 지우고 다시 실행하면 그만이었다. 다만 처음 데이터를 만들어줘야 하는 것이 불편했을 뿐이다.
gcp의 경우는 Mysql 인스턴스를 만들어 그곳에 데이터베이스를 따로 추가해줘야 했다. 그렇기 때문에 docker에서 자동으로 생성하는 것은 바라기 어려웠다. 그래서 기존 테이블과 데이터베이스 구조는 유지하면서 기존 데이터를 지우는 명령어는 있을까 하고 찾았다. 그리고 찾을 수 없었다.
drop database database_name; // DB를 아예 통째로 날려버리는 것이다.
delete Table table_name [where column_name = column]
// table 데이터혹은 특정 데이터를 삭제
truncate table_name // 테이터를 비워놓는 기능이라고 한다. join되었을 경우 처리되지 않았다.
결국 'dorp database~'를 사용하고, 다시 'create database~'를 사용하여 처리하였지만, 중간중간 이게 맞나 맞나 싶어서 굉장히 고통스러운 작업이었다. 현직에 있는 친구에게 물어보니 당연히 drop으로 database를 쓰는일은 말도 안되는 것이라고 한다. 그러니 빨리 일이나 알아보라는 '좋은(?)' 해결책을 제시해주었다.
pagination은 이번 프로젝트에서 2차 목표로 두었던 것인데, back쪽으로는 공부가 필요하다고 생각해서 알아봤다. 단어 자체는 굉장히 생소했지만, 게시판 같은데 페이지 번호가 있고 그것을 누르면 이동하게끔 데이터를 나눠놓는 작업이다. DB가 mysql이다 보니 typeORM인 QueryBuilder를 사용하기로 했다.
const users = await dataSource
.getRepository(User)
.createQueryBuilder("user")
.leftJoinAndSelect("user.photos", "photo")
.skip(5)
.take(10)
.getMany()
위에는 TypeORM Docs에서 그대로 가져온 것이다. 위와 같이 skip과 take로 페이지를 불러온다고 한다. 그러나 프론트 페어와 얘기를 해보니 전체 데이터를 조회하는 API 와 count를 조회하는 API를 활용하여 만들었다고 한다. 그래서 count를 반영하는 api를 만들었다. 이 또한 QueryBuilder를 통해서 안정성을 확보 하려고 했다.
const [results, count] = await this.questionBoardRepository
.createQueryBuilder('QuestionBoard')
.leftJoinAndSelect('QuestionBoard.user', 'userId')
.getManyAndCount();
아래 ".getManyAndCount()"는 TypeORM Docs가 아닌 다른 페이지를 참고하였는데(도무지 찾을수가 없었다 ㅠ), 결과값은 나왔으나 이게 맞는지는 정확하지 않다. Docs에 나와야 좀 안심이 되기도한다.
[Using pagination, TypeORM, 2022년05월23일 접속]
https://typeorm.io/select-query-builder#using-pagination
[Nest.js Typeorm 말고 querybuilder 를 써야하는경우, https://ganzicoder.tistory.com/160, 2022년05월23일 접속]
https://ganzicoder.tistory.com/160