분류 전체보기 139

Spring - Session

Session 서로 관련된 요청을 묶은 것이고 요청은 모두 독립적이다 -> 요청들끼리는 공통적인 부분이 없고 독립적이다. Request 가 들어오면 Server는 Request 자체를 구분할 수 없다. 즉 매번 들어온 Request는 새로운 Request라고 생각하는 것이다. 하지만 Session을 통해 이 Request를 공통적인 부분을 만들어 묶을 수 있다. 처음 요청이 들어오면 Sever는 JSESSIONID쿠키(SessionID)가 없는 경우 새로운 SessionID(중복되지 않는 값) 을 만들어 Response (Set- Cookie)를 통해 브라우저에 발급한다. 여기서 중요한 건 각 브라우저마다 새로운 ID를 만들어준다는 것이다. 한 피시 안에서 브라우저 여러창을 띄어서 요청을 날리면 각 브라..

Spring 2022.12.26

Spring Batch - csv 파일 읽기

ItemReaderPractiConfiguration 클래스를 만들어 Configuration 클래스로 등록하고 JobBuilderFactory와 StepBuilderFactory를 주입 받는다. incrementer 를 설정해 JobParameter를 각각 다르게 하여 동일한 Job을 실행 가능하게 한다. Job 에서 실행할 Step을 생성하는데 INPUT, OUTPUT 둘다 Person이다. (Chunk방식) ItemReader에서 CSV 파일을 읽으려면 FlatFileItemReader 객체를 이용해 읽어야 한다. public FlatFileItemReader csvReader() throws Exception{ DefaultLineMapper lineMapper = new DefaultLineMa..

Spring Batch 2022.12.26

Spring - Cookie

쿠키(Cookie ) 이름과 값의 쌍으로 구성된 정보, 아스키 문자만 가능하다. name = value 형식으로 젖아한다. name = value와 domain, path, Max-Age를 저장한다. 특수문자 안됨, 한글은 URL인코딩이 필요하다. 서버에서 브라우저에 저장시킨다. 유효기간이 지나면 자동으로 삭제된다(Max-Age) domain과 path에 대한 정보를 가지고 있어 같은 곳에 요청을 날리면 요청헤더에 담겨 요청된다. Cookie 생성 Cookie ck = new Cookie("id","test"); ck.setMaxAge(60*60*48);//유효기간 2일(48시간) response.addCookie(ck); 쿠키가 생성되면 쿠키는 절대시간과 상대시간 두개를 가지게 된다. (서버와 클라이언..

Spring 2022.12.23

Spring Batch - csv파일 쓰기

먼저 쓰는 코드 Job을 만들어주고 먼저 쓰기만 할 것이니 Step 설정을 start로 실행할 Step을 한 개만 지정한다. Chunk 방식 Step 생성 Step에 이름은 csvItemWriterStep으로 지정하고 정크에 INPUT, OUTPUT 타입은 모두 Person 객체로 지정했다. 여기서 ItemReader는 DB 값을 읽어와도 되지만 여기서는 테스트 데이터로 값만 확인할 수 있는 List를 만들어 실행한다. List 데이터를 받아야하기에 ListItemReader를 통해 읽어들였다. 테스트 데이터를 만들어주는 메소드이다. ItemWriter 메소드 BeanWrapperFieldExtractor -> csv 파일에 작성할 필드를 추출하기 위해 FieldExtractor 객체가 필요하다. Del..

Spring Batch 2022.12.23

Spring Batch - JdbcCursorItemReader

JDBC를 조회하는 방법은 크게 두가지이다. 1. Cursor 기반 조회(ResultSet에 cursor) - 배치 처리가 완료될때까지 DB Connection이 연결된다. - DB Connection 빈도가 낮아 성능이 좋은 반면, 긴 Connection 시간이 필요하다. - 하나의 Connection에서 처리 되기 때문에 Thread Safe하지 않다. 2. Paging 기반 조회 - 페이징 단위로 DB Connection 을 연결 - DB Connection 빈도가 높아 비교적 성능이 낮은 반면, 짧은 Connection 유지시간 필요 - 페이징 단위의 결과만 메모리에 할당하기 때문에[ 비교적 더 적은 메모리를 사용한다. 각각 JdbcCursorItemReader, JdbcPagingItemRead..

Spring Batch 2022.12.22

Graph - BFS 간단 개념 및 코드(JAVA)

1. Graph - 그래프는 정점(Vertex) 또는 노드(Node)와 간선(Edge)로 표현하기 위해 사용한다. 2. Graph 관련 용어 - 노드(Node) 위치를 말한다. 정점(Vertex)라고도 한다. - 간선(Edge): 위치 간의 관계를 표시한 선으로 노드를 연결한 선이라고 보면된다. - 인접 정점(Adjacemt Vertex) : 간선으로 직접 연결된 정점(또는 노드) - 참고용어 -> 정점의 차수(Degree): 무방향 그래프에서 하나의 정점에 인접한 정점의 수 -> 진입 차수(In-Degree): 방향 그래프에서 외부에서 오는 간선의 수 -> 진출차수(Out-Degree): 방향 그래프에서 외부로 향하는 간선의 수 -> 경로길이(Path Length):경로를 구성하기 위해 사용된 간선의 ..

알고리즘 2022.12.22

SpringBatch ChunkSize를 JobParameters 로 사용하기

JobParameters느 배치를 실행에 필요한 값을 parameter를 통해 외부에서 주입한다. JobParameters는 외부에서 주입된 Parameter를 관리하는 객체이다. Parameter를 접근하는 방법은 크게 두가지이다. JobParameters 객체를 통해 접근 ((contribution, chunkContext) -> { StepExecution stepExecution = contribution.getStepExecution(); JobParameters jobParameters = stepExecution.getJobParameters(); String param = jobParameters.getString("chunksize","10"); } 다른 방법은 @Value를 통한 접근(..

Spring Batch 2022.12.19

Spring Batch Chunk 기초학습

Batch를 처리할 수 있는 방법은 크게 2가지이다. 1. Tasklet을 사용항 Task기반 처리 - 배치 처리과정이 비교적 쉬운 경우 쉽게 사용한다. - 대량 처리를 하는 경우 더 복잡하다. - 하나의 큰 덩어리를 여러 덩어리로 나누어 처리하기 부적합하다. 2. Chunk를 사용한 chunk(덩어리) 기반처리 - ItemReader, ItemProcessor, ItemWriter의 관계 이해필요하다. - 대량처리를 하는 경우 Tasklet보다 비교적 쉽게 구현가능 - 덩어리로 나누어 수행가능 코드 @Configuration @RequiredArgsConstructor public class Practice{ private final JobBuilderFactory jobBuilderFactory; p..

Spring Batch 2022.12.19

JPA - 연관관계 Insert Query 줄이기

영화 프로젝트를 하면서 연관관계에 대해 insert를 하는도중 이상함을 느껴 찾아보다가 이상함을 느껴 글을 작성하게 되었다. 좋아요 엔티티는(Like는 예약어라 LikeGood으로 변경했다) 여기서 보면 boxOffice와 member와 ManyToOne으로 연관관계를 맺고있다. 근데 여기서 만약 insert를 해야한다면..? ....? !??! insert 쿼리 한번 하기 위해 연관관계로 되어있는 엔티티들을 영속성컨텍스트에 불러와 저장하는 상태가 되어버렸다. 하지만 DB에 정작 들어가는 값은 엔티티에 PK이다. JPA에서는 객체이지만 DB에서는 PK값만 들어가서 이 부분에서 쿼리를 줄일 수 없을까 찾아봤다. 좋아요 기능은 회원(Member) 그리고 영화(BoxOffcie) 엔티티가 각각 OneToMan..

JPA 2022.12.19

Spring Batch 동작 순서 (Step)

Batch는 Job 타입에 빈이 생성되면 Job launcher 객체에 의해서 Job을 실행한다. Job launcher가 Job을 실행하고 Job은 Step을 실행하게 되는 구조이다. 여기서 Job Repository라는 클래스가 등장하는데 이건 DB 또는 메모리에 Batch가 실행할 수 있도록 Meta 데이터를 관리하는 클래스이다. JOB은 Batch에 실행단위이고 Step은 Job에 세부 실행단위이다. Job은 n개에 Step을 실행할 수 있고 Step에 흐름을 관리할 수 있다 --> Job Flow 하나에 Job이 A Step을 실행한 후 조건에 따라 B Step 또는 C Step을 실행 할 수 있다. 아니면 모두를 설정도 가능하다. Step의 실행 단위 2가지 Chunk -> 하나의 큰 덩어리를..

Spring Batch 2022.12.16