반응형

Back-End/Java 14

Java에서 파일의 Mime type을 판별하는 방법

얼마전, 로컬 파일 시스템에 저장되어 있는 파일을 바이너리 형태로 내려주는 REST API를 작성할 일이 있었습니다. 파일을 내려줄 때 Content-Type 헤더에 Mime Type을 알맞게 지정해줘야 하는데요. 찾아보니 다음과 같은 방법으로 할 수 있었습니다. Path filePath = Paths.get("file/save/path"); String fileContentType = Files.probeContentType(path); 시스템에 따라 파일 타입을 감지하지 못하는 경우도 있는데요. 제 경우엔 Mac OSX에서 파일 타입을 감지하지 못하는 경우가 있었습니다. 때문에 알아보니 URLConnection을 이용하는 방법도 있었습니다. URLConnection.guessContentTypeFro..

Back-End/Java 2020.11.04

JUnit5 사용해보기

JUnit은 Java를 위한 단위 테스트 (Unit Test) 프레임워크로 개발하는 프로그램에 대한 테스트케이스를 쉽게 작성할 수 있도록 도와줍니다. 그동안 JUnit4를 주로 사용해왔는데, 최근들어 JUnit5가 있음을 알게되고(사실 나온지는 2년이 넘은..) 어떤 차이점이 있는지 알아보고 사용해보려합니다. JUnit4에서 JUnit5로 넘어오며 달라진 점 먼저 JUnit5를 사용하기 위해서는 아래 지원범위에 만족하는지 확인해봐야합니다. Java8 이상 지원 IntelliJ IDEA 2016.2 이후 지원 Eclipse Oxygen 이후 지원 Kotlin 지원 JUnit5 User Guide 문서 첫 단락에 보면 다음과 같은 문구가 적혀있습니다. Unlike previous versions of JUn..

Back-End/Java 2020.02.01

Lombok 사용 중 constructor ... is already defined in class 오류 발생 해결

Lombok 버전 : 1.16.22 스프링 Boot 프로젝트 배포를 위해 Maven Build 를 수행하던 중 Lombok 어노테이션을 적용해둔 도메인 클래스에서 컴파일 오류가 발생했다. 구글링 해본 결과 @Data와 @NoArgsConstructor를 같이 쓸 때 발생하는 버그로 지금은 fix된듯 하다. https://github.com/rzwitserloot/lombok/issues/1703 Lombok 버전을 변경하거나 @NoArgsContsructor를 먼저 선언해주는 방법으로 컴파일 오류 없이 컴파일 할 수 있었다.@NoArgsConstructor @Data public class SomeDomain { .... }

Back-End/Java 2018.12.08

Java NIO란

Java NIO에 관하여 좋은 글이 있어 공유합니다.출처 : http://opennote46.tistory.com----------------------------------------------------------------------------------------------------------------------------------------------------------------------------NIO (New Input/Output) vs IO (Input/Output) and NIO.2 in Java Non-blocking I/O (일반적으로 NIO라고 불리우고 때때로 New I/O라고도 함)은 강력한 I/O 오퍼레이션 기능을 제공하는 자바 프로그래밍 API이다. NIO는 J2S..

Back-End/Java 2018.10.02

Java Stream API 소개

Java 8 주요 기능 중 하나인 Stream API에 대해 공부한 내용을 정리한다.Stream API의 특징 및 기존 Collection과의 차이점1. 개발자가 직접 반복문을 작성하는 방식의 컬렉션과 달리 내부 반복(internal iteration)을 통해 작업한다. 2. 재사용이 가능한 컬렉션과 달리 재사용이 불가능하다. 3. 스트림은 원본 데이터를 변경하지 않는다. 4. 스트림의 연산은 filter-map 기반의 API를 사용하여 지연(lazy)연산을 통해 성능을 최적화한다. 5. 스트림은 parallelStream() 메소드를 통해 병렬 처리를 쉽게 할 수 있다.Stream API 사용 메커니즘1. 스트림 생성 : 스트림을 생성한다. 2. 중개 연산 : 생성된 스트림을 다른 스트림으로 변환하는 ..

Back-End/Java 2018.09.17

java 외부라이브러리 포함 jar파일 만들기

이클립스 플러그인 중 Fat Jar를 사용하면 손쉽게 만들수 있다. https://www.google.co.kr/search?q=fat+jar&oq=fat+jar&aqs=chrome..69i57j69i59j0l4.3006j0j4&sourceid=chrome&ie=UTF-8fat jar - Google 검색www.google.co.kr 근데 이클립스 버전이 Mars 이상이면 Fat jar 플러그인을 사용할 수 없었다... Maven을 사용하면 shade 플러그인을 활용해서 의존하는 라이브러리들을 묶어 jar로 만들수있다.

Back-End/Java 2018.09.17

java 라이브러리를 사용하는 소스 컴파일 및 실행 방법

디렉토리구조 예시)root - src - lib 위와 같을때 src의 소스파일들이 lib의 라이브러리를 참조하는 경우 컴파일 방법은 다음과 같다. cmd창에서 root에 위치한 상태에서 javac -d ./bin -cp ./lib/lhg.jar ./src/*.jar (javac -d [출력위치] -cp [라이브러리위치] [소스파일위치]) 위와같이 작성하면 Cannot Find Simbol 오류 없이 잘 컴파일 됨을 확인할 수 있다. 다음으로, 컴파일된 내용을 실행하기위해서는 다음과 같이하면된다. java -cp ./lib/lhg.jar; a.b.c.Test (java -cp [라이브러리위치] [실행할 main메소드를 가진 클래스]

Back-End/Java 2018.09.17

Java IDE없이 기본 프로젝트 환경 구성하기

1. 프로젝트 디렉토리 생성 2. .java파일을 저장할 src 디렉토리, 컴파일된 clss파일들을 저장할 bin 디렉토리를 생성 3. 코딩한 소스파일(.java파일)들을 전부 src에 위치해두고, cmd창에서 프로젝트 디렉토리로 이동한 후 아래 명령어 입력javac ./src/*.java -d ./bin 그러면 bin폴더에 class파일들이 생성된다. 4. javadoc을 생성한다. javadoc -version -author -protected -d ./docs 위 명령어를 실행하면 docs폴더 내에 프로젝트에 대한 document가 생성된다. 5. 데모, 샘플등 실행가능한 jar파일을 만든다.1) 데모나 샘플이 여러 개, main메소드가 여러 개인 경우 메니페스트파일을 통해 실행할 main메소드를 ..

Back-End/Java 2018.09.17