Java/Spring

    Multipart란?

    1. Multipart란? 웹 클라이언트가 요청을 보낼 때, http 프로토콜의 바디 부분에 데이터를 여러 부분으로 나눠서 보내는 것. 웹 클라이언트가 서버에게 파일을 업로드할 때, http 프로토콜의 바디 부분에 파일정보를 담아서 전송을 하는데, 파일을 한번에 여러개 전송을 하면 body 부분에 파일이 여러개의 부분으로 연결되어 전송된다. 이렇게 여러 부분으로 나뉘어서 전송되는 것을 Multipart data라고 한다. 보통 파일을 전송할 때 사용한다. 2. HttpServletRequest는 파일 업로드를 지원하지 않는다. HttpServletRequest는 웹 클라이언트가 전달하는 Multipart 데이터를 쉽게 처리하는 메소드를 제공하지 않는다. (HttpServletRequest는 http 프로..

    SLF4J란?

    SLF4J란?

    1. SLF4J란? logging 관련 라이브러리는 다양하다. SLF4J는 이러한 라이브러리들을 하나의 통일된 방식으로 사용할 수 있는 방법을 제공한다. SLF4J는 로깅 Facade이다. 로깅에 대한 추상 레이어를 제공하는 것이고 interface의 모음이다. 2. SLF4J를 이용해 로깅 라이브러리 사용하기 어플리케이션은 SJF4J를 사용함으로써, 로깅 라이브러리를 어떤 것을 사용하던지 같은 방법으로 로그를 남길 수 있게함. 로그 라이브러리를 교체하더라도, 어플리케이션의 코드는 변경될 필요가 없음. 3. Maven에 SLF4J와 logback 의존성 추가하기 참고로 logback-classic 1.2.3은 이미 slf4j-api 1.7.25에 대한 의존성을 가지고 있기 때문에 slf4j-api를 추가..

    로깅(Logging)이란?

    운영 중인 웹 어플리케이션이 문제가 발생했을 경우, 문제의 원인을 파악하려면 문제가 발생했을 때 당시의 정보가 필요하다. 이런 정보를 얻기 위해서 Exception이 발생했거나, 중요 기능이 실행되는 부분에서는 적절한 로그를 남겨야한다. 로깅이란? 정보를 제공하는 일련의 기록인 로그(log)를 생성하도록 시스템을 작성하는 활동. 프린트 줄 넣기(printlning)는 간단한, 보통은 일시적인, 로그를 생성하기만 한다. 시스템 설계자들은 시스템의 복잡성 때문에 로그를 이해하고 사용해야 한다. 로그가 제공하는 정보의 양은, 이상적으로는 프로그램이 실행되는 중에도, 설정 가능해야한다. 일반적인 로그 기록의 이점 로그는 재현하기 힘든 버그에 대한 유용한 정보를 제공할 수 있다. 로그는 성능에 관한 통계와 정보를..

    Spring Security

    Spring Security

    1. 보안 용어 인증(Authentication) 클라이언트가 자신이 주장하는 사용자와 같은 사용자인지를 확인하는 과정 유저가 누구인지 확인하는 절차 예) 로그인 인가(Authorization) 클라이언트가 하고자 하는 작업이 해당 클라이언트에게 허가된 작업인지를 확인 특정 자원에 대한 접근 권한이 있는지 확인하는 절차 유저에 대한 권한을 허락하는 것. '권한부여'나 '허가'와 같은 의미로 사용된다. 즉 어떤 대상이 특정 목적을 실현하도록 허용(Access)하는 것을 의미한다. 예) 네이버의 특정 카페는 로그인을 했다 하더라도, 어느 정도 이상의 등급이 되지 않을 경우 이용하지 못한다. 접근 주체(Principal) 보호된 대상에 접근하는 유저 권한 인증 주체가 어플리케이션의 동작을 수행할 수 있도록 허..

    아큐먼트 리졸버란?

    아큐먼트 리졸버란?

    1. 아규먼트 리졸버란? 컨트롤러의 메서드의 인자로 사용자가 임의의 값을 전달하는 방법을 제공하고자 할 때 사용된다. 예를 들어, 세션에 저장되어 있는 값 중 특정 이름의 값을 메서드 인자로 전달한다. 2. 아규먼트 리졸버 작성 방법 1/2 org.springframework.web.method.support.HandlerMethodArgumentResolver를 구현한 클래스를 작성한다. supportsParameter() 메서드를 오버라이딩 한 후, 원하는 타입의 인자가 있는지 검사한 후, 있다면 true를 리턴한다. resolveArgument() 메서드를 오버라이딩 한 후, 컨트롤러 메서드의 인자로 전달할 값을 리턴한다. (supportsParameter()가 true를 리턴할 때에만 resolv..

    인터셉터(Interceptor)란?

    인터셉터(Interceptor)란?

    1. 인터셉터란? Interceptor는 DispatcherSerlvet에서 Handler(Controller)로 요청을 보낼 때, Handler에서 DispatcherServlet으로 응답을 보낼 때 동작한다. 2. 인터셉터 작성법 org.springframework.web.servlet.handler.HandlerInterceptorAdapter 클래스를 상속받거나, org.springframework.web.servlet.HandlerInterceptor 인터페이스를 구현한다. Java Config를 사용한다면, WebMvcConfigurerAdapter를 가지고 있는 addInterceptors 메소드를 오버라이딩 하고 등록하는 과정을 거친다. xml 설정을 사용한다면, 요소에 인터셉터를 등록한다..

    Spring MVC에서 Session 사용하기

    1. @SessionAttributes & @ModelAttribute @SessionAttributes 파라미터로 지정된 이름과 같은 이름이 @ModelAttribute에 지정되어 있을 경우 메소드가 반환하는 값은 세션에 저장된다. 아래의 예제는 세션에 값을 초기화 하는 목적으로 사용되었다. (User 객체가 "user"라는 이름으로 세션에 저장됨) @SessionAttributes("user") public class LoginController{ @ModelAttribute("user") public User setUpUserForm(){ return new User(); } } @SessionAttributes의 파라미터와 같은 이름이 @ModelAttribute에 있을 경우 세션에 있는 객체를 ..

    DispatcherServlet, MVC 설정

    1. DispatcherServlet을 FrontController로 설정하기 web.xml 파일에 설정 org.springframework.web.WebApplicationInitializer 인터페이스를 구현해서 사용. 단점 : 처음 웹 어플리케이션이 구동 되는 시간이 오래 걸릴 수 있다. Spring MVC는 ServletContainerInitializer를 구현하고 있는 SpringServletContainerInitializer를 제공한다. SpringServletContainerInitializer는 WebApplicationInitializer 구현체를 찾아 인스턴스를 만들고, 해당 인스턴스의 onStartUp 메서드를 호출하여 초기화한다. javax.servlet.ServletContai..