Java, Spring Boot, Tomcat 환경에서 파일 업로드 기능을 구현하면서 겪었던 임시 파일 삭제 문제에 대해 공유하고자 합니다. 특히, File.deleteOnExit() 메소드를 사용했을 때의 한계와 이를 해결하기 위해 Files.delete() 메소드로 전환한 경험을 공유합니다. 문제의 배경 파일 업로드 기능을 구현할 때, 사용자가 업로드한 파일은 일반적으로 서버의 임시 디렉토리에 저장됩니다. Tomcat은 요청이 완료되면 자동으로 이 임시 파일들을 삭제하는 기능을 제공하지만, 비동기 처리나 지속적인 파일 업로드가 이루어지는 환경에서는 이 기능이 제대로 작동하지 않을 수 있습니다. 이로 인해 임시 파일이 쌓여 서버의 디스크 공간을 차지하게 되는 문제가 발생했습니다. File.deleteO..
문제 상황 spring java 환경 내에서 SDK를 활용한 AWS S3 객체 목록 조회 한계와 대량 작업의 어려움 AWS S3는 수천 개의 객체를 대상으로 반복 작업을 수행할 때 AWS SDK의 listObjects API가 가진 고유한 제약 사항으로 원하는 결과를 얻지 못하는 경우가 발생. 제한된 반환 개수: listObjects API 호출은 기본적으로 한 번에 최대 1000개의 객체만 반환하도록 설계되어 있습니다. 해결방안Java AWS SDK v1 사용하는 경우(수동 while 루프 방식) 수동으로 while 루프와 withContinuationToken 토큰을 활용하여 페이지네이션을 구현 String continuationToken = null;do { ListObjectsRequest ..
Java 기반의 비동기 네트워크 프레임워크인 Netty는 고성능 서버/클라이언트 애플리케이션 개발에 자주 활용됩니다.이번 글에서는 총길이를 사전에 알 수 없는 바이트 스트림 데이터를 수신해야 하는 상황에서 Netty를 활용해 어떻게 문제를 해결할 수 있었는지 정리해 보겠습니다.Netty와 데이터 수신의 특징Netty는 비동기 이벤트 기반 네트워크 프레임워크로, TCP와 같은 연결 지향 프로토콜 기반의 통신에서 널리 사용됩니다.우리는 외부 기관과 통신할 때 Netty를 통해 데이터를 바이트 스트림 형태로 수신하고 있으며, 다음과 같은 상황을 마주하게 됩니다:데이터는 여러 조각으로 나뉘어 들어오며 한 번에 도착한다는 보장이 없다.연결을 유지하자니 언제 끝날지 모르고, 끊자니 데이터가 누락될 위험이 있다.즉,..
jdom의 xPath 기능을 활용하여 xml 전문 내에서 특정 항목의 값을 추출하려 하였으나 더 이상 로그가 표출되지 않고 진행이 되지 않고 멈추는 증상이 발생하였다. 사용하고 있는 xPath 관련 코드는 아래와 같다. Document documentDataselectElement = (Element)XPath.selectSingleNode(documentData,pm_sPath); XPath class 정의를 보기 위해 declaration open을 해보았을 때 jdom.jar 내에 있다고 확인되었고 해당 메소드를 사용하는 소스상에도import org.jdom.xpath.XPath; import 정보를 확인할 수 있었음.jdom.jar에서 해당 메서드를 호출하는 소스를 디컴파일 해보았음. XPath...
서로 다른 시스템 간 byte 데이터를 송수신하는 기능을 개발 조건 1.byte 데이터를 String형으로 송수신 2.시스템간 인스턴스 문자 인코딩(UTF-8, EUC-KR 등)이 다름바이트 데이터 추출하기 System.out.println("===현재 프로젝트 문자 인코딩 UTF-8==="); System.out.println("===byte 데이터 문자 인코딩 확인==="); String testStr = "테스트"; byte[] euckrByte = testStr.getBytes("EUC-KR"); byte[] utf8Byte = testStr.getBytes("UTF-8"); String euckrStrToUtf8 = new String(euckrByte,"UTF..
오라클 시퀀스를 사용한 기능을 추가하던 중 시퀀스가 증가하지 않는 현상이 발생하였음. 간략한 작업 내용은 특정 시퀀스를 조회하여 보관하고 다시 동일한 시퀀스를 조회하여 함께 사용하는 작업이었음. 첫 번째 시퀀스 조회 시 증가된 번호를 가져왔으나 두 번째 시퀀스 조회 시 첫 번째에 조회된 번호가 그대로 들어있었음. 첫번째 시퀀스 조회 결과 : 1 두번째 시퀀스 조회 결과 : 1 해당 기능과 관련된 일부 소스는 아래와 같음. MyBatis 영역 SELECT SEQ.NEXTVAL FROM DUAL Repository 영역 TestDAO interface 작성 생략 @Repository public class TestDAOImpl implements TestDAO{ @Override public int getT..
발단상황java를 사용하고 데이터베이스에서 조회된 데이터 목록을 JSON 형태로 응답을 해주는 방법 중 하나로는 ObjectMapper Class ( import com.fasterxml.jackson.databind.ObjectMapper; )가 있다. ObjectMapper Class 내에 여러 메소드 중 하나인 writeValueAsString 메소드는 java의 Object를 직렬화 과정을 통하여 json 형태의 String 형으로 변환해 주는 역할을 한다. 이러한 기능을 이용하여 기능을 개발을 진행하던 중 원하는 결과를 반환하지 않는 경우가 발생하였다. 데이터베이스에서 데이터 목록을 조회하여 ObjectMapper의 writeValueAsString 메소드를 이용하여 값을 반환하는 기능을 개발하..
발단 java 환경에서 작업을 진행하던 중 아래와 같은 오류 로그 발생 로컬 작업환경에서는 정상적으로 테스트되었으나 서버상에서 테스트 시 발생 Java security providerexception could not derive key java rsa decryption is failed 해당 에러가 발생하는 부분에서 사용하고 있는 메소드 확인 시 아래와 같음 import org.bouncycastle.util.encoders.Base64 잘 알려진 JCE(Java Cryptography Extension) 라이브러리 보안 공급자 중 하나인 "bouncycastleprovider"를 호출하다 발생하는 것으로 확인. 원인파악 bouncycastleprovider 사용시 기본 설정하는 부분에 대하여 로컬과..
- Total
- Today
- Yesterday
- WAS
- Oracle
- SQL
- SpringBoot
- HTTPS
- jQuery
- docker
- gradle
- SSL
- Eclipse
- 날짜
- Windows
- Java
- 깨짐
- web
- 프로그래밍
- Linux
- spring
- tomcat
- 컨테이너
- JSON
- React
- parse
- html
- JPA
- mybatis
- TLS
- Push
- Git
- vscode
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
