본문 바로가기

분류 전체보기

(35)
[Spring] Device 체크 디바이스 체크하는법은 화면에서 체크하는 법과 백단에서 체크하는법이 있습니다. ​ 해당 포스트에서는 Spring Mobile Device Resolution을 이용하여 백단에서 체크하는법을 포스팅합니다. ​ Spring Mobile Device Resolution 사용하기 1. spring Mobile Device api를 사용하기 위해 의존성 추가. ​ 2. divice class를 사용하기위해 DeviceResolverHandlerInterceptor를 생성한후 dispatcherServlet을 설정 해줍니다. 3. DeviceUtiles.getCurrentDevice(request) 메서드를 통해 해당 유입 요청의 디바이스 정보를 사용할수 있다.
Oracle Hint의 정의와 종류 힌트는 SQL 튜닝의 핵심부분으로 일종의 지시구문이다. SQL에 포함되어 쓰여져 Optimizer의 실행 계획을 바꿀수 있도록 말그대로 Optimizer에게 힌트를 주는 것이다. Optiomizer라고 해서 항상 최선의 실행 계획을 수립할 수는 없으므로 테이블이나 인덱스의 잘못된 실행 계획을 사용자가 직접 바꿀 수 있도록 도와주는 지시구문. 오라클 힌트 종류 SELECT /*+ INDEX(idx_col1) */ id, password, name FROM emp; SELECT /*+ ORDERED INDEX(b idx_col1) */ id, password, name FROM emp a , depart b ※ 주의! 주석 표시 뒤에 '+' 기호가 있다. ◆ INDEX Access Operation 관련 H..
optimizer 옵티마이저(Optimizer)는 SQL을 가장 빠르고 효율적으로 수행할 최적(최저비용)의 처리경로를 생성해 주는 DBMS 내부의 핵심엔진이다. 사용자가 구조화된 질의언어(SQL)로 결과집합을 요구하면, 이를 생성하는데 필요한 처리경로는 DBMS에 내장된 옵티마이저가 자동으로 생성해준다. 옵티마이저가 생성한 SQL 처리경로를 실행계획(Execution Plan)이라고 부른다. 1. 사용자가 던진 쿼리 수행을 위하여 후보군이 될만한 실행계획을 찾는다. 2. 데이터 딕셔너리에 미리 수집해 놓은 오브젝트 통계 및 시스템 통계정보를 이용해 각 실행계획의 예상 비용을 산정한다. 3. 각 실행 계획을 비교하여 최저 비용을 갖는 하나를 선택한다.
싱글톤 패턴 싱글톤이란 어떠한 클래스가 최초 한번만 메모리를 할당하고(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를 가지고 있음으로써 역직렬화시에 해당 직렬화 및 역직렬화 대상 객체가 동일한 객체임을 판명할수 있습니다. -자바 직렬화 형태의 데이터 교환은 자바 시스템 간의 데이터 교환을 위해 존재합니다. 자바 직렬화의 장점 -복잡한 데이터 구조의 객체라도 직렬화 기본구조만 지키면 큰작업없이 직렬화가 가능하고, 데이터 타입이 자동으로 맞춰지기 때문에 관련 부분을 신경쓰지않아도 역직렬화..
[Spring boot] @ControllerAdvice 어노테이션 @ControllerAdvice 어노테이션을 사용하는 이유는 해당 어노테이션을 달아준 클래스들을 추후에 예외처리 핸들링 하기 위함이다. @ExceptionHandler 어노테이션을 이용하여 즉 @ControllerAdvice 어노테이션을 사용하여 이점은 1. 예외처리 핸들링이 용이해진다.
Spring AOP(Aspect-Oriented Programming): 관점지향 프로그래밍 AOP(Aspect-Oriented Programming) : 관점지향 프로그래밍 공통화 할 수 있는 부분들을 Aspect라는 하나의 단위로 묶어 객체가 본질적으로 해야 할 일만 기술 할수 있도록 한다. AOP의 대척점 기존의 객체 지향 프로그래밍(OOP: Oriented Programming)의 구현된 모듈이 핵심 관점의 구현한 모듈과 긴밀히 결합되어있어 모듈화 및 유지보수가 쉽지않고 실로 모듈화가 잘 된 어플리케이션 클래스를 보더라도 핵심기능을 위한 코드보다 다양한 부가적인 기능과 처리를 위한 부분의 양이 더 많아져 코드의 중복, 모듈화, 유지보수, 유연성 저하 등이 발생하였다. 이와 같이 횡단관심 부분에 AOP를 적용하여 단 하나의 로직만 변경되더라도 모든 소스에 적용된수 있도록 일원화및 모듈화 할..