본문 바로가기

[개발] Programming/Java21

자바 현재 날짜, 시간 구하고 형식 지정 (getInstance, Date, currentTimeMillis) 하는 방법 자바 현재 날짜, 시간 구하는 방법 시스템 유지보수를 하다 보면 현재 시간을 구해야 되는 경우가 가끔 있습니다. 그런데 할 때마다 헷갈려서 이번에는 포스팅하여 기록해봤습니다ㅎㅎ 자바에서 날짜와 시간을 구하는 방법은 여러 가지가 있겠지만, 대표적으로 3가지를 소개하겠습니다. Date(), currentTimeMillis(), getInstance() 위 세가지 방법 모두 동일한 기본 형식으로 현재 날짜와 시간을 리턴해 줍니다. 세 가지 타입 다 기본 날짜, 시간 형식으로 리턴되기 때문에 우리에게 맞는 형식으로 표시하기 위해서는 반드시 변환하는 과장이 추가되어야 합니다. 포맷은 'SimpleDateFormat'을 이용하면 간단하게 원하는 형식으로 지정할 수 있습니다. SimpleDateFormat 으로 날짜.. 2019. 12. 29.
자바 Cannot invoke compareTo(int) on the primitive type int 자바에서 .compareTo() 메소드를 사용하려니 발생한 오류. 'Cannot invoke compareTo(int) on the primitive type int' 원인: primitive type은 클래스가 아니라 메소드를 호출할 수 없는데, 호출을 시도했기 때문. 오류가 발생하는 소스 1 2 3 4 5 6 7 8 9 // 숫자를 입력할 수 있는 vo가 있다고 가정 NumVo vo = new NumVo(); vo.setNumA(1); vo.setNumB(1); int result = vo.getNumA().compareTo(vo.getNumB()); // 결과: compareTo에서 오류 발생 Colored by Color Scripter cs 오류를 해결하기 위해서는 2가지 해결 방법이 있다. 1.. 2019. 7. 11.
자바 BigDecimal to int, 값 비교하는 방법 오라클에서 COUNT를 사용하면 해당 컬럼의 데이터 타입은 bigdecimal로 리턴된다. 그렇게 되면 해당 값으로 컨트롤러 단에서 int 값과 바로 비교할 수 없게 된다. 이 경우 우선 bigdecimal의 int 값을 구해서 비교를 해주면 해결된다. 사용 함수: intValue(); 예시, 1 2 3 testVo vo = new TestVo(); tmp = vo.getCnt(); cs 데이터 세트 testVo에 cnt라는 bigdecimal 변수가 있다고 가정, 이 값이 int 형인 0보다 큰지 비교하고 싶은 경우. cnt의 int 값을 구해야 된다. 아래 예제를 보면 첫 번째 if 조건문에서는 타입이 일치하지 않아 오류가 발생하며, 두 번째 if 조건문의 경우 bigdecimal을 int로 변환하였.. 2019. 6. 12.
자바 문자열 비교 함수 compare(), compareTo() compareTo() : 문자열의 사전순 값을 비교하여 그에 해당되는 int 값을 리턴한다. 예로 A > B 라고 가정하면, - A = A = 0 (동일한 경우) - A > B = 1 (좌측 값이 큰 경우) - B > A = -1 (좌측 값이 작은 경우) 예제 소스 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public void test(){ String str1 = "AA"; String str2 = "AA"; String str3 = "BB"; System.out.println(str1.compareTo(str2)); // 결과 0 System.out.println(str2.compareTo(str3)); // 결과 -1 System.out.println(str3.compareT.. 2018. 11. 9.
GC overhead limit exceeded, String 대신 StringBuilder 사용 등 해결 방법 오류 중에 'Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded' 는메모리 한계를 초과 했기 때문에 발생한다. 두 가지 해결 방법은 다음과 같다. -Xmx 옵션으로 메모리를 더 할당. 메모리가 부족하여 가비지 컬렉션이 이루어 졌으나, 새로 확보된 메모리가 전체 메모리의 2% 미만이어서 생기는 오류.더 이상 가비지 컬렉션을 할 수 없을 정도로 메모리를 사용한다는 것. 기존) java -Xms1g -Xmx1g -jar Project.jar해결) java -Xms4g -Xmx4g -jar Project.jar String 대신 StringBuilder를 사용 : 문자열에 여러 가지 조작을 가할 경우 변하지 않는 문자열의 경우, String을 사.. 2018. 11. 9.
자바, 클라이언트 정보 조회 (IP, 에이전트, 브라우저, OS 정보) 자바단에서 간단하게 클라이언트 아이피, 브라우저, 운영체제 정보를 구하는 방법 공유드립니다. 클라이언트 IP String ip = request.getHeader("X-FORWARDED-FOR"); if(ip == null || ip.length() == 0) { System.out.println(request.getHeader("Proxy-Client-IP")); System.out.println(request.getHeader("WL-Proxy-Client-IP")); // 웹로직 System.out.println(request.getRemoteAddr()); } 에이전트 String agent = request.getHeader("User-Agent"); 브라우져 String brower = nul.. 2018. 11. 9.
자바 Exception:Broken pipe 오류 해결 방법 오류 발생 원인 java.net.SocketException: Broken pipe : 보통 잦은 입출력 호출로 발생된다. 처리 중인 요청(또는 응답)을 사용자가 기다리지 않고, '새로고침(또는 종료, 연속 클릭 등)'을 자주 실행하게 되면 소켓이 끊어져서 발생된다. java.io.IOException: Broken pipe : receiver에서 송신 받은 데이터를 제때 처리하지 못하는 상황(네트워크가 느리거나 서버의 CPU가 max인 경우 등)에서 sender가 계속 보내는 경우. 두 소켓상의 통신에서 소켓을 담당하던 프로세서가 갑작스런 이상으로 종료가 된 상황에서 상대 소켓은 이를 알지 못하고 데이터를 전송하려 할때 발생하게 된다. (ex, 클라이언트에서 요청을 하였는데 서버에서 작업을 완료하여 클.. 2018. 11. 9.
자바 쿠키 다루기 (쿠기 생성, 조회, 삭제) 자바 쿠키 다루는 방법 쿠키는 4개의 속성과 하나의 데이터를 가지는 구조체이다. 서버는 응답에 Set-Cookie 헤더를 포함시키는 방식으로 쿠키를 설정한다. 쿠키는 key, 값 쌍과 선택적인 어트리뷰트들로 구성된다. 자바 쿠키 구조 쿠키의 기본 구조는 다음과 같다. Set-Cookie: name=value; expires=[Date]; domain=[Domain]; path=[Path]; [secure] 자바 쿠키 특징 유효기간 쿠키가 생성되면 기본적으로 브라우저가 종료될 때까지는 쿠키의 데이터를 사용할 수 있다. 하지만 유효 기간을 지정하면 브라우저가 종료되어도 지정한 기간 동안은 쿠키 데이터를 읽고 쓸 수 있게 된다. 유효 기간이 지나면 쿠키 데이터는 소멸된다. 실제로 파일이 지워지지는 않더라도 데.. 2018. 11. 8.
자바 HashMap vs Hashtable 차이점, 예제 HashMap VS HashTable 둘의 차이점을 최대한 요약해서 정리해보자면 1. HashMap은 단일 스레드 적합하며 null을 허용하지만 동기화가 안된다.2. HashTable은 멀티 스레드에 적합하고 동기화되지만 null을 입력할 수 없고 동기화에 따른 성능의 저하가 발생한다. 아래는 상세한 차이점. HashMap vs Hashtable HashMap 1) 비동기식이다. 멀티 스레드에는 적합하지 않다. 2) key, value에서 하나의 null key와 다수의 널 value를 허용한다. 3) HashMap is a new class introduced in JDK 1.2. 4) 속도가 비교적 빠르다. 5) 아래 코드를 사용하면 동기화가 가능하다. Map m = Collections.synchr.. 2018. 11. 8.