본문 바로가기

전체 글

(105)
[오라클] the account is locked 문제 로컬 서버가 안 올라가서 보니 the account is locked이 뜬다. 당연히 DB 툴에서도 접속이 안된다. 해결 SELECT * FROM dba_users WHERE username = 'MYUSERNAME'; lock 된 사용자를 볼 수 있다. ALTER USER MYUSERNAME ACCOUNT UNLOCK; 잠금을 해제한다. 원인 알고보니 사용자 계정을 만들 때 비밀번호를 대문자로 만들고 애플리케이션 프로퍼티에는 소문자로 썼다. 앗! 나의 시이이일^수~
axios 요청 응답 시 오버레이 로딩 이미지 띄우기 (axios beforeSend) 결론부터 jQuery ajax의 beforeSend 같은 기능을 axios에서 구현하고 싶다면, interceptor를 설정하면 된다. 오버레이 로딩, 스피너(뺑글뺑글 이미지) 등 여러가지 이름으로 불리지만, 어쨌든 마음에 드는 것을 쓰면 된다. 주의: 로딩 띄우는 것은 요청 전에만, 나머지는 로딩 오버레이를 꺼야한다. 지금은 Vue.js로 개발하고 있기 때문에 store에 loading이라는 상태를 만들고 app.vue에 오버레이 로딩 컴포넌트를 삽입하여 $store.state.loading을 참조하게 했다. mutation에는 startLoading, endLoading을 만들어 아래 인터셉터에서 스토어의 상태를 바꾼다. 아래 코드는 axios 공식 문서에서 주석만 수정한 것이다. 해당 위치에서 오버..
Java try-with-resources FileOutputStream을 쓸 일이 생겼다. 다른 분이 만들어 놓은 유틸 클래스가 있어서 가져다 쓰려고 봤는데, 언뜻 보니 close()가 없었다. 우선 내가 알던 고전적인 코드는 다음과 같이 작성한다. FileOutputStream fos = null; try { fos = new FileOutputStream(file); fos.write(mFile.getBytes()); } catch (IOException e) { e.printStackTrace(); } finally { if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } }자원을 사용했으면 반드시 close()를 호출한다고 배웠다. ..
Spring/MySQL '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp 오류 MySQL 5.7.26 고인물 레거시 시스템을 새로 만드는 중이다. MySQL에서 datetime 컬럼을 추가 후 테스트케이스 작성 중 다음과 같은 오류가 떴다. '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp error 해당 컬럼 값은 NULL인데 왜 '0000-00-00 00:00:00' 라고 할까? 처음에 Not Null에 디폴트로 타임스탬프를 줘서 만들었다가 Nullable, 디폴트를 삭제한 것이 이유였다. 검색을 해보니 접속 정보에서 zeroDateTimeBehavior=convertToNull를 추가하라고 하는데 컬럼정보를 수정하는 것이 더 옳은 방법이라고 생각한다. 그냥 깔꼼하게 컬럼을 지우고..
인증 없는 SMTP, JavaMailSender에서 MailAuthenticationException 발생 개발서버 테스트를 진행 중이다. 이메일 발송 배치작업이 좀 있는데 메일서버가 따로 없으니 서버에서 직접 보내라고 한다. 리눅스 서버에 sendmail을 설치했다. 텔넷으로 테스트를 해보니 메일이 잘 발송된다. 그런데 애플리케이션을 올리니 사용자 인증을 자꾸 요구한다. JavaMailSenderImpl에서 MailAuthenticationException를 발생시킨다. 엥? 인증 필요 없는데?? 기존: spring: profiles: dev mail: host: localhost username: test@test.com password: protocol: smtp 혹시나 싶어서 password를 아예 삭제해주니 잘된다. 변경 후: spring: profiles: dev mail: host: localho..
Typescript / TSLint 오류 - Type boolean trivially inferred from a boolean literal, remove type annotation Vue 컴포넌트를 만들고 있는데 TSLint에서 경고를 했다. 문제가 된 코드 private resizable: boolean = true;TSLint 경고 내용 Type boolean trivially inferred from a boolean literal, remove type annotation원인 초기값을 할당하면서 true를 줬는데, 코드에서 타입을 명시하지 않아도 컴파일러가 초기값을 통해 타입을 추론할 수 있으므로 코드가 장황해진다. 수정된 코드 tslint.json을 이런 경우를 체크하지 않도록 수정하거나 코드를 수정하면 되는데, 나는 습관을 고치기 위해 코드를 수정하기로 했다. private resizable = true;만약 tslint 설정을 고치고 싶다면 tslint.json에서 다..
크롬 브라우저 비밀번호 자동완성 방지 (autocomplete 불가 시) 결론부터 크롬에서는 autocomplete 어트리뷰트 대신, 임의의 을 넣어주자. 개요 보통 회원정보에서 내 정보 수정을 할 때는 비밀번호 변경만 따로 있는 경우가 많다. 근데 이번 경우는 같은 폼에 있어서, 비번을 입력하지 않을 경우 수정되지 않는 폼이었다.(비번 재입력 받는 부분도 없음) 어쨌든 별도 입력을 안했는데 비번이 바뀌었다고 해서 확인해보니, 브라우저 자동완성이 문제였다. 사용자 행동 크롬은 사이트에 로그인을 하면 비번을 저장할 것인지 묻는다. 사용자가 여기서 '예'를 선택하여 인증정보를 저장했다. 내 정보 수정 화면에 접속 비밀번호 란에 자동완성 된 비밀번호가 입력되어 있음 '저장'하면 인코딩이 바뀌어 엉뚱한 비번이 들어감 로그인 못함... 해결책 비밀번호 자동완성 방지를 위해 input ..
InternetExplorer ajax 파일 다운로드 처리 (msSaveBlob 사용) 백오피스의 일부 엑셀 다운로드가 IE에서 안 된다는 오류가 들어왔다. 열어보니 두 케이스였다. 프론트에서 데이터 내용을 만들어 a 태그에 넣어 클릭 발생 서버에서 받아오지만 ajax로 byte[]를 받아와 a 태그로 만들어 클릭 발생 어쨌뜬 의 download 어트리뷰트를 사용한다는 공통점이 있었다. 이건 IE에서는 안된다. download 어트리뷰트가 엣지부터 가능하기 때문이다. (IE를 안 쓰면 모두가 행복한데 ㅠㅠ) 그냥 서버로 처리할까 하다가 msSaveBlob라는 것을 찾았다. IE10부터 지원한다. if (window.navigator.msSaveBlob) { var blob = new Blob([datastring]); window.navigator.msSaveBlob(blob, fileNa..