Programming Language/Java 57

[Java/Error] 서버 기동 시 발생하는 log4j 에러(라이브러리 버전 충돌)

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.logging.log4j.util.LoaderUtil.newCheckedInstanceOfProperty(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object; at org.apache.logging.log4j.core.util.Loader.newCheckedInstanceOfProperty(Loader.java:338) at org.apache.logging.log4j.core.impl.Log4jContextFactory.createContextSelector(Log4jContextFactory.java:98) ..

[Java/Error] OutOfMemoryError: unable to create new native thread

프로그램 테스트를 하다가 다음의 에러가 발생하였다.14:25:10.187 [http-nio-8085-exec-8] WARN io.netty.channel.AbstractChannel - Force-closing a channel whose registration task was not accepted by an event loop: [id: 0xc83c8a8c]java.lang.OutOfMemoryError: unable to create new native thread at java.lang.Thread.start0(Native Method) ~[?:1.8.0_265] at java.lang.Thread.start(Thread.java:717) ~[?:1.8.0_265] ..

[Java] Stream API - stream().map().collect()

Stream API - stream().map().collect() 1. Stream API (1) Stream API란? - 기존에 배열이나 컬렉션을 사용하면서 코드의 길이가 길어지고 가독성이 떨어지며, 코드의 재사용이 힘들어지는 문제점을 극복하기 위해 Java SE 8부터 Stream API가 추가되었다. -> Stream API는 데이터를 추상화하여 다루기 때문에 배열이나 컬렉션 뿐만 아니라 파일에 저장된 데이터도 모두 같은 방법으로 다룰 수 있게 해준다. (2) Stream API의 특징 ① Stream은 외부 반복을 통해 작업하는 컬렉션과 달리 내부 반복을 통해 작업을 수행한다. ② Stream은 재사용이 가능한 컬렉션과 달리 단 한 번만 사용할 수 있다. ③ Stream은 원본 데이터를 변경하..

[Java] Map 계열 메소드 - get() vs. containsKey()

get() get()은 key에 해당하는 value를 가져올 때 사용한다. public class getMethod { public static void main(String[] args) { HashMap hmap = new HashMap(); hmap.put("fruits", "과일"); hmap.put("apple", "사과"); System.out.println(hmap.get("fruits")); // 과일 System.out.println(hmap.get("apple")); // 사과 System.out.println(hmap.get("banana")); // NullPointerException 발생 } } hmap에 put()으로 key와 value(fruits:과일, apple:사과)를 ..

[Java] linux에서 jar 설치

jar 설치 jar는 파일을 압축 및 해제하는 파일 포맷이다. 리눅스 서버에 jar가 설치되어 있지 않아 jar를 설치하였다. 이때, root 이외의 사용자로 접속하여 jar를 설치하려고 하면 제대로 설치가 완료되지 않았다. jar를 설치할 땐 root로 접속해서 진행해야 한다. 1. 설치할 수 있는 jdk 리스트 확인하기 (root에서 실행) # yum list java*jdk-devel jdk 리스트에 jdk 1.6~1.8버전과 11버전이 있다. 2. jdk 원하는 버전 설치하기 # yum install 설치할jdk버전 나는 1.8버전이 필요하므로 java-1.8.0-openjdk-devel.x86_64를 설치하였다. 설치과정 마지막에 Complete! 라는 문구가 출력되면 jar 설치가 완료된 것이다.

[Java/Error] java.net.unknownhostexception

java.net.unknownhostexception 고객사에서 검증 서버를 점검하다 해당 에러를 발견했다. java.net.unknownhostexception: sand ... 생략 ... 'sand'가 알 수 없는 호스트라 발생한 예외라는 의미인데, 서버에 해당 호스트가 등록돼있지 않아 발생하는 에러이다. 해결방법은 간단하다. 리눅스 서버에서 /etc/hosts에 'sand'라는 호스트 IP와 호스트명을 추가하면 된다. 우선 /etc/hosts를 vi로 연다. $ vi /etc/hosts 그다음 호스트 정보를 추가한다. 호스트 IP, 호스트명. 127.0.0.1 localhost 192.168.0.24 sand 이렇게 하면 끝.

[Java] StringUtils.isEmpty()

StringUtils.isEmpty() StringUtils 클래스는 String 클래스의 문자열 관련 기능을 강화시킨 클래스이다. StringUtils의 특징은 값을 null로 주어도 NullPointException을 발생시키지 않는다는 것이다. String보다 StringUtils를 사용하여 문자열 처리하는 것이 좋겠다. isEmpty() 함수는 파라미터가 null이면 true를 반환하고, null이 아니면 false를 반환한다. 즉, 값이 null인지 아닌지 확인하는 함수이다. public static boolean isEmpty(CharSequence cs) 파라미터: null이 들어갈 수도 있는 CharSequence 반환형: CharSequence가 비어 있거나 null인 경우 boolean..

[Java] 빌드(Build)와 컴파일(Compile), 런타임(Runtime)

빌드(Build) 빌드는 소스코드 파일(.java)을 class 파일로 변환한 후 실행파일로 만드는 과정을 말한다. 빌드 안에 컴파일이 포함되어 있다. 이때 빌드를 도와주는 도구를 빌드 툴(Build Tool)이라고 한다. *빌드 툴이 제공하는 기능 - 전처리(Preprocessing), 컴파일(Compile), 패키징(Packaging), 테스팅(Testing), 배포(Distribution) *빌드 툴의 예 - Ant, Maven, Gradle 컴파일(Compile) 컴파일이란 개발자가 작성한 소스코드를 기계어(Byte Code)로 변환하는 과정을 말한다. 런타임(Runtime) 런타임이란 컴파일 과정을 끝낸 프로그램이 실행 및 동작하는 과정을 말한다.

[Java/Error] Broken Pipe 파이프가 깨어짐

java.io.IOException: Broken pipe 해당 오류는 크게 세 가지 원인으로 발생한다. 1. Receiver에서 송신받은 데이터를 제때 처리하지 못하는데도 Sender가 계속 데이터를 보내는 경우에 발생한다. 예를 들어 네트워크 속도가 느리다거나 CPU가 MAX 상태인 경우가 이에 해당된다. 2. 두 개의 소켓이 통신하다가 소켓을 담당하던 프로세서가 비정상적으로 종료된 경우, 상대 소켓이 이를 알지 못하고 데이터를 전송할 때 발생한다. 3. 클라이언트의 요청 이후 서버에서 작업을 완료하여 클라이언트로 결과를 전달해주기 전에 1) 네트워크가 끊기거나 2) 클라이언트가 정지버튼을 누르거나 3) 브라우저가 종료되거나 4) 다른 화면으로 이동하여서 위와 같은 최초 요청에 대한 정보가 사라지는 ..

[Java] jar 압축 및 압축해제

1. jar란? jar는 여러 개의 자바 클래스 파일과 클래스들이 이용하는 관련 리소스 및 메타데이터를 하나의 파일로 모아 자바 플랫폼에 응용 소프트웨어나 라이브러리를 배포하기 위한 소프트웨어 패키지 파일 포맷이다. jar는 Java Runtime이 애플리케이션을 효율적으로 배포할 수 있으며, 한 번의 요청으로 애플리케이션 전체를 다운로드할 수 있다. 2. jar로 압축하기 jar -cvf 파일명 압축할디렉토리 jar -cvf server.jar server 옵션 -c : 새 jar 패키지 파일 생성 -v : 상세정보 확인 -f : jar 파일명 지정 3. jar 압축 해제하기 jar -xvf 파일명 jar -xvf dir.jar dir 옵션 -x : jar 파일로부터 파일 추출 cf) jar 파일 실행..