220118 TIL
백엔드수업
mongoDB 설치 Docker 설치
storage 클라우드 서비스
틀을 먼저 받아온 후 데이터로 채워주기는 방법이 더 일반적이다.
SSR(서버사이드렌더링) 완성형 html css js 를 받아오기때문에 2차적으로 api를 받아올 필요가 없다.
NoSQL
collection에 document 저장방식 document는 객체방식( ex)MongoDB )
ODM(Object Document Mapping) ex)Mongoose
SQL
table에 row 데이터 하나하나 저장방식( ex)Oracle, MySQL, postgresql )
RDB Relation DataBase 관계형 데이터베이스
ORM (Object Relation Mapping) ex) squalize ,typeorm, prisma
가상컴퓨터
운영체제에 따라 달라지는 환경때문에 예전에는 vmware가상컴퓨터에 os전체를 새로 설치하여 개발했다.
Docker
운영체제의 핵심기능(커널)는 공유하는 가상머신
os전체를 새로 설치하지 않아서 속도가 빨라짐
도커빌드를하면 설치할 목록이 셋팅되어있어 하나하나 다운로드 하지 않아도됨
1.개발/배포환경 통일 2.프로그램 미리설치(목록셋팅) 3.가벼운 가상컴퓨터
CLI : Command line interface
DOCKER 명령어
docker build .
(이미지 빌드)
docker images
(이미지 아이디 확인)
docker run imageID
(이미지 실행)
docker ps
(현재 실행중인 프로세스를 보여줌)
docker ps -a
(종료된 모든 프로세스 까지 다 보여줌)
docker rm CONTAINER ID
(종료된 프로세스 삭제)
docker rmi IMAGE ID
(이미지 삭제)
docker rmi docker images -a -q
이미지 모두 삭제
docker rm -a -q -f
컨테이너 모두 삭제
docker stop CONTAINER ID
(종료 끄기)
docker exec -it CONTAINER ID /bin/bash OR sh
컨테이너의 터미널로 접속한다( ex)환경변수파일(dotenv)을 만들경우 사용 )
docker run -p 2000:3005 imageID
2000번(local)으로 연결했을때 3005번(docker 속 포트)으로 열어줘 = localhost:2000/boards로 요청 3005(index.js 안 app.listen(3005))
*bin/bash/의 뜻은 스크립트 파일이 bash 쉘로 실행시킨다
created의 경우 첫 빌드한 날짜로 표시 (캐시가 남아있어서)
node 버전이 다 다르므로 RUN yarn install
을 써주는 게 좋다
build 후에 파일의 내용을 수정하거나 새로운 파일을 수정하게되면 새로 build를 새로 해야한다. 수정될때 마다 yarn install을 매번 하면 비효율적이다.
(수정되면 새로 시작하게됨 ex)파일 수정시에는 COPY . /myfolder/
부터 하게됨 )
그래서 RUN yarn install
의 순서를 밑에 처럼 바꿔줄 필요가 있다
.dockerignore에 node_modules 저장
FROM node:16
WORKDIR /myfolder/
COPY ./package.json /myfolder/
COPY ./yarn.lock /myfolder/
RUN yarn install
COPY . /myfolder/
CMD yarn dev
RUN CMD의 차이
RUN 명령어는 여러 번 사용가능
CMD는 빌드시(포장할때)에는 포함되지않고 실행할때 실행됨 1번만 쓸 수 있음
포트 포워딩
도커 안에서 실행될 경우 localhost포트는 실행이 안된다. 그래서 내컴퓨터와 연결 시켜줘야함
연결시켜주는 과정을 포트 포워딩이라고 한다.
일반적으로는 바로 실행 후 종료되나 24시간 API를 받아오기 위해 반복문으로 무한 반복으로 만들어야함 또는 express listen
알고리즘 문제
알고리즘 Day06 과제 검사
sort() map()사용
function solution(s){
let arr = s.split(" ").map((x)=>+x).sort((a,b)=>a-b)
console.log(arr)
return `${arr.shift()} ${arr.pop()}`}
solution("2 4 1 3") //"1 4"
sort()의 경우 문자열 정렬이 기본이기 때문에
숫자를 정렬할때는 오름차순은 sort((a,b)=>a-b)
내림차순은 sort((a,b)=>b-a)를 써주어야 한다.
알고리즘 문제 오류
※문제
takeRank 함수는 국어 점수를 의미하는 배열을 인자로 받아 배열의 요소들을 탐색해 각 학생의 등수를 반환해야합니다.
takeRank이라는 이름의 함수를 만들어주세요. 임의의 숫자 배열을 인자로 받습니다.
같은 점수가 입력될 경우 높은 등수로 동일 처리됩니다. 즉 가장 높은 점수가 92점인데 92점이 3명 존재하면 1등이 3명이고 그다음 학생은 4등이 됩니다.
인자 이름은 원하는 대로 지어주셔도 됩니다.
참고사항
new Array()를 사용해 새로운 배열을 생성하여 접근해 보세요.
2차원 탐색을 사용해서 접근해 보세요.
각 학생의 등수를 입력된 순서대로 반환해 주세요.
function takeRank (arr) {
let rank = arr.sort((a,b)=>b-a)
const result = arr.map((x,i) => rank.findIndex((ele)=> ele === arr[i])+1)
return result
}
takeRank([87, 89, 92, 76, 100]) //[ 0, 1, 2, 3, 4]
이렇게 문제를 풀었더니 계속 [ 0, 1, 2, 3, 4]로 답이 나왔다.
새로운 배열을 만든게 아니라 받아온 arr을 sort로 정렬했기 때문에 result문에서의 arr[i]를 받아 오면 똑같은 배열이 나온다.
또 알고있는 값이기 때문에 findIndex보다 indexOf를 써주는 것이 더 간단하다.
function takeRank (arr){
let arrCopy = [...arr]
let rank = arrCopy.sort((a,b)=>b-a)
const result = arr.map((x,i) => rank.indexOf(arr[i])+1)
return result
}
takeRank([87, 89, 92, 76, 100]) //[ 4, 3, 2, 5, 1 ]
Author And Source
이 문제에 관하여(220118 TIL), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@25tutmmu/220118-TIL저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)