일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Algorithm
- MSA
- 백준
- 파이썬
- react
- Galera Cluster
- JPA
- 알고리즘
- 자바
- OS
- Data Structure
- redis
- MySQL
- design pattern
- 컴퓨터구조
- 운영체제
- 디자인 패턴
- c언어
- spring webflux
- 자료구조
- Kafka
- 네트워크
- JavaScript
- mongoDB
- Heap
- Java
- Spring
- C
- IT
- Proxy
- Today
- Total
목록Java, Spring (75)
시냅스
이 글에서는 Spring 6, Spring boot 3++ 를 사용하면서 spring batch 5 로 업그레이드 할 때 migration 을 위한 내용을 요약합니다. 주로 사용 방법에 대해서만 상술하니 자세한 내용은 아래의 공식문서를 참고하시기 바랍니다. Job, Step v4 // Sample with v4 @Configuration @EnableBatchProcessing public class MyStepConfig { @Autowired private StepBuilderFactory stepBuilderFactory; @Autowired private JobBuilderFactory jobBuilderFactory; @Bean public Job myJob(Step step) { return ..

동시성 문제 https://liltdevs.tistory.com/83 프로세스 동기화 Process Synchronization 프로세스 동기화 Process Synchronization Cooperation process 서로 영향을 주는 process thread를 공유하거나, shared memory massage passing 위의 경우 데이터 일관성에 유의해야 한다 => 실행 순서를 보장해야 한다. (I liltdevs.tistory.com 애플리케이션에서 동시성 문제는 빈번히 발생할 수 있습니다. Spring에서 각 Request 는 스레드를 사용하므로 공유자원에 대한 접근이 가능하기 때문입니다. while(i == BUFFER_SIZE) { count++; } while(i == BUFFER..

Session vs JWT 현재 프로젝트에서는 Redis Session Clustering 을 사용하고 있습니다. 사용자 정보에 대해 JWT 대신 Session 을 사용하기로 하였고 이유는 다음과 같습니다. JWT 를 사용하려는 이유는 세션에서 감당하는 부하를 줄이기 위함이다. (혹은 Stateless 하게 유지하기 위해) 다만, JWT 는 header, payload, signature 로 이루어진 구조로 모든 정보들을 노출시키고 있다. (HTTPS 를 사용한다고 하더라도...) 또한 대칭키를 알고 있고 토큰이 탈취당한 상황이라면 너무나도 쉽게 보안에 취약해진다. 이러한 문제를 최소화시키기 위해 Refresh Token 을 사용한다. Access Token, Refresh Token 쌍으로 Access..

HikariCP 설정과 유의사항 maxLifetime 커넥션을 최대 얼마동안 연결 유지 할지에 대한 설정 maxLifetime 에 도달한 커넥션이 사용 중(in-use)이지 않고, 풀에 반납된 상태에서 제거된다. 만약 커넥션이 제거되어 부족한 경우 부족한 커넥션 만큼 새로 생성한다. 이러한 방식은 wait_timeout 에 의해 커넥션이 끊어졌을 경우를 대비한다. 즉 wait_timeout 으로 커넥션이 끊기기를 대비하여 커넥션을 새로 맺는 것 HikariCp 는 네트워크 지연을 고려하여 maxLifetime 을 db의 wait_timeout 설정보다 2 ~ 3초 정도 짧게 줄 것을 권고한다. wait_timeout 이 60초라면 maxLifetime 은 58초가 된다. 만약 maxLifetime 이 w..

Spring MVC Spring MVC 는 웹 애플리케이션 개발을 쉽게하기 위해 지원하는 모듈입니다. Model-View-Controller 패턴을 기반으로 FrontController 패턴을 구현한 DispatcherServlet 을 활용하며 매번 Servlet 을 생성하거나 소멸시켜도 되지 않게 합니다. 흔히 Spring 이라고 하면, Spring MVC 를 떠올리게 되는 경우가 많습니다. Spring 은 전체적인 프레임워크 자체를 말하고, Spring MVC 는 웹 애플리케이션을 위한 모듈이라고 지칭하는 것이 옳은 표현일 것입니다. 그렇다면 Spring MVC 의 정체성을 결정하는 것에는 무엇이 있을까요? 구성요소 DispatcherServlet 모든 클라이언트의 요청을 받아 적절한 컨트롤러로 분배..

Java에서 HTTP 요청을 보내는데 사용되는 대표적인 라이브러리로는 RestTemplate, HttpClient 등이 있습니다. 이 글에서는 이러한 라이브러리를 사용하지 않고 Java의 기본 소켓을 이용하여 직접 HTTP 요청을 구현해보겠습니다. (HTTP 는 그냥 String 덩어리입니다!) 아래에서 코드로 살펴보겠습니다. GET 요청 public static void simpleGetRequest() { try { Socket socket = new Socket(host, port); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStream..

https://liltdevs.tistory.com/100 입출력 시스템, I/O System 입출력 시스템, I/O System Web, File 수정, Youtube 시청, game 등 컴퓨터는 입출력 작업을 주로 한다. PCI 버스로 모든 Device 와 연결한다. 메모리 맵드 입출력 Memory-mapped I/O 모든 컨트롤러는 레지스터(제어 liltdevs.tistory.com 위의 글을 참고하시면 도움이 될 수 있습니다. Java NIO 는 기존 IO 가 갖고 있는 문제점들을 해결하기에 나온 패키지입니다. 기존 IO 에서의 불필요한 과정이나, Thread block 을 해결하기 위함입니다. 아래에서 기존 IO 의 동작 원리를 살펴보며 어떤 것을 해결하였는지 알아보겠습니다. Java IO 동작..

https://liltdevs.tistory.com/128 Blocking vs Non-blocking , Synchronous vs Asynchronous Blocking 요청한 작업을 마칠 때까지 계속 대기한다. return 값을 받아야 끝난다. 호출된 함수가 자신의 작업을 모두 마칠 때까지 호출한 함수에게 제어권을 넘겨주지 않고 대기하게 만드는 것 e.g. liltdevs.tistory.com https://liltdevs.tistory.com/130 옵저버 패턴 Java로 구현 옵저버 패턴 Observer Pattern 객체 사이에 일대다의 의존 관계가 있고, 어떤 객체의 상태변하게 되면 그 객체에 의존성을 가진 다른 객체들이 변화의 통지(notify or update)를 받고 자동으로 갱신될 수..

Connection Pool https://liltdevs.tistory.com/136 Java 커넥션 풀과 데이터 소스 커넥션 풀, Connection Pool 데이터베이스 커넥션을 획득할 때마다 tcp/ip 커넥션 (3 way handshake)을 연결하는 네트워크 동작이 발생되어 커넥션을 생성하기 위한 리소스를 매번 사용해야 한다. 커넥션을 liltdevs.tistory.com Connection pool 은 데이터베이스와의 연결을 효율적으로 관리하기 위한 기술입니다. 미리 생성된 일정 개수의 데이터베이스 커넥션을 재사용하여 데이터베이스에 대한 연결 및 해제에 소요되는 시간과 리소스를 절약하여 전체 성능을 향상시킬 수 있습니다. Hikari CP HikariCP 는 SpringBoot 2.0 이후부..

Java 로 구현하는 In-Memory Cache 캐시는 성능을 위해 매우 중요한 장치입니다. 디스크보다 빠른 접근시간을 가지며, 일시적으로 어떤 값을 저장/접근하기에 용이합니다. 자바에서 연산을 하는 것 또한 메모리 위에서 이뤄지는 것이므로, 애플리케이션에 사용할 캐시를 직접 만들어 볼 수 있겠습니다. (이를테면 Caffeine 같은 라이브러리를 저희가 만드는 것입니다!) 이를 위해 자바의 참조 유형과 캐시에 대해서 알고 계시면 진행이 수월할 것입니다. https://liltdevs.tistory.com/182 Java 참조 유형 과 GC (strong, soft, weak, phantom reference) 참조 유형 자바에서는 명시적으로 메모리를 해제할 수 없습니다. 그러한 일들은 GC 가 대리 수..