Java 8

vscode에서 말도안되는 java compile error

최근 vscode 사용중에 remote ssh target에 재미가 들렸다. 생각보다 간편하게 원격지 서버에 코드를 올리고, 테스트하고 모듈을 기동할 수 있으니 이렇게 편할수가 없다. 그러던 중 이상한 현상이 발생했다. 이상하게도 java code assistant?가 멀쩡한 코드를 오류라고 말하기 시작했다. ;이 없다던가 )가 부족하다던가 하면서 말이다. 처음에는 어디 잘못닫았겠거니 했는데, 아무리 봐도 아니였고, gradle로 직접 빌드하면 아무 문제 없는 것을 확인 할 수 있었다. 여기저기 삽질한 결과 정리를 할 수 있었다. 1. 남들 다 하는 재시작 그렇다, 역사적으로 가장 확실한 방법 중에 하나. 이걸로 문제가 해결된다면, 행복한 편이다. 물론 자주 발생한다면, 어떻게든 다른 해결책을 찾아야겠다..

IT한 것 2021.04.06

HttpURLConnection 이용하여 JSON 전송시 서버가 응답이 없는 경우

아래는 java의 기본 제공 기능을 이용하여 웹 서버에 통신을 해서 JSON 데이터를 주고 받으려고 작성한 코드이다 conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); conn.setDoInput(true); conn.setDefaultUseCaches(false); OutputStream os = conn.getOutputStream(); os.write(message); os.close(); InputStream is = conn.getInputStream(); while (is.available() > 0) { baos.write((char) is.read()); }..

IT한 것/java 2021.04.03

Servlet - Session Clustering, Context Clustering

대부분의 Servlet 개발자 분들은 알고 계실지 모르지만, 알게된 김에 한번 정리해본다. WAS는 instance 별로 정보를 관리한다. 물론 DB에도 중요한 정보를 저장하고 관리한다. 그중 일부 정보는 굳이 DB로 저장할 필요가 없다. (휘발성이어도 어느 조건까지만 유지되면 되는 정보) instance 별로 할 수 있는 작업의 임계치가 존재한다. 이를 극복하기 위해 여러개의 instance를 묶어 전체 적인 임계치를 상승시킨다 여기에서 고민거리가 생긴다, instance1에 접속해서 로그인 한 사용자의 다음 HTTP Request는 instance1을 보장 할 수 없는 경우가 발생한다. (web server나 L4에서 보장 해주기도 하지만, 이것을 사용 못하는 경우도 존재함) 그럼 그 사용자가 ins..

IT한 것/java 2021.04.03

NIO의 select 대기 시간이 길어지는 현상.

java 간의 통신을 구현하는데, 데이터길이를 보내고, 그 길이만큼 데이터를 보내는 구조이다.때문에 select를 두번 호출하도록 구현하였는데, 요상하게 이런식으로 구현했더니, 심각할 정도로 성능이 나오지를 않았다.c로 구현할때는 별 이상 없던거 같은데 말이다. 동일한 네트워크간의 통신인데 한번의 송 수신 시간이 50~80ms 정도 소요되었다. select를 한번만 호출하도록 수정하니 0~1ms 정도 소요된다.이게 맞지. ;;;

IT한 것/java 2013.11.11

서블릿 필터 개발시 주의할 점.

서블릿 필터 개발시 주의할 점 요놈의 필터를 개발할때에 반 필수적으로 ServletRequest, ServletResponse 인터페이스를 구현하거나 상속 받는다. 가장만만한 것이 랩핑을 이용하는 것이다. 뭐 자세한 방법이야 다들 알아서 잘들 할테지만, 최근 사정상 gzip 필터를 이용할 일이 있었는데, 문제 되는 것들이 많이 보였다. 요약하자면, ServletResponse는 문자열 용으로 쓸 PrintWriter, 바이너리 용으로 쓸 ServletOutputStream 두가지를 사용하는데, 문제있는 gzip filter 들은 요, ServletOutputStream 만을 고려하여 만들어져 있었다. 물론 filter를 적용한 Web Application Server에 따라서 다를 수 있겠지만, 본인이 ..

IT한 것/java 2008.09.15

적용되지 않는 xalan

XSLT를 이용하여 XML문서 변환을 하려고 xalan을 이용할 수 있다. 그런데 희한하게도 이 xalan이 적용이 되지를 않는다. 그렇다고 특정 Class가 존재하지 않는 것도 아니다. JDK 버젼에 따라 다를 수 있는데, 1.4.x 이상 부터는 xalan가 rt.jar에 포함되어 있다. xalan의 버그패치나, 신 기능을 사용할 것이 아니라면 xalan을 따로 가지고 다닐 필요가 없다는 말이다. 혹시라도 최신 xalan을 사용하려면 endorsed에 집어 넣는 법을 사용해야겠다.

IT한 것/xml 2007.04.11

Java XML 파서 변경하기

Java에는 XML 파서가 내장되어 있다. Crimson 파서가 그녀석인데, 성능이 별로 안좋은지, 대부분 다른 것을 사용한다. 그렇다면 다른 파서로 변경은 어떻게 해야할까? WAS나 AXIS 같은 애들은 알아서 셋팅을 해주는 것 처럼 보인다. 대체 어떻게 해먹는지 몰라서 ${JAVA_HOME}/jre/lib/endorsed 에 다른 파서를 강제로 넣어주었다. 그런데 나는 이런방법을 무지 싫어한다. 고로 다른 방법을 찾던중 오늘 실마리를 잡아 해결였다. 우선은 Manifest 라는 녀석에 대해서 알고 있어야한다. 잘 알 필요는 없고, 이 녀석에 의해서 기본 파서를 변경할 수 있고, 그 방법만 알면 된다. 보통 jar 로 패키징한 녀석을 풀어보면 META-INF 라는 디렉토리가 생긴다. 여기에 들어가는 정..

IT한 것/xml 2007.03.23

Java application이 임시디렉토리의 공간이 부족하다고 나올 때

아마, 어떤 플랫폼에도 해당하는 이야기인 것 같은데, 정말로 임시디렉토리 /tmp 의 공간이 부족한 경우가 있다. 물론 필요없는 파일을들 지우면 되겠지만, 상황이 여의치 않은 경우도 있다. 적은 공간에 weblogic을 설치하려다보니 상당한 공간의 임시디렉토리가 필요했다. tmp의 전체 크기보다 많은 공간이 필요한것 같았다. 500메가의 jar를 임시디렉토리에 풀려는 것 같았으니까 말이다. 상당히 난감해보이는 상태였는데, 해결책은 간단했다. 임시디렉토리의 위치를 일시적으로 바꾸는 것. unix의 경우 쉘 변수 IATEMPDIR 값을 설정하면 된다고 나왔으나, java application은 달랐다. -Djava.io.tempdir="/newtmp" 옵션을 주어 변경했다.

IT한 것 2006.12.22