오늘부터 기술면접을 대비하여 자주 출제되는 문항30개 중 두문항씩 답안을 작성해 보았고 최종 프로젝트를 본격적으로 시작하여 맡은 파트 개발을 진행하였다.
장점
장점
단점
RDBMS는 테이블의 구조를 사전에 정의하여 데이터를 관리하고 NOSQL은 다양한 유형의 데이터를 유형에 따라 관리한다. 이엔 각각 장단점이 있는데 RDBMS는 사전에 구조를 정하기 때문에 스키마가 명확하며 데이터 무결성을 보장한다는 장점이 있지만 유연성이 떨어지고 많은 관계를 맺을 수록 쿼리문이 복잡해 진다는 단점이 있다.
NOSQL의 장점으로는 어플리케이션이 필요로 하는 형식으로 데이터를 저장해서 읽어오는 속도가 빠르며 수직 및 수평 확장이 가능해서 유연하게 데이터를 관리할 수 있다. 하지만 데이터 중복이 발생할 수 있으며 이를 수정할 때 모든 컬렉션에서 일일이 삭제해주어야 하는 번거로움이 있다.
사용자 인터페이스, 데이터 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴으로 비즈니스 로직과 화면을 구분하는데 중점을 두고 있다. 먼저 사용자의 요청을 controller를 통해 받고 controller는 service에서 처리한 로직을 model에 저장한다. 이렇게 저장된 결과를 view를 통해 다시 사용자에게 전달하는 패턴이다. 이의 주된 목적은 관심사 분리라고 생각하며 이를 통해 결합도를 낮추어 재사용성 및 확장성을 높일 수 있다. 이는 서비스의 유지보수에도 용이하며 단위 테스트 코드를 개발하는데 수월하다.
내가 맡은 부분은 사용자가 모집을 위한 게시글과 관련된 api를 만드는 것이다.
기존에 팀장의 깃허브에 레포지토리를 파서 작업을 하던 방식에서 벗어나 organization을 새로 만들어서 작업을 해보려고 했으나 인증 문제로 push가 되지 않아 기존 방식대로 레포지토리를 파고 작업을 시작했다.
게시물 기능을 맡아서 기본적인 CRUD는 다 구현하였고 게시물에 참가 신청을 보내는 부분도 구현하였다. 다음은 사용자가 보드에 가입 신청을 요청하는 부분의 코드이다.
//BoardService.java
public void attendBoard(Long boardId, UserDetailsImpl userDetails) {
Board board = findBoard(boardId);
User user = userDetails.getUser();
user.attendBoard(board);
}
//User.java
public void attendBoard(Board board) {
AttendBoard attendBoard = new AttendBoard(board,this, Participation.wait);
this.attendBoards.add(attendBoard);
}
AttendBoard 라는 엔티티를 만들어 중간 테이블로 사용하여 User와 Board를 매핑해주었다.