일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Spring Data JPA
- 클라우드 컴퓨팅
- gcp
- Spring
- 코드업
- 백준
- 월미도
- aws
- Apache Kafka
- VPC
- 백트래킹
- springboot
- Docker
- 인천여행
- Spring Boot
- 스프링부트
- 쿠버네티스
- 클라우드
- 프로그래밍문제
- Kafka
- 로드밸런서
- JPA
- 카프카
- 스프링
- Elasticsearch
- 알고리즘
- 자료구조
- DFS
- 오일러프로젝트
- 스프링 부트
- Today
- Total
목록Programming (7)
GW LABS
Single Thread로 처리하기에는 너무 많은 양의 데이터를 처리해야 할 경우가 있다. 특히 마이그레이션 작업 시에 이런 일이 자주 발생한다. 신속하게 대용량 데이터를 DB에 저장 및 업데이트하기 위해서 Spring Boot와 Spring Boot JDBC를 Multi-Thread와 함께 사용해보았다. DB 작업에 Multithread를 적용하기 위해서 어떤 부분을 주의해야 하는지 함께 살펴보자. DB 배치작업 소요시간을 줄이기 위해 선택한 Multithread DB 배치작업 소요시간을 줄이기 위해서 멀티쓰레드 방식으로 구현을 진행하기로 결정했다면 아래와 같은 사항들을 고려해야 할 것이다. Thread 단위로 데이터를 나눌 수 있는가? 데이터를 Key 기준으로만 제어하는 작업이라면 Multithrea..
이번 포스팅에서는 스프링 부트에서 여러 DataSource를 구성하는 방법을 소개한다. 보통의 경우 스프링 부트에서 DataSource는 하나로 유지해도 충분할 것이다. MSA 아키텍처가 유행하고 있고, 이에 따라 각각의 작은 API 프로젝트들이 하나의 DB만 바라보면 충분하기 때문이다. 그러나 특별한 상황에서 한 프로젝트에서 여러 DataSource가 필요한 경우가 있다. 이러한 Multi Datasource 같은 경우에도 구성방법은 어렵지 않다. 실수하기 쉬운 부분을 여기에 정리하려고 한다. 여러 개의 DataSource가 필요한 상황 마이그레이션 마이그레이션 작업을 스프링 부트를 이용해서 진행해야 할 때 여러 DataSource를 설정하여 작업이 필요하다. API없이 하나 이상의 DB처리 별도 AP..
저번 포스팅에서는 프로세스와 스레드에 대한 정의를 간단히 살펴봤고, C++와 자바에서 기초적인 멀티스레드 프로그램을 작성해봤다. 예제 프로그램에서 멀티스레드 프로그램에서 반드시 고려해야할 공유자원을 어떻게 처리할 것인지에 대한 문제 직면했었다. 여러개의 스레드가 동시에 같은 자원을 사용하려고 할 때 어떻게 해야할까? 동기화 저번 포스팅에 예제에서는 동기화하지 않은 자원에 여러 스레드가 자원을 사용하려고 할때 발생한 문제를 봤다. 각 스레드가 자원에 대해 제한없이 접근할 수 있었기 때문에 의도치 않은 오동작이 발생했다. 따라서 여러 스레드가 서로 정보를 공유하고 동작을 맞추는 것이 필요하다. 이를 동기화라고 한다. 동기화에 관련된 개념들 공유 데이터 : 여러 프로세스들이 공유하는 데이터 임계 영역 : 공유..
웹 개발 업무에서 통상적인 비즈니스 로직만 다루다보면 사실상 멀티스레드, 멀티프로세스를 통한 성능향상을 경험해볼 기회가 많지 않다. 그러나 웹 개발의 근간이 되는 정적 웹 서버 혹은 웹 어플리케이션 서버들만 해도 멀티 프로세스 및 멀티 스레드를 통해서 사용자의 요청을 효율적으로 처리하고 있다. 다뤄야 할 데이터의 크기가 GB, PB 급의 크기라면 싱글 스레드 혹은 싱글 프로세스로는 고객을 만족시킬 수 없다! 이번 멀티스레드, 멀티프로세스 포스팅 시리즈를 통해서 이론을 실제로 코드로 구현해보고 컴퓨터한테 어떻게 멀티태스킹을 효율적으로 시킬 수 있을지 알아보려고 한다. 프로세스 vs 스레드 먼저 프로세스와 스레드에 대해 간단히 복습해보자. 프로세스는 실행을 위해 시스템에 등록된 작업을 의미한다. 따라서 각각..
PHP 구버전 혹은 curl 모듈이 설치되어 있지 않은 개발환경에서 POST 전송을 구현하려면 까다로운 작업을 거쳐야한다. HTTP header 및 body 정보를 직접 문자열로 만들어줘야 하기 때문이다. 매번 POST 전송을 위한 정보를 찾아가며 개발하는 것도 시간이 소요되는 일이기 때문에 여기에 소스를 정리한다. 파일의 경우에는 보내는 파일의 종류에 따라 meme type을 변경해주면 된다.
클라이언트에서 여러 개의 파일을 다운로드 요청을 할 때 브라우저마다 동작을 다르게해서 문제가 될 수 있는 부분이 있다. 하나의 파일 다운로드 요청이 끝나기 전에 다음 요청을 전송할 경우, 크롬 브라우저에서는 이전의 요청을 취소해버릴 수도 있다. 이런 현상을 우회해서 다중의 파일 다운로드를 클라이언트에서 구현하려면 Ajax 요청으로 구현하면 된다. 서버 파일 전송코드 PHP 예제 header("Content-Disposition: attachment; filename= \"".$file_name."\""); header("Content-type: application/octet-stream;"); header('Content-Length: '.$fsize); header("Content-Transfer-E..
PHP를 사용하는 서버에 접속자 IP를 알아내는 방법은 $_SERVER에 있는 IP 정보를 활용하는 것이다. 문제는 서버에 L4나 방화벽같은 장비가 붙어있을 경우 $_SERVER["HTTP_CLIENT_IP"]로 접속자의 IP를 알아낼 수 없을 경우가 있다. 이런 경우를 대비해서 PHP $_SERVER 변수의 다른 IP 정보들을 활용하면 접속자 IP 정보를 알아낼 수 있다. function get_client_ip_server() { $ipaddress = ''; if ($_SERVER['HTTP_CLIENT_IP']){ $ipaddress = $_SERVER['HTTP_CLIENT_IP']; } else if($_SERVER['HTTP_X_FORWARDED_FOR']) { $ipaddress = $_S..