본문 바로가기

프로그래밍/이것저것 일하면서

(53)
[오라클] 시퀀스, sysdate 등을 조회할 때 `FOM DUAL`을 쓰는 이유 오라클에서 시퀀스를 사용하거나 sysdate 따위를 조회할 때 FROM DUAL을 씁니다. 이런 식이죠. SELECT sysdate FROM dual; SELECT SOME_SEQUENCE.nextval FROM dual; 오늘은 협력사 기술지원팀의 신입 개발자 분이 이걸 왜 쓰는지 궁금해 하셨는데, 저도 학생 시절 공부할 때부터 무의식적으로 써오던 터라 명확하게 설명해줄 수가 없었습니다. 그래서 궁금해하실 분들을 위해 글로 정리해보았습니다. MySQL이나 Maria 등과 다르게 왜 오라클에서는 FORM DUAL을 요구할까요? 오라클에서 `FORM DUAL`을 사용하는 이유 Oracle에서 시퀀스나 SYSDATE와 같은 단일 값을 반환하는 함수를 조회할 때 "FROM DUAL" 구문을 사용하는 이유는 다..
특정 아이피의 VIP(Virtual IP) 여부를 확인하는 방법 시스템을 유지보수 하고 있는데, 유지보수를 위해 초기에 넘겨 받은 자료들 중에 인프라에 대한 내용이 조금 부실했습니다. 그래서 운용 도중에 VIP와 Real IP를 구분하지 못해서 인프라 팀에 잘못된 정보를 넘겨주는 등의 해프닝이 가끔 있었습니다. 그래서 VIP를 구분하는 방법에 대해 정리해보았습니다. 특정 IP 주소가 VIP (Virtual IP)인지 실제 IP (Real IP)인지 판별하는 방법은 다음과 같습니다. ARP 테이블 확인 VIP 주소는 여러 대의 서버가 공유하므로 ARP 테이블에서 해당 주소를 확인할 수 있습니다. 만약 VIP 주소가 ARP 테이블에 등록되어 있다면 해당 주소는 VIP 주소입니다. 네트워크 트래픽 분석 VIP 주소로 들어온 트래픽을 분석하여 VIP 주소로 접속한 클라이언트..
데이터베이스에 파일을 blob으로 저장하는 방법 파일을 서버 파일시스템에 저장할 것인지 데이터베이스에 저장할 것인지는 대개는 고려대상이 아닙니다. 데이터베이스는 서버 용량에 비해 매우 비싼 자원입니다. 그럼에도 불구하고 다양한 비즈니스 요구사항에 따라서 데이터베이스에 파일을 저장하는 것을 고려해보아야 하는 경우도 있습니다. 오늘은 다른 회사로 이직한 후배가, 이직한 회사에서는 데이터베이스에 Blob으로 파일을 저장한다며, 이렇게 만드는 경우도 있냐고 해서 관련 내용을 정리해보았습니다. 제가 취준생일 때 이런식으로 설계를 해본 경험이 있는데 여러모로 많은 번거로움에 비해 큰 이점은 느끼지 못했던 방법이었습니다. 제가 아직 그런 경우가 필요한 비즈니스 프로세스를 경험해보지 못했을 수도 있습니다. 데이터베이스에 파일을 Blob 저장할 때 장단점 파일을 데이..
[RESTful API] DELETE 요청에 Body를 사용하지 않는 이유 썰 API 서버에서 HMAC 검증을 추가했는데, 게 중에는 DELETE 메소드를 사용하는 API도 있다. 그런데 iOS 개발팀에서 DELETE 요청에 payload를 담을 수 없으니 이 API만 payload 대신 query string으로 생성한 HMAC으로 검증해달라는 요청을 했다. 이유를 들어보니, 그쪽 진영에서 가장 흔하게 사용하는 라이브러리에서는 DELETE 요청에 payload를 담을 수 없다는 것이다. 그래서 어차피 DELETE가 적합하지 않았던 API라 POST로 변경을 해주고, 관련 내용을 좀 찾아보았다. REST API URL 설계 지침 우선 API URL을 설계할 때에는 다음과 같은 지침을 따르는 것이 좋다. URL은 명사 형태로 작성하고, 동사는 HTTP Method로 나타낸다. U..
아이폰의 모든 브라우저는 사파리다 const isIosApp = window.webkit && window.webkit.messageHandlers; 나는 웹 기반으로 제작된 하이브리드 앱을 유지보수 하고 있다. iOS앱 내부에서 접속되었는지 위와 같은 Javascript 코드를 사용하여 판별했는데, 아이폰의 Chrome 브라우저에서 true가 리턴되는 것을 확인했다. 조금 서칭 해보니, 애플의 정책에 의해 앱스토어에 올라가는 앱들은 웹콘텐츠 로딩을 위해 WebKit 엔진을 사용한다는 내용을 찾을 수 있었다. However, there's one major thing that makes Chrome on iOS very different from all other Chrome platform implementations. Chrome o..
iCloud 파일 경로를 찾을 수 없을 때 웬만하면 작업실에서 모든 개발을 진행하는데, 가끔 집에서 급한 건을 처리해야할 경우가 있습니다. 이번 프로젝트에서는 프로젝트 외부에서 관리하는 프로퍼티 파일을 참조할 일이 있어서 JAVA 환경변수로 등록하여 실행하고 있는데, 프로퍼티를 동일하게 유지하기 위해 iCloud로 옮겼더니 파일을 찾을 수 없다는 오류가 발생했습니다. 톰캣 실행 옵션의 프로퍼티 경로를 확인해보았습니다. -Dconfig.path=/Users/myusername/Library/Mobile Documents/com~apple~CloudDocs/Works/foo.properties 해결 방법 -Dconfig.path=/Users/myusername/Library/Mobile\ Documents/com~apple~CloudDocs/Work..
엑셀 숫자 0일 때 소수점 구분자 없이 0으로 표시하기 업무용 시스템을 개발하다 보면 데이터를 엑셀로 내려받게 해달라는 요구사항이 참 많습니다. 아무래도 사무직에게 Excel은 뗄래야 뗄 수 없는 프로그램인데요, 숫자가 중요한 통계 데이터 다운로드 양식을 개발하던 중 일어난 문제와 해결책을 남깁니다. 데이터: 0, 0.01, 0.03 .... 이렇게 소수 데이터가 있었습니다. 엑셀로 내려받았더니 모두 0으로 나오네요. 무려 22 전... 중학생 때 컴활1급을 딴 엑셀 좀 아는 저는 셀 서식에 들어가 다음과 같이 써줍니다. #,##0.### 하나씩 뜯어보면 맨처음 #,##0은 천 단위마다 콤마로 구분하고 0일 때는 0을 표시하라는 말입니다. 그리고 마지막 .###은 소수점 이하는 세 자리까지 반올림하여 표시하는데, 값이 없다면 표시하지 마라는 뜻이죠. 자, ..
Vue CKEditor 커서가 처음으로 이동하는 오류 CKEditor vue 버전 사용중 커서 이동 오류 오류 증상 Vue 2.x로 작성된 프론트엔드에서 CKEditor를 사용 중이다. (당연하게도) CKEditor 샘플 페이지에서 확인 시 오류가 없는데, 우리 프로젝트에서 에디터의 정렬이나 표 기능을 사용하면 커서가 내용의 맨 처음으로 이동하는 오류가 있다. 왼쪽이든 가운데든 텍스트 정렬 버튼을 눌러놓고 글자를 입력하면 입력한 글자가 내용의 맨 처음에 들어가게 된다. 해결 에디터 버전까지 바꿔보았지만 원인은 엉뚱한 데 있었다. 바로 모델 바인딩 시 .trim 수식어를 사용한 것. .trim 수식어를 이것을 지우니 거짓말처럼 해결되었다. Vue 프레임워크의 이런 기능들은 놀랍도록 편리하지만, 간혹 이렇게 컴포넌트를 사용하며 값의 변경 시점을 제어할 수 없는..