절개와지조 1차 모각코
·
모각코
상품 등록 폼에 관련한 검증 로직을 작성해보고 HTML파일에서 타임리프를 적용해보는 실습을 진행한다. @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 (item.getPrice() == null || item.getPrice() 1..
절개와지조 하계 모각코 개별 목표 정리
·
모각코/절개와지조(모각코)
강병현 React 라이브러리 마스터하기 김채연 목표 : 임용 기출 문제 풀고 오답 정리​ 1회차 : 정렬 알고리즘 정리 2회차 : 탐색 알고리즘 정리 3회차 : sql & 정규화 정리 4회차 : cpu 스케쥴링 정리 5회차 : 물리층 정리 6회차 : 네트워크층 정리 박준태 스프링 프레임워크와 부트의 숙련도를 쌓는다. 타임리프의 활용기술을 익힌다 JDBC와 DB관련 지식을 학습한다. 토이 프로젝트를 진행한다. 네이버 클라우드 활용 기술을 익혀서 서버에 배포하는 경험을 한다. 이은경 객체지향 오해와 진실 독서 완독하기
검증 - Validation
·
Spring
입력 타입이 잘못되어서 오류가 나는 경우를 처리 해주어야한다. 잘못된 입력으로 검증 오류가 발생하면 오류 화면으로 바로 이동하게 되면, 고객 입장에서는 입력 해놓은 것들이 날라가서 다시 입력하는 것이 비효율적이어서 고객이탈의 원인이 될 수 있다. 따라서 웹 서비스는 폼 입력시 오류가 발생하면, 고객이 입력한 데이터를 유지한 상태로 어떤 오류가 발생했는지 친절하게 알려주어야 한다. 컨트롤러의 중요한 역할중 하나는 HTTP 요청이 정상인지 검증하는 것이다. 클라이언트 검증은 조작할 수 있으므로 보안에 취약하다. 서버만으로 검증하면, 즉각적인 고객 사용성이 부족해진다. 둘을 적절히 섞어서 사용하되, 최종적으로 서버 검증은 필수 API 방식을 사용하면 API 스펙을 잘 정의해서 검증 오류를 API 응답 결과에 ..
웹 애플리케이션에 메시지+국제화 적용
·
Spring
messages.properties label.item=상품 label.item.id=상품 ID label.item.itemName=상품명 label.item.price=가격 label.item.quantity=수량 page.items=상품 목록 page.item=상품 상세 page.addItem=상품 등록 page.updateItem=상품 수정 button.save=저장 button.cancel=취소 타임리프 메시지 적용 타임리프의 메시지 표현식 #{...} 를 사용하면 스프링의 메시지를 편리하게 조회할 수 있다. 예를 들어서 방금 등록한 상품이라는 이름을 조회하려면 #{label.item} 이라고 하면 된다. 렌더링 전 렌더링 후 상품 페이지 이름에 적용 상품 등록 폼 상품 등록 레이블에 적용 상품명..
메시지와 국제화
·
Spring
여러 화면에 보이는 상품명, 가격, 수량 등, label에 있는 단어를 변경하려면 다음 화면들을 다 찾아가면서 모두 변경해야 한다. 화면 수가 적으면 문제가 되지 않지만 화면이 수십개 이상이라면 수십개의 파일을 모두 고쳐야 한다. 이런 다양한 메시지를 한 곳에서 관리하도록 하는 기능을 메시지 기능이라 한다. 예를 들어서 messages.properties 라는 메시지 관리용 파일을 만들고 item=상품 item.id=상품 ID item.itemName=상품명 item.price=가격 item.quantity=수량 각 HTML들은 다음과 같이 해당 데이터를 key 값으로 불러서 사용하는 것이다. 이러한 메시지 관리를 한 발 더 나가서 나라별로 별도로 관리하면 서비스를 국제화 할 수 있다. 예를 들어 영어권..
타임리프 라디오 버튼
·
Spring
class="form-check-input"> BOOK 라디오 버튼은 여러 선택지 중에 하나를 선택할 때 사용할 수 있다. ENUM 클래스를 활용해서 해보자. - 상품 종류 도서, 식품, 기타 라디오 버튼으로 하나만 선택할 수 있다. @ModelAttribute("itemTypes") public ItemType[] itemTypes() { return ItemType.values(); } ItemType.values() 를 사용하면 해당 ENUM의 모든 정보를 배열로 반환한다. 예) [BOOK, FOOD, ETC] 상품 종류 BOOK 체크 박스는 수정시 체크를 해제하면 아무 값도 넘어가지 않기 때문에, 별도의 히든 필드로 이런 문제를 해결했다. 라디오 버튼은 이미 선택이 되어 있다면, 수정시에도 항상 ..
타임리프 멀티 체크박스
·
Spring
@ModelAttribute("regions") public Map regions(){ Map regions = new LinkedHashMap(); regions.put("SEOUL","서울"); regions.put("BUSAN","부산"); regions.put("JEJU","제주"); return regions; } @ModelAttribute 는 컨트롤러에 있는 별도의 메서드에 적용할 수 있다. 이렇게하면 해당 컨트롤러를 요청할 때 regions 에서 반환한 값이 자동으로 모델( model )에 담기게 된다. 물론 이렇게 사용하지 않고, 각각의 컨트롤러 메서드에서 모델에 직접 데이터를 담아서 처리해도 된다. 등록 지역 서울 th:for="${#ids.prev('regions')}" 멀티 체크박스..
타임리프 활용
·
Spring
th:object - 커맨드 객체를 지정한다. *{...} - 선택 변수 식이라고 한다. th:object에서 선택한 객체에 접근한다. th:field - HTML 태그의 id, name, value속성을 자동으로 처리해준다. 렌더링 전 렌더링 후 등록 폼 th:object를 적용하려면 먼저 해당 오브젝트 정보를 넘겨주어야 한다. 등록 폼이기 때문에 데이터가 비어있는 오브젝트를 뷰에 전달한다. @GetMapping("/add") public String addForm(Model model){ model.addAttribute("item",new Item()); return "form/addForm"; } 등록 폼 예제 상품명 가격 수량 th:object="${item}":에서 사용할 객체를 지정한다. 선..