2022 Masters Course/Web Backend Course

2022 마스터즈 코스(백엔드) 50일차 회고(2022. 3. 18.) - "길면 길고 짧으면 짧았던 지난 50일"

ikjo 2022. 3. 18. 20:13

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

 

수강 회고

오늘로 벌써 마스터즈 코스 과정을 시작한지 50일차가 되었다. 주변 지인들에게도 간간이 나의 소식을 마스터즈 코스 일일 회고 등을 통해 전해드리곤 하는데, 다들 벌써 부트 캠프(코드스쿼드 마스터즈 코스 과정)를 시작한지 50일이나 됐냐고들 한다. 사실 내가 느끼기에는 지난 50일(10주차)은 길면 길었고 짧으면 짧았던 시간이었던 것 같다.

 

1주차 때부터 10주차 때까지 계절이 바뀌는지도 모르고 하루하루 그리고 일주일이 정말 빠르게 지나갔었다. 그만큼 프로그래밍 학습에 몰입하고 있었던 것인데, 이번에 마스터즈 코스 과정을 수강하면서 역시 공부에는 "환경"이 정말 중요하다는 것을 알 수 있었다. 😂 지금까지 총 50개의 일일 회고가 작성되었지만 이러한 일일 회고가 70개가 더 쌓여야 마스터즈 코스 과정을 수료할 수 있다. 🤣 (마스터즈 코스 과정은 총 24주)

 

다음주 부터는 2주간 페어 프로그래밍으로 진행되며 그 이후에는 12주간 팀 프로젝트로 진행된다. 사실상 "나 혼자" 미션을 수행하는 것은 오늘로 마지막이다. 지난번 일일 회고(23일차, 31일차, 33일차)에서 회고했듯이 "나 혼자" 프로그래밍 하는 것과 "팀원과 함께" 프로그래밍 하는 것은 근본적으로 큰 차이가 있다. "나 혼자" 프로그래밍 하는 것은 나에게만 집중하면 되지만, "팀원과 함께" 프로그래밍 하는 것은 "팀원"에게도 집중해야한다.

 

지난번 페어 프로그래밍을 통해서 얻었던 경험과 같이 팀 프로젝트에서 제일 중요한 것은 "정답과 원칙" 보다 "팀원과의 호흡"이라고 생각한다. 다음주 페어 프로그래밍을 진행하면서 "나만의 생각"을 고집하고 있는지 또한 "상대의 입장"을 배려하고 있는지 등에 유의하도록 노력해야겠다.

 

 

학습 회고

  • 스프링 부트 관련 미션 과제 풀이
    • Java 웹 백엔드 클래스 내 소모임원과 zoom 회의실에서 학습

 

지난 번 일일 회고(38일차)에서 세션에 대해 정리하면서 "서블릿 컨테이너(Servlet Container)"에 대한 언급을 잠시했었는데, 스프링 내부적으로 서블릿 객체가 만들어지는 등 추상화 되어있다보니 접하기가 쉽지 않다. 그리하여 서블릿에 대한 기본적인 개념과 동작 원리 등에 대해 공부해보았는데 주요 내용으로는 다음과 같다.

 

서블릿(Servlet)이란?

서블릿은 자바 웹 애플리케이션의 구성 요소로서 URL 요청에 따라 웹 페이지를 동적으로 처리 및 생성하는 WAS(Web Application Server)에서 동작하는 자바 클래스의 일종(HttpServlet 클래스 상속)이다. 이때 서블릿의 경우 자바 코드 안에 HTML을 포함하고 있는데, JSP의 경우 HTML 문서 안 안에 Java 코드를 포함하고 있어 이 두 가지를 조화롭게 사용하곤 했었다. (JSP는 지금도 많이 사용되고 있는 실정이지만 점차 감소하는 추세라고 한다.) 즉, 웹 페이지를 구성하는 화면(HTML)은 JSP로 표현하여 정적인 데이터를 처리하고, 복잡한 로직 등의 프로그래밍은 서블릿으로 구현하여 동적인 데이터 처리를 했던 것이다.

 

이미지 출처 : https://dinfree.com/lecture/backend/javaweb_2.1.html

 

서블릿(Servlet)의 생명주기

프로그래밍에서 "생명주기(Life Cycle)"란 어떤 객체의 생성부터 소멸까지의 과정이라는 뜻으로 사용된다.

 

WAS는 웹 브라우저로부터 요청을 받으면 우선 해당 요청을 처리할 서블릿이 메모리에 있는지 확인한다. 만일 서블릿이 메모리에 없으면 내부적으로 init() 메서드 등을 실행하여 해당 서블릿 클래스를 메모리에 올리고(클래스 로드) 서블릿 객체(인스턴스화)를 만든다.(서블릿 초기화 작업)

 

이후 WAS는 별도 초기화 작업 없이 매번 요청을 받을 때마다 service() 메서드를 호출하여 doGet(), doPost() 등의 메서드를 통해 각각의 요청에 대한 응답 결과를 처리한다. 이때 만일 WAS가 종료되거나 웹 앱이 새롭게 갱신(서블릿 수정 등)될 경우 destroy() 메서드가 호출되면서 생성된 서블릿 객체를 제거한다.

 

이미지 출처 : 부스트코스 웹 프로그래밍(풀스택)

 

참고자료

  • 부스트코스 웹 프로그래밍(풀스택)
  • 위키백과(자바 서블릿)

 

 

좋았던 점

  • 오늘을 포함하여 지난 한 주간 그룹 리뷰를 통해 소모임원들로부터 좋은 정보가 공유될 수 있어서 좋았고 아울러 즐거운 대화도 할 수 있어서 전반적으로 유익하고 재밌었던 한 주였습니다. 지난 한 주간 함께 해주신 포키, 노리, BC, 쿠킴, Riako, 로니 모두에게 감사의 인사를 드리고 싶습니다. 🥂

 

 

아쉬웠던 점

  • 지난 3주간 진행되었던 스프링 부트 미션 과제 중에 수행하지 못한 과제 많았던 점이 아쉬웠습니다.

 

 

이전 보다 개선되었던 점

  • 지난 3주 동안 스프링 부트 관련 미션을 진행하면서 스프링 부트 웹 앱의 객체(컨트롤러, 서비스, 레파지토리 등)들의 책임과 역할 그리고 테스트 코드 작성, 배포 등 이전에 경험해보지 못했던 것들에 대해 고민해보고 활용해봄으로써 이전 보다 더 성장할 수 있었던 것 같습니다. 💪