01-09 TIL

거북·2024년 1월 10일

TIL

목록 보기
20/22

요약

최종 프로젝트의 전반적인 기능 구현을 완료 하고 포스트맨으로 테스트 해보았다.

기술면접

브라우저 작동방식

  1. 사용자가 주소 표시줄에 URL 입력: 브라우저를 실행하고 주소 표시줄에 방문하고자 하는 웹 페이지의 URL을 입력합니다.
  2. DNS 조회: 입력된 URL의 호스트 이름을 IP 주소로 변환하기 위해 브라우저는 DNS(Domain Name System) 서버에 요청을 보냅니다. DNS 서버는 해당 도메인의 IP 주소를 제공하여 브라우저가 웹 서버에 연결할 수 있도록 합니다.
  3. 서버 연결: 브라우저는 얻은 IP 주소를 사용하여 웹 서버에 TCP/IP 연결을 시도합니다. 이 연결은 클라이언트(브라우저)와 서버 간의 안정적인 통신을 제공합니다.
  4. HTTP 요청 송신: 브라우저는 서버에게 해당 URL에 대한 HTTP 요청을 보냅니다. 이 요청에는 사용자 에이전트 정보, 쿠키, 세션 등이 포함될 수 있습니다.
  5. 서버 응답 수신: 서버는 브라우저의 요청을 받아들이고 해당하는 리소스(HTML 문서, CSS 파일, JavaScript 파일, 이미지 등)를 포함한 HTTP 응답을 반환합니다.
  6. 렌더링: 브라우저는 최종적으로 렌더링된 페이지를 사용자에게 표시합니다. 이 단계에서는 화면에 보이는 텍스트, 이미지, 링크 등이 포함됩니다.
  7. 이벤트 처리 및 상호 작용: 사용자의 입력에 따라 브라우저는 적절한 이벤트를 처리하고 웹 페이지의 동적인 부분을 업데이트합니다.

쿠키, 세션의 개념과 차이

쿠키

  • 클라이언트 측에 데이터를 저장하며 주로 사용자 인증, 사용자 환경 설정, 추적 등에 활용됩니다.
  • 웹 브라우저에 저장되며 일정 기간 동안 보관될 수 있고, 만료 기간을 설정할 수 있습니다. 클라이언트 측에서 관리되므로 조작이 가능하며, 도메인당 브라우저에 저장할 수 있는 쿠키의 개수 및 크기에는 제한이 있습니다.

세션

  • 사용자의 상태를 추적하고 유지하기 위해 주로 사용됩니다.
  • 서버 측에 저장되며, 클라이언트는 세션 ID를 통해 서버에 저장된 정보에 엑세스 합니다.
  • 일반적으로 사용자가 브라우저를 닫을 때까지 유지되며 사용자가 로그아웃하거나 일정 시간 동안 활동이 없을 경우 서버에서 세션을 만료시킬 수 있습니다.

차이점

  • 가장 큰 차이는 쿠키는 클라이언트 측에 데이터를 저장하고 세션은 서버 측에 데이터를 저장한다는 것입니다. 따라서 쿠키는 액세스 속도에는 이점이 있지만 보안에는 적합하지 않아 중요한 정보를 담는 것은 지양해야 합니다. 세션은 서버에서 관리되므로 보안성이 높아 더 많은 데이터를 저장할 수 있습니다.

WeMakePlay

진행상황

보드 가입 신청 및 수락,거절 기능을 구현하였고 이를 해결하고 나니 보드에 탈퇴 기능이 필요할것 같아서 추가로 구현해주었다. 탈퇴 기능은 보드와 사용자 사이의 중간 테이블에서 보드에 참여 상태일 때 칼럼을 삭제해주는 방식으로 구현하였다. 다음은 해당 코드이다.

//BoardService.java
public void quitBoard(Long boardId, User user) {
        Board board = findBoard(boardId);
        List<AttendBoard> attendBoardList = attendBoardRepository.findByBoardId(boardId);
        for (AttendBoard attendBoard : attendBoardList) {
            if (attendBoard.getUser().getId() == user.getId()) {
                if (attendBoard.getParticipation().equals(Participation.attend)) {
                    attendBoardRepository.delete(attendBoard);
                }
            }
        }
    }

또한 보드의 정원이 가득 차면 채팅방을 생성하는 것이 기존 목표였는데 참여한 보드가 많아지면 채팅방이 무수히 많이 생겨날 것을 고려하여 보드가 정해진 시간이 지나면 자동으로 삭제되도록 만들어 주었다. 이 기능을 만들기 위해 스케줄러라는 것을 사용해 보았다. 스케줄러를 사용하면 설정한 시간마다 함수를 실행시켜준다.

//BoardScheduler.java
@Component
@RequiredArgsConstructor
public class BoardScheduler {
    private final BoardService boardService;

    @Scheduled(fixedRate = 60000)//60초
    public void deleteExpiredBoards(){
        boardService.deleteExpiredBoards();
    }
}

스케줄러에서 설정해둔 시간마다 아래 코드가 실행되어 기간이 만료된 보드를 삭제하는 쿼리문을 보내준다.

//BoardService.java
@Transactional
    public void deleteExpiredBoards() {
        Date currentDate = Date.from(Instant.now());
        List<Board> boardsToDelete = boardRepository.findByPlayDateBefore(currentDate);
        boardRepository.deleteAll(boardsToDelete);
    }

해야할것

  1. 프론트엔드 코드 작성 및 백엔드와 연동
  2. 웹소켓을 활용하여 실시간 채팅 구현

0개의 댓글