TIL 50

Java FTP 파일 전송하는 방법 + 쉬운 예제(Front~Back)

개요안녕하세요 빈코입니다. 오늘은 Java에서 FTPClient()를 활용하여 서버에 파일을 전송하는 방법에 대해 포스팅하려고 합니다. 포스팅은 Front에서부터 Back까지 전반적으로 진행하기 때문에, 만약 DB에서 파일을 꺼내오시는 분들은 Service 챕터만 확인하시면 됩니다😁그럼 시작해 볼까요? UI 📙 첫 번째로는 FTP 서버에 파일을 보내기 위해서는 FTP 서버 연결을 위한 4가지 정보(host, port, user, password)가 필요합니다. 그래서 UI에서 입력받도록 설정하였고, 저는 간단한 예시 작성을 위해 파일은 사용자에게 입력 받도록 구성했습니다. 코드는 아래와 같습니다. FTP 테스트 FTP 서버 : 사용자명 ..

TIL 2025.03.13

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

js 드래그 앤 드롭(drag&drop) 사용하기

개요안녕하세요 빈코입니다! 오늘은 js에서 순서를 변경하는 기능인 drag&drop 기능에 대해 포스팅하려고 합니다. 드래그 앤 드롭은 파일을 마우스로 옮기거나 특정 요소들을 원하는 순서로 배치하기 위해 많이 사용하는데, 오늘은 체크박스들의 위치들을 옮기는 작업들을 같이 해보려고 합니다. 자세한 내용들은 하단에서 설명할게요😃 드래그 앤 드롭 예시📙먼저 드래그 앤 드롭의 예시 먼저 살펴볼까요?  5개의 과일을 각각 체크박스로 명시한 후 위의 영상과 같이 순서를 변경하는 간단한 예시를 들어봤습니다. 실무에서는 사용자 인터페이스에서 정렬 기능을 제공해야 할 때 주로 해당 기능을 사용하는데, 예를 들어 대시보드나 위젯을 사용자가 원하는 레이아웃으로 변경하는 기능을 제공한다던가 혹은, 데이터 테이블의 칼럼을 ..

TIL 2024.12.18

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

PostgerSQL Upsert 쿼리 개념 및 대용량 속도 차이 예제

개요안녕하세요 빈코입니다. 오늘은 DB 쿼리 중에 유용하게 사용되는 Upsert문에 대해서 포스팅 하려 합니다. Upsert문은 데이터를 삽입(Insert)하거나 수정(Update)하는 작업을 동시에 처리하는 SQL문입니다. 이 문은 주로 "존재하면 업데이트, 없으면 삽입"하는 형태로 동작하며, 기존 데이터가 있으면 수정하고 없으면 새로 추가하는 방법입니다. 좀 더 자세한 방법은 하단에서 살펴볼게요😁 Upsert문 개념📙Upsert문은 개요에서 설명한 바와 같이 데이터를 삽입 및 수정을 동시에 처리하는 SQL문입니다. 여기서 존재하면 업데이트, 없으면 삽입하는 과정이 필요한데, 어떤 값을 기준으로 존재 여부를 판단하는지는 CONFLICT 절에 의해서 판단됩니다. INSERT INTO table_nam..

TIL 2024.11.23

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

[JS] find,some,filter,map 등의 고차 함수 활용하기

개요오늘은 JavaScript에서 제공하는 고차 함수(Higer-Order Function)에 대해 알아보려고 합니다. 고차 함수는 다른 함수를 인자로 받거나 함수를 반환하는 함수를 의미하는데, 함수는 일급 객체(First-Class Citizens)이기 때문에 JavaScript에서 함수는 일반 값처럼 취급이 가능하여 변수에 할당되거나 다른 함수의 인자로 전달 또는 함수의 반환값으로 사용할 수 있습니다.  이러한 특징들을 이용한 고차 함수는 코드의 재사용성을 높이고, 간결하고 읽기 쉬운 코드를 작성하는데 매우 유용하게 사용됩니다. 본문 하단에서 일반적으로 함수를 만들 때와 고차 함수를 사용할 때의 차이를 잠깐 알아보고 다양한 고차 함수를 소개할게요😊 고차 함수를 사용하는 이유📙만약에 1~5까지 있는..

TIL 2024.10.11