41일차 TIL 210503

1. 주말알고리즘 스터디 통해 배운 것

  • 로또의 최고 순위와 최저순위 : 비어있는 숫자가 무엇이냐에 따라 로또 당첨 최대 순위와 최저순위를 출력해야하는 문제 였다.
  • 경우의 수를 나눠서 규칙을 찾아야 한다. 로또 당첨 번호와 내 번호가 같은 것이 있을때, 최고 순위 번호는 어떻게 변하지?
  • 비어있는 숫자가 있는경우 최저 순위 는 어떻게 변하지? 규칙을 찾은 다음에 코딩하기
  • 문자열 내 마음대로 정렬하기 : 첫번째 글자를 기준으로 정렬하되 첫번째 글자가 같은 경우에는 그 문자 자체를 비교해서 return 처리해주면 두번째 인덱스 기준으로 비교할 수 있다.
function solution(strings, n) {
    strings.sort(function(a,b){
        if(a[n] > b[n]) return 1;
        if(b[n] > a[n]) return -1;
        if(a > b) return 1;
        if(b > a) return -1;
        return 0;
    });
    return strings;

2. 서버….랑 친해질 수 있을까?

  • nodemon을 통해서 파일에 변화가 있으면 출력을 바로 할 수 있다(liverserver와 비슷한 것 같다)
  • http 트랜잭션 해부
  • 서버 생성
const http = require('http');

const server = http.createServer((request, response) => {
  // 여기서 작업이 진행됩니다!
});
  • http 요청이 서버에 오면 node가 트랜잭션을 다루려고 request, response 객체를 전달하며 요청 핸들러 함수를 호출한다.
  • 요청을 처리할때 메소드와 url을 확인한 후 이와 관련된 적절한 작업을 실행할 것이기 때문에 아래 작업필수!
const { method, url } = request;
//method는 일반적인 http 메서드/동사 가 된다
//url 은 전체 URL에서 서버, 프로토콜, 포트를 제외한 것으로 세번째 슬래시 이후의 나머지 전부라고 볼 수 있다.

3. chatterbox-server 과제를 하면서 알게 된 점!

  • module.export 의 중요성.
  • 이렇게 힘들게 body를 받는 이유 ..data는 용량이 크기 때문에 나눠서 수신받기 떄문
let body = [];
request.on('data', (chunk) => {
  body.push(chunk);
}).on('end', () => {
  body = Buffer.concat(body).toString();
  // 여기서 `body`에 전체 요청 바디가 문자열로 담겨있습니다.
});
  • server.listen(port, ip); 는 서버가 계속해서 돌게 끔 프로세스를 유지한다.
  • response.writeHead(200,{'Content-Type':'application/json'}) 을 통해 명시적으로 응답 스트림에 헤더를 작성할 수 있다.
  • response.end(JSON.stringify(responseBody))를 통해서 데이터를 JSON으로 포매팅
  • 헤더를 항상 설정해줘야 한다.
const defaultCorsHeaders = {
   "access-control-allow-origin": "*",
   "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
   "access-control-allow-headers": "Content-Type, Accept",
   "access-control-max-age": 10 // Seconds.
 };

4. 콘솔 디버깅

  • nodemon –inspect-brk server/bascir-server.js
  • vs.code 에서 빨간점 찍는게 breakpoint 였구나!

Updated: