
우테코에서 자동차 경주 미션을 하면서 리뷰어님께 위와 같은 피드백을 받았습니다.. 미션은 GitHub - woowacourse/java-racingcar-precourse: 자동차 경주 게임 미션을 위한 저장소에서 볼 수 있습니다 public class InputView { private static final int MAX_TRIAL_NUM = 2; private static final int MIN_CAR_NAME_LENGTH = 1; private static final int MAX_CAR_NAME_LENGTH = 5; } 위 클래스는 자동차의 입력을 받는 클래스의 필드 선언 부분입니다.. 여기서 고민이 됐던 점은 요구 사항에서 InputView의 경우 하나의 인스턴스만 생성되는데 해당 필드들을 ..

해당 글은 김영한님의 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의를 수강하고 정리한 게시글입니다. PRG Post/Redirect/Get @PostMapping("/basic/items/add") public String addItemV4(Item item) { itemRepository.save(item); return "basic/item"; } // model.addAttribute("item", item); 자동 추가, 생략 // 클래스의 첫글자를 소문자로 바꾸고 ModelAttribute에 넣어주기 때문에 생략 // ModelAttribute 또한 생략 위와 같은 기능을하는 컨트롤러가 있고 이 컨트롤러의 기능은 다음과 같다. [전체 흐름] 상품 등록 페이지에서 상품을 입..

해당 글은 김영한님의 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의를 수강하고 정리한 게시글입니다. 뷰 : 타임 리프 기초와 예시 타임리프 핵심 핵심은 th:xxx 가 붙은 부분은 서버사이드에서 렌더링 되고, 기존 것을 대체한다. th:xxx 이 없으면 기존 html의 xxx 속성이 그대로 사용된다. HTML을 파일로 직접 열었을 때, th:xxx 가 있어도 웹 브라우저는 th: 속성을 알지 못하므로 무시한다. 따라서 HTML을 파일 보기를 유지하면서 템플릿 기능도 할 수 있다. 참고. : 타임리프는 순수 HTML을 파일을 웹 브라우저에서 열어도 내용을 확인할 수 있고, 서버를 통해 뷰 템플릿을 거치면 동적으로 변경된 결과를 확인할 수 있다. JSP를 생각해보면, JSP 파일은 웹..

해당 글은 김영한님의 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의를 수강하고 정리한 게시글입니다. 스프링 MVC - HTTP 메시지 컨버터 뷰 템플릿으로 HTML을 생성해서 응답하는 것이 아니라, HTTP API처럼 JSON 데이터를 HTTP 메시지 바디에서 직접 읽거나 쓰는 경우 HTTP 메시지 컨버터를 사용하면 편리하다. HTTP 메시지 컨버터를 설명하기 전에 스프링 입문편 내용을 살펴보자. [@ResponseBody 사용 원리] @ResponseBody를 사용하면 HTTP의 Body에 문자 내용을 직접 반환 viewResolver 대신에 HttpMessageConverter가 동작 기본 문자처리 : StringHttpMessageConverter 기본 객체처리 : Mappi..

해당 글은 김영한님의 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의를 수강하고 정리한 게시글입니다. 스프링 MVC - 기본 기능 로깅 운영 시스템에서는 System.out.println() 같은 시스템 콘솔을 사용해서 필요한 정보를 출력하지 않고, 별도의 로깅 라이브러리를 사용해서 로그를 출력한다. 로깅 라이브러리 스프링 부트 라이브러리를 사용하면 스프링 부트 로깅 라이브러리( spring-boot-starter-logging )가 함께 포함된다. SLF4J - http://www.slf4j.org Logback - http://logback.qos.ch 로그 라이브러리는 수 많은 라이브러리가 있는데, 그것들을 통합해서 인터페이스로 제공하는 것이 SLF4J 라이브러리이다. //@S..

해당 글은 김영한님의 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의를 수강하고 정리한 게시글입니다. 스프링 MVC - 시작하기 스프링이 제공하는 컨트롤러는 애노테이션 기반으로 동작해서 매우 유연하고 실용적이다. 참고 : 가장 우선순위가 높은 핸들러 매핑과 핸들러 어댑터는 RequestMappingHandlerMapping , RequestMappingHandlerAdapter 이다. @RequestMapping 의 앞글자를 따서 만든 이름인데, 스프링에서 주로 사용하는 애노테이션 기반의 컨트롤러를 지원하는 매핑과 어댑터이다. (실무에서 99.9% 이 방식 사용) 이제 기존에 있던 코드들을 스프링의 @RequestMapping 기반의 컨트롤러를 사용하여 변경해보자. 1. 회원 등록 ..

해당 글은 김영한님의 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의를 수강하고 정리한 게시글입니다. 스프링 MVC 구조 이해 [이전에 만든 MVC 프레임워크 구조] [Spring MVC 프레임워크 구조] 직접 만든 프레임워크 스프링 MVC 비교 FrontController -> DispatcherServlet handlerMappingMap -> HandlerMapping MyHandlerAdapter -> HandlerAdapter ModelView -> ModelAndView viewResolver(메서드) -> ViewResolver(인터페이스) MyView -> View 앞에서 설명했듯, 스프링 MVC도 프론트 컨트롤러 패턴으로 구성되어있다. 스프링 MVC의 프론트 컨트롤러..

해당 글은 김영한님의 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의를 수강하고 정리한 게시글입니다. 어댑터 패턴을 이용한 유연한 컨트롤러 - V5 만약 어떤 개발자는 이전 “ControllerV3“ 방식으로 개발하고 싶고, 어떤 개발자는 “ControllerV4“ 방식으로 개발하고 싶다면 어떻게 해야할까? public interface ControllerV3 { ModelView process(Map paramMap); } public interface ControllerV4 { String process(Map paramMap, Map model); } 어댑터 패턴을 사용해서 프론트 컨트롤러가 다양한 방식의 컨트롤러를 처리할 수 있도록 변경해보자. 참고: 지금까지 우리가 개발한 ..