API 계층은 클라이언트의 요청을 직접적으로 전달받는 계층이다.
일반적으로 프로젝트 생성시 앤트리포인트 클래스는 이미 작성되어 있다.
@SpringBootApplication은
SpringApplication.run(Section3Week1Application.class, args);

@RestController
-Spring MVC에서는 특정 클래스에 @RestController를 추가하면 해당 클래스가 REST API의 리소스(자원)를 처리하기 위한 API 엔드포인트로 동작함을 정의한다.
또한 @RestController가 추가된 클래스는 애플리케이션 로딩 시, Spring Bean으로 등록해 준다.
@RequestMapping
-@RequestMapping은 클라이언트의 요청과 클라이언트 요청을 처리하는 핸들러 메서드(Handler Method)를 매핑해 주는 역할.
@RequestMapping 은 Controller 클래스 레벨에 추가하여 클래스 전체에 사용되는 공통 URL(Base URL) 설정을 한다.

@RequestMapping에 추가된 produces
-produces 애트리뷰트(Attribute)는 응답 데이터를 어떤 미디어 타입으로 클라이언트에게 전송할지를 설정한다. 여기서는 JSON 형식의 데이터를 응답 데이터로 전송하겠다는 의미로 MediaType.APPLICATION_JSON_VALUE 값을 설정했다. 이 값을 설정하지 않으면 현재 코드에서는 JSON 형식의 데이터를 응답으로 전송하지 않고, 문자열 자체를 전송한다.
@RequestParam
-@RequestParam은 핸들러 메서드의 파라미터 종류 중 하나다.
주로 클라이언트 쪽에서 전송하는 요청 데이터를 쿼리 파라미터(Query Parmeter 또는 Query String), 폼 데이터(form-data), x-www-form-urlencoded 형식으로 전송하면 이를 서버 쪽에서 전달받을 때 사용하는 애너테이션이다.
(쿼리 파라미터(Query Parameter 또는 QueryString)는 요청 URL에서 ‘?’를 기준으로 붙는 key/value 쌍의 데이터를 말한다.)
ex) http://localhost:8080/coffees/1?page=1&size=10
핸들러 메서드의 리턴 값으로 Map 객체를 리턴하면 Spring MVC 내부적으로 JSON 형식의 데이터를 생성해 준다.
(Map<String, String>의 경우 key와 value가 모두 String.
다른 타입의 데이터를 map에 추가하기 위해서는 value 타입을 Object로 지정)
즉, 클래스 레벨의 @RequestMapping에 ‘produces’ 애트리뷰트를 지정할 필요가 없다.
ResponseEntity 클래스로 응답 데이터를 래핑함으로써 조금 더 세련된 방식으로 응답 데이터를 리턴할 수 있다.
POST Method 형식의 클라이언트 요청에 대한 응답 상태는 HttpStatus.OK보다는 HttpStatus.CREATED가 조금 더 자연스럽다.
잘 읽었습니다. 좋은 정보 감사드립니다.