💜 Key Point

쿠키, 세션, TCP/UDP, break

💜 Today I Learned

[기술면접]

  1. 쿠키, 세션의 개념과 차이를 설명해보세요
  • 쿠키
    클라이언트 측에서 저장하는 작은 데이터 파일이다.
    웹 브라우저가 웹 서버에 요청을 보낼 때 서버는 쿠키를 포함한 응답을 보내며 클라이언트의 브라우저에 저장한다.
    만료날짜가 설정되어 있으면 해당 날짜까지 유지되고, 만료날짜가 없는 경우 세션 쿠키로 간주되어 브라우저가 닫힐 때까지 유지된다.

  • 세션
    서버 측에서 사용자 상태를 관리하는 방법이다.
    클라이언트가 서버에 접속할 때 세션 ID가 생성되며, 이 ID를 사용하여 서버 측에 사용자 정보를 유지하거나 조회할 수 있다.
    일반적으로 세션은 서버의 데이터, 데이터베이스, 파일 시스템을 저장한다.
    일정 시간 또는 사용자의 로그아웃과 함께 만료될 수 있다.

  • 차이점

    • 쿠키는 클라이언트 측에, 세션은 서버 측에 저장된다.
    • 쿠키는 상대적으로 덜 안전하며, 중요한 정보를 저장하기보다는 식별자로 주로 사용된다. 세션은 일반적으로 보다 안전한 방식이다.
  1. TCP/UDP에 대해서 설명해주세요.
  • TCP
    전송을 제어하는 프로토콜을 뜻한다.
    인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜이다.
    일반적으로 TCP와 IP를 함께 사용하는데, IP가 데이터의 배달을 처리한다면 TCP는 패킷을 추적 및 관리하게 된다.
    TCP는 연결형 서비스로 신뢰성을 보장한다. 따라서 파일전송과 같은 경우에 사용된다.

  • UDP
    사용자 데이터그램 프로토콜을 뜻한다.
    데이터를 데이터그램 단위로 처리하는 프로토콜이다.
    (데이터그램이란 독립적인 관계를 지니는 패킷을 뜻한다.)
    UDP는 비연결형 프로토콜이기 때문에 각각의 패킷이 다른 경로로 전송되고 독립적인 관계를 지니게 된다.
    UDP는 비연결형 서비스로 서로 다른 경로로 독립적으로 처리되기 때문에 TCP보다 속도가 빠르다. 실시간 서비스 같이 신뢰성보다 연속성이 중요한 서비스에 사용된다.

[최종 프로젝트]

  • 불필요한 api 요청 없애기
    api 요청을 보내다 보니 데이터가 없는데도 15페이지까지 요청이 계속 가는 것이다.
    console.log로 api요청으로 들어온 값을 확인해보았다.
    { count: 490, results: [] } 이런식으로 데이터 개수와 결과 값을 받아온다.

    처음에 객체로 받아오는 것을 생각하지 못하고 sneakersData.id 이런 식으로 작성을 했는데 이렇게 진행을 하니 요청을 하자마자 break 문에 걸려버렸다.
    (sneakersData가 api에 요청을 보내고 데이터를 저장한 객체이다.)

    튜터님께 질문을 한 후에 객체 값이기 때문에 데이터가 어떻게 받아와지는데 콘솔로 확인해보고 길이가 0일 경우에 break를 걸어야 할 것 같다라고 하셔서 콘솔로 찍어본 것이다.

    콘솔로 찍은 후에 sneakersData.length가 0일 경우에 반복문을 빠져나가도록 작성했다가
    { count: 490, results: [] } 이렇게 콘솔에 찍히는 것을 확인하고 sneakersData.results.length가 0일 경우에 빠져나가도록 수정하였다.

    이렇게 작성을 하니 15번의 요청을 보내지 않더라도 데이터가 없으면 빠져나가는 것을 확인하였다.
async fetchSneakers(saveShoesDto: SaveShoesDto) {
    const { brand } = saveShoesDto;
    for (let i = 1; i <= 15; i++) {
      const page = i.toString();
      const sneakersData = await this.SneakersApiCall(page, brand);
      if (sneakersData.results.length === 0) {
        break;
      }
      const sneakersDataSave = sneakersData.results.map((sneakerData) => {
        const { brand, styleId, title, media } = sneakerData;
        if (media.imageUrl === null || styleId === '') {
          return null;
        } else {
          return { brand, shoeCode: styleId, name: title, imgUrl: media };
        }
      });
      await this.saveSneakers(sneakersDataSave);
      await new Promise((resolve) => setTimeout(resolve, 1000));
    }
  }

반복문의 i를 콘솔로 찍어보면 15까지 찍히지 않는 것을 확인할 수 있다.

0개의 댓글