분류 전체보기 썸네일형 리스트형 Mock 객체(Feat. Cookie,Session, Mock 객체) public class SessionManager { private static final String SESSION_COOKIE_NAME = "mySessionID"; private Map sessionStore = new HashMap(); /** * 1] 세션 생성 */ public void createSession(Object value, HttpServletResponse response){ //세션 id 생성, 값을 세션에 저장 String sessionId = UUID.randomUUID().toString(); sessionStore.put(sessionId,value); //쿠키 생성 Coo.. 더보기 도메인의 진짜 의미! 도메인이 가장 중요하다.도메인 = 화면, UI, 기술 인프라 등등의 영역은 제외한 시스템이 구현해야 하는 핵심 비즈니스 업무 영역을 말함향후 web을 다른 기술로 바꾸어도 도메인은 그대로 유지할 수 있어야 한다.이렇게 하려면 web은 domain을 알고있지만 domain은 web을 모르도록 설계해야 한다.(domain에서 web의 클래스 등을 사용 및 패키지 등록을 해서는 안 된다는 의미)이것을 web은 domain을 의존하지만, domain은 web을 의존하지 않는다고 표현한다. 예를 들어 web 패키지를 모두 삭제해도 domain에는 전 혀 영향이 없도록 의존관계를 설계하는 것이 중요하다.반대로 이야기하면 domain은 web을 참조하면 안된다. 더보기 [@RequestParam,@ModelAttribute] VS @ResponeBody(Feat.HttpMessageConverter) @RequestParam @ModelAttribute : HttpMessageConverter 작동 x@ResponseBody : HttpMessageConverter 작동 o-> HttpMessageConverter는 @RequestParam, @ModelAttribute와 같이 Http 요청 매개변수를 처리할 때 작동하는 것이아니라 Rest API와 같이 Http 요청의 Body를 객체로 변환할 때 작동한다.(주로, JSON 객체) 또한 @RequestParam,@ModelAttribute는 HTTP 요청이 들어와서 컨트롤러가 호출되기 전에 [타입 오류]가 발생해도 그 오류를 BindingResult 객체에 담아서 컨트롤러를 호출할 수가 있지만, @ResponseBody 같은 경우, 즉 HttpMe.. 더보기 BindingResult의 동작 @PostMapping("/add")public String addItemV2(@ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes, Model model) { /** * bindingFailure=false : 클라이언트에서 넘어오는 매개변수와 item의 바인딩이 실패해도 binding 실패라고 보지 않겠다. * 검증 로직에 걸렸을 떄에 FieldError를 생성하겠다는 뜻!! */ // 검증 로직 if(!StringUtils.hasText(item.getItemName())) bindingResult.addError(new FieldErr.. 더보기 input 태그 속에 th:field와 th:value가 동시에 있는 경우 public enum ItemType { Book("도서"), Food("음식"), ETC("기타"); private final String description; ItemType(String description) { this.description = description; } public String getDescription(){ return description; }}@Datapublic class Item { private Long id; private String itemName; private Integer price; private Integer quantity; private Boolean op.. 더보기 @ModelAttribute의 새로운 사용법 결론 : @Controller 클래스 안에 여러 요청 메서드가 있을 것인데, 아래와 같이 @ModelAttribute을 붙이고 그 메서드를 정의하면 그 어떤 요청 메서드가 호출이 되더라도 Model 객체에 자동으로 등록이 된다. -> 컨트롤러 클래스의 여러 요청 메서드에서 Model 객체에 등록해야 할 데이터가 중복될 때 매우 유용하다. package hello.itemservice.web.form;import hello.itemservice.domain.item.Item;import hello.itemservice.domain.item.ItemRepository;import lombok.RequiredArgsConstructor;import lombok.extern.slf4j.Slf4j;import o.. 더보기 LinkedHashMap 단순한 HashMap은 insert한 순서를 보장하지 않는다. LinkedHashMap을 사용하면 insert한 순서를 보장한다. 물론 get의 순서도 보장!!LinkedHashMap regions = new LinkedHashMap();//LinkedHashMap을 사용하면 put한 [순서대로] 저장이 된다. regions.put("SEOUL","서울"); // 삽입 순서 1regions.put("BUSAN","부산"); // 삽입 순서 2regions.put("JEJU","제주"); // 삽입 순서 3 더보기 @RequiredArgsConstructor vs @AllArgsConstructor @RequiredArgsConstructor는 다음과 같은 방식으로 생성자를 생성합니다.필드 선택:초기화되지 않은 final 필드선언 시 초기화되지 않은 @NonNull로 표시된 필드생성자 매개변수:위 조건에 해당하는 필드들만 매개변수로 가지는 생성자를 생성합니다.null 체크:@NonNull 로 표시된 필드에 대해 null 체크를 수행하며, null 값이 전달되면 NullPointerException을 발생시킵니다.매개변수 순서:생성자 매개변수의 순서는 클래스 내에서 필드가 선언된 순서를 따릅니다. @AllArgsConstructor 는 다음과 같은 방식으로 생성자를 생성합니다.필드 선택:클래스의 모든 필드가 매개변수로 포함됩니다.null 체크:@NonNull로 표시된 필드에 대해 null 체크를 .. 더보기 이전 1 2 3 4 5 6 7 ··· 78 다음