BEYOND SW 캠프 15기 23주차 회고

mijuckboon·2025년 6월 29일
post-thumbnail

부트캠프 23주차 회고를 적어본다.

최종 프로젝트

지난 주에 이어서 백엔드 프로젝트 개발을 계속 진행했다. 사원 관리 기능까지 백엔드 코드 작성을 완료하였다. 다음 주에는 프론트엔드 개발을 진행하며 누락된 엔드포인트를 작성하거나, 잘못된 백엔드 코드를 수정할 예정이다. 맡은 프론트엔드 개발을 1주일 안에 마무리하고, 그 다음 1주는 프론트엔드 테스트 화면 캡처 및 백엔드 테스트 코드 작성에 사용하는 것을 목표로 한다.

백엔드 개발은 비즈니스 로직을 고려한 CRUD 코드 작성이 반복되는 경우가 많으며, 이 중 추가, 수정, 삭제는 주로 한 행을 대상으로 한다. 이번 프로젝트 또한 많은 기능들은 이에 해당했지만, 그렇지 않았던 CRUD도 있어서 아래에 정리해본다.

1. CSV 일괄 등록

한 번에 많은 입사자가 생기면 한 명씩 일일이 사원 정보를 등록하는 것은 사용자의 입장에서 번거로운 작업이다. 따라서 CSV 파일에 여러 명의 정보를 입력한 뒤, 일괄 등록할 수 있게 하는 기능을 구현하였다. 로직은 크게 입력값이 올바른 순서로 매핑될 수 있도록 헤더를 채운 CSV 양식 파일 제공, 입력값 파싱 및 유효성 검증, 다중 행 삽입의 3단계로 나눌 수 있었다.

기능 테스트 중 CSV 파일을 엑셀로 편집하고 저장할 경우, 쉼표가 사라져 데이터가 깨지는 바람에 등록이 되지 않는 문제가 발견되었다. 이에 대한 해결책을 알아보니, 양식 및 업로드 파일을 CSV 대신 엑셀 파일로 제공하는 것이 가장 실무적으로 많이 쓰이는 방법이라고 한다. 우선은 CSV 업로드 페이지에 안내 사항을 자세히 적는 것으로 하되, 시간이 허락하면 엑셀 양식 및 일괄 등록 코드로 수정해 봐야겠다.

2. 사원 정보 수정

사원에게 등록된 학력, 자격증, 수상 이력 등을 수정하는 기능으로, 이 또한 행 단위로 하나씩 수정 및 저장하도록 하면 사용성이 좋지 않다. 따라서 여러 개의 행을 등록 및 삭제하고 저장하는 형태로 구현하였다. 즉, 다중 행 삽입 및 삭제를 하나의 엔드포인트에서 처리하는 것이 특징이다.

멘토링

이번 월요일에는 이력서 및 자기소개서 작성에 대한 1:1 멘토링을 진행하였다. 주말 동안 노션에 정리한 지금까지의 이력을 바탕으로 장단점이 무엇인지, 면접에서 나올 수 있는 질문과 자기소개서 문항에 어떤 것이 있는지 등을 말씀해 주셨다. 또한, 대기업의 블라인드 채용, B2B와 B2C 사업의 장단점, SI 회사와 금융권의 장단점 등 개발자 취업에 관해 잘 알지 못했던 정보를 얻을 수 있어 유익한 시간이었다.

교육장 내 회의 장소에서 진행된 기존 멘토링과 달리, 이번에는 멘토님 회사가 있는 을지로입구 역 근처에서 진행되었다. 멘토님께서는 이번이 4번째 멘토링이신데, 이력서 멘토링을 진행해보는 것이 처음이라고 하셨다. 취업 준비를 위해 훈련 외 시간을 별도로 할애하여 멘토링을 요청드린 점, 맞춤 조언을 줄 수 있도록 이력을 잘 정리해온 점을 좋게 봐주셨다.

이번 멘토링에서 받은 조언을 기반으로 수료 이후 취업 준비를 잘 해봐야겠다.

코테 스터디

이번 주에는 정렬 및 시뮬레이션 단원에 대한 코테 스터디가 진행되었다. 어려운 문제가 많았던 그래프, 백트래킹 등의 단원과 달리 대체로 쉬운 문제가 많았다.
어려운 문제들은 실제 코드 구현이 다르더라도 풀이가 정형화되어 로직이 비슷한 경우가 많은데, 이번 단원은 난이도가 낮아서인지 다양한 접근법이 가능했던 점이 인상적이었다.

문제 상황

이번 프로젝트를 진행하며 겪은 문제 상황을 정리해본다.

MyBatis Type definition error 발생

  • 설명: Postman 테스트 과정에서 아래와 같은 에러 메시지를 맞닥뜨렸다.
    문제 상황

  • 원인: 작성한 XML 쿼리가 값을 DTO에 매핑하지 못한 것이 원인이었다.

  • 해결 방법: DTO에 누락된 @Getter 어노테이션을 추가한 후 해결되었다.

@Getter // 이 부분이 누락되어 발생
public class WorkDetailsDTO {
    private int breakTime; // 휴게시간 (분 단위)

    private LocalDateTime startPushedAt;

    private LocalDateTime endPushedAt;

    private IsNormalWork isNormalWork;
}

지난 주에 겪은 query was empty와 마찬가지로 허무한 실수이지만 오류 메시지를 보았을 때 원인을 파악하기 어려웠고, ChatGPT 또한 다른 가능한 원인들을 소개해줄 뿐 정확한 원인을 진단하지 못했다. 디버깅이 꽤 오래 걸린 문제여서 기록을 위해 남긴다.

느낀 점

  1. 등록, 수정, 삭제를 위해서는 기존 데이터 조회가 필요한 경우가 많은데, CQRS 패턴으로 코드를 작성하다보니 간단한 조회의 경우 공통된 로직을 command와 query 양 쪽에 반복된다는 느낌이 들었다. 모든 패턴이나 구조에는 장단점이 있기 마련이므로, 나중에 개발 프로젝트를 진행할 때 다양한 구조를 적용해보며 공부해야겠다.

  2. 백엔드 개발을 목표한 기간 내에 무사히 마무리할 수 있어 다행이었다. 남은 프로젝트 기간도 잘 해봐야겠다.

profile
곽진웅, 백엔드 개발자 준비 중

0개의 댓글