Web/Spring
이번 글은 JetBrain사의 IntelliJ에서 새로운 프로젝트를 생성하고 시작하는 방법 두 가지에 대하여 설명을 해보려고 합니다. 1. 웹 브라우저를 통해 프로젝트 생성하기 https://start.spring.io/에 접속하면 아래와 같은 사이트를 볼 수 있다. Project : 해당 프로젝트에서 사용할 Build Tool을 설정한다. Language : 해당 프로젝트에서 사용할 언어를 설정한다. Spring Boot : 해당 프로젝트에서 사용할 버전을 설정한다. Project Metadata : 프로젝트의 group, name 및 packaging, java version을 설정한다. Dependencies : 해당 프로젝트에서 사용할 디펜던시들을 검색하고 추가하여 손쉽게 디펜던시들을 설정한다. ..
서블릿이라는 단어를 많이 접하게 되었지만 어렴풋이 어떤 일을 하는지만 알고 정확한 정의에 대하여 알지 못하였었다... 또한 Servlet과 Servlet Container등 용어들도 많아 헷갈리기도 일수였던 것 같다.. 자바로 백엔드를 공부하는 나로써 한번 제대로 정리를 해봐야겠다는 생각이 들었고 이번 기회에 Servlet에 대해 다시 한 번 정리해 보는 시간을 가지려한다. 서블릿에 대하여 알아보기 전에… CGI란? CGI는 Common Gateway Interface의 약자로 웹서버와 외부 프로그램 사이에서 정보를 주고 받는 방법이나 규약들을 의미한다. 쉽게말해, 사용자의 요청에 의한 서버의 응답이라고 할 수 있다. 왜 CGI가 필요한가요? 초기 웹 서비스에서는 주로 웹사이트에 필요한 정보만을 원하는 ..
입력된 아이디가 없다거나 비밀번호가 틀리다면 로그인을 실패를 할 것이다. 이번 글에서는 로그인이 실패를 했을 경우 어떠한 핸들러를 가지고 처리를 해줄 수 있는지에 대하여 간단한 예제로 살펴보겠습니다. AuthenticationFailureHandler Spring Security에 정의되어 있는 Interface로 이 핸들러를 구현해주고 SecurityConfig에서 설정을 해주면 자동으로 핸들러로 등록이 된다. onAuthenticationFailure(...) 위의 AuthenticationFailureHandler에 정의되어 있는 메서드이다. 매개변수로는 HttpServletRequest(request의 정보를 가지고 있다.), HttpServletResponse(response에 대한 설정을 할 ..
[Spring Boot] Thymeleaf를 사용해 PathVariable 넘기는 방법 CRUD에서 Create를 제외하고는 URL에 해당 객체의 id값을 넘겨주어서 구현을 해줄 수 있다. Spring Boot에서는 Controller에서 @PathVariable 어노테이션을 사용하여 URL의 인자값을 전달받을 수 있는데 그렇다면 Thymeleaf에서는 어떠한 방법으로 id값을 넘겨주어야 되는지에 대하여 알아보겠다. Controller에서 delete를 처리하는 메서드 @GetMapping("todoDelete/{id}") public String delete(@PathVariable Long id) { todoService.delTodo(id); return "redirect:/"; } URL에서 id..
Spring Security를 사용하여 간단하게 회원가입과 로그인 및 로그아웃 기능을 구현해보겠습니다. Django에서 auth와 같은 기능과 유사하다고 생각이 들었습니다. 그럼 이제 간단한 설명과 함께 코드를 살펴보겠습니다. 프로젝트 환경 Spring Boot 2.2.6 Java 11 Gradle Dependencies Spring-boot-starter-Web Spring-boot-starter-Data-JPA Spring-boot-starter-Sequrity Spring-boot-starter-thymeleaf Lombok implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5' Thymeleaf에서 Spring ..
@ControllerAdvice 모든 또는 여러개의 컨트롤러에 같은 @ExceptionHandler, @InitBinder, @ModelAttributes를 적용하고 싶은 경우 사용할 수 있다. BaseController를 생성 @ControllerAdvice(assignableTypes = {EventController.class, EventApi.class}) public class BaseController { @ExceptionHandler public String eventErrorHandler(EventException exception, Model model) { model.addAttribute("message","event error"); return "error"; } @InitBind..
@ExceptionHandler 특정 예외가 발생할 경우 발생한 요청을 처리해주는 핸들러 EventException이라는 클래스를 만든다. (RuntimeException 상속) public class EventException extends RuntimeException { } @ExceptionHandler 정의 @ExceptionHandler public String eventErrorHandler(EventException exception, Model model) { model.addAttribute("message","event error"); return "error"; } @ExceptionHandler public String runtimeErrorHandler(RuntimeExcepti..
@InitBinder 특정 컨트롤러에서 바인딩 또는 검증 설정을 변경하고 싶을 때 @InitBinder를 이용해 설정값을 지정할 수 있다. 사용법 @InitBinder public void initEventBinder(WebDataBinder webDataBinder) { ... (설정) } // 특정 모델 객체에만 적용을 하고 싶을 경우 아래와 같이 이름을 지정. @InitBinder("event") public void initEventBinder(WebDataBinder webDataBinder) { ... (설정) } 바인딩 설정 @InitBinder public void initEventBinder(WebDataBinder webDataBinder) { webDataBinder.setDisall..
@ModelAttribute의 또 다른 사용법 @ModelAttribute의 사용법에서 살펴본 것과 별개로 또 다르게 사용하는 @ModelAttribute에 대해 알아보겠다. @ModelAttribute public void categories(Model model) { model.addAttribute("categories",List.of("study", "seminar", "hobby", "social")); } // 또는 @ModelAttribute("categories") public List categories(Model model) { return List.of("study", "seminar", "hobby", "social"); } 위와 같이 @ModelAttribute를 사용하게되면 이 ..