211110 TIL

CoderS·2021년 11월 10일
0

TIL DAY 97

오늘 배운 일

✔️ Node.js 백엔드 개발

  • 모델과 테이블 연동하기

    출처 : 코드잇

    위에 사진은, 현재 COWORK Database에는 Members라는 테이블이 존재한다. 그리고 members 테이블에는 총 10명의 직원 정보, 즉 10개의 row가 있다

    models 디렉토리에 있는 member.js 파일...

    위에 코드를 해석해보면, 하나의 함수가 웹으로 공개되어있고 함수안에는 member라는 클래스가 들어있다.

    member 클래스는 sequelize 패키지에 있는 모델이라는 클래스를 상속받고 있다.

    즉, 그 말은 member 클래스는 == model로 동일해진다.
    데이터베이스에 있는 하나의 테이블에 대응되는 존재가된다.

    그리고 Member 테이블 클래스에 init이라는 메소드를 호출한다.
    이 부분이 모델과 테이블을 연동하는 코드!

    init 메소드에는 2개의 객체가 아규먼트로 들어가있다.

    첫 번째, 객체에는

    members 테이블에 각 column에 대응되는 각 프로퍼티의 이름과 데이터 타입들이 보인다.

    두 번째, 객체에는

    첫 번째 아규먼트로 sequelize 프로퍼티가 존재한다.
    이 객체는 나중에 이 전체에 함수로 전달되는 파라미터 sequelize 객체를 의미한다.

    이번에는 모델에 id 프로퍼티를 작성해본다.

    migrations 디렉토리에 있는 파일에 있는 id 프로퍼티를 복사해서 붙여넣기 하면된다. 그리고, type 값을 위에 있는 두 번째 파라미터로 구성되어있는 DataTypes로 바꾸면된다.

    다음으로, models 디렉토리에 있는 index.js 파일로 가서 모든 코드들을 삭제한다. 그리고 새로운 코드를 작성할 것 이다.

    이 sequelize 클래스에 데이터베이스에 관한 설정 값을 넣고, sequelize 객체를 생성하면된다.

    config.json에서 데이터베이스에 접속에 관한 설정 정보를 넣어줬다.
    해당 정보를 불러온 것 이다.

    그리고 그 중에, development 객체에 접속 정보를 가져왔다.

    sequelize 클래스로 sequelize 객체 하나를 생성해야한다.

    위에 있는 코드처럼, 정해진 형식대로 각 설정 정보를 넣어주기만 하면, 우리가 사용할 수 있는 sequelize 객체를 성생된다.

    이번에는, member.js에 있는 함수를 불러오겠다.

    index.js

    member.js에 있는 함수에 방금 만든 sequelize 객체와 sequelize 클래스에 데이터 타입 객체를 넣어주고 실행해보겠다.

    index.js 파일에 맨 밑에 추가 수정해준다.

    Member 모델은 이 sequelize 객체를 사용해서 초기화를 하고, 이를 통해서 데이터베이스에 존재하는 members 테이블을 인식할 수 있다.

    코드를 실행시키면,

    • Member 모델은 members 테이블과 연동되고
    • 그리고 나면, 이 Member 모델을 통해서 원하는 작업을 할 수 있다.

    app.js 파일에서 이 Member 모델을 사용할 수 있도록해보겠다.

    웹으로 공개하기 위해서, db라는 객체를 만들고 그 안에 Member 모델을 넣어서 공개한다. 이렇게 하는 이유는, 새로운 테이블이 생긴다면, 또 새로운 모델이 필요할 수 있다.

    index.js에

    그리고 app.js에

    model 디렉토리에 있던 index.js 파일에서 db 객체를 가져왔고
    db 객체에서 Member 모델을 꺼내왔다.

  • 직원 정보 조회하기

    처음에는 전체 직원의 정보를 조회하는 코드부터 수정일 시작하겠다.

    Model에서 findAll 메소드를 사용하면 된다.
    findAll은 members 테이블에 있는 모든 row를 조회해서 가져오는 기능이 있다.

    터미널에...

    실행시키고

    text.http로 가서...

    GET request를 실행시킨다..

    그러면 터미널에 새로운 정보들이 나오는데...

Member.findAll() 코드는 sequelize의 의해서 결국 이 SQL문으로 변환되어서 DBMS에 전송된다.

지금처럼 SQL문으로 자동 변환되는 실행되는 것이 ORM 기술의 핵심이다.

다시 app.js로 돌아가서, 전체 직원 정보를 다 가져올 때까지 기다리기 위해서 앞에다가....

await을 붙여준다.
await은 async가 붙은 함수에만 사용이 가능하다!

라우터 핸들러 앞에다가 async를 붙여준다.

다시 서버를 실행시키고...

test.http에서 GET request를 보내면...

결과값 :

전체 직원 정보가 배열에 담겨져온다.

이번에는 특정 팀에 소속한 직원만 조회해본다.

findAll 메소드를 사용했는데, 대신 이번에는 특정한 조건을 걸었다.

where라는 프로퍼티에 특정 column에 이름과 특정 값을 적어주면, 특정 column에 특정 값을 가진 row만 조회가 가능하다.

engineering인 직원들만 조회해보겠다.

결과값 :

결과적으로 :

  • 오늘은 꽤나 방대한 정보를 공부하다보니 너무나도 머리가 아프다.
  • 모델을 가진 대부분의 메소드들은 promise 객체를 리턴하는 비동기 실행 함수여서 await을 붙여야한다는 점이 신기하다.
profile
하루를 의미있게 살자!

0개의 댓글