[node.js] TypeORM CRUD 예시를 통해 이해하기

서론

이전 시간에는 Express 개발 환경에서 TypeORM을 구성하는 방법을 알아보았다.
이번 글에서는 스키마에 생성되어 있는 테이블에 데이터를 삽입, 삭제, 수정, 조회 하는 방법을 예시를 통해서 알아보고자 한다.

TypeORM 개발 환경을 세팅하지 않은 분들은 여기를 참조하면 좋을 것 같다.

먼저 이전 포스팅 글에서 구현했던 index.ts 파일의 코드를 다음과 같이 수정했다.

app.listen() 함수 수정하기

app.listen(3000, () => {
    console.log('Starting Server with 3000 port');

    createConnection().then(async connection => {
        console.log("디비 연결 성공");
    
    }).catch(error => console.log(error));

});

기존에는 디비 연결과 동시에 User테이블에 데이터를 추가하는 로직을 구현했었다.
그러나 이번 글에서는 CRUD를 모두 요청 함수별로 나누었기 때문에 디비 연결 성공 시 추가하는 데이터 로직을 삭제했고 데이터베이스 연결이 성공적으로 이루어졌는지에 대한 메시지만 띄우는 것으로 수정했다.

조회(Read) 함수 정의하기

기존의 app.get('...') 부분의 함수는 이미 User테이블의 전체 데이터를 조회하는 코드이므로 수정하지 않고 넘어간다. 코드는 다음과 같다.

app.get('/', async (req: Request, res: Response, next: NextFunction) => {
    const users = await User.find();
    res.send(users);
});

추가(Insert) 함수 정의하기

app.post('/', async (req: Request, res: Response, next: NextFunction) => {
   const user = new User();

   const {
        firstName,
        lastName,
        age
   } = req.body;
   
   user.firstName = firstName;
   user.lastName = lastName;
   user.age = age;

   await user.save().then((user) => {
       res.status(201).send(user);
   })
   .catch((err) => {
        res.status(400).send(err);
   });
});

req.body로 3개의 변수를 받아서 해당 값을 저장한 것이다. 결과를 살펴보기 위해 포스트맨으로 POST 요청을 보내봤다. 위 사진과 같이 localhost:3000 주소로 POST 요청을 보내면 201 응답 결과와 어떤 데이터가 저장되었는지를 결과로 받을 수 있다. 실제로 데이터베이스에서 살펴봐도 적절하게 데이터가 들어간 것을 확인할 수 있다.

갱신(Update) 함수 정의하기

app.patch('/', async (req: Request, res: Response, next: NextFunction) => {
    await User.update({
        id: 1, // 첫번째 {} 에는 조건이 온다.
    }, {
        age: 30, // 두번째 {} 에는 변경할 컬럼과 값을 정의한다.
    }).then((result) => {
        res.status(200).send(result);
    }).catch((err) => {
        res.status(400).send(err);
    });
});

데이터를 갱신할 때에는 baseEntity에서 제공하는 update()메서드를 이용한다.
인자의 첫번째에는 어떤 데이터를 변경할지에 대한 조건이 들어오고, 두번째 인자에는 변경할 컬럼명과 변경할 값을 정의한다. 결과는 다음과 같다. 그리고 데이터베이스를 통해서 살펴보면 id=1을 가지고 있는 인스턴스의 age 값이 30으로 바뀐 것을 확인할 수 있다.

삭제(Delete) 함수 정의하기

app.delete('/', async (req: Request, res: Response, next: NextFunction) => {
    await User.delete({firstName: 'minsu'}) // 조건을 주지 않으면 모든 데이터가 삭제된다.
    .then((result) => {
        res.status(204).send(result);
    })
    .catch((err) => {
        res.send(err);
    })
});

데이터를 삭제할 때는 delete() 메소드를 이용한다. 또한 데이터를 삭제할 때 조건을 주지 않으면 모든 데이터가 삭제될 수 있으므로 위와 같이 조건을 주어 필터링된 데이터만을 삭제해야 한다. 포스트맨을 통해 살펴본 결과는 다음과 같다. 그리고 데이터베이스를 통해서 살펴보면 조회를 했을 때 빈 테이블이 나타나는 것을 확인할 수 있다.

좋은 웹페이지 즐겨찾기