목록2024/12 (8)
우당탕탕 개발일지
유클리드 호제법이란 두 정수의 최대공약수(GCD)를 구하는 알고리즘으로 나눗셈과 나머지 연산을 반복적으로 사용하여 최대공약수를 계산한다. [백준] 2609 최대공양수와 최소공배수https://www.acmicpc.net/problem/2609 일반적으로 최대공약수를 구하기 위해서는 소인수분해를 진행하여 구한다.소인수분해 방법 import java.io.*;import java.util.*;public class Main { static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static int gcd(int n, int m){ int answer = 1; int divisor = 2; ..
도커 컴포즈를 사용하려면 도커 컴포즈가 관리할 docker-compose 파일을 생성해야 한다. 물론 각 서비스들의 도커 파일이 생성되어 있어야 한다. 1. Docker-Compose 파일 작성 로컬에서 MSA를 구성했을 때는 호스트 이름이 localhost 포트 번호가 모두 달랐다. 이전 글에서는 단일 마이크로서비스만 실행했기에 포트 번호를 다르게 해도 됐었지만, MSA는 핵심 서비스를 찾아야 하기에 도커에서 실행할 때는 각 서비스의 호스트 이름이 모두 다르고 포트 번호가 8080으로 같다. 현재 내가 구성하려는 서비스의 각 포트 번호는 다음과 같다.ServicePortEureka8761Api-Gateway8000Hospital-Service9001User-Service9002Emergency-Serv..
MSA 프로젝트 진행 후, 배포에서 가장 어려움을 겪었다. MSA의 의도대로라면 각 서비스를 서비스 단위로 배포를 해야하는데 그렇게 될 경우 ec2의 개수가 10개 이상 필요하고, 그러한 요금을 감당하면서까지 개인 프로젝트를 배포할 필요성은 없다고 판단하였다. 그래서 최대한 AWS 프리티어를 사용하며 배포하기로 결정하였고, 프론트는 CloudFront를, 데이터베이스는 RDS를 사용하였다. Eureka, Api-Gateway 외 다른 서비스는 Docker Compose를 이용할 계획이다. 1. Docker 설치처음에는 ec2 프리티어로 진행하고자 했으나 t2.micro 성능이 너무 작아 컨테이너 두개를 띄우면 멈춰버렸다. 그래서 윈도우에 도커를 직접 설치하여 진행한 후, 완료된 상태를 보고 그에 맞는 ..
이진 탐색이란? 이분 탐색이라고도 불리는 이진 탐색은 정렬된 데이터에서 특정 값을 찾는 탐색 알고리즘이다.탐색 범위를 절반씩 줄여가며 값을 찾기 때문에 시간 복잡도가 O(logn)으로 빠른 탐색이 가능하다. Binary Searchimport java.io.*;import java.util.*;public class Main { static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static int[] arr; static boolean binarySearch(int target) { int left = 0; int right = arr.length - 1; ..
서버리스 방식으로 SpringBoot를 쉽게 배포할 수 있는 방법이 없을까 찾아보다가 AWS API Gateway와 Lambda서비스를 사용하기로 하였다. * Lambda로 SpringBoot 실행 시 Cold Start 가 발생하게 되는데, 이 부분 때문에 Snap Start라는 기능이 추가되었다. 즉, SpringBoot 실행이 가능하지만 Snap Start의 경우 Java만 적용이 가능해 컨테이너 진행에 실패하였다. AWS Labda 함수 생성 방식은 3가지가 있었고, 이 중 컨테이너 이미지로 함수 생성을 했다. 기존에 도커 허브에 이미지를 올려뒀었는데, Lambda의 경우 ECR 이미지 URI가 필요하여 ECR로 변경해주었다. Github Action을 통해 Docker 이미지를 생성한 후 ..
AWS S3 + CloudFront AWS 프리티어 요금제에서는 S3의 경우 5GB가 넘지 않으면 12개월 무료로 사용이 가능하고, CloudFront의 경우, 데이터 송신량이 1TB 이하이고 요청 수가 10,000,000건 이하라면 무료로 사용이 가능하다. 그래서 프론트는 AWS S3 + CloudFront + Route53 을 사용하여 배포할 계획이다. Route53 호스팅 영역 생성 먼저 가비아에서 도메인 구매를 진행한 후, 호스팅 영역을 생성해준다. 가비아 네임서버 등록호스팅 영역을 생성하면 ns 유형으로 값/트래픽 라우팅 대상이 나오는데 이 값들을 가비아의 네임 서버 1차 ~ 4차에 등록해주어야 한다. 참고로 값 맨 뒤에 붙는 .은 빼주어야 등록이 가능하다. AWS S3버킷 이름 : docto..
큐(Queue)는 먼저 들어오는 데이터가 먼저 나가는 FIFO 형식의 자료구조이다. 우선순위 큐(Priority Queue)는 요소가 특정 우선순위에 따라 정렬되는 큐 인터페이스의 구현체로, 항상 우선순위가 높은 요소를 먼저 꺼낼 수 있다. 기본적으로 우선순위 큐는 힙(Heap) 자료구조를 기반으로 동작한다. 힙이란? 이진 트리 기반의 자료구조로, 특정 규칙에 따라 부모 노드와 자식 노드 간의 관계를 유지하며 최댓값 또는 최솟값을 찾아내는 연산이 빠르다. 힙은 최대 힙, 최소힙 두 가지 유형으로 구분된다. Java에서는 힙을 PriorityQueue 클래스를 사용해 구현할 수 있다.주로 오름차순, 내림차순 정렬 방식을 이용하여 큐를 정의한다.오름차순 PriorityQueue pq = new Priorit..
플로이드 워셜이란 그래프 최단 경로를 구하는 알고리즘 중 하나로, 모든 정점에서 모든 정점까지 최단 거리를 구하는 알고리즘이다. 플로이드 워셜 알고리즘의 점화식은 다음과 같다. 다익스트라 알고리즘과 비슷해보이지만, 소스코드가 다익스트라에 비해 짧고 구현이 쉽다. 다익스트라 알고리즘단계마다 최단 거리를 가지는 노드를 하나씩 반복적으로 선택한다.1차원 리스트에 저장한다. 플로이드-워셜 알고리즘모든 지점에서 다른 모든 지점까지의 최단 거리를 저장한다.2차원 테이블에 저장한다.for (int k = 0; k [ BOJ 11403 ] 경로 찾기https://www.acmicpc.net/problem/11403 처음에는 그래프 인접 리스트로 만들어 풀이를 하였으나 간과한 부분이 있었다. 1. 경로 탐색i → ..