전체 글

이것 저것 공부해보기 좋아하는 초보 개발자로, 제가 공부하는 내용들을 제가 이해하기 쉽게 작성합니다. 질문이나 지적은 언제나 환영합니다.
· AWS
개요사용자 이미지(.webp)를 .jpg 확장자 파일로 다운로드 해주는 기능 개발 후 QA 진행에 있어, 파일 수가 많아지면 타임아웃 문제가 발생해 이를 개선하는 작업을 진행했다.자주 사용되는 기능이 아니고, 해당 기능이 아니라면 큰 리소스를 잡아먹는 기능이 없기 때문에 EC2 인스턴스 유형을 최대한 낮게 설정(t3.micro - vCPU: 2 core, memory: 1GB)스토리지도 기본 용량(8GiB)파일이 저장된 S3는 테스트 환경과 연결된 아시아 서울 리전에 위치한 버킷으로 테스트했다.ImageMagicK를 이용해 압축 이미지인 .webp를 .jpg로 바꾸는 과정이 들어가기 때문에 해당 작업이 수행될 때 CPU 사용량과 메모리 사용량이 크게 늘어난다.도커로 실행되고 있는 ImageMaigcK를 ..
· AWS
인프라 구조Git Actions 설정 완료 & CodeDeploy 배포 실패[초기 로그]InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Missing credentials - please check if this instance was started with an IAM instance profile배포할 EC2 인스턴스에 AmazonEC2RoleforAWSCodeDeploy 역할(Role) 부여(이참에 백엔드 인스턴스에도 설정함)다시 배포해도 여전히 배포는 실패하고 codedeploy-agent의 로그도 그대로길래, agent 서비스를 종료하고 다시 시작시킴sudo systemctl stop codedeploy-agentsudo systemctl s..
· AWS
인프라 구조EC2 생성, 보안그룹 설정RDS - Private EC2간 연결 완료참고로 Public EC2 - Private EC2 - RDS간에는 각각의 보안 그룹의 모든 트래픽을 허용Private EC2에 접속하기 위해 필요한 private key를 Public EC2로 옮김scp -i "[key-name].pem" [key-name].pem ec2-user@[private ec2의 private IP]:.ssh/[key-name].pem  GitAction 설정(.github/workflows/main.yml)[주안점]테스트, 빌드의 환경 세팅 + application.yml 파일 copy, gradle을 이용한 build 또는 testS3, CodeDeploy 설정(S3 버킷 생성, CodeDep..
Gradle, Java, Springboot 버전 업그레이드Gradle Version upgrade6.6.1 → 6.8.3 → 7.2 → 8.6SpringBoot version upgrade2.3.4 → 2.7.7 → 3.0Java version upgrade8 → 17java { sourceCompatibility = '17'}주요 변경 사항Javax.servlet.http → Jakarta.servlet.httpjavax → jakarta 패키지 변경jakarta.servlet.http 내부 클래스들HttpServletRequest, HttpSession, HttpServletResponsejakarta.persistence 의 어노테이션들@Table, @Entity, Column, @Id, @Gen..
문제풀이특정 노드 간의 최단 거리를 구하는 문제로 BFS로 풀 수 있긴 하지만, 간선의 값이 일정하지 않기 때문에 (0일 수 있기 때문) 0-1 BFS 방식으로 풀 수도 있고 다익스트라 알고리즘으로 풀 수도 있다.0-1 BFS로 풀 경우, 일반적으로 그래프 문제에서 BFS를 이용해 최단거리를 구하는 경우에는 항상 간선이 1이라는 전제가 깔린 문제가 많아 목적지값이 poll될 때, 큐를 더이상 돌리지 않아도 된다. 하지만 이 문제에서는 간선 값이 0인 경우가 존재하므로, 모든 값이 큐에 들어갔다 나와야 한다. (이 부분을 놓쳐서 여러 번 틀렸다..)이는, 현재 위치가 `X`라고 하고 `X * 2`만큼 이동할 때에는 시간(이동에 소요되는 비용)이 증가하지 않기 때문에 더 나중에 찾아진 경우에도 이미 찾아진 ..
· Database
WITH절WITH절을 이용해 추출한 데이터들을 서브 쿼리, 임시 테이블과 같이 사용할 수 있습니다. 해당 SQL문 내에서는 재활용이 가능하기 때문에, 중복되는 코드에서는 WITH절을 이용하여 가독성을 향상시킬 수 있습니다. 대표적인 RDBMS(Oracle, MySQL, MS-SQL 등)에서 사용 가능한 문법입니다.어떨 때 사용해야 할까?WITH절은 가독성을 좋게할 뿐만 아니라 경우에 따라 쿼리 성능을 향상시킬 수도 있습니다. 어떨 때 쿼리 성능이 향상될 수 있는지를 알기 위해서는 먼저 WITH절의 동작 방식을 알아야 합니다.WITH절은 두 가지의 동작 방식이 존재합니다. 상황에 따라서 Inline View 방식과 Materialize 방식 중 한 가지 방식으로 동작하게 됩니다. 오라클을 예로, 이전 버전..
· Backend/Java
공통점둘 다 객체를 비교하는 기능을 가지는 인터페이스라는 점에서 동일합니다.Comparable// Comparable 인터페이스 구현, int compareTo(T t1, T t2) 메서드 오버라이드 필요class Item implements Comparable { int value; @Override public int compareTo(Item i2) { return value - i2.value; }}Comparator// Comparator 인터페이스 구현, int compare(T t) 메서드 오버라이드 필요class Item implements Comparator { int value; @Override public int compare(Ite..
해시를 사용하면 공간 복잡도를 많이 줄일 수 있는 간단한 문제입니다.class Solution { public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) { Map fields = new HashMap(); fields.put("code", 0); fields.put("date", 1); fields.put("maximum", 2); fields.put("remain", 3); int[][] list = new int[data.length][fields.size()]; int j = 0; for (int i = 0; i ..
문제 설명매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다.섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2)Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다.Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성해주세요.제한 사항scoville의 길이..
힙 정렬(Heap Sort)힙의 성질을 이용해 정렬하는 정렬 방식입니다.Cf. 힙의 성질: 힙은 항상 느슨한 정렬 상태를 유지하고, 루트 노드의 key값이 트리 내에서 가장 높거나 낮다(최대/최소힙)일반적으로 O(nlogn)의 시간 복잡도를 가집니다. (노드 하나를 재정렬 하는데에 O(logn)의 시간 복잡도 소요)구현 코드처음에는 Heap을 구현해서 Array를 인자로 받아 Heap을 채워 heapify 한 뒤, 하나씩 delete해서 루트를 얻어내 값을 정렬할 생각이었습니다. 그런데 그러자니 Heap 내부의 Array를 생성하는 과정이 들기 때문에 추가로 메모리가 들게 되어 추가 메모리가 사용되지 않게 해보자는 취지로 아래와 같이 작성했습니다.먼저, Array를 받아다가 he..