
작성이 너무 늦었다
서버에서 API부분만 묶어서 끝내고 한번에 정리하려고 묵혀두고 있었는데 너무 늦어질거 같기도 하고...
현재 유저 부분만 완성 되었고 나머지는 진행중... 상인쪽을 건드리려고 하는데 소켓이 들어가는 부분이라 잠시 프론트로 넘어가게 되었고 하다보니 블로그 작성 안하게 될거같아서 그냥 달려왔다.
다이어그램
뭐든간에 최소한 시퀀스 다이어그램 정도는 그리고 시작하려고 노력중이다. 특히나 서버는 그릴게 좀 많아서 신경을 조금 더 쓰려고 하고 그리면서 내부 루틴이 심하게 단순한 요청 같은 경우는 그리지 않았다.
(이게 맞는건지는 몰르겠다.) 아무튼 올려보겠다.

아이디(PK)를 정하는 부분에서 행을 유추하기 어려워야 하는 중요한 정보를 담은 테이블은 UUID를 쓰려고 했고 나머지는 오토로 넣었다.
서버에서 ORM을 Prisma로 사용하는데 관계성을 가진 테이블을 참조조회할때 바로 참조 테이블을 불러오거나 연결된 키값을 가져올 수 있게 나누어져 있어 매우 만족하며 단일 조회는 모두 넘겨주고 메뉴 리스트나 가게 리스트 같은 경우는 키값을 담아 보내고 상세정보는 키값으로 재요청 하게끔 해두었다.
(많은양에 데이터를 한번에 보내는것 보다 요청이 조금더 느는게 좋지 않을까? 라고 판단했다.)

UML 요소들을 가져다가 규칙에 최대한 맞춰서 그려보았는데 인터넷만 보고하다보니 피드백 받을만한 곳이 없어서 잘그렷는지는 모르겠다.
해당 사진에서 밑에 주문부분을 제외한 루틴은 모두 구현되었다.

상점 접근 루틴중 조회가 두가지로 나뉘었는데 데스크톱 앱접근과 모바일 앱 접근 두가지로 나누었고 데스크톱은 소켓으로 연결되었다가 검증이후에 연결이 유지되기 때문에 여기다가 같이 넣어도 될까? 고민만 30분하다가 그냥 넣었다.
메뉴까지 그려는 두었는데 너무 간단한 루틴이라 굳이 올려두지는 않겠다.
먼저 그리기를 선행하고 작성하는 방식을 하고 있기때문에 추가될게 2가지? 정도는 있고 변동사항이 생길 수 있기때문에 그부분은 이 글에 즉각즉각 반영하도록 하겠다!
유저 부분에 넣어두었던 주문 요청을 상점으로 이동시켯고(너무 당연한걸 안했구만) 웹훅으로 날라오는 결제 결과를 주문보내기, 선물보내기로 나누어 처리했다.
회원가입 루틴을 총 3가지로 나누었는데 처음 앱 단위에서 입력정보를 체크하고 메일인증 코드를 발행 한 이후, 2차로 발행 받은 코드를 입력해 재 인증을 하고 마지막으로 등록 요청을 받아 처리하는 순서로 바뀌었다.
메일 인증루틴을 적용해보면서 이게 왜 필요할까? 생각 했는데 아마 무지성 회원등록, 이메일 연동, 기타 가입제한등 관리적인 측면에서 필요해서가 아닐까?? 생각이 들었다.
외에도 변경된 방식이 많을 테니 최신 포스팅을 참고하도록 하자!
총총
원래 두편으로 나누어서 내부 코드도 넣으면서 이렇다 저렇다 설명좀 하면서 할려했는데 다이어그램 그려놓으니 따로 설명할 부분이 없을거 같아 API는 여기서 자르도록 하겠다.
아 궁금한점
비밀번호 암호화중 salt를 어떤식으로 생성하는지 의견들이 궁금하다.
현재 나는 이런 루틴으로 굴리고 있는데
encryption(data: Object, salt?: string) : { salt: string, hash: string } {
const bufferEncoding : BufferEncoding | undefined = this.config.get<string>("AUTH_BUFFER_ENCODING") as BufferEncoding
const encoding : BufferEncoding | undefined = this.config.get<string>("AUTH_ENCODING") as BufferEncoding
const interation : number | undefined = parseInt(this.config.get<string>("AUTH_ITERATION") ?? "10000")
const keyLen : number | undefined = parseInt(this.config.get<string>("AUTH_KEY_LEN") ?? "64")
const algorithm : string | undefined = this.config.get<string>("AUTH_ALGORITHM") ?? "sha256"
if(!salt) {
const randByteStr = randomBytes(32).toString(encoding ?? "base64")
const uid = v4()
salt = `${uid}:${randByteStr}`
}
...
return { salt, hash }
}
이런식으로 uid를 자체생성해서 앞단에 붙여주고 더욱 유추하기 어렵게 해놓으려고 하긴 했는데 만들고보니 메모리만 잡아먹는 쓰레기가 나온거 같아 고민이 되는 부분이다.
지금 당장은 이걸 개선하기위해 찾아보고 할 여력이 없지만 완성뒤에는 개선사항들 추려내서 개선을 해볼 생각이라(포폴화 먼저하고...)그떄즈음 이면 뭔가 다른방식을 사용하기야 하겠지만 이글을 보는 사람들에 의견도 궁금해서 남겨본다!
누가 볼지는 모르겠는데 보게된다면 답글 달아주면 너무너무 고마울거 같다.