cs 질의응답, 기술면접 top30

최수민·2023년 8월 27일
0

WIL

목록 보기
5/8

cs 질의응답을 작성을 했고, 기술면접도 9?10?번까지는 작성을 해야한다고 해서 일단 10번까지는 작성을 해놓으려고 합니다.

그런데 오늘 마저 코딩을 하고 싶었지만 상세조회를 작성을 해줘야 그뒤로 댓글관련해서 작성을 하는데 아직 다른분의 작업공간이라 하질 못하고 있습니다.

일단 튜터님이 말씀해주신대로 멤버 업데이트 부분을 수정해주었습니다.
board-member.service.ts

//보드 멤버 업데이트
  async UpdateBoardMember(boardId: number, users: string[]) {
    const board = await this.boardsService.GetBoardById(boardId);
    const boardMembers = await this.boardMemberRepository.find({ relations: ['user', 'board'] });
    const boardMember = boardMembers.filter((member) => {
      return boardId == member.board.id;
    });
    const userArray = [];
    for (const i in boardMember) {
      userArray.push(boardMember[i].user.name);
    }
    const deleteUsers = userArray.filter((x) => !users.includes(x));
    const updateUsers = users.filter((x) => !userArray.includes(x));

    if (!board) throw new NotFoundException('해당 보드는 존재하지 않습니다.');

    const entityManager = this.boardMemberRepository.manager;
    try {
      await entityManager.transaction(async (transactionEntityManager: EntityManager) => {
        if (updateUsers.length > 0) {
          for (const i in updateUsers) {
            const user = await this.usersService.findUserByName(updateUsers[i]);
            if (!user) throw new NotFoundException('해당 유저는 존재하지 않습니다.');
            const newBoardMembers = this.boardMemberRepository.create({ board, user });
            console.log(newBoardMembers);
            await transactionEntityManager.save(Board_Member, newBoardMembers);
          }
        }
        if (deleteUsers.length > 0) {
          for (const i in deleteUsers) {
            const deleteBoardMember = this.boardMemberRepository.delete({ id: deleteUsers[i].id });
            console.log(deleteBoardMember);
            await transactionEntityManager.remove(deleteBoardMember);
          }
        }
      });
      return { result: true };
    } catch (err) {
      console.error(err);
    }
  }

board-member.controller.ts

//보드 멤버 업데이트
  @Put('/boards/:boardId/members')
  @UseGuards(AuthGuard)
  async UpdateBoardMember(
    @Param('boardId') boardId: number,
    @Body() data: BoardMemberUpdateDto,
    @Res() res: Response
  ) {
    await this.boardMembersService.UpdateBoardMember(boardId, ata.names);
    return res.status(HttpStatus.OK).json({ message: '보드멤버를 업데이트 했습니다.' });
  }

board.dto.ts

export class BoardMemberUpdateDto {
  @IsNotEmpty()
  @IsArray()
  names: string[];
}

기술면접 top30

  1. TCP/UDP에 대해서 설명해주세요.
    -> TCP는 Transmission Control Protocol, 전송을 제어하는 규약이라고 합니다. 즉 인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜로 IP가 데이터의 배달을 처리하면 TCP는 패킷을 추적 및 관리를 하게 됩니다. 특징으로는 연결지향 방식으로 패킷 교환 방식을 사용하고 가상 회선 방식이 아닙니다. 그리고 3-way handshaking과정을 통해 연결을 설정하고 4-way handshaking을 통해 해제합니다. 데이터의 흐름제어나 혼잡제어와 같은 기능도 하지만 이러한 기능때문에 UDP보다 속도가 느립니다. 그래서 TCP는 연속성보다 신뢰성있는 전송이 중요할 때에 사용하는 프로토콜입니다.
    UDP는 User Datagram Protocol, 사용자 데이터그램 규약이라고 합니다.
    여기서 데이터그램이란 독립적인 관계를 지닌 패킷이라는 뜻이며, UDP는 TCP와 달리 비연결형 프로토콜입니다.
    특징으로는 비연결형 서비스로 연결을 설정하고 해제하는 과정이 존재하지 않아 서로 다른 경로로 독립적으로 처리해도 패킷에 순서를 부여해 재조립을 하거나 흐름 제어 또는 혼잡 제어와 같은 기능 처리도 하지 않아 TCP보다는 속도가 빠르지만 신뢰성을 보장하지 못합니다. 그래서 신뢰성보다는 연속성이 중요한 서비스에 사용하는 프로토콜입니다.

  1. http, https 차이점에 대해 설명해주세요.
    -> HTTP는 Hyper Text Transfer Protocol로 서버/클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜입니다. HTTPS는 Hyper Text Transfer Protocol over Secure Socket Layer으로 HTTP에 데이터 암호화가 추가된 프로토콜입니다. HTTP는 암호화가 추가되지 않았기 때문에 보안에 취약한 반면, HTTPS는 안전하게 데이터를 주고받을 수 있습니다. 하지만 HTTPS를 이용하면 암호화/복호화의 과정이 필요하기 때문에 HTTP보다 속도가 느리고 HTTPS는 인증서를 발급하고 유지하기 위한 추가 비용이 발생합니다.
    개인 정보와 같은 민감한 데이터를 주고 받아야 한다면 HTTPS를 이용하고, 노출이 되어도 괜찮은 단순한 정보 조회 등 만을 처리하고 있다면 HTTP를 이용하면 됩니다.

0개의 댓글