본문 바로가기
Network/Server

[Server] src 폴더 구성

by 며루치꽃 2021. 1. 22.

src는 크게 app, web, webAdmin 파일로 구성되어있습니다. 

app에는 app API, web에는 web API, webAdmin에는 webAdmin API로 구성을 합니다.

app에는 크게 3가지로 구성되어있습니다. 

route에는 해당 url이 어떻게 route 될 것인가 명시해주고,  

dao에는 그 파일에서 사용될 데이터베이스를 처리해주는 곳입니다.

controller는 실질적으로 가져온 데이터베이스에 대해서 어떻게 구성을 할 것인지 로직을 처리하는 곳입니다.

 

userRoute.js

module.exports = function(app){
    const user = require('../controllers/userController');
    const jwtMiddleware = require('../../../config/jwtMiddleware');

    app.route('/app/signUp').post(user.signUp);
    app.route('/app/signIn').post(user.signIn);

    app.get('/check', jwtMiddleware, user.check);
};

예를 들어 signUp, signIn 같은 API가 작성이 되어있는데 export된 경로로 따라가보면

controller에 singUp 함수가 export 되어있는 것을 볼 수 있습니다. 

 

// 이메일 중복 확인: : 중복확인을 할때는 데이터베이스를 확인해봐야하기 때문에 데이터베이스 연동이 필요합니다
            const emailRows = await userDao.userEmailCheck(email);
            if (emailRows.length > 0) {

                return res.json({
                    isSuccess: false,
                    code: 308,
                    message: "중복된 이메일입니다."
                });
            }

1) 이메일 중복확인을 할때는 데이터베이스를 확인해봐야하기 때문에 데이터베이스 연동이 필요합니다.

2) userDao에서 userEmailCheck 파라미터로 email을 넘겨줬습니다.

3) userDao 구성을 확인하기 위해 ctrl 키를 눌러 확인해보면 아래와 같습니다.


dao.userDao.js

async function userEmailCheck(email) {
  const connection = await pool.getConnection(async (conn) => conn);
  const selectEmailQuery = `
                SELECT email, nickname 
                FROM UserInfo 
                WHERE email = ?;
                `;
  const selectEmailParams = [email];
  const [emailRows] = await connection.query(
    selectEmailQuery,
    selectEmailParams
  );
  connection.release();

  return emailRows;
}

async 함수 await 함수를 다 실행해야지만, 다음 함수로 실행되는 비동기 처리 함수 입니다. 

async에서는 await으로 처리를 해줍니다. await를 사용하려면 async 함수를 사용해야합니다.

 

먼저 데이터베이스 pool을 getconnection해줍니다.

쿼리를 명시해줍니다

email을 selectEmailParams 로 재정의해줍니다. 재정의 하는 이유는 이메일이 만약에 num으로 넘어왔다면 string 형식으로 변환해주거나 이메일에서 @ 앞쪽을 사용해줘야할 때 자유롭게 변환하기 위해서 재정의를 해줍니다. 

emailRows라는 최종적인 결과값에 await connection query를 해줘서 쿼리안에 쿼리문이 들어가게 되고 ? 안에는 email 값이 들어가게 되어서 selectEmailParams로 명시가 되었고 실행시켜주고 나서 emailRows 값이 들어가게 됩니다. 

마지막으로, connection release처리를 해주고

emailRows를 리턴하게 됩니다. 


4) 다시 돌아와서 emailRows라는 결과값을 return하게 된다면 dao에서 email, nickname을 뽑아올 건데 거기서 같은 email, nickname이 존재한다면 1개의 row가 return 되게 될 것입니다. retun된 emailrows 길이가 1이 넘는다면 존재한다는 의미입니다. 

 

5) 에러가 났다면 catch 문을 통해 에러를 출력 해줍니다.

 

댓글