전체 글 137

JavaScript 배열 객체 수정 시 주의할 점 - 참조 vs 재할당

개요안녕하세요. 오늘은 JavaScript에서 배열 안의 객체를 수정할 때 주의해야 할 점에 대해 알아보려 합니다. 이번 주제는 지난번 포스팅에서 다뤘던 Shallow Copy(얕은 복사)와 Deep Copy(깊은 복사) 개념과도 밀접한 관련이 있습니다. 간단히 다시 짚자면, 얕은 복사는 객체의 1단계까지만 복사하고, 내부에 중첩된 객체는 여전히 원본 객체와 참조를 공유합니다. 반면에 깊은 복사는 객체 전체를 재귀적으로 복사하기 때문에 원본과 완전히 분리된 새로운 객체가 생성됩니다. 이와 비슷하게, 배열 안에 있는 객체도 참조와 재할당에 따라 전혀 다른 동작을 하게 됩니다. 어떤 차이가 있는지, 아래 예제를 통해 좀 더 자세히 살펴보겠습니다😁 참조📙참조는 객체(Object), 배열(Array), 함수..

TIL 2025.05.22

jQuery .off()를 사용한 이벤트 중복 방지 처리

개요웹 개발을 하다 보면 keydown, click, change 등 다양한 이벤트를 바인딩하게 됩니다. 하지만 문제는 이벤트가 중복 등록되어, 원하지 않게 이벤트가 두 번 호출된다거나, 함수가 여러 번 실행되는 문제가 생길 수 있습니다. 특히 모달창을 여러 번 열고 닫을 때, 혹은 동적으로 요소를 다시 그릴 때 이런 문제가 왕왕 발생합니다. 오늘은 이를 예방하는 가장 간단하고 효과적인 방법을 소개하려 합니다. 하단에서 좀 더 자세히 살펴볼게요😃 왜 .off().on()을 써야 하나?📙$('#myButton').on('click', function() { doSomething();}); 위 코드처럼 작성하면 #myButton에 기존에 등록된 이벤트가 그대로 남아 있어서 같은 이벤트가 여러 번 실..

TIL 2025.04.29

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

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

TIL 2025.04.23

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

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

TIL 2025.04.17

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

개발자를 위한 최고의 AI 툴 3선 (Gemini, Notion, IntelliJ AI Assistant)

개요안녕하세요 빈코입니다. 오늘은 개발 스킬에 대한 포스팅이 아닌 요새 많이 화두 되고 있는 AI 툴들을 소개하려고 합니다. 디자이너, 개발자, 기획자 등 많은 IT 종사자들이 AI 툴들을 이용하여 업무 생산량을 높이고 있습니다. 모든 것을 AI에게 맡길 순 없지만, AI로 더 똑똑하게 업무 할 수 있는 몇 가지 방법들을 소개해볼게요😊 AI Assistant?📙 AI Assistant는 크게 ChatBot-based, Code Development, Business and Productivity 3가지로 나뉜다고 생각합니다.  첫 번째 ChatBot AI 툴은 가장 대중적으로 알려진 chatGPT와 Gemini, Claude가 대표적입니다. 주로 자연어 처리 능력을 기반으로 사용자와의 대화, 정보 제..

ETC 2025.01.18

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