220118 TIL

11906 단어 TIL오류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 ]

좋은 웹페이지 즐겨찾기