[ 클론코딩 ] 5주차

우영제·2021년 11월 22일
1
post-thumbnail

안녕하세요! 오늘은 velog 클론 코딩 5주차에 있었던 작업을 한 번 정리해보려고 합니다.

🎉 Done

1. 개발 서버 재구축

1-1. Oracle cloud DB 접속 문제

오라클 서버에 있는 DB에 접속할 수 없는 문제

Oracle cloud 서비스는 기본적으로 ssh key를 미리 등록해놓아야 접근이 가능합니다.

따라서 pg를 통해 코드 상에서 DB connection을 맺을 때나, pgAdmin을 통해서 접근할 때 ssh 키를 같이 넘겨줘야 할텐데요...


왜인지 모르게 이게 되질 않았습니다...


  • pg를 통한 connection 수립

어디가 관련 설정인 거죠..? ㅠ

  • pgAdmin 화면

pgAdmin에서는 SSL 관련 설정을 찾기는 했지만.. 이것도 정상 동작하지 않았습니다.

더 시도해봄직한 대안들
  1. pg에서 ssh-key를 통해 인증하는 법 추가 분석
  2. .ppk와 id_rsa.pub의 차이점 분석
  3. pgAdmin과 pg에서 필요로하는 ssh 포맷 분석

그러나 위 방법들은 Oracle Cloud 계정 설정을 변경하면서 확인하며 진행해야하는 것들이라...


현재 제 계정이 아니라서 여러 가지 작업들을 원활하게 할 수가 없었기 때문에..

일단은 다른 방법으로 개발을 진행하기로 결정했습니다.


  • P.S. 현재는 제 Oracle Cloud 계정도 승인이 돼서 구축만 다시 한다면 테스트해볼 수 있게 됐습니다!

1-2. 이에 대한 대안

localhost를 외부에 공개하는 방안

이 방법은 니꼴라스 아저씨 영상을 보다가 발견한 방법인데요!


localhost를 외부로 공개하는 법!

바로 제 PC에 서버를 구축하고 이를 외부에서 접속할 수 있게 공개하는 방법입니다!

두 가지 방법을 함께 소개합니다.

1-2-1. ngrok

첫 번째는 ngrok 입니다!

장점

  • 빠르다
  • debug 용이
  • 맥에서 별도의 설정 없이 잘 동작

단점

  • domain 변경 불가
  • npm 패키지에 포함 불가
  • connection 수 1분에 40개로 제한

아무래도 오픈소스가 아니라 상업적으로 판매하는 제품이다 보니

무료 버전에 대한 한계가 명확합니다!

하지만 localtunnel 보다 훨씬 접속 속도가 빠르고, 디버깅도 용이합니다.

  • 서버 상태를 보여주는 터미널

1-2-2. localtunnel

두 번째는 localtunnel 입니다.

장점

  • subdomain 변경 가능 (url 지정 가능 ex. {roo}.loca.lt )
  • npm package로 간편하게 사용 가능
  • connection 제한 없음

단점

  • 느림 (생각보다 많이)
  • 맥에서 잘 동작하지 않음 (추가적인 설정이 필요한 거 같음, windows에서는 정상 동작)

1-3. localhost 외부 공개 순서

  1. ngrok 다운로드
  2. 압축 해제
    $ unzip ~.zip
  3. 계정 연결
    $ ./ngrok authtoken [token]
  4. server 실행
    $ npm run serve
  5. ngrok으로 실행된 서버 외부로 공개
    $ ./ngrok http [서버가 실행된 포트 번호]
  6. 생성된 url로 접속

2. Posting 관련 데이터 DB에 추가

2-1. 참고 코드

  • velog-backend/src/database/model/Post.js

    PostModel은 사용하지 않는 것으로 보임


sequelize 패키지를 사용해서 db와 ORM을 하고 있습니다!


그럼 잠깐 ORM 개념에 대해 소개하고 넘어가겠습니다.

  • ORM (Object Relaction Mapping)

    객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 행위


2-2. Sequelize란?

  • velog 프로젝트에서 사용하는 ORM 툴
  • 서버 코드 분석 시 위 개념이 있어야 이해하기 편할듯

2-3. pgAdmin을 통한 테이블 추가

  • BLOG_USERS : 사용자 정보를 저장하는 테이블
  • BLOG_POSTS : 포스팅 정보를 저장하는 테이블

3. 포스팅 관련 API 개발 (GET)

3-1. 모든 포스팅을 가져오는 API

[ URL ] / posts

DB에 존재하는 모든 포스팅을 가져옵니다. (날짜 순 정렬 필요)

  • 쿼리
    SELECT * FROM public."BLOG_POSTS"

3-2. 특정 사용자가 작성한 포스팅을 가져오는 API

[ URL ] / @ [ userName ]

특정 사용자가 작성한 포스팅을 모두 가져옵니다.

  • 쿼리
SELECT * FROM public."BLOG_POSTS"
    JOIN public."BLOG_USERS" 
    ON public."BLOG_USERS".user_id = public."BLOG_POSTS".fk_user_id
    WHERE velog_name='${userName}'
  • 쿼리 동작

  • 두 개의 table 조인 후 userName과 일치하는 정보 모두 리턴

📝 To-Do

1. API 요청 사항 수집

2. Post viewer 일부 구현

3. Editor 설계

profile
Front-end Developer

0개의 댓글