궤도

[회고] VIVA 프로젝트 회고 feat. 그런 짓(들)은 하지 말아야 했는데 본문

💻 현생/📃 VIVA

[회고] VIVA 프로젝트 회고 feat. 그런 짓(들)은 하지 말아야 했는데

영이오 2021. 7. 20. 16:09

요즈음 공부를 하면 할 수록 내가 n달전 비바에서 어떤 끔찍한 짓을 해왔던 건지 매일매일 깨닫고 있어서 정리한다.

물론 난 지금 계속 공부를 하고 있으니 이 글은 점점 늘어날지도 모르겠다.

 

1. 말도 안되는 보안

교수님이 코드를 뜯어보셨다면...정말 큰일났을 것이다.

다행인지 아닌지 우리 서비스가 앱이라 url이 대놓고 보이진 않아서 모르고 넘어가셨다...

 

2. 프론트에 대한 맹신

서버 개발자는 클라이언트를 믿으면 안된다는 말이 있다더라.

난 몰랐다...

나->프론트의 관계

엄밀히 말하면 서로에 대한 신뢰는 아니겠다.

최근에 프론트쪽 코드를 보고 알게된 것인데, 내가 프론트를 너무 맹신한 나머지 내가 해야할 유효성 검사들을 프론트에서 다 하고 있더라

 

도대체 유저가 test_title을 입력 안했었으면 어쩔 생각이었는지??

 

아무튼 그럼 안됐었다...

 

3. 정리안하고 넘겨버린 데이터

뭐 이건 후반부 가서 개선하긴 했는데...그게 적용된 건 정말 조금이고...

 

더 심각한 코드가 있었던 것 같은데 수정을 했는지 찾을 수 없다.

아무튼 보면 알겠지만 프론트로 넘겨주는 bookInfo는 그냥 db에서 조회한걸 거의 그대로 담은 것이다.

만약 join까지 들어가는 조회인데 그걸 그대로 넘긴다면? 프론트가 데이터를 다루기 아주 귀찮아지겠지...

 

4. 예외 처리

이것도 아주 안한건 아니지만...예외처리를 하나라도 빼먹는거 자체가 일단 말이 안되니까...

 

이게 어떤 부분이냐면 이미지에 대해 YOLO detection을 하고 그 결과인 result를 JSON.parse해서 가져오는 것인데...

이미지 촬영 상태에 따라서 욜로가 돌아가지 않는 경우가 있었다. 그럼 JSON.parse에서 예외가 터진다.

그리고 난 이걸 핸들링하지 않았다...

 

5. HttpStatus는 장식인가?

async function retrieveBook(workbooks, res) {
    if (workbooks.length != 0) { //교재 있냐?
        var bookInfo = new Array();
        for (var i in workbooks) {
            let temp = await models.workbook.findOne({
                where: {
                    workbook_sn: workbooks[i].dataValues.workbook_sn
                }
            });
            bookInfo.push(temp);
        }
        try {
            res.send({ //교재 정보 넘김
                message: "Retrieve books",
                status: 'success',
                data: {
                    bookInfo
                }
            });
        } catch (err) { //무언가 문제가 생김
            res.send({
                message: "ERROR",
                status: 'fail'
            })
        }
    } else { //교재 없거나 실패한 것임
        res.send({
            message: "Null or fail",
            status: 'null'
        });
    }
}

message는 에러지만 status는 200으로 나가는 기묘한 코드

 

6. (이 글을 또 업데이트하게 될 줄 몰랐는데...)

이게 무슨 이미지냐면 비바 카테고리 첫 글이다.

클리셰 특 ) 설마 큰 일이 생길까? -> 큰 일 생김

 

https://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/

 

Blocking-NonBlocking-Synchronous-Asynchronous

꽤 자주 접하는 용어다. 특히나 요즘들어 더 자주 접하게 되는데, 얼추 알고는 있고 알고 있는게 틀린 것도 아니지만, 막상 명확하게 구분해서 설명하라면 또 만만치가 않은.. 그래서 찾아보면

homoefficio.github.io

여기서 동기 비동기 배우면서 알게 된건데 Node.js + MySQL 조합이 async와 blocking의 조합이라 성능면에서 좋지 않다고 한다. 에휴

 

아무튼 내가 못한 부분을 반성하며 발전해나가기로 하자

 

VIVA github

Comments