목록Spring/블로그 만들기 (15)
seong
예외를 간단하게 정리 (원래는 종류가 굉장히 많다) E라인은 컴파일 Exception -> 오타나면 이것을 try catch로 감싸서 오류나면 넘겨줘 Re아래 라인은 런타임 Exception -> 실행 중 발생 하는 에러를 감싸서 넘겨줘 Exception동작 아래 그림으로 이해하기 1. 먼저 요청이 View, Ajax각각 들어온다. 2. 예외 처리에는 Exception메서드, NullPoint 메서드가 있다고 가정한다. 3. S(Service)에서 Nullpoint 에러가 발생해서 예외처리 Handler로 이동했다. 4. 아래 처럼 핸들러가 있다면 Nulllpoint가 발생해도 Exception이 실행된다 왜 Exception만 실행될까? 자바의 상속과 다형성 때문이다. 내부를 확인 해보면 Excepti..
백엔드 Validation 처리하기 백엔드에서 처리할 때는 각자의 Dto마다 Validation을 모두 만들어줘야한다. Dto를 회원가입 하나만 생성한다고 가정해보자 회원가입은 username,password,email 세개가 필요하다. 회원정보 수정은 password, email이 필요하다. 회원 정보 수정할 때 회원가입 Dto를 사용하게 되면 username이 없으니 당연히 에러가 날 것이다. 라이브러리 사용해 확인 주소 https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-validation/2.7.3 자신의 spring 버전에 맞게 다운로드 해준다 1. JoinDto - 회원가입 Dto에 Validation ..
프론트에서 검사하고 막기 1. 글자 수 제한 주기 필요한 부분에 maxlength = 20 를 넣어주면 됨. 1. username 한글 체크 function koreanCheck(){ let username = $("#username").val(); let korRule = /^[가-힣]*$/; if(korRule.test(username)) { return true;// 한글이 있으면 true } else { return false;// 한글이 없으면 false } } 2. username에 대문자 꼭 하나 받기 function capitalCheck() { let username = $("#username").val(); let checkcapital = /[A-Z]/; if (checkcapital..
Interceptor 컨트롤러로 들어오는 HttpRequest, HttpResponse를 가로채는 역할을 한다. 예를 들어 컨트롤러에 글을 삭제 하는 로직이 있다. 글은 "해당글의 작성자"만이 삭제를 할 수 있다, 여기서 Interceptor 를 이용해 삭제를 하기 전 작성자가 아니라면 컨트롤러가 동작 하지 않게 한다. 필터와 인터셉터는 비슷한 역할을 하지만 다르다! Interceptor 호출 시점은 3가지가 있다. 1. preHandle : 컨트롤러가 호출 되기 전 2. postHandle: 컨트롤러가 실행 된 후 3. afterComplete : 컨트롤러 -> View 모든 동작이 끝난 후 구현해보기 필요한 환경 설정 셋팅 보통 Interceptor 구현 하기 위해서 2가지가 필요하다. 1. Inte..
조건 사용자가 특정 키워드 검색 후 게시글을 클릭 했다. 게시글로 이동 했을 때 키워드와, 현재 페이지를 가지고 가야한다. 기존의 동작 검색을 하고 게시글을 눌렀을 때 keyword와, currentPage가 없어진다. 저 부분에 검색 keyword와 currentpage를 담아줘야한다. Session의 영역 작성하기 앞서서 Session에 대해 알아야한다. Session영역은 간단하게 로그아웃 전 까지 남아있다. 시작 키워드와, 현재 페이지를 가져가기 위해선 PagingDto의 keyword,와 currentPage가 필요하다. 아래 코드로는 pagingDto가 request, reponse하면 없어진다. Session을 사용해 keyword값,currentPage값을 가져가보자. 해시맵을 이용해 코드..
게시글 삭제 만들기 아래 부분을 수정 1. Form태그 수정 삭제 하기 위해서 ID값이 필요하다. 바인딩 시켜서 가져오기 위해서 input태그에 id값 가져오기(type에 hidden을 사용하면 웹상에서 보이지 않는다) 2. Ajax 작성(script) $("#btnDelete").click(()=>{ let id = $("#id").val(); $.ajax("/boards/"+id,{ type: "DELETE", dataType: "json" }).done((res)=>{ if(res.code == 1){ alert("게시글 삭제 성공"); location.href = "/boards"; } else{ alert("게시글 삭제 실패"); } }); }); 3. Controller 수정 해주기 //게시글..
브라우저는 기본적으로 저장된 쿠키를 가지고 간다. Request Header에 필요한 정보를 담아서 필요한 데이터를 View에 뿌려줘보자 쿠키 함수 cookie.getValue() // 쿠키에 설정된 값 cookie.getName() // 쿠키의 키(이름) cookie.setMaxAge() // 쿠키의 유효기간 설정 Controller에서 Form으로 이동할 때 가져가는 코드 작성. "로그인 폼으로 이동할게요" 라는 요청이기 때문에 HTTP의 Request 받는다. 그리고 쿠키는 타입이 배열이다. 배열에 쿠키를 담고, for문으로 필요 부분을 model에 담아준다. 지금은 username만 필요하기 때문에 username을 담아서 간다. @GetMapping("/loginForm") public Stri..
쿠키 브라우저에 Response헤더에 쿠키가 있으면 브라우저의 쿠키에 저장 해주는 HTTP 프로토콜이 있다. 그럼 로그아웃을 하면 session을 하면 session 값은 날라가지만 브라우저를 종료 하지 않았으므로 쿠키에 정보가 남아있게된다. 쿠키 요청 및 응답 브라우저는 쿠키를 저장할 때 직접적으로 바로 접근이 불가능 하기 때문에 서버에 요청을 해야한다. 그럼 서버에서 Response의 Header에 전달 해주면 브라우저에서 쿠키에 저장 하게 된다. 그럼 브라우저에서 쿠키 요청을 따로 해야하는가? 그건 아니다. 브라우저는 항상 요청을 할 때 쿠키의 Jsession을 항상 가지고 간다 -> Default 값이다. Jsession에 쿠키를 담아서 가는 것은 브라우저만 작동한다, 앱은 동작 하지 않기 때문에..