20240117

귤금·2024년 1월 17일

Node.js 4기 TIL

목록 보기
15/86

Today?

Node.js 입문주차 (1주차)

웹과 HTTP의 동작 방식


URL(Uniform Resource Locator)

  • 인터넷(Internet)상의 리소스 위치를 나타내기 위해 사용

http://cafe.naver.com/joonggonara
http : 프로토콜(통신 규약)
cafe : 서브 도메인
naver.com : 메인 도메인
/joonggonara : 리소스 경로

개발자 도구의 네트워크 탭에서 디버깅을 할 수도 있는 듯
console.log를 못 쓰는 회사도 있기 때문에...


웹 서버와 웹 어플리케이션 서버의 차이
1. 기본 기능 :

  • 웹 서버 : HTTP 프로토콜을 통해 클라이언트(보통 웹 브라우저)의 요청에 따라 정적 컨텐츠(HTML 파일, CSS, 이미지, JavaScript 파일 등)를 제공하는 것
  • 웹 애플리케이션 서버(이하 WAS) : 동적 컨텐츠를 생성하기 위한 서버 측 스크립트와 애플리케이션의 실행을 담당
  1. 컨텐츠 처리
  • 웹 서버 : 웹 서버는 주로 정적 컨텐츠를 관리하고 서비스합니다. 이 컨텐츠는 서버에 미리 저장되어 있으며, 변경되지 않습니다.
  • WAS : 웹 서버와 협력하여 동적인 컨텐츠를 제공. 데이터베이스와의 상호작용, 서버 측 로직 실행 등을 통해 사용자의 요청에 따라 실시간으로 컨텐츠를 생성하고 제공함...
  1. 기능의 복잡성
  • 웹 서버는 비교적 간단한 HTTP 요청을 처리하는 반면, 웹 애플리케이션 서버는 보다 복잡한 애플리케이션 로직과 데이터베이스의 상호작용을 관리

많은 경우, 웹 서버와 웹 애플리케이션 서버는 협력하여 작동
웹 서버는 초기 요청을 받아 필요한 경우 웹 애플리케이션 서버로 전달 -> 웹 애플리케이션 서버는 요청 처리 후 결과를 웹 서버로 다시 전송하여 사용자에게 제공한다...!


Node.js란?
Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임
Node.js 패키지 생태계인 npm...패키지 생태계가 뭐지

"패키지 생태계"라는 용어는 특정 프로그래밍 언어나 플랫폼에 대한 소프트웨어 패키지들의 집합, 그리고 이들 간의 상호작용과 관계를 포괄적으로 지칭하는 말
Node.js의 경우, 이 패키지 생태계는 주로 npm (Node Package Manager)을 통해 구현됨

어렵다... npm과 yarn이라는 패키지 매니저를 설치했다.

오늘 배운 것

코드카타

1) 0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.

//내가 짠 코드
let solution = numbers => {
    let sum = 0;
    numbers.forEach( num => {
      sum += num;
    })
    return 45-sum;
}

//다른 사람 코드
function solution(numbers) {
    return 45 - numbers.reduce((cur, acc) => cur + acc, 0);
}

//다른 사람 코드2
function solution(numbers) {
    let answer = 0;
    for(let i = 0; i <= 9; i++) {
        if(!numbers.includes(i)) answer += i;
    }
    return answer;
}

reduce 사용은 그렇다치고... 사실 처음에는 빠진 숫자를 다 찾아서 더하는 생각으로 접근을 했었는데 도저히 안 되겠어서 챗지피티한테 힌트를 받았다. 0~9까지의 정수의 합은 45라고 하길래 뭔가 머리를 맞은 것 같았음.. 그래서 45에서 해당 배열의 합을 뺀 것으로 구했다. 알고리즘을 푸려면 정말 사고가 유연해야 하는구낭...
세 번째는 원소 하나씩을 찾아서 구하는 방식의 코드다. 내가 구현하려고 했을 때 잘 안 됐던 거였다... 그런데 저렇게 보니까 내가 왜 틀렸는지 이해가 됨

2) 정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.

//내가 짠 코드
let solution = arr => {
    if(arr.length == 1){
        return [-1];
    } else {
        arr.splice(arr.indexOf(Math.min(...arr)),1);
        return arr
    }
}

//다른 사람 코드
function solution(arr) {
    arr.splice(arr.indexOf(Math.min(...arr)),1);
    if(arr.length<1)return[-1];
    return arr;
}

비슷한 방법으로 풀었는데 댓글 보니까 이렇게 하면 중복되는 정수가 있을 경우(예 : [4,3,2,1,1]) 최소값을 다 뺄 수 없다는 단점이...

3) 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

//내가 짠 코드
let solution = s => {
    if(s.length%2 === 0){
        return s.charAt(s.length/2-1)+s.charAt(s.length/2)
    }
    else {
        return s.charAt(Math.floor(s.length/2))
    }
}

//다른 사람 코드
function solution(s) {
    return s.substr(Math.ceil(s.length / 2) - 1, s.length % 2 === 0 ? 2 : 1);
}

Math.ceil()
나눈 값을 올림. 문자열 길이가 홀수일 때 중간 문자의 인덱스를 찾기 위함인 듯
그리고 0으로 시작하는 문자열 인덱스 때문에, 이렇게 계산된 인덱스에서 1을 빼줘야 진짜 index를 구할 수 있음.
그리고 짝수라면 2개, 홀수라면 1개의 알파벳을 substr한다.

0개의 댓글