MongoDB 연결하기

hodu·2023년 2월 28일
0

반복적인 학습으로 node.js express로 어떻게 돌아가는 공부중이다.
처음에는 설치해서 받아보는 입장이었다면,
지금은 설치부터 받아보는 입장이어서 한줄 한줄 의미가 새롭다.


next.js에 있는 API 라우트를 이용하여 간단하게 서버를 구축해보았다.

협업했을 때 fetch로 데이터를 받아오기만 해보았는데, 그에 따른 경고문들을 만들어보고
의도들을 생각해서 작성해보았다.
그 전에는 이론으로만 알았던 내용들이 다시 상기되어 돌아왔다.

백엔드와 의사소통할 때 단지 이 번호가 뭔지 경고문이 어떤건지 검색하기 급급했는데,
그런 것보다 이사람의 의도가 무엇인지 왜 이번호를 보냈는지에 대해 고려해보면
의사소통이 수월해질 것 같다.

서버에서 콘솔로그를 찍으면 터미널에 찍히는데, 클라이언트와 서버의 장소가 어디인지 더 명확해졌다.


MongoDB

백엔드에서 데이터베이스를 관리하다보면 용량이 커지다보니 파일로 관리하기 힘들다
그래서 데이터베이스를 하나 연결해보려고한다.

node.js와 호환이 잘되고 NOSQL인 mongoDB를 사용해보겠다.
구글로 빠르게 회원가입을 하고, Atlas 무료 DB를 이용해보겠다.


설치하고
(https://www.npmjs.com/package/mongodb)

몽고 DB 세팅후

연결하기를 통해 들어가서

애플리케이션 연결을 누르면

연결창이 뜬다,

URL을 복사하면 ID와 PASSWORD 입력칸이 있다.


왼쪽 하단에 데이터베이스 엑세스를 들어가 아이디와 비밀번호를 세팅하고 입력하면 된다.


그다음에는 로컬에서 사용할 수 있게 해당 ip를 네트워크 엑세스에서 등록해주면 된다.

마지막으로 로직을 작성해주면 되는데

async function handler(req, res) {
const client = await MongoClient.connect(
      "아이디와 비밀번호 url 들어감"
    );
    const db = client.db();
    await db.collection("emails").insertOne({ email: userEmail });

    client.close(); //작업을 끊어줌
    }

위 로직을 감싸고 있는 함수를 async 상태로 만들어주고 진행하였다.
then으로 진행하는것보다 서버에서는 async로 로직을 짜는게 좀 더 편하기 때문이다.

몽고 클라이언트 커넥트에 올바르게 url을 넣어주고 db를 부른다. db.collection은 db에 들어갈 메뉴 이름이라고 생각하면 편하다.

이런 식으로 들어간다. 그 이후에 insertOne을 작성하고 객체를 넣어주는데,
insertOne은 컬렉션에 새로운 한 항목을 넣어준다는 뜻이다.
키값은 필드가 되어서 들어갈 것이다.
client.close()는 연결을 끊어준다.
(MongoDB를 자주 쓰는 경우에는 연결풀링으로 이어준 상태를 유지하자)


버튼을 눌러서 요청을 보내면

이메일 주소가 올바르게 들어간 것을 확인할 수 있다.

이를 통해 MongoDB에 데이터를 넣어보았다.

가져오기

    const documents = await db
      .collection("emails")
      .find()
      .sort({ _id: -1 }) // 가져오는 id 순서를 최신화해줌
      .toArray();
    client.close(); //작업을 끊어줌

collection까지는 똑같다.
find가 바로 가져온다는 메소드이다. sort는 최신의 것을 앞에 쓰기 위해서 넣었으며,
toArray는 자바 기술인데 Arraylist를 우리가 아는 배열로 바꿔준다고 한다.

이렇게 검색창에 최근 입력한 값을 보면 배열 0번째에 있는 것을 볼 수 있다.
(sort{_id:-1}))

toArray(java 설명)

https://jerry92k.tistory.com/4
가져오기


현재 로직이 지저분해서


기존의 함수를 컴포넌트화하여서 심플하게 만들었다.

DB도 전체적인 오류 캐치가 필요하다.
일시적으로 DB서버가 멈추기만해도 오류가 생긴다.


try와 catch를 이용하여 언제든지 오류가 나타날 수있다.
그때마다 catch나 오류처리를 해주는 것은 번거로우니 한번에 try 로 묶어주고 catch로 받았다.

기존의 작성하지않았던 오류 처리 문장을 작성하였는다. 확실히 프론트 입장에서 어떤 오류를 내뱉는지 구체적으로 설명해주면 더 좋을거 같았다.

profile
잘부탁드립니다.

0개의 댓글