본문 바로가기
반응형

java37

[Java] 9가지 예외처리 Best Practice - Exception Handling 자바 프로그래밍에서 '예외(Exception)' 처리는 다소 까다로운 주제입니다. 때문에 각 개발팀들은 자신들만의 예외처리 규칙을 만들고 사용하는데요. 일반적으로 자바 프로젝트에서 따르면 좋은 예외처리 'Best Practice'를 정리해보겠습니다. 자바 예외(Exception) 프로그램 실행과정에서 발생하는 비정상적인 상황을 '예외(Exception)'라고 합니다. 예를들어 존재하지 않는 파일을 오픈하려고 한다던가, 설정되지 않은 객체의 메소드를 호출하려고 하는 경우 예외가 발생합니다. 프로그램 실행중에 발생하는 예외를 잘 처리해주는 것을 '예외처리(Exception Handling)'이라고 합니다. 예외 상황에서 벗어나도록 코드를 작성하던가 시스템을 망가트리지 않는 상황에서 자연스럽게 프로그램이 종료.. 2020. 8. 8.
[Java] 개발환경에서 원격 디버깅 사용하기 - Intelli J, Eclipse Remote Debugger 자바를 이용해 프로그래밍을 할 때 통합 개발환경이 제공하는 디버거(Debugger)는 매우 편리합니다. 특정 코드의 수행을 단계별(Step-by-step)로 확인할 수 있기 때문입니다. 자바 프로그램이 실행되는 JVM은 원격 디버깅(Remote Debugging) 기능을 제공합니다. IntellI J나 Eclipse 같은 통합 개발환경에서 원격 서버에 설치되어 있는 자바 프로그램을 디버깅 할 수 있습니다. 이번 포스트에서는 도커 환경에 자바 프로그램을 구동시켜놓고 통합개발환경(Intelli J, Eclipse)에서 원격으로 디버깅해보겠습니다. 자바 프로그램 다음 자바 프로그램을 작성한 다음 도커에 구동시킨 후 원격 디버깅을 해보겠습니다. public class Test { public static voi.. 2020. 3. 13.
[Java] OkHttp id-password를 사용한 기본 인증 예제 (Basic Authentication Example) REST API 서버로 요청을 보낼 때 사용자 인증(Authentication)이 요구되는 경우가 있습니다. 가장 기본적인 인증(Basic Authentication)은 아이디와 비밀번호를 통한 인증입니다. 리눅스의 유틸리티 툴인 curl을 이용해 REST 요청을 보내는 경우 -u 옵션으로 아이디와 비밀번호를 입력할 수 있습니다. curl -u ID:PassWord {...}이렇게 기본인증(Basic Authencation)을 요구하는 REST API 서버에 OkHttp 클라이언트를 사용해서 요청을 전송하는 예제를 살펴보겠습니다. OkHttp Basic Authenticatior OkHttp 클라이언트를 사용할 때, OkHttp3.Authenticator라는 인터페이스를 구현한 Authenticator를.. 2020. 3. 13.
mvn 'Received fatal alert: protocol_version', 'peer not authenticated' 에러 메이븐(Maven) 프로젝트를 빌드하고 배포하는 스크립트를 만들다가 새로운 장비에서 메이븐 빌드를 수행하게 되었습니다. 메이븐 프로젝트를 빌드하다가 다음 에러를 만나게 되었습니다. ... [ERROR] Plugin org.apache.maven.plugins:maven-clean-plugin:2.5 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-clean-plugin:jar:2.5: Could not transfer artifact org.apache.maven.plugins:maven-clean-plugin:pom:2.5 from/to .. 2020. 3. 10.
[Java] Inputstream 객체를 File 객체로 변환하기 InputStream 객체를 File 객체로 변환해야 할 경우가 있다. 예를 들어, 네트워크를 통해 읽은 데이터를 File 객체를 입력으로 받는 라이브러리에 사용하고 싶을 때 이런 변환이 필요하다. 우선 InputStream에서 데이터를 읽어 로컬 파일 시스템의 임시파일로 저장해 두자. public static File convertInputStreamToFile(InputStream in) { File tempFile = File.createTempFile(String.valueOf(inputStream.hashCode()), ".tmp"); tempFile.deleteOnExit(); copyInputStreamToFile(inputStream, tempFile); return tempFile; } .. 2020. 2. 12.
[Java] Project Lombok Annotations (프로젝트 롬복 어노테이션) 스프링 프레임워크 책을 읽다가 프로젝트 롬복(Project Lombok)에 대해서 알게 되었다. 프로젝트 롬복(Project Lombok) 프로젝트 롬복(Project Lombok)은 자바로 작성된 소스코드를 좀 더 간결하게 만들어 주기 위해 만들어진 프로젝트다. 최신 자바 버전에서는 점점 나아지고 있지만 자바의 가장 큰 문제점은 소스코드에 군더더기가 너무 많다는 점이다. Student 클래스를 자바로 작성해보자. public class Student { private final int id; private final String name; private final int age; private final String department; public Student(int id, String name, .. 2019. 9. 24.
StAXParser를 이용한 DomTree 만들기 업무상 이유로 HTML 엔티티가 데이터로 포함되어 있는 XML 문서를 다룰 일이 있었다. XML에는 기본적으로 5개의 엔티티가 정의되어 있다. 그 외의 데이터는 DTD를 통해 선언을 해주거나 엔티티로 해석할 수 없도록 이스케이핑(Escaping)을 해줘야 한다. HTML 엔티티가 포함되어 있는 XML 문서를 파싱해서 DOM 트리를 사용해야 하는 경우 설정이 좀 까다로울 수가 있다. 이런저런 설정을 찾다가 StAXParser를 이용해서 DOM 트리를 만들어주는 코드를 작성해봤다. & 문자로 시작하는 엔티티를 해석하지 않고, 문자 그대로 사용하는 동작을 구현해봤다. (물론 실무에는 사용하지 않고 그냥 연습 코드로만 작성해봤다. 현실에서는 XML 문서에다가 이상한 엔티티 섞지말아달라고 생산자에게 안내를 해줘야.. 2019. 8. 9.
[Freemarker] 데이터 모델 메소드 (Data model Methods) 정의 사용자의 자바 객체를 데이터 모델로 사용할 때, 데이터 모델을 위한 메소드를 만들어 제공할 수도 있다. 예를 들어 템플릿을 작성할 때 데이터 모델에 'user_,method()'라는 메소드를 정의해 줄 수 있다. 'user_method()'는 템플릿에서 다음과 같이 사용할 수 있다. ${user_method(“abc”, x)} 이와 같은 사용자 정의 메소드는 TemplateMethodModelEx 인터페이스를 구현함으로써 제공할 수 있다. TemplateMethodModelEx 인터페이스는 다음과 같은 메소드를 가지고 있다. Object exec(java.util.List arguments); 템플릿 언어에서 사용자 정의 메소드를 호출하면, 메소드 이름에 대응되는 TemplateMethodModelEx .. 2019. 8. 8.
[Java] 자바8의 람다식(lambda expression) 1996년 처음 공개된 이후 자바에는 괄목할 만한 두 번의 변화가 있었다. 그 첫 번째가 '지네릭스(Generics)'의 등장이었고, 두 번째가 바로 '람다식(Lambda Expression)'의 등장이다. 특히 람다 표현식의 지원으로 자바는 객체지향 언어의 특징과 함께 함수형 언어의 특성을 갖추게 되었다. 람다식(Lambda expression) 람다식은 1930년대 알론조 처치(Alonzo Church)라는 수학자가 처음 제시한 함수의 수학적 표기방식인 람다 대수에 그 뿌리를 두고 있다. 람다식을 이용하면 코드가 간결해지고, 지연 연산 등을 통해서 퍼포먼스를 향상을 도모할 수 있는 장점을 얻을 수 있다. 반면 모든 엘리먼트를 순회하는 경우에는 성능이 떨어질 수도 있고, 코드를 분석하기 어려워 질 수 .. 2019. 7. 24.
반응형