StudyRepository
728x90
article thumbnail
로그인 처리 (쿠키)
Spring 2023. 6. 27. 15:10

선수지식 web은 domain을 알고있지만 domain은 web을 모르도록 설계해야 한다. 이것을 web은 domain을 의존하지만, domain은 web을 의존하지 않는다고 표현한다. 예를 들어 web 패키지를 모두 삭제해도 domain에는 전혀 영향이 없도록 의존관계를 설계하는 것이 중요하다. 반대로 이야기하면 domain은 web을 참조하면 안된다. 우선 html파일로 홈 화면을 구현해보자. public class HomeController { @GetMapping("/") public String home() { return "home"; } } 1.Member package hello.login.domain.member; import lombok.Data; import javax.validati..

@ModelAttribute, @RequestBody
Spring 2023. 6. 26. 17:20

@RequestBody와 @ModelAttribute는 클라이언트 측에서 보낸 데이터를 Java 코드에서 사용할 수 있는 오브젝트로 만들어주는 공통점이 있다. 하지만 이 두 애너테이션은 세부 수행 동작에서 큰 차이를 보인다. @RequestBody 클라이언트가 보내는 HTTP 요청 본문(JSON 및 XML 등)을 Java 오브젝트로 변환하는 것. HTTP 요청 본문 데이터는 Spring에서 제공하는 HttpMessageConverter를 통해 타입에 맞는 객체로 변환된다. 1. @RequestBody를 사용하면 요청 본문의 JSON, XML, Text 등의 데이터가 적합한 HttpMessageConverter를 통해 파싱되어 Java 객체로 변환 된다. 2. @RequestBody를 사용할 객체는 필드를..

메시지, 국제화
Spring 2023. 6. 16. 20:51

메시지 악덕 기획자가 화면에 보이는 문구가 마음에 들지 않는다고, 상품명이라는 단어를 모두 상품이름으로 고쳐달라고 하면 어떻게 해야할까? 여러 화면에 보이는 상품명, 가격, 수량 등, label 에 있는 단어를 변경하려면 다음 화면들을 다 찾아가면서 모두 변경해야 한다. 화면 수가 적으면 문제가 되지 않지만 화면이 수십개 이상이라면 수십개의 파일을 모두 고쳐야 한다. 왜냐하면 해당 HTML 파일에 메시지가 하드코딩 되어 있기 때문이다. 이런 다양한 메시지를 한 곳에서 관리하도록 하는 기능을 메시지 기능이라 한다. 국제화 메시지에서 한 발 더 나가보자. 메시지에서 설명한 메시지 파일( messages.properties )을 각 나라별로 별도로 관리하면 서비스를 국제화 할 수 있다. 예를 들어서 다음과 같..

article thumbnail
주요 annotation
Spring 2023. 6. 7. 15:40

Thymeleaf
Spring 2023. 6. 5. 21:23

Thymeleaf란? '템플릿 엔진'의 일종. html 태그에 속성을 추가해 페이지에 동적으로 값을 추가하거나 처리할 수 있다. 특징 서버 사이드 HTML 렌더링(SSR) : 타임리프는 백엔드 서버에서 HTML을 동적으로 렌더링하는 용도로 사용된다. 사용법은 SSR이 다 비슷하기에 학습하기에도 어렵지 않고, 페이지가 어느정도 정적이고 빠른 생산성이 필요한 경우 백엔드 개발자가 개발해야하는 일이 생기는데 이 경우 타임리프는 좋은 선택지이다. 네츄럴 템플릿 :타임리프는 순수한 HTML을 최대한 유지하려는 특징이 있다. 이게 JSP와의 큰 차이점으로 타임리프로 작성한 파일은 확장자도 .HTML이고 웹 브라우저에서 직접 파일을 열어도 내용을 확인할 수 있다. 물론, 이 경우 동적인 결과 렌더링은 되지 않지만 H..

article thumbnail
상품관리 서비스(1)
Spring 2023. 6. 5. 19:45

Spring으로 상품을 관리할 수 있는 서비스를 만들어보자 -상품 도메인 모델- 1.상품 ID 2.상품명 3.가격 -상품 관리 기능- 1.상품 목록 2.상품 상세 3.상품 등록 4.상품 수정 요구사항이 정리되고 디자이너, 웹 퍼블리셔, 백엔드 개발자가 업무를 나누어 진행한다. 디자이너: 요구사항에 맞도록 디자인하고, 디자인 결과물을 웹 퍼블리셔에게 넘겨준다. 웹 퍼블리셔: 다자이너에서 받은 디자인을 기반으로 HTML, CSS를 만들어 개발자에게 제공한다. 백엔드 개발자: 디자이너, 웹 퍼블리셔를 통해서 HTML 화면이 나오기 전까지 시스템을 설계하고, 핵심 비즈니스 모델을 개발한다. 이후 HTML이 나오면 이 HTML을 뷰 템플릿으로 변환해서 동적으로 화면을 그리고, 또 웹 화면의 흐름을 제어한다. Re..

article thumbnail
ArgumentResolver & ReturnValueHandler
Spring 2023. 6. 2. 15:44

ArgumentResolver 애노테이션 기반의 컨트롤러는 매우 다양한 파라미터를 사용할 수 있다. HttpServletRequest , Model 은 물론이고, @RequestParam , @ModelAttribute 같은 애노테이션 그리고 @RequestBody , HttpEntity 같은 HTTP 메시지를 처리하는 부분까지 매우 큰 유연함을 보여준다. 이렇게 파라미터를 유연하게 처리할 수 있는 이유가 바로 ArgumentResolver 덕분이다. 애노테이션 기반 컨트롤러를 처리하는 RequestMappingHandlerAdapter 는 바로 이 ArgumentResolver 를 호출해서 컨트롤러(핸들러)가 필요로 하는 다양한 파라미터의 값(객체)을 생성한다. 그리고 이렇게 파리미터의 값이 모두 준비..

article thumbnail
요청 매핑
Spring 2023. 5. 31. 21:25

@RequestMapping 은 URL 경로를 템플릿화 할 수 있는데, @PathVariable 을 사용하면 매칭 되는 부분을 편리하게 조회할 수 있다. @PathVariable 의 이름과 파라미터 이름이 같으면 생략할 수 있다. 주소에서 userId를 매핑할 수 있다. @GetMapping("mapping/{userId}") public String mappingPath(@PathVariable("userId") String data){ log.info("mappingPath userId={}", data); return "ok"; } 다중 사용도 가능하다. @GetMapping("/mapping/users/{userId}/orders/{orderId}") public String mappingPath..

article thumbnail
스프링 MVC
Spring 2023. 5. 31. 14:44

직접만든 MVC와 스프링 MVC 비교 스프링 MVC 구조 FrontController -> DispatcherServlet handlerMappingMap -> HandlerMapping MyHandlerAdapter -> HandlerAdapter ModelView -> ModelAndView viewResolver -> ViewResolver MyView -> View 동작 순서 1. 핸들러 조회: 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조회한다. 2. 핸들러 어댑터 조회: 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다. 3. 핸들러 어댑터 실행: 핸들러 어댑터를 실행한다. 서블릿이 호출되면 HttpServlet 이 제공하는 serivce() 가 호출된다. 스프링 MVC는 D..

FrontControllerServlet
Spring 2023. 5. 30. 20:05

http://localhost:8080/front-controller/v5/v3/members/new-form 주소가 들어오면 handlerMappingMap.put("/front-controller/v5/v3/members/new-form", new MemberFormControllerV3()); Object handler = getHandler(request); MemberFromControllerV3가 반환된다. MyHandlerAdapter adapter = getHandlerAdapter(handler); private MyHandlerAdapter getHandlerAdapter(Object handler) { for (MyHandlerAdapter adapter : handlerAdapter..

article thumbnail
HandlerAdapter
Spring 2023. 5. 30. 19:55

Controller 인터페이스를 구현한 Controller가 실행되려면 HandlerMapping, HandlerAdapter 두 가지가 필요하다. HandlerMapping Handler Mapping에서 특정 Controller를 찾을 수 있어야 함 HandlerAdapter Handler Mapping을 통해 찾은 Handler를 실행할 수 있는 Handler Adapter가 필요 -과정- 1. 클라이언트의 HTTP 요청 2. 요청 URI 매핑 정보로 FrontController 조회 3. Handler Mapping 정보에서 Handler조회 4. Handler Mapping 정보에서 찾은 Handler를 처리할 수 있는 Handler Adapter를 Handler Adapter목록에서 조회 My..

728x90