TIL 44

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

js Shallow Copy(얕은 복사)와 Deep Copy(깊은 복사)의 차이

개요코드를 구성하다 보면 객체를 복사해야 하는 경우가 왕왕 생깁니다. 하지만, 오늘 소개해드릴 복사 방법 두 가지의 차이를 명확히 구분하지 않는다면 예상치 못한 에러를 맞닥뜨릴 수 있습니다. js에는 Shallow Copy(얕은 복사)와 Deep Copy(깊은 복사)가 있는데 하단 본문에서 자세히 살펴보도록 할게요😃 Shallow Copy (얕은 복사)📙얕은 복사는 객체의 최상위 속성만 복사합니다. 복사된 객체의 중첩 객체나 배열은 원본 객체의 참조를 그대로 유지하므로, 중첩된 객체나 배열을 수정하면 원본 객체에도 영향을 끼치게 됩니다. // 원본 객체let original = { name: 'Binco', age: 15, address: { city: 'Daejeon',..

TIL 2024.10.07

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

Java HTTP Server 쉽게 이해하기 및 예제

개요현직에서 업무를 하다 보면 기업 간의 API 통신이 이루어질 때가 왕왕 있습니다. 예를 들어, 생체 인증을 해서 로그인을 한다던가 또는 메일 발송을 해당 기업의 API를 사용할 때입니다. 그럴 때마다 서로 API 문서를 주고받고 필요한 값들을 넘겨주게 됩니다.  예를 들어, 메일 발송이라 가정했을 때 발신자, 제목, 본문, 파일, 수신자 등 다양한 정보를 넘겨주게 됩니다. 하지만 외부 API를 직접 테스트 할 수는 없기에 내가 보내는 값만 정상적으로 보내는지 체크할 수 있을 뿐, 응답값이 제대로 나오는지 확인이 불가능합니다. 이럴 때 유용하게 사용하는 기능이 HTTP Server입니다. 하단에서 좀 더 자세히 살펴볼까요? HTTP Server란?📙HTTPServer는 Java에서 간단한 웹 서버를 ..

TIL 2024.09.09

SMTP 정의 및 Java에서 메일 발송 기능 활용해보기(간단 예시)

개요 안녕하세요 빈코입니다. 오늘은 메일 발송 기능인 SMTP에 대해 자세히 알아보려고 합니다. SMTP 프로토콜은 Simple Mail Transfer Protocol의 약자로 인터넷에서 이메일을 전송하는 통신 규약 중 하나를 일컫습니다. 그럼 하단에서 자세히 알아볼까요? SMTP📙SMTP는 개요에서 설명한 바와 같이 이메일을 전송하는 통신 규약입니다. 주로 이메일 클라이언트와 서버 간, 그리고 서버와 서버 간의 이메일 전송을 관리하는 역할을 합니다. SMTP의 주요 기능은 이메일 전송, 서버 간 이메일 릴레이, 포트와 연결 등이 있습니다. 여기서 서버 간 이메일 릴레이는 이메일이 발신자의 메일 서버에 도착하면, 이 서버는 수신자의 메일 서버로 이메일을 전송하게 되는데 해당 과정을 서버 간의 릴레이라..

TIL 2024.09.04

리눅스 파티션 추가 및 디스크 포맷 & 마운트 설정하는 방법(예시포함)

개요안녕하세요 빈코입니다. 오늘은 서버 세팅 요소 중 하나인 리눅스 파티션 설정과 디스크 마운트 하는 방법에 대해 알아보려고 합니다. 리눅스 시스템에서 디스크는 하나 이상의 파티션으로 나뉘고 각 파티션은 논리적으로 독립된 공간으로 분할된 디스크 영역을 나타냅니다. 이것은 파일 시스템을 구성하고 데이터를 저장하기 위한 공간을 제공합니다. 그럼 설정하는 방법을 바로 알아볼까요?  파티션 설정📙첫 번째로는 fdisk를 활용하여 마운트 할 디스크명을 확인합니다.fdisk -l  두 번째로 파티션을 추가해줍니다.fdisk /dev/vdb  위 명령어를 치면 아래와 같은 질문이 나오는데, 새로운 파티션을 추가하기 위해 n을 입력해 주고 기본값으로 설정하기 위해 질문이 끝날때까지 엔터를 치시면 됩니다. 마지막에 똑..

TIL 2024.04.30