WEB 158

Spring MVC 2편 로그인 처리1 쿠키 세션

새로운 패키지 구조를 살펴보면 향후 web 을 다른 기술을 바꾸어도 도메인은 그대로 유지할 수 있어야한다. domain 은 web을 의존하지 않지만 web은 도메인을 의존해도 된다. Member Domain 과 Member Repository를 만들어준다. @Data public class Member { private Long id; @NotEmpty private String loginId; // 로그인 ID @NotEmpty private String name; @NotEmpty private String password; } @Slf4j @Repository public class MemberRepository { private static Map store = new HashMap(); //st..

WEB/Spring MVC 2 2021.10.10

Spring MVC 2편 검증2 - Bean Validation

Bean Validation은 검증 annotation+ interface의 모음 , 즉 그냥 스펙이다. 구현체는 여러 opensource나 다른 사용 vendor에서 구현이 가능하다. hibernate validator가 존재한다. package hello.itemservice.domain.item; import lombok.Data; import org.hibernate.validator.constraints.Range; import javax.validation.constraints.Max; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; @Data public class Item { ..

WEB/Spring MVC 2 2021.09.26

스프링캠프 2017 Async & Spring

동기 비동기를 언급할 때는 항상 무엇과 무엇이 와 어떤 시간을? 관한 언급이 있어야 한다. 메소드 리턴시간 과 실제로 결과를 전달받는 시간이 다르면 비동기 라고 생각하면 된다. 블록킹 논블록킹 은 동기 비동기와 는 개념이 다르다. 내가 직접 제어할 수 없는 대상을 상대하는 방법 (IO, 멀티스레드 동기화) 이 경우에는 내가 비동기적으로 시킨 제 3의 스레드에서 결과를 다 만들어서 값을 리턴할떄까지 블록상태(대기)에 들어간다. @Async 메소드의 리턴타입은 void, Future , ListenableFuture , CompletableFuture 로 총 4가지다. 메소드호출에서 리턴되는 시점하고 실제 결과를 가져오는 시점이 다르다. spring 4.0에서 추가된 자바 인터페이스이다. 성공했을때와 실패해..

WEB/Spring 2021.09.10

Spring MVC 2편 검증1 - Validation

클라이언트가 준 입력이 우리의 Validation Requirement와 맞지 않을 때는 Model 에 잘못된 데이터와 오류의 원인을 담아서 다시 addForm 페이지를 보여주면서 클라이언트에게 어떤게 잘못되었는지를 알려주어야한다. @PostMapping("/add") public String addItem(@ModelAttribute Item item, RedirectAttributes redirectAttributes, Model model) { //검증 오류 결과를 보관 Map errors = new HashMap(); //검증 로직 if (!StringUtils.hasText(item.getItemName())) { errors.put("itemName", "상품 이름은 필수입니다."); } if..

WEB/Spring MVC 2 2021.09.05

Spring MVC 2편 메시지, 국제화

메세지 messages.properties 같은 메시지 관리용 파일을 만들어서 여기서 다 관리를 한다. item=상품 item.id = 상품 ID item.price = 가격 이것들을 다른 페이지에 다 똑같이 적용시켜서 관리한다. 국제화 messages.properties 를 각 나라별로 관리하면 서비스를 국제화 할 수 있다. 예를 들면 message_en.properties, message_kr.properties 등등 item=Item item.id=Item ID item.itemName=Item Name 어느 나라에서 접근했는지 인식하는 방법은 HTTP accep-language 헤더 값을 사용하거나 사용자가 직접 언어를 선택하도록 하고 , 쿠키 등을 사용해서 처리하면 된다. BUT Spring은 ..

WEB/Spring MVC 2 2021.08.21

스프링 MVC 2편 - 스프링 통합과 폼

html 에서 id , name ,value(객체 안에있는 값을 출력) attribute 를 자동으로 생성하는 방법 @GetMapping("/add") public String addForm(Model model) { model.addAttribute("item",new Item()); return "form/addForm"; } 상품명 빈 객체를 넘겨주고 html 에서 th:object 로 받아온다. th:field 에서 받아온 객체는 * 로 표시가되고 그 안의 프로퍼티를 접근한다. th:field="${item.itemName}" 이렇게 써도 무방하다. 이렇게 하면 name 이 잘못되었을때도 오류페이지를 띄워준다. 체크박스 html에서 체크 박스를 선택하지 않고 폼을 전송하면 open 등등 필드 자체..

WEB/Spring MVC 2 2021.08.14

스프링 MVC 2편 - 타임리프 기본기능

네츄럴 템플릿 타임리프는 순수 html 을 유지하는 특징이 있다. 타임리프로 작성한 파일은 HTML을 유지하기 떄문에 웹 브라우저에서 파일을 직접 열어도 확인 할 수 있고 , 서버를 통해 뷰 템플릿을 거치면 동적으로 변경된 결과를 확인 할 수 있다. 이스케이프 이런 tag들을 그대로 내보내지 않는다. 타임리프는 기본으로 이스케이프 처리를 해준다. 각각 아래의 라인이 unescape 하는 방법이다. th:text 사용 th:text 사용 컨텐츠 안에서 직접 출력하기 = [(${data})] 컨텐츠 안에서 직접 출력하기 = [[${data}]] Object , List ,Map 꺼내는 방법 SpringEL 표현식 Object ${user.username} = ${user['username']} = ${use..

WEB/Spring MVC 2 2021.08.13

tomcat이란?

rest api 같은 경우에는 direct 로 EIS Tier에 연결된다. View단이 필요할 때는 Web Tier를 거치게된다. 거기서 비즈니스로직을 거처야한다면 비즈니스 티어를 거치게된다. Tier 에서 Container로 바뀌었다. 영역에서 하나의 기술적인 구현체로 바뀌었다. Db 에 direct에 접속할 필요가 없다. DB관련 된것을 알 필요없이 EJB Container에게 요청만 하면된다. Applet Container 는 웹 브라우저라고 생각하면 된다. Tomcat은 Web Container만 구현한 container다. 따라서 Http 통신만 Tomcat과 소통이 가능하다 .TCP 같은 프로토콜은 불가능하다. 비즈니스 container는 포함되지 않는다. JEUS - Tmax에서 만든 JEE..

WEB 2021.06.24