[Fitingle] 회고록
기획 & 프론트 &백앤드 부족했던 점
1.기획
너무 거대한 서비스
- 짧은 기간과 짧은 서비스 제작 이후 추가적인 서비스를 붙이기
- MVP 개발 필요함.
- 정확한 개발 기간과 정확한 서비스 기능 제작 필요.
지라 사용 문제
- "한번 사용했다" 라는거에 의미를 가진다면 성공
- "잘 활용했냐"는 매우 실패
- 개인적으로 노션을 사용했다면 더 편했을꺼 같음.
- 사용한다고 결정 한다면 적극적으로 모두 사전 지식 습득 후 활용을 해야겠다.
- ex) 정해진 요일마다 하나씩 기능 설명하기 등등.. 시간을 갖는 것도 좋을 듯하다.
2.프론트
도망과 인원 부족으로 인한 문제
- 이후 진행할 프로젝트 좀 더 책임감과 흥미를 갖도록 진행이 필요.
- 백엔드와 소통 부족
- 카카오톡 보단 슬랙을 통해 좀 더 기술적으로 대화 할 수 있는 플랫폼을 활용한다.
- 거시적으로 상호 작용을 빠르게 확인하고 대응할 수 있도록 우선적으로 배포를 하는게 좋겠다.
- (이건 개인적인 바램이지만 모바일 웹에서도 볼수 있게 반응형 개발도 가능했으면 좋겠다....ㅠㅠ)
3.백엔드
정확한 기술 이해와 활용 필요
- 사전의 지식이 없이 큰 기술들을 사용함으로써 개발 기간이 늘어남.
초반에 CI/CD 작업과 환경 구성이 시간이 오래걸렸다. (하지만 이 부분은 꼭 하는게 맞다고 생각)- 기술들은 간단한거 우선 활용하며 빠른 개발 후 , 추후 확장 시 변경을 해본다
API 명세서의 중요성
- 구체적이지 못하고, 실시간으로 변경이 안되었다.
- BE 와 FE의 개발의 기준점이 되는 만큼 중요성을 인지하고 정확하고 자세하게 작성 필요.
WBS 문제
- 정확하게 개발 업무를 나누지 않아 프론트와의 소통이 어렵다
- 업무 분배를 정확하게 나누고 작성을 하는 파일이 필요하다고 생각함.
(또한 그 업무에 대한 책임감이 커져 퀄리티가 좋아 질 것이다).
- 업무 분배를 정확하게 나누고 작성을 하는 파일이 필요하다고 생각함.
테스트 코드의 중요성
- 일일이 로그인 후, 게시판 등록 후, 댓글 달기 후 ~~확인하기 너무 너무 문제임
- 사전에 테스트 코드 작성법을 익히고 스터디하는 시간을 필요로함.
- 또한 더미 데이터에 관해서 개발 시 준비가 되어있어야 할꺼 같다.
예외 처리 미흡
- 이번 개발하면서 프론트에서 넘어오는 변수 체크를 하지 않아 매우 힘들었음.
- @validation 활용하여 넘오는 값을 확인 후 에러를 보내주는 작업이 필요함.
그럼 프론트도 빠르게 문제를 캐치할 수 있다.
- @validation 활용하여 넘오는 값을 확인 후 에러를 보내주는 작업이 필요함.
구체적인 백앤드 문제
1.ResponseEntity를 활용 미흡.
https://josolha.tistory.com/48 (왜 쓰는지 정리 글)
상태 코드 제어를 통해
ResponseEntity를 사용하면 기본적인 200 OK 외에도 201 Created, 404 Not Found, 500 Internal Server Error 등의 다양한 HTTP 상태 코드를 반환할 수 있다.
이부분을 활용 못한거 같다.
우리 코드를 보면 아래와 같이 모든 리턴을 ok로 하고있고 별도 응답객체에 담아서 보내주는중.
@RestController
@Slf4j
@RequestMapping(produces = MediaType.APPLICATION_JSON_VALUE)
@RequiredArgsConstructor
public class ApplyController {
private final ApplyService applyService;
@PostMapping("/board/apply/{boardId}")
public ResponseEntity<?> apply(
@AuthenticationPrincipal UserDetails userDetails,
@RequestBody ApplyRequestDto applyRequestDto,
@PathVariable Long boardId) {
Long userId = Long.parseLong(userDetails.getUsername());
return ResponseEntity.ok(applyService.apply(applyRequestDto,boardId,userId));
}
@GetMapping("/user/groups/applyList/{boardId}")
public ResponseEntity<?> getApplyList(
@AuthenticationPrincipal UserDetails userDetails,
@PathVariable Long boardId) {
Long userId = Long.parseLong(userDetails.getUsername());
return ResponseEntity.ok(applyService.getApplyList(boardId,userId));
}
}
과연 이게 맞는걸까??
{
"message": "Success",
"data": {
"contents": "신청 완료"
},
"errorCode": "1111"
}
지금 응답 객체를 보면 서버에 기록한 에러 코드를 보내는데
ok 상태에 에러코드라...뭔가 괴리감이 든다..이렇게 사용해도 되는것인가?
2. @RestControllerAdvice 와 @ExceptionHandler 사용해 공통 예외처리 필요
public ResultDto<?> getApplyList(Long boardId,Long userId) {
//1.유저확인
boolean existUsers = usersRepository.existsById(userId);
if (!existUsers) {
return ResultDto.builder()
.message(ErrorCode.NOT_EXIST_USERS.getMessage())
.data(null)
.errorCode(ErrorCode.NOT_EXIST_USERS.getCode())
.build();
}
List<ApplyDto> result = new ArrayList<>();
//3.보드 아이디가 있을때.
Optional<Board> findBoard = boardRepository.findByIdAndUserId(boardId, userId);
if (!findBoard.isPresent()) {
return ResultDto.builder()
.message(ErrorCode.NOT_OWNER_BOARDS.getMessage())
.data(null)
.errorCode(ErrorCode.NOT_OWNER_BOARDS.getCode())
.build();
}
List<Apply> applyList = applyRepository.findByBoardId(boardId);
applyListToApplyDtoList(findBoard.get(), applyList, result);
//4.값이 비어있을때.
if(result.isEmpty()){
return ResultDto.builder()
.message(ErrorCode.SUCCESS.getMessage())
.data(null)
.errorCode(ErrorCode.SUCCESS.getCode())
.build();
}
return ApplyListResponseDto.builder()
.applyList(result)
.build().doResultDto(ErrorCode.SUCCESS.getMessage(), ErrorCode.SUCCESS.getCode());
}
현재 위에 코드를 보게 되면 단순 조회만 코드가 해당 서비스의 메소드를 대부분 차지하는 형태로 이루어져있다.
도메인 별로 exception 폴더를 만들어서 예외를 처리해야함
@RestControllerAdvice 와 @ExceptionHandler를 적극적으로 활용해보자구요
아래는 예시이다(사용자 조회)
// 사용자 정보를 찾을 수 없을 때의 처리
@ExceptionHandler(UserNotFoundException.class)
public ResponseEntity<Object> handleUserNotFound(UserNotFoundException ex) {
ErrorResponse errorResponse = new ErrorResponse("User not found", "USER_NOT_FOUND");
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(errorReturn);
}
3.JPA 의 이해 부족과 테스트코드 미흡
아마 테스트 코드 작성하게 된다면 JPA의 연관관계 편의 메소드의 활용의 중요성을 좀 더 느낄 수 있다고 생각함.
mockito, junit을 통한 테스트 코드 작성을 먼저 잘 이해하고 활용 할 줄 알아야겠다.
또한 앞에서 말했던것 처럼 매일 기능 확인하려고 로그인~게시판등록~댓글달고~~이렇게 그만하자고!
4.엘라스틱 서치 & RabbitMq & AOP
우리가 진행하면서 어려웠던 기술? 큰기술들을 나열해봣다.
이번에 나름 공부해본다고 사용해 봤지만 시간이 너무 오래걸렸다.
그래서 냅다 복붙을 하기 시작했고 이해는 저멀리 떠나가버렸다.
정확하게 이 기술을 왜써야하는지 어떻게 쓰는건지 사전 지식이 매우 부족해서 그런거 같음.
좋은 기술을 무작정 쓰는것 보단 왜 필요한지 직접 느끼고 활용해 보자
내 소감
기획,프론트,백엔드 구분을 하여 만든 프로젝트는
다들 처음이라 모두 부족한 점이 많았다.하지만 그 누가 처음 부터 잘하나, 잘하는 그 누군가도 처음이 이랬을 텐데 아니 더 심각했을 수도...
처음부터 잘하는 것 보단 오히려 이렇게 부족함을 느끼고
다음에 더 나은 걸 만드는게 개발자로써의 길이 아닌가 싶다