Backend(18)
-
검색 프로세스 : Inverted Index, Elastic Search, Redis
백엔드에서 검색 API를 구현하는 방법 1. 테이블 풀스캔 = 풀 테이블 스캔 Board.find({title: '%점심%'}) 등의 방법을 통해서 DB를 위에서부터 하나 하나 전체를 스캔해서 해당하는 값을 찾는다. 시간이 오래 걸린다. 2. 역색인 = 역인덱스 = invertedIndex 검색용 테이블을 하나 더 만들어서, 원래 들어있던 문장을 단어로 쪼개서 각 단어(token)에 해당하는 번호를 함께 저장해놓고, 검색할 경우 이 테이블에서 조회한다. 더 빠르게 조회할 수 있다. 토크나이징: 문장을 토큰으로 쪼개는 과정 Elastic Search 검색용 테이블을 직접 만들어도 되지만, 이런 기능을 목적으로 만든 DB인 Elastic Search를 이용하면 더 편리하게 이용할 수 있다. ES는 디스크 기..
2023.02.09 -
[Apollo Server] GraphQL API 만들기, 서버 연결하기
GraphQL API를 만들어보자!!!! [Apollo-server] 0. TypeORM 설치 및 DB 연동 1. ApolloServer & graphQL 설치 yarn add apollo-server graphql 2. [Docs]에서 내용 가져오기 Database를 연결한 index.ts 파일에 아래의 코드를 추가한다. 🚨 database를 연결하는 코드를 지우지 말고, import문 아래 나머지 코드 위에 추가한다. index.ts ~~~ 데이터베이스 연결하는 코드 ~~~ import { ApolloServer } from '@apollo/server'; import { startStandaloneServer } from '@apollo/server/standalone'; // API Docs 만들..
2023.02.03 -
Database의 종류 / ORM, ODM
Database Database의 종류 DB에 데이터를 담아두는 방식은 SQL 방식과 NoSQL 방식이 있다. SQL NoSQL 형태 테이블 형태 객체 형태 구성 테이블 안에 row들이 저장된 형태 Collection(서류봉투) 안에 Document(문서)들이 저장된 형태 특징 RDB(Relational DB): 관계형 데이터베이스(테이블 간의 관계성을 부여할 수 있다.) Document DB, 데이터 하나하나 마다 같은 필드 값들을 가질 필요가 없어 자유로운 형태의 데이터 적재에 유리한 대신, 일관성이 부족할 수 있다. 종류 Oracle, MySQL, PostgresQL MongoDB, Firebase, Redis SQL-Query(명령어) select * from Board db.board.find(..
2023.02.02 -
[AWS] EC2에 flask 서버 배포하기 : FileZilla, mongoDB, Port Forwarding, nohub, Gabia Domain
0. 배포를 위한 기초 지식 1) 클라우드 서비스 웹 서비스를 런칭하기 위해서는 클라이언트의 요청에 항상 응답해줄 수 있는 서버에 프로젝트를 실행시켜야 한다. AWS 클라우드 서비스에서 항상 켜놓을 수 있는 컴퓨터인 EC2 사용권을 구입해 서버로 사용할 수 있다. 클라우드 환경을 사용하는 이유 컴퓨터가 항상 켜져있고 프로그램이 실행되어 있어야 한다. 모두가 접근할 수 있는 공개 주소인 공개 IP 주소 (Public IP Adress)로 내 프로젝트에 접근할 수 있어야 한다. 2) IP 주소와 포트 IP 주소 접속하는 컴퓨터는 숫자로 되어있는 IP 주소가 붙어있다. 인터넷 위에서 컴퓨터가 통신할 수 있도록 컴퓨터마다 가지는 고유한 주소로, 각 서버는 하나의 주소를 가지고 있다. 접속을 용이하게 하기 위해 ..
2023.01.23 -
[python] Flask로 서버 실행하기
Flask 파이썬으로 쓰인 웹 프레임워크로, 서버를 구동하는 데 필요한 기능을 제공한다. 서버 실행하기 1. 가상환경에서 flask 패키지를 설치한다. pip install flask 2. Flask 서버의 기본 폴더구조를 만든다. Flask 서버를 만들 때는 항상 static 폴더, templates 폴더, app.py 파일을 만들고 시작한다. 3. app.py 파일의 내용을 작성한다. flask 서버를 돌리는 파일의 이름은 통상적으로 app.py로 짓는다. from flask import Flask app = Flask(__name__) @app.route('/') def home(): return 'This is Home!' if __name__ == '__main__': app.run('0.0.0..
2023.01.22 -
[python] python으로 MongoDB 연결하기 : MongoDB, pymongo, Studio 3T
MongoDB 다양한 플랫폼에서 사용할 수 있는 NoSQL 타입의 데이터베이스 프로그램으로, JSON과 비슷한 형태로 자료를 정리한다. 각각의 딕셔너리인 도큐먼트가 모여 컬렉션, 컬렉션이 모여 DB가 되는 형태이다. NoSQL 딕셔너리 형태로 데이터를 저장하는 DB이다. 데이터 하나하나 마다 같은 필드 값들을 가질 필요가 없어 자유로운 형태의 데이터 적재에 유리한 대신, 일관성이 부족할 수 있다. MongoDB 설치하기 1. terminal에서 HomeBrew를 설치한다. /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"명령어 입력 후 패스워드 입력란이 나오면 맥북 패스워드를 입력..
2023.01.22 -
[python] beautifulsoup4 Web Scraping, 웹 스크래핑
beautifulsoup4 HTML 구조를 파악하는 데 도움을 주는 패키지이다. beautifulsoup 메서드 1) select() 조건을 만족하는 모든 요소를 리스트에 담아 반환한다. 2) select_one() 조건에 만족하는 요소 중 가장 먼저 나오는 요소를 반환한다. # 선택자를 사용하는 방법 (copy selector) soup.select('태그명') soup.select('.클래스명') soup.select('#아이디명') soup.select('상위태그명 > 하위태그명 > 하위태그명') soup.select('상위태그명.클래스명 > 하위태그명.클래스명') # 태그와 속성값으로 찾는 방법 soup.select('태그명[속성="값"]') # 한 개만 가져오고 싶은 경우 soup.select_..
2023.01.22 -
[python] 파이썬 패키지 설치하기, requests 패키지 사용하기
package 패키지는 모듈(일종의 기능들 묶음)을 모아 놓은 단위이고, 이런 패키지의 묶음을 라이브러리라고 한다. (패키지와 라이브러리 용어를 혼용해서 많이 쓴다.) 가상환경 설치하기 가상환경 virtual environment 가상환경은 파이썬 사용자와 응용 프로그램이 같은 시스템에서 실행되는 다른 파이썬 응용 프로그램들의 동작에 영향을 주지 않기 위해, 파이썬 배포 패키지들을 설치하거나 업그레이드하는 것을 가능하게 하는 격리된 실행 환경이다. 한 프로젝트에서 사용하는 패키지의 수는 다양하고, 서로 다른 프로젝트에서 요구하는 패키지의 목록/버전이 다를 수 있어 가상환경을 사용한다. 요구사항이 다른 프로젝트를 한 컴퓨터에서 진행할 때, 각 프로젝트마다 가상환경을 만들어 충돌을 방지한다. 가상환경 설치 ..
2023.01.20 -
[python] JavaScript와 다른 python 문법
python 문법 중에서 JavaScript와 다른 부분만 정리한 내용! 1. 변수 선언 키워드 없이 선언한다. a = 3 b = a 콘솔 출력 print(a, b) 2. 자료형 1) 숫자형 증감 연산자 python에는 증감 연산자(i++, i--)가 없다. 2) 문자열 upper 대문자로 변환한다. name = 'juhee' name.upper() print(name) # juhee print(name.upper()) # JUHEE 3) 불 자료형 첫 글자를 대문자로 작성한다. 👉🏻 True, False 논리 연산자 a = True b = False print(not a) # False print(a and b) # False print(a or b) # True 4) list 선언 a_list = [..
2023.01.20 -
[python] python 설치하기, VSC에서 실행하기
python 네덜란드의 프로그래머 Guido van Rossum이 읽기 쉬운 코드에 중점을 두어 개발한 언어이다. 무료/오픈 소스로 운영되고 커뮤니티가 커서 라이브러리 이용이 용이하다. python 설치하기 [python Docs] 🤔 언어를 설치해..? 파이썬 문법으로 작성한 코드를 컴퓨터가 읽을 수 있는 언어로 번역해주는 패키지를 설치하는 개념이다. Mac에는 기본적으로 파이썬 2.x 버전이 설치되어 있다. 버전 3으로 업데이트되면서 문법, 라이브러리 등에 많은 차이가 있어 3.x 버전으로 새로 설치한다. 설치 명령어 아래의 brew 명령어로 설치할 수 있다. brew install python@3.9 VSC에서 python 사용하기 1. 파일 생성 파일명.py 파일을 생성한다. 2. 확장 프로그램 ..
2023.01.19 -
[Docker] 효율적인 Dockerfile 작성하기, 작성 시 주의사항
Good 👍 하나의 명령어를 \로 나눠서 가독성을 높인다. .dockerignore 파일을 작성해 불필요한 파일을 빌드 컨텍스트에 포함하지 않는다. 빌드 캐시를 이용해 기존에 사용했던 이미지 레이어를 재사용한다. &&로 각 RUN 명령을 하나로 묶어 하나의 RUN으로 여러 개의 명령어를 실행하도록 작성한다. 여러 개의 RUN 명령어가 하나로 묶이면 이미지 레이어의 개수 또한 하나로 줄어든다. 다른 사람이 빌드한 이미지에 불필요한 이미지 레이어가 들어있다면 해당 이미지로 컨테이너를 생성하고 docker export, import 명령어를 사용해 컨테이너를 이미지로 만듦으로써 이미지의 크기를 줄인다. Bad ❌ Dockerfile을 아무렇게나 작성하면 저장 공간을 불필요하게 차지하는 이미지나 레이어가 너무 ..
2022.11.18 -
[Docker] Dockerfile 명령어 & build 옵션
ENV Dockerfile에서 사용될 환경변수를 지정한다. 설정한 환경변수는 ${ENV_NAME} 또는 $ENV_NAME의 형태로 사용할 수 있다. 환경변수는 Dockerfile뿐 아니라 이미지에도 저장되므로 빌드된 이미지로 컨테이너를 생성하면 이 환경변수를 사용할 수 있다. VOLUME 빌드된 이미지로 컨테이너를 생성했을 때 호스트와 공유할 컨테이너 내부의 디렉터리를 설정한다. ARG build 명령어를 실행할 때 추가로 입력받아 Dockerfile 내에서 사용될 변수의 값을 설정한다. build 명령어를 실행할 때 --build-arg 옵션을 사용해 값을 입력한다. Dockerfile에서 ARG로 설정한 변수를 ENV에서 같은 이름으로 다시 정의하면 --build-arg 옵션으로 설정한 값은 ENV로..
2022.11.18 -
[Docker] 멀티 스테이지 빌드로 이미지 크기 줄이기
🧐 Multi-stage build가 필요한 이유 일반적으로 애플리케이션을 빌드할 때는 많은 의존성 패키지와 라이브러리를 필요로 한다. 특정 언어로 작성된 소스코드를 빌드하기 위해서는 관련 빌드 툴과 라이브러리가 필요할 수 있다. Dockerfile로 이러한 코드를 빌드하기 위해서는 관련 도구들이 미리 설치된 이미지를 FROM에 명시하고 RUN 명령어로 소스코드를 컴파일 하게 되는데, 실행 파일의 크기가 매우 작더라도 이에 사용된 각종 패키지 및 라이브러리로 인해 이미지의 크기가 거대해질 수 있다. 17.05 버전 이상을 사용하는 도커 엔진은 이미지의 크기를 줄이기 위해 멀티 스테이지 빌드 방법을 사용할 수 있다. Multi-stage build 하나의 Dockerfile 안에 여러 개의 FROM 이미지..
2022.11.18 -
[Docker] Dockerfile로 이미지 생성하기
도커는 개발한 애플리케이션을 컨테이너화하는 일련의 과정(컨테이너 생성, 환경 설치, 소스코드 추가, 이미지로 커밋 등)을 손쉽게 기록하고 수행할 수 있는 빌드(build) 명령어를 제공한다. 1. Dockerfile 이미지를 생성하기 위해 컨테이너에 설치해야 하는 패키지, 추가해야 하는 소스코드, 실행해야 하는 명령어와 셸 스크립트 등을 하나의 파일에 기록해 두면 도커는 이 파일을 읽어 컨테이너에서 작업을 수행한 뒤 이미지로 만들어낸다. 👉🏻 이러한 작업을 기록한 파일의 이름을 Dockerfile이라고 부른다. 빌드 명령어는 Dockerfile을 읽어 이미지를 생성한다. Dockerfile을 사용하면 직접 컨테이너를 생성하고 이미지로 커밋해야 하는 번거로움을 덜 수 있다. 생성한 이미지를 도커 허브 등을..
2022.11.15 -
[Docker] 도커 허브 저장소에 이미지 배포하기
도커 이미지를 생성하고 추출하기 도커 허브 저장소에 이미지 배포하기 [Backend/Docker] - 도커 이미지를 생성하고 추출하기 이미지 배포 save, export와 같은 방법의 단점 save나 export와 같은 방법으로 이미지를 단일 파일로 추출해서 배 e-juhee.tistory.com 이미지 배포 save, export와 같은 방법의 단점 save나 export와 같은 방법으로 이미지를 단일 파일로 추출해서 배포할 수도 있지만 이미지 파일의 크기가 너무 크거나 도커 엔진의 수가 많다면 이미지를 파일로 배포하기 어렵다. 또한, 도커의 이미지 구조인 레이어 형태를 이용하지 않으므로 매우 비효율적이다. 도커 허브 이미지 저장소 도커 허브는 도커 이미지를 저장하기 위한 클라우드 서비스이다. 만든 이..
2022.11.05 -
[Docker] 도커 이미지를 생성하고 추출하기
도커 허브 저장소에 이미지 배포하기 [Backend/Docker] - 도커 이미지를 생성하고 추출하기 이미지 배포 save, export와 같은 방법의 단점 save나 export와 같은 방법으로 이미지를 단일 파일로 추출해서 배포할 수도 있지만 이미지 파일의 크기 e-juhee.tistory.com 1. 도커 이미지 도커는 기본적으로 도커 허브라는 중앙 이미지 저장소에서 이미지를 내려받는다. 2. 도커 허브 도커 허브는 도커가 공식적으로 제공하고 있는 이미지 저장소 도커 계정을 가지고 있다면 누구든지 이미지를 올리고 내려받을 수 있기 때문에 다른 사람들에게 이미지를 쉽게 공유할 수 있다. 누구나 이미지를 올릴 수 있기 때문에 공식(Official) 라벨이 없는 이미지는 사용법을 찾을 수 없거나 제대로 ..
2022.11.04 -
프론트엔드 개발자도 Docker를 알아야 하나요?
💡 프론트엔드 개발자도 Docker를 알아야 하나요? 넹 1. 개발/배포 환경을 통일시킬 수 있다. 현업에 가면 Docker 환경에서 개발을 하게 된다. 💡 Why? 프론트를 개발하든 백을 개발하든 결국엔 세상에 공개하는 배포 과정이 이루어져야 한다. 개발이 Docker 환경에서 이루어지면 배포가 쉬워져서 Docker를 많이 활용하게 된다. 그래서 우리가 직접 Docker를 다루지 않더라도, 기본 세팅이 다 Docker로 되어있다. 2. 가벼운 용량의 가상 컴퓨터이다 운영체제에 따라서 환경이 달라진다. (ex 회사 직원들끼리 버전을 동일하게 맞췄는데 실행이 안됨) 그래서 가상머신(가상 컴퓨터)을 도입했다. 가상 머신 내 윈도우/맥 안에 컴퓨터를 하나 더 설치하는 것이다. (리눅스 안에 리눅스를 설치하는 ..
2022.11.03 -
[PostgreSQL] 데이터베이스 연동/접속하기 + 테이블 만들기
1. DB 접속하기 DBeaver: 접속을 위해 필요한 도구(GUI) 중 하나 MySQL, Postgres 같은 DB 프로그램은 UI가 없는 텍스트 형태이다. DBeaver같은 데이터베이스 관리 프로그램을 사용하면 데이터를 좀 더 편하게 조회할 수 있다. DB가 아니라 데이터베이스 관리 프로그램이다!!! (DB 관리 프로그램에는 DBeaver, MySQL, webpack이 있다.) (1) [debeaver] 접속해서 설치 후 실행한다. MacOS for M1 (2) plugin 아이콘 클릭 (3) 사용할 DB를 선택한다. postgreSQL 선택 설치하라고 뜨면 설치 ㄱㄱ (4) 포트번호와 컴퓨터 주소를 입력한다. HOST에는 백엔드의 주소를 입력한다. HOST: 34.64.124.189 , PORT: ..
2022.11.03