본문 바로가기

프로그래밍/자바41

Microsoft Visual Studio Code에서 Java 개발 환경 설정하기 이전에 Visual Studio Code를 설치해보았습니다. Visual Studio Code를 설치만 했을때 할 수 있는 작업이 없더군요. 필요한 언어에 대한 확장팩을 설치해야 더 나아갈 수 있었습니다. 이번에는 Visual Studio Code에서 자바(Java) 개발 환경을 만드는 방법을 알아 보겠습니다. 또한, 설치된 확장팩을 사용하여 간단한 Java 프로젝트를 만들고 실행해 봅니다. 먼저 Visual Studio Code가 설치되어 있어야겠죠. "무료 개발도구 마이크로소프트 비주얼 스튜디오 코드(Microsoft Visual Studio Code) 설치하기 https://offbyone.tistory.com/435 "를 참조하여 설치하세요. 다음으로 JDK를 미리 설치합니다. Visual Stu.. 2022. 3. 1.
Adoptium Eclipse Temurin JDK 17 설치하기 Java가 오라클(Oracle)로 넘어가고 JDK바이너리가 유료화된 이후 어떤 JDK를 사용해야할지 고민이 많았습니다. 대안으로 OpenJDK를 사용하고 있었습니다. 최근에 OpenJDK의 다양한 빌드가 있고, 그중에 이클립스 재단에서 나오는 OpenJDK 빌드인 Adoptium Temurin JDK를 알게 되었습니다. 이 프로젝트에는 IBM, Microsoft, Red Hat등 업체들이 참여하고 있고, 각각의 업체에서 제공하는 JDK 빌드가 Temurin을 기반으로 하고 있다는 사실을 알게 되었습니다. Oracle JDK의 최대 라이벌인 Azul(https://www.azul.com/)에서도 Adoptium을 기반으로 하고, 유료 지원도 제공한다고 합니다. 이클립스 Temurin 홈페이지(https:/.. 2022. 2. 28.
자바 문법 - 문자열(String 객체) 다루기 자바 문자열은 객체이고 문자열 리터럴은 큰 따옴표로 묶어 표시합니다. String text = "추석에 배를 먹습니다."; 문자열 리터럴도 객체이므로 바로 메소드를 호출할 수 있습니다. int length = "추석에는 배".length(); 1. 문자열 연결하기 자바 문자열을 연결하는데는 + 연산자를 사용합니다. String h = "Hello "; String j = "Java!"; String text = h + j; System.out.println(text); 결과) Hello Java! 자바에서 문자열에 연산을 사용하는데 있어서 주의해야 할 점이 있는데, 자바 문자열은 불변(immutable)이라는 점입니다. 문자열에 연산을 가하면 현재 문자열을 변경되지 않고 변경된 새 문자열이 만들어져서 반.. 2019. 8. 11.
자바 정규식(Regular Expression) 사용하기 앞의 글에서 문자열을 분할하고, 내용을 바꾸는 split(), replaceAll() 메소드에 대해서 알아보았는데, 정규식을 사용하는 예를 들었었습니다. 그래서 자바언어에서의 정규식에 대해서 알아보려고 합니다. 정규식은 문자열에서 특정 패턴을 찾거나 교체, 삭제 등 문자열을 원하는 형태로 편집하는 기능을 제공해 줍니다. 정규식은 자주 사용되지는 않지만, 어떤 경우에 일반적인 로직으로 처리하기 힘든것은 간편하게 처리할 수 있는 힘이 있습니다. 대부분의 언어들이 정규식을 가지고 있는데, 그 사용법들이 조금씩 다른것 같습니다. 자바 문자열 객체(java.lang.String)에서 정규식을 사용하는 자주 쓰는 메소드는 다음과 같습니다. - boolean matches(String regex) 인자로 주어진 정규.. 2019. 8. 10.
자바 문자열에서 특정 문자를 다른 문자로 바꾸기 - replace, replaceAll, replaceFirst 자바언어를 사용해서 문자열내의 특정 문자를 다른 문자로 바꾸는 방법을 알아 봅니다. 이때 주의해야할 사항이 있습니다. 자바 문자열은 불변(immutable)이라는 것입니다. 자바 문자열을 불변이라서 어떤 연산에 의해 원본 문자열이 바뀌지 않습니다. 원본은 그대로 유지되고, 바뀐 문자열이 새로 생성이 되어서 반환됩니다. 그래서 항상 바뀐 문자열을 반환값으로 받아야 합니다. String str = "ABCDE"; String text = str.replace('C', 'F'); 자바 String객체에 문자열에는 문자열을 바꿀 수 있는 다음과 같은 메소드가 제공 됩니다. - String replace(char oldChar, char newChar) 문자열내에 있는 모든 oldChar를 newChar로 바꾼 .. 2019. 8. 8.
자바 문자열을 구분자로 분할하기 - split 자바 언어에서 구분자로 연결된 문자열을 분할하는 방법을 알아봅니다. 예전에는 StringTokenizer 객체를 사용했었는데, JDK 1.4부터 split 메소드를 사용할 수 있습니다. 이게 훨씬 간편합니다. split는 오버로딩 된 두 개의 메소드가 제공되며 정규식을 사용해서 문자열을 분할 합니다. 각각은 다음과 같습니다. - String[] split(String regex) : 인자로 주어진 정규식과 매치되는 문자열을 구분자로 분할합니다. - String[] split(String regex, int limit) : 인자로 주어진 정규식과 매치되는 문자열을 구분자로 분할 합니다. 두 번째 인자로 정규식을 적용하는 횟수를 제한할 수 있습니다. 분할할 구분자를 찾는데 정규식을 사용하므로 복잡한 형태의 .. 2019. 8. 6.
Jsoup을 사용한 화이트 리스트 방식의 XSS(Cross-Site Script)공격 방어 웹 페이지에서 CKEditor 와 같은 HTML에디터를 이용해서 데이터를 입력받아 보여줄때 고려해야 할것으로 XSS(Cross-Site Script)공격이 있습니다. 글을 작성하는 사용자가 HTML을 사용할 수 있도록 허용하게 되면 자바스크립트도 사용할 수 있게 되므로 XSS공격을 쉽게 할 수 있는 환경이 됩니다. HTML코드에서 자바스크립트를 실행할 수 있는 방법은 수도 없이 많으므로 "+ ""; String safeDoc = Jsoup.clean(htmlDoc, Whitelist.basic()); System.out.println(safeDoc); 결과)TEST 화이트 리스트의 basic() 메소드에서는 다음 태그와 속성을 허용합니다. public static Whitelist basic() { re.. 2019. 2. 26.
Java에서 JSON 문자열 생성 및 JSON 문자열을 자바 객체로 변환하기 스프링 프레임웍을 사용하면 클라이언트와 JSON 형식의 데이터를 주고 받을 때, Java 객체를 JSON 문자열로 변환하거나, JSON 문자열을 Java 객체로 변환하는 작업은 보통 자동으로 처리되므로 신경쓸 일이 없습니다. 가끔은 이러한 변환 작업을 직접 해야 할 경우가 있습니다. 직접 하는 방법을 알아 봅니다. 1. Jackson 라이브러리를 사용하는 방법 Jackson 라이브러리는 JSON 뿐만 아니라 XML도 변환 해주는 많이 사용되고 있는 라이브러리 입니다. 다음 의존성을 추가해서 사용할 수 있습니다. com.fasterxml.jackson.core jackson-databind 2.8.8 jackson-databind가 jackson-core와 jackson-annotations에 대한 의존성.. 2019. 1. 18.
Java에서 HashMap 복사하기 와 모든 키, 값을 리스트 하기 Java에서 HashMap을 복사하는 방법을 알아봅니다. 다음 원본을 복사해 봅니다.HashMap origMap = new HashMap();origMap.put("TITLE", "제목");origMap.put("CONTENT", "내용");origMap.put("WRITER", "홍길동");System.out.println(origMap.toString()); 1. 생성자를 이용해 복사합니다.HashMap copyMap = new HashMap(origMap);System.out.println(copyMap.toString()); 2. clone() 을 이용해서 복사합니다.HashMap cloneMap = (HashMap)origMap.clone();System.out.println(cloneMap.t.. 2019. 1. 15.
Jsoup 예제 - 그누보드 크롤링 Jsoup 을 사용해서 그누보드 게시물을 크롤링 해보는 예제를 알아보겠습니다. 게시물 본문과 본문에 포함된 이미지와 첨부파일을 다운로드하여 파일로 저장해 봅니다. Jsoup의 기본적인 사용법은 "jsoup : 자바 HTML 파서(Java HTML Parser)" 을 참조하세요. 테스트용 글이 작성되어 있는 URL 입니다. 본문에 포함된 이미지는 SmartEditor를 사용해서 업로드된 것입니다. http://localhost:8080/bbs/board.php?bo_table=free&wr_id=1 1. 로그인 하기 공개된 글이 아닐 경우 로그인이 필요할 수 있습니다. 계정이 있으면 아래 코드로 로그인할 수 있습니다. // 로그인 합니다.Connection.Response res = Jsoup.connec.. 2018. 9. 9.
자바(Java)로 파일의 마임 타입(MIME Type) 확인하기 파일 다운로드를 구현할때 파일에 직접 링크를 하지 않고, 프로그램을 사용해서 웹루트 밖의 저장소에서 파일을 읽어서 브라우저로 보내야 하는 경우가 많이 있습니다. 이때 파일의 마임 타입(MIME Type)을 지정해줄 필요가 있습니다. Java언어로 파일의 마임 타입을 알아내는 방법을 알아 봅니다. 1. Files 객체의 probeContentType() 메소드를 사용하는 방법Java 7 부터 지원합니다. 이 메소드는 마임타입을 확인하지 못하면 null을 반환합니다. package com.tistory.offbyone; import java.io.IOException;import java.nio.file.Files;import java.nio.file.Path;import java.nio.file.Paths.. 2018. 8. 21.
Java Generic사용법과 Generic에서의 와일드카드 Java의 Generic은 C, C++의 템플릿과 같은 기능 입니다. 하나의 코드를 다양한 데이터 타입에 대해 사용할 수 있도록 하는 편리한 기능 입니다. 자바에서는 1.5 버전에서 부터 사용할 수 있습니다. 자바에서도 자신만의 Generic 코드를 작성할 수 있지만, 여기서는 자바를 사용하면서 Generic이 가장 많이 사용되는 컬렉션 객체에 대해 알아보고, 좀 특수한 형태인 Generic에서의 와일드 카드에 대해서도 알아봅니다. Java SE 1.5 이전의 자바에서는 자료구조에 데이터를 저장할때 Object 타입으로 저장하였습니다. Object는 모든 객체의 최상위 객체이므로 모든 객체는 Object 타입으로 다룰 수 있습니다. 하지만 객체 자신만의 기능을 사용하기 위해서는 원래 객체로 캐스팅 되어야.. 2018. 8. 12.
Open JDK 9 와 이클립스 설치하기 Oracle JDK 유료 라이센스로 말이 많은것 같습니다. Open JDK 9 와 이클립스를 설치해서 테스트 해봤습니다. 개발 환경으로는 별 문제가 없을 것 같았습니다. Open JDK 10 버전도 배포되고 있었습니다. 설치 방법을 알아보겠습니다. 1. Open JDK 9의 윈도우즈용 바이너리를 다운 받습니다. http://jdk.java.net/java-se-ri/9 2. Open JDK 9 설치 압축 파일(jdk-9+181_windows-x64_ri.zip)로 제공 되고 있으므로 압축을 풀어 적당한 곳에 옮겨두면 됩니다. 여기서는 D:\util\java\jdk-9 로 설치했습니다. 3. 이클립스를 다운로드 받습니다. PHOTON 버전이 나왔네요. 설치본은 Oracle JDK 가 없으면 설치가 안되는것.. 2018. 6. 30.
Java에서 UUID 클래스를 사용하여 유일한 식별자 생성하기 Java 5 부터 UUID 클래스를 사용해서 유일한 식별자를 생성할 수 있습니다. 숫자 일련번호를 사용한 식별자도 각각의 데이터를 구분하는데 충분하지만, 다른 데이터를 유추하기 쉽다는 단점이 있습니다. UUID 가 사용될 수 있는곳으로 다음과 같은 곳이 있겠습니다. 1. 업로드된 파일명의 중복을 방지하기 위해 파일명을 변경할 때 사용.2. 첨부파일 파일다운로드시 다른 파일을 예측하여 다운로드하는것을 방지하는데 사용.3. 일련번호 대신 유추하기 힘든 식별자를 사용하여 다른 컨텐츠의 임의 접근을 방지하는데 사용. 사용법을 알아보겠습니다. package com.tistory.offbyone; import java.util.UUID; public class UUIDTest { public static void .. 2018. 5. 24.
Java에서 assert 사용하기 Java에서 단언문 assert는 JDK 1.4 부터 지원합니다. 객체가 아니고 예약어 입니다. 사용법은 두 가지 형식이 있는데, 다음과 같습니다. assert expression1;assert expression1: expression2; 첫 번째는 인자로 boolean으로 평가되는 표현식 또는 값을 받아서 참이면 그냥 지나가고, 거짓이면 AssertionError 예외가 발생합니다. 두 번째는 표현식1이 거짓인 경우 두번째 표현식의 값이 예외 메세지로 보여지게 됩니다. Assertion은 디버깅 용도로 사용되어서 JVM 기본 설정으로 프로그램을 실행하게 되면 assert문은 모두 실행에서 제외 됩니다. assert가 동작하게 하려면 실행시 -ea 옵션을 사용해서 실행합니다. java -ea 클래스명 .. 2018. 5. 4.