Java 27

Java로 구현하는 스트리밍 파일 다운로드

개요안녕하세요, 빈코입니다. 오늘은 Java에서 대용량 파일을 다운로드할 때 메모리 부하를 줄이기 위해 사용하는 '스트리밍 다운로드' 방식에 대해 이야기해보려고 합니다. 스트리밍은 데이터를 한 번에 모두 불러오는 것이 아니라, 조각조각 나눠서 전송하는 방식인데요.특히 큰 파일을 다운로드하거나, 여러 사용자가 동시에 파일을 요청해 메모리 사용량이 급증할 수 있는 상황에서 자주 활용됩니다.그럼 이제 실제 코드를 보면서 좀 더 자세히 설명드릴게요😃 Front📙 다운로드 테스트 첫 번째로, download_test라는 버튼을 UI에 정의하였습니다. 사용자들은 해당 버튼을 통해 다운로드를 진행하게 됩니다. document.getElementById('download_test').addEventListene..

TIL 2025.04.23

Java 서버 자동 실행 + 데몬 설정 쉽게 끝내기

개요안녕하세요, 빈코입니다! 오늘은 Java로 작성한 프로그램을 서버 환경에서 자동으로 실행되도록 설정하는 방법, 즉, 데몬(Daemon)처럼 백그라운드에서 항상 실행되도록 만드는 과정에 대해 소개하려고 합니다. 자세한 내용은 하단에서 설명드릴게요 😊 데몬 실행📙데몬(Daemon)은 일반적으로 운영체제의 백그라운드에서 조용히 실행되는 프로그램을 뜻합니다. 즉, 화면에 띄워지지는 않고, 시스템이 켜질 때 자동으로 시작되어 지속적으로 특정 작업을 수행하는 프로세스라고 생각하면 됩니다. 쇼핑몰을 예를 들어서 만약, 사용자가 원하는 특정 시간마다 매출액에 관한 엑셀을 만들어서 보내야 하는 경우에 해당 엑셀을 만드는 프로그램을 구성 후 시스템 서비스 또는 데몬 프로세스로 등록해 두면 운영에 훨씬 유리하고 ..

TIL 2025.04.17

Java 파일 다운로드 OutOfMemoryError 해결방법(전체 예시)

개요안녕하세요 빈코입니다. 오늘은 저번 포스팅에 이어 Java에서 파일 다운로드 시 메모리 부족으로 인해 생기는 OutOfMemoryError에 대해 전반적인 코드를 소개하려 합니다. 저번 포스팅과 중복되는 부분도 있겠지만, 해당 포스팅만 보시는 분들을 위해 전체적으로 다 소개하려 합니다. 코드는 하단에서 설명할게요😁 설정📚저번 포스팅에서 언급했듯이 Java에서 StreamingResponseBody를 사용하려면 여러 가지 설정이 필요합니다. 첫 번째로 javax.servlet-api 버전이 3.0 이상이어야 합니다. Maven이나 Gradle에 아래와 같이 추가해주세요😁// Maven javax.servlet javax.servlet-api 4.0.1 provided // ..

TIL 2025.01.11

Java 파일 다운로드 OutOfMemoryError 해결방법(예시)

개요안녕하세요 빈코입니다. 오늘은 Java 기반 프로젝트에서 파일 다운로드 시 OutOfMemoryError 에러를 해결하는 방법에 대해 포스팅하려 합니다. OutOfMemoryError는 직역 그대로 메모리 사용 초과 오류입니다. 해당 오류는 여러 클라이언트가 파일을 동시에 다운로드할 때, 혹은 파일의 크기가 큰 파일을 여러 번 다운로드할 때 메모리가 초과되어 발생되는 오류입니다. 하단에서 예시와 함께 알아볼게요😊 파일 다운로드 - 메모리 방식📙파일 다운로드는 크게 2가지의 방법으로 로직 구현이 가능합니다. 첫 번째는 일반적으로 사용하는 파일을 메모리에 올려서 다운로드 하는 방법과 두번째로는 스트리밍 방식으로 다운로드 로직을 구현을 할 수 있습니다. 각각의 장단점이 존재하는데 우선 일반적으로 사용하..

TIL 2024.12.31

Java 이미지 파일 다운로드 기능 구현하기(예제 포함)

개요안녕하세요 빈코입니다. 오늘은 Java를 활용한 이미지 다운로드 기능에 대해 포스팅하려 합니다. 이미지 다운로드는 크게 2가지로 분류되는데, 이미지의 binary를 직접 DB에 등록하거나 또는 이미지의 파일명과 파일 경로만 DB에 저장한 후 해당 정보를 꺼내서 서버에 등록된 이미지를 찾는 방법이 있습니다. 실무에서는 DB 공간을 생각하여 binary를 직접 등록하지 않고, 서버에 저장하는 방식으로 많이 사용하기 때문에 이번 포스팅도 서버에서 찾아서 다운로드하는 방법을 포스팅하려 합니다. 자세한 방법은 하단에서 설명할게요😃 파일 Table & 조회 Query📙CREATE TABLE file_info ( id INT AUTO_INCREMENT PRIMARY KEY, file_name VAR..

TIL 2024.12.27

Java Integer와 int 차이로 인한 오류 방지 (실무 예제)

개요안녕하세요 빈코입니다. 오늘은 제가 실무에서 작업을 하면서 겪었던 오류와 해결과정을 포스팅하려고 합니다. 특정 조건들을 통해 데이터의 개수를 구할 때, Integer 혹은 int로 정의를 하게 되는데 해당 과정에서 잘못 된 선언으로 인해 결함이 나오게 되었습니다. 하단에서 좀 더 자세히 살펴볼게요😄 겪은 오류📙제가 겪은 오류는 특정 조건으로 DB의 데이터 개수를 구할 때 int 형으로 선언하고 진행했었는데, 해당 조건의 데이터가 아예 없어서 NULL 오류를 겪게 되었습니다. CommonMapper.getLogCount attempted to return null from a method with a primitive return type(int) // 오류 내용 Mybatis와 같은 Mapper..

TIL 2024.12.14

Java 파일 업로드 구현하기 및 Progress Bar 설정

개요안녕하세요 빈코입니다. 오늘은 Java에서 파일 업로드하는 방법에 대해 알아보려고 합니다. UI에서 파일을 선택하고 업로드되는 과정을 보여주는 Progress bar를 표현하는 일련의 과정을 순서에 맞게 포스팅해 볼게요😄 UI 구성📒가장 먼저 구현해야 할 것은 당연 Front 단이겠죠? Front단 설정은 간단합니다. input 타입을 file로 설정하여 사용자가 파일을 선택할 수 있는 파일 선택 버튼을 생성합니다. 그리고 저는 data-show-preview="false"를 설정하여 파일 미리 보기를 보여주지 않도록 설정하였습니다. 하위 코드로 아래와 같이 UI단을 구성하면 UI단은 끝이 납니다😊 JS 단 구성📙$('#input_file').fileinput({ language: "ko..

TIL 2024.11.16

Java 회원가입 및 로그인 비밀번호 Hash 비교 방법

개요안녕하세요 빈코입니다. 오늘은 Java 프로젝트에서 회원가입 및 로그인 시 중요한 정보인 비밀번호를 해시화하는 방법에 대해 자세히 알아보려고 합니다. 만약 사용자가 회원가입 및 로그인 시 비밀번호를 입력했을 때, 사용자가 입력한 텍스트 그대로 서버로 통신하면 정보가 유출될 가능성이 높습니다. 그렇기 때문에, 해당 기능 작업 시에 중요한 정보들은 꼭 Hash 화해서 서버로 통신하는데 대표적인 방법으로 'SHA-256' 방법을 많이 사용하곤 합니다. 좀 더 자세한 내용은 하단에서 이어가 볼게요😁 회원가입 및 로그인📙로그인 시 비밀번호 검증을 위해 보통 사용자가 입력한 비밀번호를 해시를 떠서 사용하는 것이 일반적입니다. 보안상 암호화된 비밀번호를 데이터베이스에서 꺼내와 복호화하여 비교하는 대신, 입력한..

TIL 2024.11.12

Java IP 유효성 검사 및 여러 유용한 함수 모음

개요안녕하세요 빈코입니다! 오늘은 Java에서 IP 유효성 검사 및 다양한 Util 함수들에 대해서 포스팅하려 합니다. IP 유효성 검사는 웹 애플리케이션에서 사용자로부터 IP 주소를 입력받을 때나 외부 API에서 IP 주소를 사용할 때 등 생각보다 많은 곳에서 사용됩니다😁  유효성 검사 로직만 살펴보기에는 포스팅 내용이 짧을 것 같아서 제가 주로 사용해왔던 IP 관련 함수들도 소개하려고 합니다. 그럼 하단에서 조금 더 자세히 살펴볼까요? IPv4 VS IPv6📙첫 번째로 알아야 할 점은 IP는 IPv4와 IPv6로 나뉩니다. IPv4는 32비트 주소 체계를 사용하며, 4개의 옥텟(ex: 127.0.0.1)으로 표현되고, IPv6는 128비트 주소 체계를 사용하여 8개의 16진수 블록으로 표현됩니다(..

TIL 2024.09.24

Java Spring Scheduler 정의 및 사용법 예시

개요웹 사이트를 운영하다 보면 주기적으로 특정 작업을 해야 할 때가 있습니다. 예를 들어, 매월 마지막 날에 어떤 통계를 내야 한다던지, 매일 쌓이는 로그를 지정해 둔 사이즈에 도달했을 때 순차적으로 삭제하는 등의 작업들입니다. 개발자가 직접적으로 해당 시간마다 작업을 진행할 수 없기에 Java에서는 Scheduler라는 기능을 제공합니다. 아래에서 좀 더 자세히 살펴볼까요? Spring Scheduler 란?📙Java Spring Scheduler는 개요에서 설명한 바와 같이 스프링 프레임워크에서 제공하는 작업 스케줄링 기능입니다.  해당 기능을 통해 개발자는 지정된 시간 간격이나 특정 시점에 자동으로 실행되어야 하는 작업을 쉽게 구성할 수 있고, 스프링 스케줄러는 멀티스레딩과 비동기 실행을 지원하..

TIL 2024.09.13
반응형