본문 바로가기

Web

(26)
[Spring] Filter와 Interceptor Filter - 필터는 J2EE 표준 스팩에 정의 되어있는 기능이다. 주요 목적 : 보안관련 처리와 같은 web app의 전역적으로 처리해야하는 로직을 구현하기 위함. 동작 위치 : Dispatcher Servlet의 앞단에서 동작. Interceptor - 인터셉터는 Spring Framework에서 자체적으로 제공하는 기능. 주요 목적 : 인증, 권한등에 대한 디테일한 처리에 대해서는 인터셉터에서 처리한다. 동작 위치 : Dispatcher Servlet에서 Handler(Controller)로 가기전에 정보를 처리한다. ​ ​ **J2EE 란 : 자바 기술로 기업환경의 어플리케이션을 만드는데 필요한 스펙들을 모아둔 스펙 집합.
[Java] JDK14 기능정리 Pattern Matching for instanceof (Preview) 런타임에 객체의 타입을 확인하는 instanceof 연산자는 보통 아래와같은 관용구(idiom)로 많이 사용된다. if(obj instanceof String) { String s = (String) obj; } 이 instanceof 연산자를 확장하여 아래와같은 문법을 지원한다. if(obj instanceof String s) { // String 타입의 s 변수 사용 } 코틀린에 대한 경험이 있는 사람이라면 바로 느꼈겠지만 코틀린의 스마트 캐스팅과 유사한 문법으로 보인다. 다만 한가지 좀 이해하기 어려운 스펙이 있는데 if (obj instanceof String s){ System.out.println(s.startsWit..
[Spring Boot] HttpMessageConverters ● Http 요청 부문을 객체로 변경하거나, 객체를 HTTP 응답 본문으로 변경할 때 사용한다. HttpMessageConverters의 종류는 여러가지가 존재하고, 어떤 요청을 받고 어떤 응답을 보내는지에 따라 메시지 컨버터가 달라진다. ​ @RequestBody @ResponseBody 아래에서 User(객체)를 리턴할 때는 기본적으로 JsonMessageConverter가 사용이되고, String타입을 이턴할 때는 StringMessageConverter가 사용이 된다. int도 마찬가지로 StringMessageConverter이다. @RestController면 @ResponseBody는 생략해도 된다. MessageConverter를 타고 객체를 응답 본문으로 바꾼다. 그냥 @Controlle..
[Spring Boot] Auto Configuration 설정과 원리 Spring은 component-scan을 통해 component들을 찾아 bean 생성을 진행하며 설정한 bean들이 생성된다. 이와 마찬가지로 spring에 기반을둔 spring boot 역시 이와같은 방법을 통해 bean을 생성한다. spring boot는 이와같은 빈 생성을 어노테이션을 통해 xml 파일 없이 보다 쉽게 설정이 가능하다. spring boot는 @Controller, @RestController, @Service, @Repository, @Bean과 같은 어노테이션은 물론 @EnableAutoConfiguration어노테이션을 이용한 auto configuration 기능에 의해 추가적인 bean들도 함께 생성된다. ​ 1. @EnableAutoConfiguration..
[spring boot] ExceptionHandler 스프링 부트에서는 ExceptionHandler를 기본적으로 등록하여 Exception을 처리하고 있다. 기본 예외 처리기는 스프링에서 자동적으로 등록하는 BasicErrorController에서 관리하고 에러발생시 JSON형태로 리턴값을 준다. ​ ▶이와 같은 기본 Exception처리 이외에 사용자가 커스텀으로 등록하여 구현가능한데 스프링 부트에서는 @ExceptionHandler 어노테이션을 사용하여 해당 Exception을 구현할수 있다. ​
[Spring] Device 체크 디바이스 체크하는법은 화면에서 체크하는 법과 백단에서 체크하는법이 있습니다. ​ 해당 포스트에서는 Spring Mobile Device Resolution을 이용하여 백단에서 체크하는법을 포스팅합니다. ​ Spring Mobile Device Resolution 사용하기 1. spring Mobile Device api를 사용하기 위해 의존성 추가. ​ 2. divice class를 사용하기위해 DeviceResolverHandlerInterceptor를 생성한후 dispatcherServlet을 설정 해줍니다. 3. DeviceUtiles.getCurrentDevice(request) 메서드를 통해 해당 유입 요청의 디바이스 정보를 사용할수 있다.
싱글톤 패턴 싱글톤이란 어떠한 클래스가 최초 한번만 메모리를 할당하고(Static) 그 메모리에 객체를 만들어 사용하는 디자인 패턴을 의미한다. 즉, 객체 생성자의 호출이 반복적으로 이루어져도 실제로 생성된 객체는 최초 생성된 객체를 반환 해준다. 위의 코드에서 전역변수인 instance를 static으로 생성하면서 인스턴스화 하지 않고 사용할 수 있게 하였지만 접근 제한자가 private로 되어 있어 직접적인 접근이 불가하다. 또한 SingleTon 클래스의 생성자역시 private로 선언이 되어있어 new 를 통한 직접적인 객체 생성도 불가능하다. 해당 instace객체를 사용하기 위해서는 getInstance 메서드를 호출하여 instace객체를 얻을 수 있게 된다. 싱글톤 패턴의 목적 한번의 객체 생성을 통하..
[정의] CI / DI CI(Connection information) 서로 다른 인터넷 서비스간에 서비스를 연계하여 사용자를 구분하기 위한 88Byte로 구성되어있는 정보. ex) 주민등록번호 DI(Duplication information) 중복가입 체크를 통해 한 사람의 정보를 통해 여러개의 계정을 만들어 악용하는것을 방지 할 수 있는 64Byte로 구성된 정보. DI는 특정 서비스에서 나에게 식별 번호를 준다고 생각 할 수 있다. ex) 각 계정 id가 달라도 나를 구분할수 있는 번호가 존재하면 각계정들이 나라는것을 인증해줄수 있다. CI 와 DI의 차이점 A와 B사이트에 각 회원가입을 했을경우 CI는 같다고 할 수있다. 반대로 A라는 사이트에 회원가입을 여러번 하여 계정이 여러개일경우 ID는 서로다르지만 DI는 같다고..
[Java] 비동기처리 방법 [1] ExcutorService jdk(1.5부터)에서 비동기 작업을 위해서 지원하는 interface이다. 일반적으로 ExcutorService는 작업 할당을 위한 스레드 풀과 API를 제공한다. [2] future와 callBack 1) future jdk(1.5부터)에서 제공하는 비동기 계산의 결과를 나타내는 Interface이다. 비동기 작업이란 현재 진행하고 있는 스레드가 아닌 별도의 스레드에서 작업을 수행하는 것을 말하는데 같은 스레드에서 메서드를 호출할 때는 결과를 리턴 받을수 있지만, 비동기적으로 수행되는 스레드에서는 결과를 전달받을 수 있는 대상이 필요한데 Future가 그 역할을 한다. Future 를 통해서 비동기 수행되고 있는 결과값을 가져올 때는 get 메서드를 사용하는데 해당 ..
Collections emptyMap()을 사용하는 경우 결과를 반환할 시에 반환할 데이터가 없거나 내부조직에 의해 빈 데이터가 반환되어야 하는 경우 NullPointException을 방지하기 위하여 반환 형태에 따라 List나 Map의 인스턴스를 생성하여 변환하여 처리해야 하는 경우가 있다. 이후 로직 부분에서 size 메소드 등으로 체크하고 추가적인 값을 변경하지 않는 경우 Collections.emptyMap() 메소드를 사용하면 매번 동일한 정적 인스턴스가 반환되므로 각 호출에 대해 불필요한 인스턴스를 생성하지 않게되어 메모리 사용량을 줄일 수 있다. 단, Collections.emptyMap() 메소드로 반환된 객체의 add 혹은 put과 같은 데이터를 수정하려할시에 UnsupportedOperationException이 발생된다. 즉, 데이터를 수..
[Hibernate + Spring Data JPA + Querydsl] Querydsl [Querydsl] Querydsl이란? - 정적 타입을 이용해서 SQL과 같은 쿼리를 생성할 수 있도록 해 주는 프레임워크. - 문자열로 작성하거나 XML 파일(ex : Ibatis, Mybatis)에 쿼리를 작성하는 대신, Querydsl이 제공하는 플루언트(Fluent) API를 이용해서 쿼리를 생성할 수 있다. 단순 문자열과 비교해서 Fluent API를 사용하는 장점 - IDE의 코드 자동 완성 기능 사용 - 문법적으로 잘못된 쿼리를 허용하지 않음 - 도메인 타입과 프로퍼티를 안전하게 참조할 수 있다. - 도메인 타입의 리펙토링을 더 잘 할 수 있음. ** 기존 String형의 SQL쿼리가 문자로 Type Check가 불가능하고, 실행하기 전까지 작동 여부를 확인 하기 어려운 부분이 있던 단점을..
[Java] 직렬화 자바에서 직렬화란? 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사양할 수 있도록 바이트 형태로 데이터를 변환하는 직렬화와, 바이트를 다시 객체로 변환하는 역직렬화가 존재한다. - 자바 상에서 serializable 인터페이스를 사용하는 이유는 해당 객체가 변활될때 서로 동일한 serialVersionUID를 가지고 있음으로써 역직렬화시에 해당 직렬화 및 역직렬화 대상 객체가 동일한 객체임을 판명할수 있습니다. -자바 직렬화 형태의 데이터 교환은 자바 시스템 간의 데이터 교환을 위해 존재합니다. 자바 직렬화의 장점 -복잡한 데이터 구조의 객체라도 직렬화 기본구조만 지키면 큰작업없이 직렬화가 가능하고, 데이터 타입이 자동으로 맞춰지기 때문에 관련 부분을 신경쓰지않아도 역직렬화..