자바 & 스프링 16

PreparedStatement 쿼리를 사용하는 이유

값 변환을 자동으로 하기 위해 간결한 코드를 위해 Statement Statement 객체는 Connection 클래스의 createStatement() 메소드를 호출함으로써 얻어진다. Statement 객체를 생성하면 Statement 객체의 executeQuery() 메소드를 호출하여 SQL 쿼리를 실행시킬 수 있다. DB가 하나의 statement를 받을 때 DB 엔진은 제일 먼저 문장을 parse 시키고 잘못된 문법을 검사한다. 그 후 DB는 statement를 실행하기 위한 가장 효율적인 방법을 탐색한다. 이때 계산상 아주 큰 비용이 들 수 있다. DB는 어떤 인덱스를 쓸 것인지, 혹은 테이블에 있는 모든 row를 다 읽어야 하는 지를 확인한다. 일단 쿼리 플랜 (query plan)이 이루어지..

자바 & 스프링 2021.11.30

JPA allocationSize default 값이 50인 이유

JPA 기본 키 생성 전략은 4가지이다. IDENTITY: 기본 키 생성을 데이터베이스에 위임한다 (MYSQL) SEQUENCE: 데이터베이스 시퀀스를 사용해서 기본 키를 할당한다 (ORACLE, H2) - @SequenceGenerator 필요 TABLE: 키 생성용 테이블 사용, 모든 DB에서 사용가능 - @TableGenerator 필요 AUTO: 방언에 따라 자동 지정, 기본값 위의 네 가지 방법 중 SEQUENCE 전략과 TABLE 전략을 사용할 때 Generator 속성에 allocationSize라는 속성이 있다. 이 속성의 default 값은 50이다. allocationSize: 시퀀스 한 번 호출에 증가하는 수(성능 최적화에 사용됨, 데이터베이스 시퀀스 값이 하나씩 증가하도록 설정되어 ..

자바 & 스프링 2021.11.30

java - thread 동기화

멀티쓰레드 프로그래밍을 하다보면 스레드를 동기화 해주어야 한다. 쓰레드를 동기화 하는 이유는 여러 개의 쓰레드가 같은 프로세스 내의 자원을 공유하면서 작업하는 경우에 서로의 작업이 다른 작업에 영향을 주기 때문이다. 쓰레드의 동기화를 위해서 임계영역(critical section)과 잠금(lock)을 사용한다. 임계영역을 지정하고, 임계영역이 가지고 있는 lock을 단 하나의 스레드에게 빌려주는 개념이다. lock은 단 하나의 스레드만이 가질 수 있고, 임계영역 내에서 수행할 코드를 수행한 이후에는 lock을 반납하여야한다. 스레드를 동기화하는 방법들 임계영역(critical section): 공유 자원에 대해 단 하나의 스레드만 접근하도록 한다. (하나의 프로세스에 속한 스레드만 가능하다) 뮤텍스(mu..

자바 & 스프링 2021.11.30

java - Stream

자바의 스트림은 뭔가 연속된 정보 를 처리하는 데 사용한다. 가장 기본적인 것은 배열이고, 컬렉션이다. 컬렉션에는 스트림을 사용할 수 있지만, 배열은 사용할 수 없다. Integer[] values = { 1, 3, 5 }; List list = new ArrayList(Arrays.asList(values)); stream을 이용하면 Integer[] values = { 1, 3, 5 }; List list = Arrays.stream(values).collect(Collectors.toList()); 스트림에서 제공하는 연산의 종류 filter(pred): 데이터를 조건으로 거를 때 사용 map(mapper): 데이터를 특정 데이터로 변환 forEach(block): for 루프를 수행하는 것처럼 각..

자바 & 스프링 2021.11.30

Java 8 Lambda — 2

자바의 신 2를 정리했습니다. java.util.functional 패키지 java 8에서 제공하는 주요 Functional 인터페이스는 다음과 같이 있다. Predicate Supplier Consumer Function UnaryOperator BinaryOperator Predicate test()라는 메소드가 있으며, 두 개의 객체를 비교할 때 사용하고 boolean을 리턴한다. 추가로 and(), negate(), or() 이라는 default 메소드가 구현되어 있으며, isEqual() 이라는 static 메소드도 존재한다. Supplier get() 메소드가 있으며, 리턴값은 generic으로 선언된 타입을 리턴한다. 다른 인터페이스들과는 다르게 추가적인 메소드는 선언되어 있지 않다. Con..

자바 & 스프링 2021.11.30

Java 8 Lambda — 1

자바의 신 2를 정리했습니다. 익명 클래스는 가독성도 떨어지고 불편하다. 이러한 단점을 보완하기 위해서 람다 표현식이 만들어졌다. 대신, 이 표현식은 인터페이스에 메소드가 하나인 것들만 적용 가능하다. 그래서 람다 표현식은 익명 클래스로 전환이 가능하며, 익명 클래스는 람다 표현식으로 전환이 가능하다. 자바에서 메소드가 하나인 인터페이스 java.lang.Runnable java.util.Comparator java.io.FileFilter java.util.concurrent.Callable java.security.PrivilegedAction java.nio.file.PathMatcher java.lang.reflect.InvocationHandler interface Calculate { int ..

자바 & 스프링 2021.11.30