전체 글
-
자바스크립트 호출 스택(Call Stack) 동작 예제IT/NodeJs 2022. 3. 18. 18:43
아래의 예제로 자바스크립트 호출스택과 이벤트루프, Web API가 어떤식으로 동작하는지 확인 해 보자. 동작환경(runtime)은 웹브라우저 기준이다. **일반적인 호출 스택/ 이벤트 루프 코드, 호출스택, 이벤트루프, WebAPI는 아래와 같이 표현된다. 1. 처음 시작시 모두 비어있는 상태이다. 2. 코드가 실행되면 글로벌 스택 프레임이 호출 스택에 Push 된다. 3. 첫번째 라인 setTimeout 이 실행된다. 실행된 함수를 스택에 넣는다. (LIFO 구조) 4. setTimeout을 실행하면 JS가 아닌 코드가 호출된다. 이는 브라우저가 우리에게 제공하는 Web API 이다. 노드 환경에서는 노드에서 사용할 수 있는 다른 API가 제공된다. 5. setTimeout의 실행이 끝난다. 그러나 s..
-
javascript(nodejs) 동작원리 (Single thread, Non-Blocking, event-driven, event loop)카테고리 없음 2022. 3. 18. 18:28
**싱글 스레드, Blocking, Nonblocking NodeJS 는 싱글 스레드이다. 싱글 스레드는 프로세스 내에서 하나의 스레드가 하나의 요청만 수행한다. 해당 요청이 수행될 때 다른 요청을 함께 수행할 수 없고, 이를 싱글스레드 블록킹 모델이라고 한다. NodeJS는 싱글스레드 논블록킹 모델로 구성되어 있다. 하나의 스레드로 동작하지만, 비동기 I/O 작업을 통해 요청들을 서로 블록킹하지 않는다. 즉, 동시에 많은 요청들을 비동기로 수행함으로써 싱글스레드이지만 논블록킹이 가능하다. NodeJS 에서는 주요 로직을 처리하는(Javascript) 쓰레드는 하나이다. 하지만 일부 Blocking 작업들은 libluv의 스레드풀에서 수행되기 때문에 엄격하게 말해서 완벽한 싱글스레드 모델은 아니다. **..
-
Ehcache + Springboot 데이터 캐싱IT/Ehcache 2021. 6. 1. 22:52
캐싱이란?? 캐싱이란 성능 개선을 위해 데이터나 자원을 일정 기간동안 저장하고, 같은 데이터 요청이 왔을 경우 캐시에 있는 내용을 반환하는 것이다. 직접 DB나 추가 로직을 수행하지 않아도 되어 상당한 성능 향상 효과를 가져올 수 있다. 보통 서버에서의 캐시는 DB 조회를 줄이기 위해 많이 사용한다. 수많은 사용자들이 특정 데이터를 원할때 항상 DB를 거쳐 결과를 보여준다면 상당한 부하가 걸릴것이며, 이때 캐싱을 사용하여 비용을 많이 줄일 수 있을것이다. 캐시는 Local cache와 Global cache 로 나눌 수 있다. Local cache : 로컬 장비 내에서만 사용되는 캐시, 로컬 자원을 활용(메모리,디스크), 빠른 결과, 다른 서버와 데이터 공유가 어려움 Global cache : 다수의 서..
-
Junit Test 에서 Config 클래스의 Bean 생성하기IT/Unit Test 2021. 5. 11. 23:50
**테스트 코드를 작성하다 보면 본 프로젝트에 있는 Bean 객체들을 직접 사용해야 할 때가 있다. 실제로 프로젝트에서 s3 파일 업로드/다운로드 테스트를 위해 이러한 작업이 필요하여 작성한 테스트를 남긴다. 이중에 몇몇 Configuration 관련 Bean들은 application.yml 과 같은 파일의 설정과 엮여있는데, 이 설정을 그대로 사용하면서 Test 코드에서 Bean을 사용하는 방법을 알아보자. 테스트하려는 상황은 Test 코드에서 실제로 Bean을 사용하여 AWS s3의 presignedURL 을 할당받아 파일을 업로드하고, 그 업로드한 파일을 다운로드받는 일련의 연계된 테스트이다. *src 폴더의 파일 AwsClient.java ( AWS client 클래스 ) AwsConfig.jav..
-
4. Spring Batch Job Repository 설정IT/Spring Batch 2021. 4. 30. 00:53
이전 장에서 Spring Batch 실행해 실패하였는데, 그 이유는 Job Repository가 설정되지 않아서 였다. 이번 장에서는 Job Repository를 설정하여 프로젝트 설정을 완료하여 보자. Job Repository 설정 Spring Batch는 Job을 실행할 때의 정보를 데이터베이스에 저장한다. 데이터베이스에 저장된 정보를 토대로 Job을 새롭게 실행하고, 수행했던 Job의 결과와 파라메터, step의 정보 등을 알 수 있다. Mysql과 연동하여 Job Repository를 설정 해 보자. 먼저 Local에 Mysql을 설치하고 구동시킨다. Mysql은 다음 링크에서 다운받을 수 있다. https://dev.mysql.com/downloads/mysql/ MySQL :: Downloa..
-
3. Spring Batch Project 생성 및 설정IT/Spring Batch 2021. 4. 29. 22:33
Spring Batch Project 생성 본격적으로 실습을 위해 Sprig Batch Project를 생성 해 보자. https://start.spring.io/에서 spring initializer를 사용하여 위와 같이 기본 프로젝트를 생성한다. - Lombok : class 를 작성할때 annotaion 을 이용한 편리한 기능들을 이용할 수 있다. - Spring Data JPA : 배치로 처리할 데이터에 access 하기 위해 JPA를 사용한다. - MySql Driver : mysql에 연결하기 위한 driver이다. - Spring Batch : Spring 을 이용해 Batch 기능을 개발하기 위해 추가한다. build.gradle 파일을 확인해 보면 각 dependency가 잘 추가된 것을..
-
2. Spring Batch JobIT/Spring Batch 2021. 4. 29. 21:53
Spring Batch를 구성하는 요소중 가장 기본적인 것은 Job이다. Job과 Job Repository에 대해서 알아보자. Spring Batch의 구조 일반적인 Spring Batch의 흐름은 다음과 같이 이루어진다. Job이라는 하나의 포괄적인 작업을 Step 의 단계로 나누고, Step은 다음과 같이 3단계로 처리된다. 1. 읽기 : 데이터 저장소에서 가공할 데이터를 불러온다. 2. 처리 : 불러온 데이터를 원하는 방식으로 가공한다. 3. 쓰기 : 가공이 끝난 데이터를 다시 저장소에 저장한다. Job Spring Batch 에서의 Job은 하나의 배치 작업 단위를 얘기한다. Job 안에는 여러 Step이 존재할 수 있고, Step 안에는 Tasklet 또는 Reader, Processor, W..
-
1. Spring BatchIT/Spring Batch 2021. 4. 27. 15:05
이번 프로젝트에 Batch 처리 관련 업무가 있고, 마침 부서에 Bacth 처리용 서버가 없어 개발하면서 배치 관련 내용을 정리해 본다. 기술스택 : spring batch + quartz + JPA 배치 애플리케이션이란? 특정한 루틴을 가지고 일괄 데이터 처리를 하는 애플리케이션이다. user와의 상호작용이 없고, 보통 특정 루틴이 특정 시간(간격) 으로 처리한다. Spring Batch? Accenture 오 spring 의 공동 작업으로 탄생한 batch 작업용 프레임워크이다. Spring의 특성을 그대로 가지고 있어 DI,AOP,추상화 등 spring의 3대 요소를 모두 사용할 수 있다. 단계를 Job과 Step 으로 구분하여 logic 처리에 집중할 수 있게 해주고, 대용량 데이터를 처리하기 위..