목차

반응형

항상 인수인계를 제대로 못받은 서버에서 db가 갑자기 내려가버리면 참 골치아프다.

sqlplus 들어가는것부터 환경설정하느라 한세월이지 최고관리자 접근도 해야하지...


갑자기 어느날 DB가 내려가버리면 ORA-01034: ORACLE not available 오류가 발생하면서 일반 계정으로는 DB로 접속이 불가능해진다.


인터넷에 찾아보면 최고 관리자로 DB를 접속하여 startup을 하라고 한다.

여기서 핵심은 oracle 계정(또는 oracle 최고 관리자 권한을 가진 계정, 나는 root가 당연히 최고일줄알고 root로 들어가서 계속 로그인 시도 해봤는데 잘 안됐다...)


sqlplus /nolog 

반응형
반응형

윈도우, 맥 환경에서의 기본 단축키가 다르지만 대체로 일치한다.

아래 단축키는 윈도우 기준이다.

 

Ctrl + D : 라인 복사

Ctrl + Y : 줄 삭제 // Ctrl + Backspace

Ctrl + Z : 되돌리기

Ctrl + Shift + Z : 되돌리기 취소

Ctrl + Alt + 위, 아래 : 라인이동

Ctrl + Shift + R, Ctrl + R : 모든 파일 내에서 바꿈, 현재 파일 내에서 바꿈

Ctrl + Shift + F : 파일내에서 검색

Ctrl + Shift + Backspace : 가장 최근에 수정한 부분 순차적으로 이동

Ctrl + B : 정의 이동

Alt + F7 : 사용된곳 검색

Ctrl + Shift + N : 파일 검색

Alt + 1 : 탐색창 껏 다 키기

Ctrl + F11 : 북마크 이동하는 창 표시 // 맥 기준 Alt + F3

Ctrl + 1 : 북마크 지정한 곳으로 이동

Alt + 방향키 : 파일 탭 이동

Ctrl + L : 라인 이동(많이 쓰지는 않는데 뭔가 쓰면 간지남)

Ctrl + Shift + / : 범위 주석

Ctrl + / : 라인 주석

 

개인적으로 꼭 지정해야 하는 단축키를 소개한다.

ㄹㅇ 거의 내가 인텔리제이를 쓰는 이유라고 볼 수 있다.

 

Preferences 이동

 

Keymap에서 단축키를 지정할 수 있다.

 

필수 지정 단축키 1. Extend Selection

현재 커서에서 선택한 부분을 확장하는 단축키인데 내가 제일 많이 쓰는 단축키다. 자주 쓸 수 있도록 간단한 단축키로 지정해놓자.

나는 Ctrl + W로 해놓는다.

그 아래 Shirnk Selection은 Ctrl + Shift + W로 지정해놓았다.

 

필수 지정 단축키 2. Last, Next Edit Location

가장 최근에 수정한 곳으로 이동하는데 앞으로, 또는 뒤로(써보면 바로 이해된다.) 이동하는 단축키인데

Next Edit Location이 지정이 안되어 있다.

나는 Ctrl + Shift + \ 로 해놓았다.

반응형
반응형

이클립스에서 빌드 후, 프로젝트를 서버에 배포 할 때 자주 발생하는 오류로 평소 주변 사람한테는 메이저 마이너 오류라고 일컫어서 말한다.


이미 인터넷 상에 많이 나와있는 오류로 원인은 현재 서버에서 사용하고 있는 JDK 버전과 빌드하여 배포하고자 하는 프로젝트의 Class 파일의 컴파일 JDK 버전이 호환이 안되기 때문에 발생하는 문제라고 한다.

그중에서도 51.0은 JDK 1.7을 지칭한다고 한다.


근데 필자의 경우 매우 헤맸던것이 분명 자바 버전은 1.7을 가리키고 있는데 위의 에러가 발생 한 것 이다.


해결하는 방법은 크게 두 가지다.

1. 서버의 JDK 버전을 업그레이드 -> 현재 서버에 다른 프로젝트가 많이 들어가 있어서 불가능


2. 프로젝트의 빌드 컴파일 JDK를 다운그레이드 -> 가능하지만 상황에 따라(maven 라이브러리들의 버전 호환x) 불가능한 경우도 있음.


결국 2번 방식을 택하기로 하였다.


현재 프로젝트의 jdk 버전은 java -version 명령어를 통하여 확인한다.(사실 이렇게 확인하면 틀릴수도 있다.)


버전을 확인해보니 1.7이었다. 아니 분명 빌드를 1.7기준으로 했는데 이클립스 로컬에서는 잘 작동하였지만 서버에 배포를 하고 가동을 해보니 오류가 나서 매우 당황했다.


일단은 JDK를 1.6으로 낮춰서 컴파일 한 뒤에, 프로젝트를 배포해보았다.

그랬더니 이번에는 또 java.lang.NoSuchMethodError 에러가 난다.

하 빡쳐 ... 분명 JDK 문제같은데 log 관련된 클래스가 제대로 작동을 안해서 그런 것 같아보인다.


그러던 도중 로그상에 찍힌 jar파일의 경로를 확인해보니까 라이브러리 밑에 있단는 것을 깨닫고 pom.xml의 maven 설정을 확인해보았더니 아니나 다를까 문제가 발생한 jar파일이 그곳에 적혀있었다.


그리고 해당 라이브러를 추적해보니 결국 해당 라이브러리를 포함하고 있는 최상위 라이브러리의 이름은 spring-context 4.0.9였다.

여기서 jdk를 낮추면 spring-context 버전도 낮추어야한다는 것을 깨달았다.

그래서 jdk를 낮춰서 빌드한 뒤에 spring context 버전도 낮춰서 빌드를 해보았으나 프로젝트에서 필수적으로 같이 구동해야하는 라이브러리들의 버전들도 맞지가 않아서 오류가 많이 발생하였다.

상사한테 물어보니 걔네들도 jdk 버전에 맞춰서 버전을 낮춰주면 된다고는 했는데 복잡해질수도 있으니까 그냥 jdk 버전을 맞춰서 프로젝트 배포하는 것이 편하다고 하였다.

그래서 jdk 버전을 낮춰서 작업하는 것은 포기하기로 하였다.


그리고 여기서 알게된 충격적인 사실


사실 내가 배포하려고 했던 서버의 jdk 버전이 1.7이 아니었던 것 이다.

jdk가 1.6 1.7 둘다 깔려있었고 기본적으로 linux 서비스에 등록된 java는 1.7이지만 톰캣에서 구동할때 사용하는 jdk는 1.6을 가리키고 있던 것 이었다.

그러니까 안되지 ㅡㅡ


톰캣을 구동하기 위한 스크립트 catalina.sh를 열어보면


위와 같이 JAVA_HOME으로 JDK의 경로에 대한 환경변수를 설정하는 부분이 있다.


echo $JAVA_HOME을 통하여 현재 톰캣에서 사용중인 java 경로를 확인한다.


bin에 java가 있어서 해당 자바 파일로 버전을 확인해보았다.


jdk 버전이 1.6이다.


결국 톰캣으로 JDK 1.7을 사용하는 서버에 새로 옮겨서 배포해보았더니 귀신같이 잘 된다.


반응형
반응형

spring에서 requestmapping에 get parameter로 받도록 되어있으면 페이지 주소가 아래처럼 뒤에 parameter에 대한 정보가 남기 마련이다.


보안상의 문제로 뒤에 붙는 주소들을 안보이도록 처리를 해달라고 요청이 왔다.

곰곰이 생각을 해보았는데 그냥 안보이도록 하는 것은 문제가 있었다.

그래서 기존에 parameter를 받아서 처리하는 requestmapping으로 넘겨주도록 redirect 해주는 requestmapping을 새로 추가하여 뒤의 인자값이 따라 붙지 않도록 수정해보았다.



bbslist.do가 기존에 parameter를 그대로 노출시키도록 되어있는 requestmapping이다.




하지만 페이지가 호출되고나서 주소창에서 보이는 뒤의 인자값을 안보이게 하고 싶은 것 이다.


requestmapping에 도달하기전 단계를 추가하기 위하여 sbbslist.do를 새로 생성해준다.


보통의 requestmapping과 다르게 RedirectAttributes를 사용한다.

해당 attributes에 원하는 데이터를 넘겨준 뒤, 마치 forward를 사용하듯이 redirect를 통하여 페이지를 넘겨준다.


페이지는 위와 같은데 이렇게 하면 get parameter로 따라붙는 인자값들은 보이지 않고 페이지의 호출이 완료 되었을 때 sbbslist.do라는 주소값을 가지고 페이지가 호출된다.



반응형
반응형

회사 동료들도 모르고 있길래 적어둔다.

파일 디렉토리를 cop/bbs/test/test2의 구조로 폴더를 생성해야한다고 쳤을때

cop 디렉토리 만들고 들어가서 bbs 디렉토리 만들고 ...

아래 방법대로 디렉토리를 생성하면 이렇게 번거롭게 할 필요가 없다. 


만들고자 하는 디렉토리의 이름만 적지말고 하위 디렉토리 경로까지 적어주면 하위 디렉토리까지 전부다 생성해준다.

반응형

'Linux' 카테고리의 다른 글

nginx 에러 페이지 설정  (0) 2021.05.11
서버 SSL 인증서 파일 경로 찾기  (0) 2018.06.27
리눅스 스크린 명령어  (0) 2018.04.22
반응형

java 웹앱에서 로그인시 패킷에 입력한 아이디와 비밀번호가 암호화가 안되어서 날라간다고 암호화를 해달라고 요청이 왔다.

사실은 정교한 암호화를 해야하지만 급한일이 매우 많기에 일단 javascript와 java에서 쉽게 사용이 가능한 base64 암호화를 사용하였다.

form의 형태는 위와 같다.



현재 데이터를 입력한 뒤, 전송하면 위 처럼 암호화가 안되어서 날아간다.


javascript에서는 폼을 전송하기전에 btoa 함수를 사용하여 base64 암호화 처리를 해준다.

위 처럼 스크립트를 작성하면 전송도중 ID 부분에서 base64 암호화 결과값이 노출된 상태로 전송된다.

오늘 또 그 부분에 대해서 수정해달라고 요청이 왔기에

form에 hidden으로 아이디 넣는 부분을 만들어서 base64 암호화된 데이터는 따로 전송을 해줘야 할 것 같다.


일단 데이터는 암호화가 잘 되어서 날아간다.


위 처럼 base64 복호화 함수를 생성한다.

    public static String decrypt(String data) throws Exception {

if (data == null) {
return "";
}

byte[] hashValue = null; // 해쉬값
hashValue = data.getBytes();

return new String(Base64.decodeBase64(hashValue));
}



마지막으로 해당 객체를 이용하여 form에서 날아온 데이터를 복호화해서 사용한다.


반응형
반응형

물체가 벽에 닿으면 벽에 안닿을 때까지 다시 반대편으로 밀어주는 기능을 추가하였다.


하지만 물체의 rotation 값에 따라서 물체가 이상한 방향으로 움직이는 것을 발견했다.


찾아보니 물체가 world가 아닌 local로 움직일 때 그렇게 된다고 한다.


기존 코드는 아래와 같이 움직였으나

transform.Translate(0.05f, 0, 0);


아래와 같이 바꿔주면 물체의 rotation 값에 영향받지 않고 잘만 움직인다.

transform.Translate(0.05f, 0, 0, Space.World);


반응형
반응형

외부에서 sql devloper나 db 매니지먼트 프로그램으로 접속이 안되는 상황에서 사용자의 통계 데이터를 뽑아와야하는 상황이었다.(단순 데이터가 아니라 join을 통하여 여러 테이블에 걸쳐 복잡한 데이터를 뽑는 상황)

첫 번째로 생각한 방법은 sqlplus로 데이터베이스를 dump떠서 로컬 db로 불러온다음에 쿼리문을 로컬에서 작성해가며 데이터를 추출하려고 했었다.

하지만 sqlplus에서 덤프를 뜨고 로컬 oracle db에서 임포트를 했으나 에러만나서 포기했다.


두 번째 방법은 sqlplus에서 지원하는 spool 기능을 사용하는 것 이다.

문제 해결이 급급해서 spool 기능에 대해서 잘 찾아보지는 않았지만 현재 sqlplus에서 출력된 화면을 긁어서 원하는 방식으로 추출하는 명령어 인 것 같다.


참고 사이트(많은 도움이 되었다.)

https://stackoverflow.com/questions/643137/how-do-i-spool-to-a-csv-formatted-file-using-sqlplus


위의 엑셀처럼 데이터를 회원정보와 회원의 행동 데이터 등 복잡한 데이터를 제출해야한다.



sqlplus에 접속한다


이 글을 보면 어떻게 하는지 대충 나와있다.

colsep가 구분자다

작성자는 쉼표로 구분자를 넣으라고 하였는데 데이터에 쉼표가 들어가면 셀이 넘어가버리는 문제가 발생해서 나중에는는 쿼리단에서 replace로 쉼표를 없애주었다.


원하는 데이터를 추출하는 쿼리다.


아까 찾아본 명령어와 쿼리를 적절히 조합한다.

spool 뒤에는 저장될 파일의 경로와 파일명을 지정한다.

파일 저장할때 해당 경로에 대한 쓰기 권한이 없으면 저장이 안되니까 적절한 경로에 저장한다.


set colsep ,

set pagesize 50000

set trimspool on

set headsep off

set linesize 10000


spool /home/data.csv


select *

  from table;



명령어를 실행하면 그냥 평범하게 데이터를 조회하는 것처럼 보인다.


sftp로 봐보면 data가 뽑혔다.


인코딩 문제로 한글이 깨지는데 메모장으로 파일을 불러와서 인코딩을 바꿔준다.



utf-8에서 ANSI로 바꾼다.




그러면 데이터가 한글로 잘 나오지만 위 같은 경우는 데이터에 쉼표가 들어가면 셀이 넘어가버려서 아래처럼 되버린다.


데이터를 뽑을때 쉼표가 없어야한다.

아니면 구분자를 달리하면 될 것 같은데

구분자를 다르게했더니 데이터가 더 이상하게 꺠져버렸다.


이렇게 해서 쿼리를 실행해보면 데이터가 잘 추출된다.

반응형
반응형

앱 개발을 하는데 PM이 mediation과 광고를 위해서 아래 링크의 모듈 사용방법과 내용을 숙지해달라고 하였다.

매우 귀찮지만 향후 계속 사용 할 것이고 잘 모르는 개념이니까 한번 열심히 정독해보기로 하였다.


mediation이란

흠 조사해보니까 매우 복잡하게 설명되어있다.

내가 이해한 바로는 보통 광고는 최대한 유저들에게 유효한 광고를 띄우려고 노력하고 유저에게 맞는 광고일수록 CPM이 증가하는 것으로 알고 있다. 이런것들을 통틀어 유저에게 광고를 보여주기 위하여 구축된 시스템을 mediation이라고 봐도 될 것 같다.

https://developers.google.com/admob/unity/mediation

여기 admob에서 mediation에 대한 설명을 잘 해놓았다.

여러 매체(구글에는 약 30여개의 광고 네트워크가 있다고 한다)로부터 광고를 끌어서 보여주는 것이라고 설명해놨다.


특이사항은 광고를 부착하는 작업자를 publisher라고 부르는 것 같다.

즉 내가 퍼블리셔인 셈이다.


https://developers.google.com/admob/unity/test-ads

어려운 내용은 없다.

유니티 프로젝트에 admob 에셋 부착

admob 코드상에서 초기화

광고 종류 선택, 활성화

테스트용으로 mediation 사용시 조심하라고 나와있다.

만약 해당 네트워크에서 테스트용으로 광고를 지원하지 않는데 테스트를 함부로 하다가는 불량 어플리케이션으로 등록된다는 내용이 있는 것 같다. 그냥 테스트중에는 광고를 누르지 않는 것이 좋다고 쓰여있다. ㅋㅋㅋ


https://developers.facebook.com/docs/audience-network/android

https://developers.facebook.com/docs/audience-network/unity


https://developers.google.com/admob/android/mediation/applovin


https://developers.google.com/admob/android/mediation/facebook


https://firebase.google.com/docs/unity/setup?hl=ko

반응형
반응형

스마트에디터에서 tab키로 포커싱이 안넘어가면 접근성 심사 테스트에 걸린다고해서 툴바부분을 비활성화 시키기로 하였다.


쌍노매거...


원본 소스


설정값


처리전


결과


설명은 생략한다.

반응형