🖥️ Back/Spring

패키지 구조 설계에 있어서 도메인은 핵심 비즈니스 업무 영역으로 중요하다. 화면 UI, 기술 인프다 제외한 영역나중에 web에서 다른 기술을 바꾸더라고 도메인은 그대로 유지해야한다.그러기 위해서 domain은 web을 모른채 설계해야하고 web은 domain을 알고 있어도 된다. 회원이 있지만 로그인폼은 따로 만든다.@Datapublic class LoginMember { private Long id; @NotEmpty private String loginId; @NotEmpty private String name; @NotEmpty private String password;}@Datapublic class LoginForm { @NotEmpty priv..
스프링 웹프로젝트에서 검증 기능을 매번 코드르 길게 치는 것은 번거롭다.그래서 빈값 체크, 크기 등 일반적인 로직은 스프링에서 Bean Validation이라고 어노테이션을 제공한다.//build.gradleimplementation 'org.springframework.boot:spring-boot-starter-validation'public class Item { private Long id; @NotBlank //빈값, 공백 체크 private String itemName; @NotNull @Range(min = 1000, max = 1000000) //범위 안의 값 private Integer price; @NotNull @Max(..
웹 사이트 관리하면서 입력폼을 받다보면 검증 로직이 필수적이다.스프링에서 처리하는 검증로직을 점차적으로 발전시켜가본다. 검증시 오류가 발생하면 필드명을 key로 설정하여 HashMap에 담아 보관한다. @PostMapping("/add") public String addItem(@ModelAttribute ValidationItem item, RedirectAttributes redirectAttributes, Model model) { //검증 오류 결과 보관 Map errors = new HashMap(); //검증 로직 if(!StringUtils.hasText(item.getItemName())) { errors.pu..
프로젝트 운영에 있어서 문구들을 공통 파일로 관리하면 편하다.resources 폴더 아래로 messages 파일을 만들면 스프링이 알아서 스프링 빈으로 등록해준다.//resources > messages_ko.propertieshello=안녕hello.name=안녕 {0}label.item=상품label.item.id=상품 IDlabel.item.itemName=상품명label.item.price=가격label.item.quantity=수량page.items=상품 목록page.item=상품 상세page.addItem=상품 등록page.updateItem=상품 수정button.save=저장button.cancel=취소//messages_en.propertieshello=hellohello.name=hell..
입력 폼 처리 @GetMapping("/add") public String addForm(Model model) { //빈 객체 전달 model.addAttribute("item", new Form()); return "thymeleaf/form/addForm"; } th:field는 id, name, vale 속성을 모두 자동으로 만들어준다. 상품명 가격 수량 렌더링 전 렌더링 후 요구사항 추가 판매여부는 체크 박스로 선택할 수 있도록 할것이다. 상품종류는 라디오버튼으로 하나만 선택할 수 있도록 할 것이다. 배송방식은 셀렉트..
템플릿 조각웹 페이지에서 상단, 하단, 좌측 카테고리 등 공통 영역이 많다.같은 코드를 매번 복사하면 비효율적이라서 타임리프는 템플릿 조각과 레이아웃 기능을 지원한다. @GetMapping("/fragment") public String template() { return "template/fragment/fragmentMain"; } th:fragment가 있는 태그는 다른 곳에서 포함되는 코드 조각으로 가져온다. 푸터 자리 입니다. 부분 포함하는 insert로 현재 태그(div) 내부에 추가한다.푸터 자리 입니다. replace를 사용하면 현재 태그(div)를 대체한다. 파라미터를 전달해서 동적으로 조각을 렌더링할 수 있다. 파라미터 자리 ..
지구용사
'🖥️ Back/Spring' 카테고리의 글 목록 (2 Page)