일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Kafka
- Spring Data JPA
- 알고리즘
- springboot
- 스프링
- VPC
- 스프링부트
- 스프링 부트
- Elasticsearch
- 코드업
- 프로그래밍문제
- JPA
- gcp
- 자료구조
- 백준
- 월미도
- Docker
- aws
- 오일러프로젝트
- 백트래킹
- Spring Boot
- 클라우드
- 클라우드 컴퓨팅
- 로드밸런서
- 카프카
- Spring
- 쿠버네티스
- 인천여행
- Apache Kafka
- DFS
- Today
- Total
목록분류 전체보기 (120)
GW LABS
스프링 부트 스프링은 J2EE를 대체하고자 출시되었다. DI 개념을 통해 가벼운 개발 모델을 제공하며, XML 구성 파일을 사용한다. 그러나 복잡한 XML 구성 파일을 사용하는게 부담이 되어 스프링 부트가 출시되었다. 스프링 부트는 스프링 프레임워크와 서드파티 제품으로 구성된 핵심 모듈의 설정 방식을 개선해 상용 스프링 애플리케이션을 빠르게 개발 하기 위한 프레임워크다. 설정보다 관례 패턴을 이용하여 필요한 경우에만 구성을 작성하도록 되어있다. 또한 fat JAR 파일로 알려진 독립형 JAR 파일 기반의 런타임 모델도 지원한다. 스프링 웹플럭스 프로젝트 리액터를 기본 구현으로 논블로킹 HTTP 클라이언트와 서비스의 개발을 지원하는 스프링의 리액티브 애플리케이션이다. 애노테이션 기반 명령형 방식과 함수 지..
마이크로서비스 정의 마이크로서비스는 아래의 두 가지 목표를 달성하고자 일체형 애플리케이션을 작은 컴포넌트로 나누는 것이다. 빠르게 개발해 지속적으로 배포할 수 있어야 한다. 수동 혹은 자동으로 쉽게 스케일링할 수 있어야 한다. 그렇다면 독자적인 작은 컴포넌트는 어떤 조건으로 나누어야 하는 것일까? 각각의 작은 컴포넌트는 독자적인 업그레이드와 스케일링이 가능해야한다. 그렇기위해선 다음과 같은 기준들을 충족해야한다. 아무것도 공유하지 않은 아키텍처를 유지해야 한다. 마이크로서비스는 데이터베이스의 데이터를 공유하지 않는다. 명확한 인터페이스를 통해서만 통신해야 한다. 동기 서비스를 사용하거나 API를 이용한 메시징 방식을 사용할 수 있는데, 이때 사용하는 메시지 형식은 버전 관리 전략에 따라 안정적으로 문서화..
백준 1755번 숫자놀이는 요건에 따라 Map을 정렬하면 쉽게 풀 수 있는 문제였다. C++의 경우 맵을 정렬하는 API가 없기 때문에 Vector 타입으로 변경하여 해결해야 한다. 아래는 풀이 소스이다. 정렬 함수는 C++의 람다 함수를 통해서 구현했다. #include #include #include #include using namespace std; map numberMap = { {0, "zero"}, {1, "one"}, {2, "two"}, {3, "three"}, {4, "four"}, {5, "five"}, {6, "six"}, {7, "seven"}, {8, "eight"}, {9, "nine"} }; int main() { int m, n; cin >> m >> n; map conta..
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..
14720번 우유 축제 문제는 그리디 문제로 배열을 조건대로 순회하면서 개수를 세는 문제였다. 오랜만에 그리디 문제를 풀면서 느낀 점은 문제를 파악하는 속도와 센스가 많이 줄었다는 것이었다. 주기적으로 그리디 관련 문제를 풀면서 감각을 살려야한다. 아래는 소스코드다. #include using namespace std; int stores[1000]; int getNextStore(const int& currentStore) { switch (currentStore) { case 0: return 1; case 1: return 2; case 2: return 0; default: return 0; } } int main() { int storeNum; cin >> storeNum; for (int i ..
오랜만에 백준 구현문제를 풀어보았다. 단순한 구현문제로 반복문을 활용하는 문제이다. 코드를 줄이는 연습을 계속해서 진행해야겠다. 반복문 안에 들어가는 변수들은 미리 선언해서 반복문의 중복을 피하도록 해야한다. #include #include using namespace std; char phase[100][100]; int main() { int size; cin >> size; for (int i = 0; i > phase[i][k]; } } int cmd; cin >> cmd; switch (cmd) { case 2: for (int i = 0; i < size; ++i) { for (int k = 0; k..
이번 포스팅에서는 Private Subnet에 위치한 서비스들을 외부에 오픈하는 방법에 대해 알아본다. 기본적인 구조는 Private Subnet에는 외부에 노출되지 않는 서비스들을 생성하고, Public Subnet에서는 로드밸런서를 두어서 로드밸런서로 들어온 트래픽을 Private Subnet으로 연결시키는 구조이다. 이번 포스팅에서는 EKS를 사용하여 진행했지만 EC2와 로드밸런서를 직접 생성해서 트래픽을 연결시키는 방법도 공부가 필요하다. 전체 아키텍처 이번 실습의 전체 아키텍처는 다음과 같다. 이전 포스팅에서 Private, Public 서브넷을 나눴다면, Public에 위치해야 할 자원들은 NAT와 로드밸런서이다. EKS와 같은 쿠버네티스를 사용한다면 로드밸런서를 쿠버네티스 서비스를 이용해 자..