2022 Masters Course/Project Course

2022 마스터즈 코스(백엔드) 63일차 회고(2022. 4. 6.) - "삽질 그리고 등잔 밑이 어둡다."

ikjo 2022. 4. 6. 21:15

해당 글은 코드스쿼드 2022 마스터즈 코스 "Java 웹 백엔드" 과정을 수강하면서 학습한 내용 등에 대한 회고 글입니다. :)

 

수강 회고

어제 미션을 수행하면서 스프링 부트 웹 앱 구동 시 연동된 데이터 베이스(MySQL)의 테이블 및 데이터가 (data.sql 및 schema.sql 파일에 의해) 초기화 되지 않는 오류가 발생했었는데, 이를 해결하기 위해 1시간 30분 정도 구글링을 했었지만 문제 원인 파악 및 문제 해결을 할 수 없었고, 결국 이 하나로 인해 너무 많은 시간이 소요되어 잠정적으로 문제 해결을 중단했었다.

 

그리하여 오늘 같은 팀원인 Hanse와 이 문제에 대해 논의하던 과정에서 해당 문제의 원인을 파악할 수 있었는데, 허무하게도 그리고 민망하게도 해당 문제의 원인은 파일명의 오탈자로 인함이었다. schema.sql이 아닌 scheman.sql로 되있었던 것이다...😂 이 문제의 원인을 찾기 위해 나름대로 스프링 부트 관련 영어로 된 문서들도 살펴보는 등 다방면으로 삽질을 했었는데 원인을 알고나니 굉장히 허무했다. (하지만 오류를 해결할 수 있어 기뻤다..🤣)

 

"등잔 밑이 어둡다."라는 말이 있듯이 어떤 오류들의 경우에는 문제의 원인(오탈자 등)이 아주 가까이에 있어도 알아보지 못하거나 찾지 못하는 경우가 많고 사소한 문제로 오랜 시간 삽질하는 경우가 많았다. 물론 삽질을 하면서 그 과정에서 많이 배우는 내용들도 많지만, 이번 경우와 같이 아주 사소한 문제로 인한 삽질의 경우에는 특별히 무언가를 배웠다는 느낌이 적은 것 같다. 

 

 

학습 회고

  • 투두리스트 구현 프로젝트
    • 팀원들(백 엔드 2명, 프론트 엔드 2명)과 zoom 회의실에서 학습

 

DispatcherServlet

스프링 웹 앱에서의 DispatcherServlet은 프론트 컨트롤러(Front Controller)라고도 하는데, 클라이언트의 모든 요청을 받은 후 이를 처리할 '핸들러(컨트롤러)'에게 넘기고 해당 핸들러가 처리한 결과를 받아 사용자에게 응답 결과를 보여주는 역할을 한다. 이 과정에서 DispatcherServlet은 여러 개의 컴포넌트를 이용해서 작업을 처리하게 된다. 좀 더 세부적으로 DispatcherServlet의 내부 동작흐름은 '요청 선처리 작업', '요청 전달', '요청 처리', '예외 처리', '뷰 렌더링 과정', '요청 처리 종료' 등으로 이루어지게 되는데, 각각의 작업에서는 다양한 컴포넌트들을 사용하게 된다.

 

예를 들어, '요청 선처리 작업'의 경우에는 대표적으로 지역 정보를 결정해주는 LocaleResolver 컴포넌트와 멀티파트 파일 업로드를 처리하는 MultipartResolver 컴포넌트 등을 사용하며, '요청 전달'의 경우에는 어떤 핸들러가 요청을 처리할지에 대한 정보를 가지고 있는 HandlerMapping 등을 사용한다. 아울러 '요청 처리' 시에 사용되는 컴포넌트로는 Controller의 처리 결과를 보여 줄 view와 view에서 사용할 값을 전달하는 ModelAndView 등을 사용한다.

 

또한 DispatcherServlet을 경우에 따라서 2개 이상 설정할 수 있는데 이 경우에는 각각의 DispathcerServlet의 ApplicationContext가 각각 독립적이기 때문에 각각의 설정 파일에서 생성한 빈을 서로 사용할 수 없다. 만일 동시에 필요로 하는 빈이 있을 경우에는 ContextLoaderListener를 사용함으로써 공통으로 사용할 수 있게 하는 방법이 있다.

 

 

좋았던 점

  • 어떤 오류가 있을 때 팀원과 같이 대화하다보면 혼자서는 보이지 않았던 것이 보이게 되는 것 같은데, 이러한 점이 팀 플레이의 좋은 장점이지 않을까라는 생각이 들었습니다.

 

 

아쉬웠던 점

  • 단순 오타 문제로 발생한 오류를 해결하기 위해 오랜 시간을 소비했었기에 아쉬움이 들었습니다. 💦

 

 

이전 보다 개선되었던 점

  • 구조에 대해 적은 고민으로 웹 앱을 구현했었던 예전과 달리 이번 미션을 진행하면서는 좀 더 구조적인 부분에 대해서 고민하면서 개발하고 있다는 느낌을 받았습니다. ✨