Group Study (2022-2023)/Spring 입문

1주차 레퍼런스

민휘 2023. 1. 12. 14:35

1주차 레퍼런스 문서와 멤버분들이 추가 공부한 내용을 스크랩했습니다.

 

1장

1장에서는 개발 환경을 세팅하고 스프링 부트 프로젝트를 생성했습니다. 우리는 하필이면 왜 스프링 프레임워크를 사용하는걸까요? 스프링 개발자 수요가 최근 늘어난 것은 어떠한 이유일까요? 스프링 프레임워크의 정체성이 무엇인지 구글링을 통해 알아봅시다.

스프링 프레임워크는 어떻게 등장했는가?

💡 태초에 EJB가 있었나니..

스프링 프레임워크는 다른 백엔드 프레임워크와 어떤 부분이 다른가?

💡 스프링 프레임워크는 좋은 객체 지향 설계(OoP)가 가능하다.

스프링과 스프링 부트의 차이점은 무엇인가?

💡 Spring의 약점, 어려운 설정과 버전 관리, 그리고 배포(jar vs war)

 

2장

2장 실습은 짧았지만 아주 중요한 내용을 포함하고 있습니다. 처음으로 Rest API Controller를 만들어보고, 컨트롤러 단위 테스트를 진행해봤습니다. 의존성 주입(DI)도 해보고, 스프링 서버를 로컬 환경에서 실행해보기도 했습니다.

테스트 코드의 중요성

💡 교재 52p. 테스트 코드 소개

테스트 코드의 중요성은 두말 하면 입 아플 정도로 강조되고 있습니다. 유명한 개발 서적인 클린코드, 리팩터링, 토비의 스프링 등에서도 테스트 코드의 중요성은 책 전반에서 강조되고 있어요. 우리는 왜 테스트 코드를 작성해야할까요? 개발 현장에 가면 10명 중 6명은 테스트 코드를 작성하고 있다는데, 왜 테스트 코드에 정성을 들여야할까요?

 

스프링 프레임워크와 WAS

💡 교재 58p. 내장 WAS

교재 설명을 읽으면서 이게 뭔 소리야..🤯 하셨던 분들 있을까요? 저는 처음 교재를 읽을 때 무슨 말인지 이해가 안가서 절망했던 기억이 있는데요. 사실 이 내용은 백엔드나 네트워크를 처음 접하신 분들께는 생소할겁니다. 서블릿을 공부하다보면 자연스럽게 알 수 있는 내용이에요. (이건 저도 아직 공부중..)서블릿을 더 파보면 Front Controller 패턴, Dispatcher Servlet 등 Http 요청을 효과적으로 처리하기 위한 방법들을 접할 수 있습니다.

서블릿은 웹 프로그래밍에서 클라이언트 요청을 처리하고 처리 결과를 클라이언트에 전송하는 기술입니다. Mvc 패턴에서는 Controller가 해당 역할을 수행하죠. 하지만 우리가 작성한 단순한 코드 몇 줄이 요청을 뚝딱 받아주는 것은 아닙니다. Http 요청을 받아주고 응답을 반환하는 WAS가 필요하고, 요청을 안정적으로 관리해줄 서블릿 컨테이너도 필요합니다. 대표적인 서블릿 컨테이너 중 하나가 톰캣이고요. spring boot는 내부적으로 내장 톰캣을 가지고 있어서, 스프링 부트가 실행되면 내부적으로 내장 톰캣이 함께 실행됩니다. 스프링 부트가 알아서 내장 서버를 띄워주기 때문에 우리는 자바 코드 몇줄로 편리하게 HTTP 요청을 받고 응답을 반환할 수 있는 것이죠. 개인적으로 HTTP 요청을 WAS가 어떻게 받아들여서 스프링 내부의 컨트롤러가 실행되는지는 한번 정리해보셨으면 좋겠습니다.

 

Http Rest API란?

💡 교재 60p. @RestController

Rest 외에 다른 API 형식은 무엇이 있을까?@RestController는 JSON을 반환하는 컨트롤러로 만들어주는 어노테이션입니다. 협업하는 개발자 중 웹이나 앱을 담당하는 프론트 개발자가 있다면, 서버는 JSON 응답 데이터를 내려주는 컨트롤러를 개발해야 하며, 약속된 패턴 중 하나가 바로 REST입니다. RESTful한 API 설계는 어떻게 할 수 있을까요? 어떻게 해야 api만으로 직관적으로 명령을 이해할 수 있을까요? 또 REST API 외에 다른 API 패턴은 무엇이 있을까요? (힌트 : GraphQL)

 

스프링 MVC 패턴의 단위 테스트와 테스트 어노테이션

💡 교재 62p. @WebMvcTest

교재 62p의 @WebMvcTest 설명을 보고 이해가 안되는 분들이 있을 것 같다는 생각이 듭니다. (이해가 되셨다면.. 스프링 심화로 컴컴) MVC 패턴을 따르는 서버 애플리케이션의 계층 구조는 주로 Repository(DB 접근 계층), Service(비즈니스 로직 계층), Controller(Http 요청, 응답 계층)으로 나뉩니다. 테스트 코드를 작성할 때는 각 계층 별로 단위 테스트를 수행하는 것을 권장해요. 교재 설명 세번째 줄에서 @Service, @Repository는 Controller가 아닌 다른 계층에 사용되는 애노테이션입니다. 실습 코드는 컨트롤러만을 테스트하기 때문에 해당 애노테이션은 사용할 수 없던 것이죠. @WebMvcTest는 여러 스프링 테스트 어노테이션 중 Web 계층, 즉 Controller 계층에 집중하는 어노테이션입니다. 그렇다면 @ControllerAdvice를 사용할 수 있다 말은 무슨 의미일까요? 그전에 @ContollerAdvice는 무엇일까요? 찾아봅시다.

 

@Autowired가 뭘까?

💡 교재 62p. @Autowired

교재 설명에는 스프링이 관리하는 빈을 주입 받는다고 나와있습니다. 사실 @Autowired는 스프링의 핵심 개념 중 하나인 의존성 주입(DI)를 실현할 수 있는 방법 중 하나인데요. DI를 이해하기 위해서는 빈이 무엇인지, 스프링이 빈을 관리하기 위해 어떠한 방식으로 컨테이너를 관리(힌트 : 싱글톤 컨테이너) 하는지 알아야 합니다. 관련 자료가 많으니 열심히 구글링해서 지식을 습득해보세요😎

그외 추천하는 레퍼런스입니다.

  1. 스프링 프레임워크는 다른 백엔드 프레임워크와 어떤 부분이 다른가?
  2. 스프링과 스프링 부트의 차이점은 무엇인가?
  3. 테스트 코드의 중요성
  4. 스프링 프레임워크와 WAS
  5. Http Rest API
  6. 스프링 MVC 패턴의 단위 테스트와 테스트 어노테이션
  7. 의존성 주입

 


 

❄️ 멤버들 추가공부 자료