백엔드감자's Today I Learned : 잡생각 줄이기.

BE_{Potato.}·2023년 2월 6일
0
post-thumbnail

< restAPI >

  • 응답을 받을 서버가 24시간 켜져있어야 포스트맨에서 요청을 던져도 응답을 받을 수 있다. => listen은 접속을 기다린다는 뜻.
  • 접속을 기다리는 프로그램을 '서버 프로그램'이라고 한다. 근데 이건 포트번호와 연결이 되어야 한다. 한 컴퓨터에서 동일한 포트로 실행될 수 없다. => 포트로 구분을 해야함. 포트번호의 범위는 0~65535. 백엔드 API가 있는 서버 프로그램이라 백엔드서버 프로그램이라고도 부름.
  • MySQL은 기본포트 번호가 3306.(데이터베이스는 24시간 백엔드의 접속을 기다린다.)(Express는 3000번.4000번.8080번 등 회사마다 다르다.)
  • (중요)하나의 컴퓨터에서 포트번호 중복되면 안된다.
  • 현대의 웹서비스 트랜드는 3대의 컴퓨터를 최소한 가지고 있어야 한다.(F,B,DB)

  • F,B,DB 등 서버가 꺼지는 등...해서 서비스가 안되면 서비스 장애라고 한다.서버가 터졌다.
  • 백엔드 서버컴퓨터,프론트엔드 서버컴퓨터, DB 서버컴퓨터 등으로 부르는데 앞뒤 다 자르고 서버컴퓨터라고 하면 백엔드 서버컴퓨터를 말하는 것이다. 서버 개발자도 백엔드서버 개발자를 말하는 거임.
  • 'app.use(express.json())'을 써주어야 express에서도 JSON형태 데이터 받아올 수 있음(원래는 지원 안됨)
  • Express의 형식 안에 함수 인자로 req를 넣는데 req의 body 부분에 웹페이지에서 입력한 정보들이 들어온다.그래서 원하는 정보들을 req.body.~~로 받아온 뒤 변수에 할당해서 쓰는 방식을 쓴다.
  • API-Docs를 꼼꼼히 잘 만들어야 한다. restAPI는 swagger 잘만들자.
    API를 만약 수정했다면 Docs도 같이 수정해줘야 한다!!!!(중요)
  • 설정을 config라고 한다. 설정 관련된 파일을 config파일에 몰아넣으면 깔끔함.

프론트엔드에서 백엔드로 API 요청할 때 필요한 것이 Axios=> 프론트엔트 컴퓨터에 Axios 깔려있어야함.
axios. 하면 백엔드로 요청이 감. 백엔드 서버는 켜져 있어야 함.

  • 'yarn install'하면 package.json에 있는 목록 다 설치됨.

< CORS: cross origin resource sharing >
브라우저가 기본적으로는 aaa.com의 데이터 접근을 차단한다. 그러나 백엔드에서 aaa.com의 접속을 허용하는 CORS를 보내면 브라우저에서 이를 인식하고 허용한다.(포스트맨과 모바일에서는 잘되는데 브라우저는 브라우저가 막고 있어서 안 된다.)

  • cors import하고 app.use(cors())해주면 된다.
    *백엔드 restAPI 함수의 res.send()의 괄호 안 문구는 프론트엔드가 화면에 보여지는 말로 사용할 수 있다.
    package.json 파일에서 scripts의 내가 설정한 문구로 굳이 전체문장을 다 안 써도 실행할 수 있게 할 수 있다.

< GraphQL >
그래프큐엘에서 API를 resolver라고 부른다.
그래프큐엘은 return 타입이 좀 더 엄격하다.

  • 그래프큐엘에서 주석은 #이다.

그래프큐엘에서는 함수 인자로 저렇게 4개가 들어오는데 프론트에서 요청할 때 들어오는 내용들은args로 들어오기 때문에 args(argument)를 주로 쓴다.
(context는 req,res정보를 받을 수 있다.info는 API에 대한 정보들.)
그래프큐엘은 들어오는 정보에 대한 타입설정과 return되는 데이터의 타입설정이 좀 더 까다롭다. 들어오는 데이터를 명시하고 타입을 설정해주는 모습이다.
4번 째 줄에서 인자의 요소를 하나로 묶고 위에 그 객체의 타입들을 지정해주는 모습. 근데 input이라는 이름으로 붙여줘야한다(중요)! 프론트엔드와 상호작용하는 부분이라 input이라 작성하는 것이 에러가 안 난다.
아래 10번째 줄에 있는 것은 type인데 이것은 보내주는 것이라 상관없다.
=> 백엔드가 보내주는 것은 type, 프론트엔드에서 받아오는 타입은 input.(굉장히 중요하다!)

  • playground에서 받아오는 값이 string이면 뒤에 안 써줘도 되고 객체형식일 때 {} 써주고 원하는 것들 적어준다.
  • API가 실행되고 결과는 터미널 콘솔에 찍힌다.
  • restAPI에서 GraphQL API로 바뀔 때 타입설정을 잘 신경 써줘야 하고, swagger로 Docs를 따로 안 만들어줘도 된다는 장점이 있다.

< 동기와 비동기 방식 >
동기 방식은 a,b가 공유자원을 사용하기 원할 때 먼저 온 a가 작업을 마친 후에 b가 공유자원을 사용하는 방식.공유자원이 없을 때에는 비동기 방식.

자바스크립트는 동기방식으로 작동하는데 자바스크립트 코드 안의 라이브러리는 공유자원이 없기 때문에 비동기 방식으로 작동한다. 그래서 async/await 문구를 써서 동기화방식으로 만들어준다.=> 한줄 완료되면 다음 줄 갈수 있게 만들어준다.

  • 데이터를 외부에서 불러오는 것을 Fetch라고 함. 웹 서비스는 데이터를 Fetching해서 보여주는 작업들.
  • SDK는 개발을 도와주는 도구.
  • Github에 올라가서는 안 될 key 들은 .env파일로 업로드 안되게 관리하기(환경변수 분리)

restful하게 endpoint를 작성하는 방법. /뒷부분을 일치시키고 매소드에만 변화를 준다.

  • .env를 사용하려면 라이브러리 'dotenv'를 설치해야한다.
  • 구글 메일에서는 html의 새로운 css문법이 적용이 안된다. 그래서 이메일로 보내는 소스코드는(특히 css는) 옛날 문법으로 보내는 것이 좋다.
  • 강의에서 백엔드는 자바스크립트,네트워크,데이터베이스가 중요하다고 강조했다.

데이터베이스는 크게 SQL과 NoSQL이 있다. SQL은 표처럼 생긴 형태이고 table이라고 부른다. NoSQL은 A4용지 여러장이 모인 것처럼 생겼는데 이 모여있는 전체를 collection이라 부른다. A4용지 한장에는 객체형식으로 데이터가 담겨있다.
SQL의 데이터 한줄을 row, NoSQL의 A4용지 한장은 Document. SQL은 관계형 데이터베이스를 만들 수 있다.
백엔드컴퓨터에서 DB컴퓨터로 연결할 때 설치해야 하는 도구가 있다.
=>데이터베이스가 SQL이면 ORM(객체와 관계형 데이터베이스를 맵핑해준다.), NoSQL이라면 ODM(객체와 문서형 데이터베이스를 맵핑해준다.)

< Docker >
쉽게 말하면 가상컴퓨터. 내 컴퓨터 안에 컴퓨터를 여러 대 만드는 것.
사용하는 이유는 백엔드컴퓨터,DB컴퓨터 따로 있으면 효율적이라 Node.js용 하나, MySQL 하나 등으로 해놓으면 효율적이다.
도커를 쓰는 이유 중 하나는 '운영체제마다 달라지는 환경'을 통일시켜준다. 근데 운영체제의 핵심기능(커널)은 공유를 히는 가상머신이라 속도가 빠르다. => 운영체제를 새로 설치 안 해도 됨.

  • 도커 가상머신을 'Container'라고도 부름.
  • Dockerfile로 내가 원하는 환경으로 컴퓨터를 만들 수 있다.(원하는 프로그램 설치하는 등의 기록을 적어놓으면 그대로 한줄한줄 실행되면서 설치되고 한다.)

도커의 장점들. 그리고 가볍다는 장점도 있다.(운영체제를 새로 깔지 않아도 됨.)

도커(Docker)

도커 가상컴퓨터를 만들기 위해서는
우선, Dockerfile을 만들어야 한다. 그리고 제일 먼저 리눅스 깔아야함.

도커도 깃허브나 Npmjs.com처럼 도커허브에서 다른 사람들이 올린 컨테이너를 다운받을 수 있다.(우분투 깔린 컴퓨터, 노드제이에스 깔린 컴퓨터...)
docker build를 하면 Dockerfile의 명령어가 실행되면서 깔리는데 그 최종 결과물을 '이미지'라고 부른다.
FROM은 도커허브에서 이미지 다운받는 것 :숫자는 버전을 의미.
COPY는 내 컴퓨터에서 도커의 컴퓨터로 파일 복사하는 것.
WORKDIR는 working directory의 약자로 어디 위치에서 처음에 실행할지 설정해주는 것이고 CMD(=RUN)는 명령어에 붙여주는 것이다.
(RUN은 여러번 쓸 수 있고, CMD는 한번만 가능-> 마지막에 최종명령어로 CMD 쓰기).

profile
항상 '기본'을 중요시하는 예비 백엔드개발자입니다!

0개의 댓글