43일차 (02-05-2021)

조상래·2021년 2월 5일
0

코드스테이츠

목록 보기
41/73

배우면 배울수록 신기하고 재밌다. 오늘은 직접 서버의 입장이 되어 보는 스프린트였다. 스프린트의 내용은

요청에 텍스트를 넣고 대문자 소문자로 돌려주는 아주 간단한 앱이다. 그러나 DOM을 이용해 앱 자체적으로 결과물을 내놓는 것과는 달리 서버에서 요청하고 그 값을 다시 돌려주어 응답에 나오게 하는것이다. 이미 앱의 DOM작동과 요청은 간단하게 구현 되어있다. 우리가 해야할 것은 그 요청을 적당히 처리하여 결과물을 전송해 주는것. 여기서 세가지 주의점이 있다.

  • CORS의 환경에 놓인 상태로 먼저 요청이 유효한지 알아보는 'preflight', 즉, OPTIONS 메소드에 대한 스테이터스코드 201 Created.
  • POST 요청이 왔을 때 스테이터스코드 201 Created 와 결과물 전송.
  • 유효하지 않은 요청이 왔을 때 스테이터스코드 400 badrequest를 전송.

정말 알수없는 말들의 연속이다.

if (method === 'POST' && url === '/lower') {
    let body = []
    response.writeHead(201, defaultCorsHeader);
    request.on('data', (chunk) => {
      body.push(chunk);
    }).on('end', () => {
      body = Buffer.concat(body).toString();
      response.end(JSON.stringify(body.toLowerCase()));
    })
  } else {
    response.writeHead(400, defaultCorsHeader);
    response.end()
    
    const defaultCorsHeader = {
  '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
};

간단하게 몇줄을 가지고 와봤는데,

일단 CORS에 대한 이해가 부족하여 조금 힘들었는데 서버의 입장이 되어보니 대충 알것같기도?

위의 defaultCorseHeader 조건을 만족하지 못하면 요청 실패가 난다는 것을 명시적으로 보여줄 뿐이고. 서버의 코드로 통해 응답을 완성 시키면 된다.

요청 메소드가 POST이고 url의 path가 /lower일 때 결과물을 내어주고 아니면 배드리퀘스트를 보여주어라. 그러면 한번 실험 해보자.

오른쪽 제너럴을 봤을 때 path를 /lower로 메소드를 POST로 잘 요청이 되었던 걸로 보이고 우린 요청에대한 답을 내어주어서 응답에 변환되어 나온게 보인다. 그렇다면 만약 path를 이상하게 바꾼다면 어떻게 될까?

임시로 클라이언트의 코드를 수정하여 /lowera로 요청하게 해 보았다. 그 결과 배드리퀘스트라는 응답을 내어 놓았고 요청은 거절이 되어서 아무 변화가 없는 걸 알수있다.

서버코드에서 중요한 키워드는 'on' 인것 같다. 아직 완벽한 작동원리에 대해 모르겠다. 조금 더 보충이 필요하다.


nodemon 포트가 점유중일때/ 서버 강제종료

그리고 오늘 nodemon을 사용하여 서버를 관리하게 되었는데 실수러 서버를 종료 시키지 않고 터미널을 꺼버렸다. 그리고 서버를 종료 시킬수 없는 상황이 되어 버렸는데, 해결법을 찾아서 공유해본다.
(참고 블로그 :https://velog.io/@mschoi0122/Node.js-npm으로-서버-실행-시-포트-이미-사용중일-때)

상황을 직접 만들어 보았고, 에러를 보면 포트가 이미 사용중이라는 것을 알 수있다.

그럴땐

ps -ef | grep [자신이 열었던 서버파일.js]

위와 같이 자신이 이전에 열었던 서버파일을 넣어서 터미널에 입력한다.

그러면 포트를 점유중인 프로세스를 알 수 있고,

kill -9 13119
kill -9 13154
kill -9 13524

위의 명령어를 터미널에 입력하여 모두 없애주자.

결과는 성공이다!

profile
Codestates Full IM26기 수료

0개의 댓글