Java 28

[Java] zip 파일에서 원하는 파일 추출해서 저장하는 방법

개요 클라이언트에서 zip 파일을 업로드했을 때 zip 파일 내 tar.gz 파일만 추출해서 NAS에 저장하도록 로직을 바꿔야 했습니다. 찾아본 결과 추출할 파일명만 안다면 생각보다 간단하게 코드를 작성할 수 있었습니다. 코드 비고 같은 Java 8버전이더라도 JDK-8223197 버전 이전 버전을 사용할 경우 FileSystem.newFileSystem(zipFilePath, null) 코드에서 ambiguous가 뜰 것입니다. https://bugs.openjdk.java.net/browse/JDK-8223197 [JDK-8223197] Release Note: Added FileSystems.newFileSystem(Path, Map) Method - Java Bug System Three new ..

[DEV] 기록 2022.05.29

[Java] UTF-8로 파일 작성하는 코드

개요 파일에 한글로 된 데이터를 한 줄씩 작성하는데 UTF-8 인코딩을 하지 않아 텍스트가 깨지는 현상이 발생했습니다. 찾아본 결과 생각보다 간단하게 코드를 작성할 수 있었습니다. 코드 참고 https://mkyong.com/java/how-to-write-utf-8-encoded-data-into-a-file-java/ How to write a UTF-8 file in Java - Mkyong.com In Java, we can use `OutputStreamWriter` to write data to a UTF-8 file. mkyong.com

[DEV] 기록 2022.05.29

[SXSSFWorkbook] 엑셀 드롭다운 셀 생성하는 방법

개요 기존에 Excel 생성 및 다운로드 관련 게시글을 여럿 공유했었습니다. https://jaimemin.tistory.com/2069 [SpringBoot] 대용량 엑셀 파일 생성 및 다운로드 삽질기 개요 작년에 이어 올해도 엑셀 파일 생성 및 다운로드 기능을 담당하게 되었습니다. https://jaimemin.tistory.com/1889 [SpringBoot] 대용량 엑셀 다운로드를 위한 SXSSFWorkbook 개요 기존에 Excel 생성 및 다운.. jaimemin.tistory.com https://jaimemin.tistory.com/1889 [SpringBoot] 대용량 엑셀 다운로드를 위한 SXSSFWorkbook 개요 기존에 Excel 생성 및 다운로드 기능을 구현하는 코드를 공유했었..

[DEV] 기록 2022.04.20

[Java] 정렬

Comparable vs Comparator Interface 자바는 정렬을 돕기 위해 Comparable 그리고 Comparator 인터페이스를 제공합니다. 공통점 두 인터페이스 모두 public 접근 변경자로 선언하기 때문에 모든 자료형을 담을 수 있습니다. 차이점 특성 Comparable Comparator 메서드 Comparable 인터페이스는 compareTo(Object a) 메서드를 사용 -> 개체가 하나 제공됨 (this) Comparator 인터페이스는 compare(Object o1, Object o2) 메서드를 사용 -> 개체가 두개 제공됨 정렬 사용처 Collections.sort(List) 메서드는 Comparable 타입을 가지는 객체들을 정렬할 때 사용 -> 기본 정렬 규칙 설..

면접 준비 2021.04.25

Java 날짜 시간 유형에 대한 고찰

개요 현재 다중 서버 환경에서 프로젝트를 개발하고 있는데 인프라팀에서는 분명 서버 간 시간을 동기화하였다고 했는데도 불구하고 LocalDateTime.now()를 로그로 찍어보면 서버 간의 시간이 조금씩 다른 것을 확인할 수 있었습니다. 이에 따라, LocalDateTime.now() 대신 어떤 클래스의 메서드를 사용해야 할지 고민하는 와중 stackoverflow에 Java의 날짜 시간 유형을 잘 정리한 글이 있어 의역을 해보고자 합니다. Instant vs LocalDateTime Instant 클래스와 LocalDateTime 클래스는 비슷해 보이지만 사실 완전히 다릅니다. 하나는 순간(moment)을 나타내고, 다른 하나는 순간(moment)을 나타내지 않습니다. Instant 클래스는 타임라인의..

[DEV] 기록 2021.01.25

Error: opening registry key 'Software\JavaSoft\Java Runtime Environment'

회사에서 타 솔루션을 쓰기 위해 다른 버전의 java를 설치한 결과 아래와 같은 에러가 발생했습니다. Error: opening registry key 'Software\JavaSoft\Java Runtime Environment' Error: could not find java.dll Error: Could not find Java SE Runtime Environment. 위와 같은 에러는 Java가 설치되어있더라도 경로를 찾지 못할 경우 발생하는 에러입니다. 저 같은 경우 자바 관련 실행 파일이 시스템 폴더에 존재하고 시스템 폴더가 PATH보다 앞에 위치해서 우선권을 가지다 보니 충돌이 나서 문제가 발생했었습니다. 따라서, 저는 C:\Windows\SysWOW64 폴더 내 java.exe, java..

[DEV] 기록 2020.07.20

Call by Value vs Call by Reference

면접에서 아이스 브레이킹 차원으로 자주 나오는 문제였습니다. 면접 질문: Call by Value와 Call by Reference의 정의와 함께 장단점을 설명해주세요. C, C++에서 함수는 두 가지 방법으로 호출될 수 있습니다. 1. Call by Value2. Call by Reference 그리고 함수에 전달되는 매개변수를 실제 매개변수라고 부르고 함수가 전달받은 매개변수를 형식 매개변수라고 부릅니다.Call by Value이 매개변수 전달 방법에서, 실제 매개변수의 값은 형식 매개변수에 복사되고 두 유형의 매개변수는 서로 다른 메모리에 저장됩니다.따라서 함수 내에서의 변경은 실제로 전달된 실제 매개변수에 반영되지 않습니다.장점복사하여 처리하기 때문에 매개변수로 전달된 값이 보존이 되고 안전합니다..

면접 준비 2020.06.12