전체 글 89

[Java] 원격파일 유효여부 체크

백엔드 개발중 파일 생성스케쥴을 걸어놓는 경우가 생겼다. 해당 파일을 프론트에서 다운을 받아야 하기에, 처음에는 아래 로직으로 체크한 후 다운을 받게 구현하였다. String addr = "파일경로"; for (int idx = 0; idx < 10; idx++) { Thread.sleep(500); File f = new File(addr) if (f.exists()) { break; } } 서버에 파일이 존재하는 경우에는 별다른 문제없이 정해진 시간동안 기다면서 중간중간 체크하여 문제없이 동작하였는데, 파일이 원격에 존재하는 경우에는 항상 없는 것으로 체크하는 현상이 발견되었다. 이 문제를 아래와 같이 URLConnection을 이용하여 조치하였다. String addr = "파일주소"; for (i..

[Oracle] 만나이 구하기

보통 나이를 구할때, sql에서 생년월일을 가져온 후, java 단에서 가공하는 형식으로 많이 사용하였다. 이번에 요구사항으로 검색조건에 나이를 사용할 일이 있어서, sql 에서 구하도록 방법을 찾아보았고, 다음과 같은 방법을 찾을 수 있었다. SELECT TRUNC(MONTHS_BETWEEN(TRUNC(SYSDATE), TO_DATE('19000101','YYYYMMDD')) / 12) FROM DUAL 그런데, 꼭 날짜를 이상하게 넣는 사람들이 있어, 실행시 오류가 발생하는 경우가 확인되었다. 날짜 변환시에 오류가 발생하는 경우 이를 감지해서 회피하도록 다음과 같은 방법으로 조치하였다. SELECT DECODE(VALIDATE_CONVERSION(p.birth_date AS DATE, 'YYYYMMD..

Development/Etc 2024.01.16

git ignore 에 추가한 항목이 더이상 나타나지 않게 처리하기

개발하던 중에 더이상 git에서 관리되지 말아야 할 항목이 생기는 경우가 종종 생기곤 한다. 개발중에 생긴 파일들이 실수로 저장소에 올라갔던가, 리팩토링등으로 인해 불필요해지는 경우에 .gitignore 에 추가하곤 한다. 그런데, 가끔씩 .gitignore 에 추가한 항목들이 계속하여 추적되는 경우가 발생하여 git status 시에 원하지 않는 내용이 확인되곤 하였다. 이에 방법을 찾다 아래와 같은 방법을 찾을 수 있었다. git rm -r --cached . git add . git commit -am "Remove ignored files" 원격저장소까지 해당 파일을 모두 지워버리긴 하지만, 현재 목적에는 그게 맞는거 같아서 이 방법으로 계속 사용하게 될 것 같다. 출처: https://imjhk..

Development/Tools 2023.02.06

Linux 에서 예약작업 걸기 - 1회성

리눅스에서 작업 예약 걸기 작업이 완료되기까지 시간이 오래걸리는 경우에는 screen, tmux 등을 이용해서 걸어놓고 퇴근하면 그만이지만, 퇴근하고나서 한참 후에 (예를 들어 새벽2~3시정도?) 작업이 시작되어야 되는 경우가 가끔 있다. 그때까지 사무실에 남아있을 수도 없고 난감한데, 그럴때 예약을 걸어놓으면 유용할 듯 싶다. crontab 명령어도 있지만, 이 명령어는 root 만 사용이 가능하기에 at 명령을 사용하고자 한다. at 명령어는 일반사용자도 사용이 가능하고, 1회성이기에 유용할 듯 싶다. (단, 보안을 이유로 비활성화한 경우가 많다고 한다) at 명령어 # at 03:00 repo sync -d -j8

Development/OS 2022.12.29

순열, 조합, 중복순열

python에서 순열, 조합등을 구현하려면 제법 귀찮게 코드를 작성하여야 한다. 그런데 찾아보니 외부 라이브러리를 통해 간단히 구현할 수 있어, 정리해보려 한다. 1. 순열(Permutaion) from itertools import permutations nums = [1, 2, 3] permute = permutations(nums, 2) print(list(permute)) [(1,2), (1,3), (2,1), (2,3), (3,1), (3,2)] 2. 조합(Combination) from itertools import combinations nums = [1, 2, 3] combination = combinations(nums, 2) print(list(combination)) [(1,2), (..

Python 반올림 오류 해결

문제 python에서는 숫자를 올리고 내리고자 하는 경우에는 python 내장 모듈인 math 모듈을 import하여 사용할 수 있다. 그리고 반올림은 간단히 round() 를 사용하면 된다. 그런데 round() 함수의 결과가 기대와는 다르게 나오는 경우를 발견하였다. 1.5의 반올림 값은 2이고, 2.5의 반올림 값은 3이다. 지극히 당연하기에 round(1.5), round(2.5) 의 결과값을 각각 2, 3 으로 기대하고 해당 함수를 실행시켜보았다. 실행결과 round(1.5)의 결과는 예상과 같게 2가 나왔지만, round(2.5)의 결과는 예상과는 다르게 2 가 나왔다. 원인 python에서 반올림 기본설정은 반올림할 자리의 수가 5이면 반올림 할 때 앞자리의 숫자가 짝수면 내림하고 홀수면 올..

[Oracle] CLOB 조회 - 매우 긴 문자열

오라클에서는 문자를 저장하는 VARCHAR2가 최대 4000자까지만 지원되어, 그 이상의 데이터는 CLOB에 저장을 하였다. 그런데, 이는 반대로 읽어올때도 문제가 되는데, 읽어올때도 4000자 이상은 읽어오지를 못하였다. 게다가 CLOB에 저장된 데이터는 평범하게 SELECT column 으로는 조회가 모두 되지 않아, 아래와 같이 조회하여야 했다. 방법1 SELECT DBMS_LOB.SUBSTR(col1, DBMS_LOB.GETLENGTH(col1)) FROM MyTable 그런데, 이때 col1의 크기가 4000을 넘어가면 또 에러가 발생한다. 위와 같이 방법을 찾아 진행했었는데, 해당 Query의 결과를 Java단에서 정상적으로 읽지를 못하였다. 방법2 그래서, Query는 기존 그대로 사용하여 ..

Development/Etc 2020.03.05

[Oracle] 여러 row 하나로 합치기

주로 MySql을 사용하다 오랜만에 Oracle을 사용하니 생각보다 불편한 점이 많았다. 이전에 Oracle에서 MySql로 넘어왔을때도 그랬었는데... 그중 여러 row를 하나의 Column으로 합칠때 찾아보니 Oracle 버전마다 방법이 모두 달라 정리해보기로 했다. 테스트는 9버전대에서 진행하였고, 10 이후 버전은 테스트를 못해봤지만 동작하리라 추측한다. SELECT type , SUBSTR(XMLAgg(XMLElement(x, ',', name) ORDER BY code).Extract('//text()'), 2) name_9i , wm_concat(name) name_10g , ListAgg(name, ',') WITHIN GROUP(ORDER BY code) name_11g FROM t GR..

Development/Etc 2020.03.05

Windows10 시작프로그램 폴더 위치

윈도우 시작시 자동으로 특정 프로그램이나 특정 폴더를 열고자 하기 위해 검색하니, Win키 + R 버튼을 눌러서 열리는 폴더에 추가하면 된다고 나온다. 그러나, Wox 프로그램을 사용하고 있는터라, 위 단축키를 사용해서는 해당 폴더로 접근이 되지 않았다. 찾아보니 아래와 같이 두가지 방법이 있었다. 1. C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp 2. C:\Users\[UserName]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 이 중 위 단축키로는 2번 경로의 폴더가 열린다.

Development/OS 2020.02.18

git reset 으로 날린 내용 복구

개요 git 으로 소스관리를 하고 있는데, 중요한 작업(merge 등) 수행전에는 보통 stash 등을 사용해서 작업내용을 보존해놓고 작업을 진행하고 있다. 그런데 가끔씩 stash 를 까먹거나, brach merge 등으로 싹 날려먹는 경우가 있곤 했다. 작업양이 적으면야 상관없겠지만, commit 등을 잔뜩 만들어놓고 push 를 안한 상태에서 이런 일이 발생하면 아찔해진다. 해결 이런 경우 아래 명령어로 복구가 가능했다. git reflog git reset --hard 첫번째 명령어를 실행하면, 그간 수행해온 git 명령어들이 보여지며, 첫번째는 commit_id, 두번째가 commit-hash-id 이다. 이 commit-hash-id 를 통해 특정 작업 시점으로 되돌아갈 수 있다.

Development/Etc 2019.11.08