
DataBase/PostgreSQL 2025. 1. 14.
[PostgreSQL] 문자열 끝에서 구분자로 문자열 가져오는 방법
문자열 끝에서 읽어서 처음 만나는 구분자로 잘라서 문자열을 가져와야하는 상황이었다.postgreSQL에서 제공해주는 함수 중에서 앞에서부터 잘라오는 함수는 있지만 뒤에서 잘라오는 함수가 없어서 직접 구현했다.-- Description : 구분자 마지막 스트링값 가져오는 함수CREATE OR REPLACE FUNCTION core.fn_db_get_last_str(val text, part text) RETURNS text LANGUAGE plpgsqlAS $function$ DECLARE _RET text; BEGIN _RET := left(val, -1 + length(val) - position(part IN reverse(val))); RETURN _RET;END$fun..
Java 2025. 1. 7.
[Java] FTP로 전송할 때 파일 사이즈가 커지는 문제 발생
😱 문제원인FTP로 파일을 전송할 때 파일 사이즈가 커지는 문제가 발생했다.같은 파일인데 파일 사이즈가 커지는 부분이 문제 되었다. (파일 사이즈를 비교하여 동작하는 기능이 있기 때문이다.) 참고로 아래 라이브러리를 사용하여 FTP, FTPS, SFTP 기능을 구현했다. commons-net commons-net 3.11.1 com.jcraft jsch 0.1.55 😊 해결방법FTP 설정 문제임을 파악하여 FTP 접속 시 조건을 변경했다.바이너리 모드로 설정해야 파일 사이즈가 그대로 간다고 한다. 옵션에 대한 자세한 설명은 아래에 작성했다. if(ftp.login(user, pass)) { ftp.setFileType(FTPClient.BINARY_FILE_TYPE); /..

CI CD/Docker 2024. 11. 21.
[Docker] DB 백업 및 복원 명령어
pg_dump VS pg_dumpall pg_dumppg_dumpall백업 범위단일 데이터베이스전체 데이터베이스 클러스터백업 내용테이블, 데이터, 객체데이터베이스 + 사용자 계정, 권한, 설정형식 지원SQL, 사용자 지정(-Fc, -Fd 등)SQL 스크립트만 가능복원 명령어psql, pg_restorepsql주요 사용 사례특정 데이터베이스만 백업서버 전체를 백업 pg_dumpall을 쓰면 서버 전체를 백업하는 것이여서 편리하긴 하지만데이터베이스명이 변경되는 경우 pg_dumpall을 써서 백업한 파일로 복원할 경우 오류가 발생한다. 그렇게 때문에 pg_dumpall보다는 데이터베이스별로 pg_dump로 백업해서 관리하는 것이 더 용이한다고 생각한다. DB 백업 명령어docker exec -i [db 서비..

에러모음집 2024. 1. 22.
M2 Oracle VM VirtualBox 설치 시 Unsupported hardware architecture detected! 오류
😡문제 상황 M2에서 VirtualBox 설치 시 'Unsupported hardware architecture detected! The installer has detected an unsupported architecture. VirtualBox only runs on the amd64 architecture' 이라는 오류 메시지가 떴다. 😁 해결!! 아무리봐도 설치 파일이 이상한 것 같아서 검색하다가 apply 사에서 대답한 대로 test builds 를 깔기로 했다. Apply사의 대답 https://discussions.apple.com/thread/254710872?sortBy=best M2 Virtualbox 다운로드 링크 https://www.virtualbox.org/wiki/Testbu..

CI CD/Git 2023. 3. 2.
[Git] 폴더, 파일명의 대소문자를 제대로 구분하지 못하는 문제
폴더명, 파일명을 변경할 때 영문자는 그대로인데 대소문자로 변환할 경우 commit이 안되는 현상이 있다. 이유는 git은 폴더명, 파일명의 대소문자를 구분하지 못함이다. 이를 해결하고자 git 설정에서 대소문자를 무시하지 말라고 설정하면 된다. git 터미널창에 들어가서 아래 명령어를 입력하면 된다. 1. 대소문자를 구분하라고 설정하는 명령어 $ git config core.ignorecase false 2. 대소문자를 구분하지 말라고 설정하는 명령어 $ git config core.ignorecase true 3. 설정을 확인하는 명령어 $ git config core.ignorecase

에러모음집 2023. 2. 22.
[오늘의 에러] HTTP Error 403.14 에러 - IIS 관련
😡 문제 상황 프로젝트를 상용서버에 설치 중에 발생한 오류 [HTTP Error 403.14] 클라이언트가 서버에 접근하려고 할 때 서버에서 해당 디렉토리의 목록을 보여주는 기능을 활성화 한 경우, 그리고 요청된 URL이 디렉토리 경로인 경우 발생하는 오류 즉, 클라이언트가 접근한 URL이 실제 파일이 아니라 디렉토리 경로일 때, 서버는 해당 디렉토리 내부의 파일 목록을 보여주는 기능을 비활성화했기 때문에 클라이언트게 접근 권한이 없다는 응답을 보내게 됨 😥 해결하는 과정 1. 경로 설정의 문제인가해서 경로 관련된 폴더를 찾아봄 2. 경로 설정은 너무 잘 되어있음 3. IIS의 Directory Browsing을 Enable설정하여 크롬에서 확인하였을 때 하위 폴더 및 파일이 자 뜨는 것을 확인함 4. ..

에러모음집 2023. 2. 20.
[Tomcat] 심각: Error Configuring application listener of class
😡 문제 상황 tomcat start를 클릭하니 기존에 잘 되던 프로젝트가 start 자체가 안되었다. 오류 메시지 심각:Error Configuring application listener of class 😥 해결하는 과정 1. 검색하였을 때 경로 문제일 수도 있다는 이야기가 있었지만 그 전에는 정상 동작했기에 경로 설정은 아닌 것 같았다. 2. Java를 다시 재설정 해주었다. : 프로젝트 우클릭 > properties > Java Build Path > Libraries > JRE System Library > Edit : 현재 Zulu를 사용하기에 변경 3. 그래도 안되어서 Maven 문제인 것 같아 Maven install, clean, build를 해주니 clean 시에 실패했다. 4. Mav..

에러모음집 2022. 9. 7.
[오늘의 에러] Spring Boot - Run 하자마자 아무런 에러 없이 finished with exit code 0이 될 경우
😡 문제 상황 백엔드와 프론트엔드를 연결시키려고 Spring boot Run을 하였는데 하자마자 아무런 에러 없이 finished with exit code 0이 되었다. 😥 해결하는 과정 오류 메시지가 없이 원하는 동작을 안 한 적은 처음이라 검색을 뭐라고 해야 할지 고민했다. 일단, 실행이 안되는 거니깐 "spring boot 서버 실행 안됨"이라고 검색하였다. 운이 좋았는지 상단에 나랑 같은 현상이 있는 블로그 글을 발견하였다!! 😁 해결!! WAS 기능을 할 레포지토리가 없어서 생긴 문제였다. (Pure Java로 테스트 코드를 돌리는 메이븐 프로젝트에 불과함) 스프링 부트용 톰캣을 메이븐에 추가해주었다. pom.xml에 추가해주었다. org.springframework.boot spring-bo..

에러모음집 2022. 8. 26.
[오늘의 에러] Local package.json exists, but node_modules missing, did you mean to install?
📍 About 새로운 Vue 프로젝트를 만들고 실행하려고 하니 아래 오류가 발생하였다. 📍 Error 내용 Local package.json exists, but node_modules missing, did you mean to install? 로컬 package.json이 존재하지만 node_modules가 누락되었습니다. 설치하려고 했습니까? 📍 Error 발생 원인 package.json 파일은 있지만 node_modules 파일이 없어서 생긴 에러이다. 그래서 우리는 node_modules를 설치해줘야 한다. 📍 Error 해결 방법 npm install 명령어를 입력하여 설치하면 된다.

알고리즘/문제풀이 2022. 8. 10.
[백준알고리즘] 10989. 수 정렬하기 3 풀이 (Java)
❓ 문제 ❗ 풀이 이 문제는 시간 제한, 메모리 제한을 신경써야한다. 수 정렬하기2에서 푼 코드를 가져와 제출하였을 때 Array.sort()를 사용한 코드는 통과되었지만 Collections.sort()를 사용한 코드는 메모리 초과로 통과되지 못하였다. Array.sort()외 다른 방법이 없을까 보는 중 카운팅정렬을 사용하는 방법을 보았다. 카운팅정렬의 시간복잡도는 O(N + K)로 K는 자릿수를 의미한다. 입력데이터가 K 보다 훨씬 큰 경우, 즉 데이터가 많으면 많을수록 O(N) 에 가깝기 때문에 이상적으로는 O(N) 이라고 보아도 무방하다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRea..

알고리즘/문제풀이 2022. 8. 10.
[백준알고리즘] 2751. 수 정렬하기 2 풀이 (Java)
❓ 문제 ❗ 풀이 해당 문제는 시간 제약이 있었기 때문에 Arrays.sort()를 사용할 경우 시간초과 문제가 발생할 수 있다. (뒤에 Arrays.sort()를 사용하여 푸는 방법도 설명해두었다.) Arrays.sort()의 경우 평균 시간복잡도가 O(nlogn)이고 매우 빠른 알고리즘이지만, 최악의 경우 시간복잡도는 O(n^2)이다. 따라서, Collections.sort()를 사용해 문제를 풀었다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Collections; class Main { // So..

알고리즘/문제풀이 2022. 8. 8.
[백준알고리즘] 10814. 나이순 정렬 풀이 (Java)
❓ 문제 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 온라인 저지 회원의 수 N이 주어진다. (1 ≤ N ≤ 100,000) 둘째 줄부터 N개의 줄에는 각 회원의 나이와 이름이 공백으로 구분되어 주어진다. 나이는 1보다 크거나 같으며, 200보다 작거나 같은 정수이고, 이름은 알파벳 대소문자로 이루어져 있고, 길이가 100보다 작거나 같은 문자열이다. 입력은 가입한 순서로 주어진다. 출력 첫째 줄부터 총 N개의 줄에 걸쳐 온라인 저지 회원을 나이 순, 나이가 같으면 가입한 순으로 한 줄에 한 명씩 나이와 이름을 공백으로 구분해 출력한다. ..

DataBase/PostgreSQL 2022. 8. 1.
[PostgreSQL] WITH ORDINALITY를 사용하여 원하는 순서로 정렬하기
WITH ORDINALITY 절이 함수 호출에 추가되면 각 행에 대해 번호가 매겨진 모든 함수의 출력 열 뒤에 새 열이 추가된다. table처럼 별칭도 추가할 수 있다. 예제 1 SELECT * FROM unnest(ARRAY['a','b','c','d','e','f']) WITH ordinality; 예제 2 별칭 추가 예제 SELECT * FROM unnest(ARRAY['a','b','c','d','e','f']) WITH ordinality t(id, ord); 예제 3 정렬 순서를 변경하고 싶을 경우 원하는 순서 : 'c', 'e', 'f', 'd', 'b', 'e' SELECT * FROM unnest(ARRAY['a','b','c','d','e','f']) as t1(id) INNER joi..

DataBase/PostgreSQL 2022. 8. 1.
[PostgreSQL] USING
using은 join의 양쪽이 조인 열에 대해 동일한 이름을 사용하는 특정 상황에서 활용할 수 있는 양식이다. 예를 들어, T1과 T2를 USING(a, b)으로 조인하면 조인 조건은 on T1.a = T2.a and T1.b = T2.b가 된다. 예제 1 select * from unnest(array[1,2,3,4,5]) as t1(id) inner join unnest(array[1,3,5]) as t2(id) using(id) -- 동일한 쿼리문 select * from unnest(array[1,2,3,4,5]) as t1(id) inner join unnest(array[1,3,5]) as t2(id) on t1.id = t2.id 예제 2 select * from unnest(array[1,..

알고리즘/문제풀이 2022. 7. 9.
[LeetCode] 88. Merge Sorted Array (Easy) 풀이
❓ 문제 You are given two integer arrays nums1 and nums2, sorted in non-decreasing order, and two integers m and n, representing the number of elements in nums1 and nums2 respectively. 내림차순으로 정렬된 두 개의 정수형 배열인 nums1 및 nums2와 nums1과 nums2의 element 수를 나타내는 두 개의 정수인 m, n가 주어진다. Merge nums1 and nums2 into a single array sorted in non-decreasing order. nums1과 nums2를 내림차순으로 정렬된 하나의 배열로 병합하려고 한다. The final..

Java 2022. 7. 6.
[RxJava] RxJava 이해하기 - 1. Reactive Programming이란
🌳 리액티브 프로그래밍이 주목받는 배경 최근에 모바일, 사물인터넷, 클라우드 등 시스템에서 처리할 이벤트나 데이터가 극단적으로 증가하면서 대용량 데이터의 저장, 업데이트, 실시간 반영을 효율적으로 해결할 방법으로 리액티브 프로그래밍이 주목받고 있다. 🌳 리액티브 프로그래밍 데이터가 변경될 때마다 관련 프로그램이 반응해 데이터를 처리하는 프로그래밍 방식이다. 여기서 중요한 포인트는 반응형과 데이터 흐름이다. 🌳 반응형 옵저버 패턴(Observer Pattern)의 그 자체를 말한다. 옵저버 패턴은 간단하게 얘기하자면 어떤 상태 변화가 있을 때마다 그와 관련된 객체들에게 알림을 보내는 디자인 패턴이다. 참고로, Reactive Programming은 Observer Pattern의 확장한 프로그래밍 방식이다..

알고리즘/문제풀이 2022. 7. 6.
[LeetCode] 70. Climbing Stairs (Easy) 풀이
❓ 문제 You are climbing a staircase. It takes n steps to reach the top. 계단을 올라가야한다. 계단 끝에 도달하기 위해 n 계단을 밟아야한다. Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top? 한번에 1계단 또는 2계단만 올라갈 수 있다. 계단 마지막으로 올라가기 위해서 중복 없이 얼마나 많은 경우의 수가 있는가? Example 1: Input: n = 2 Output: 2 Explanation: There are two ways to climb to the top. 1. 1 step + 1 step 2. 2 steps Exampl..

알고리즘/문제풀이 2022. 6. 20.
[LeetCode] 69. Sqrt(x) (Easy) 풀이
❓ 문제 Given a non-negative integer x x. Since the return type is an integer, the decimal digits are truncated, and only the integer part of the result is returned. pow(x, 0.5) or x ** 0.5. 음이 아닌 정수 x x가 주어진다. 리턴타입이 정수형이기 때문에 소수점 이하 자리수는 잘리고 오직 결과의 정수부분만 리턴한다. pow(x, 0.5) or x ** 0.5. Example 1: Input: x = 4 Output: 2 Example 2: Input: x = 8 Output: 2 Explanation: The square root of 8 is 2.82842....

알고리즘/문제풀이 2022. 6. 20.
[LeetCode] 66. Plus One (Easy) 풀이
❓ 문제 You are given a large integer represented as an integer array digits, where each digits[i] is the ith digit of the integer. The digits are ordered from most significant to least significant in left-to-right order. The large integer does not contain any leading 0's. Increment the large integer by one and return the resulting array of digits. 정수 배열 자릿수로 표현되는 큰 정수가 주어진다. 여기서 각 자릿수[i]는 정수의 i번째 ..

알고리즘/문제풀이 2022. 6. 10.
[백준알고리즘] 10815. 숫자 카드 풀이 (Java)
❓ 문제 숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 가지고 있는지 아닌지를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다. 두 숫자 카드에 같은 수가 적혀있는 경우는 없다. 셋째 줄에는 M(1 ≤ M ≤ 500,000)이 주어진다. 넷째 줄에는 상근이가 가지고 있는 숫자 카드인지 아닌지를 구해야 할 M개의 정수가 주어지며, 이 수는 공백으로 구분되어져 있다...

알고리즘/문제풀이 2022. 4. 26.
[백준알고리즘] 7568. 덩치 풀이 (Java)
❓ 문제 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A와 B의 덩치가 각각 (x, y), (p, q)라고 할 때 x > p 그리고 y > q이라면 우리는 A의 덩치가 B의 덩치보다 "더 크다"라고 말한다. 예를 들어 어떤 A, B 두 사람의 덩치가 각각 (56, 177), (45, 165)라고 한다면 A의 덩치가 B보다 큰 셈이 된다. 그런데 서로 다른 덩치끼리 크기를 정할 수 없는 경우도 있다. 예를 들어 두 사람 C와 D의 덩치가 각각 (45, 181), (55, 173)이라면 몸무게는 D가 C보다 더 무겁고, 키는 C가 더 크므로, "덩치"로만 볼..

알고리즘/문제풀이 2022. 4. 25.
[백준알고리즘] 2231. 분해합 풀이 (Java)
❓ 문제 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자릿수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다. 자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오. 입력 첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 출력 첫째 줄에 답을 출력한다. 생성자가 없는 경우에는 0을 출력한다. 예제 1 입력 216 출력 198 ❗ 내 풀이 import java.util.*; cla..

알고리즘/문제풀이 2022. 4. 12.
[백준알고리즘] 2798. 블랙잭 풀이 (Java)
❓ 문제 카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽다. 카드의 합이 21을 넘지 않는 한도 내에서, 카드의 합을 최대한 크게 만드는 게임이다. 블랙잭은 카지노마다 다양한 규정이 있다. 한국 최고의 블랙잭 고수 김정인은 새로운 블랙잭 규칙을 만들어 상근, 창영이와 게임하려고 한다. 김정인 버전의 블랙잭에서 각 카드에는 양의 정수가 쓰여 있다. 그다음, 딜러는 N장의 카드를 모두 숫자가 보이도록 바닥에 놓는다. 그런 후에 딜러는 숫자 M을 크게 외친다. 이제 플레이어는 제한된 시간 안에 N장의 카드 중에서 3장의 카드를 골라야 한다. 블랙잭 변형 게임이기 때문에, 플레이어가 고른 카드의 합은 M을 넘지 않으면서 M과 최대한 가깝게 만들어야 한다. N장의 카드에 써져 있는 숫자가 주어졌을 때,..
