728x90

2025/04 10

[DB] commit(), rollback(), release()의 역할

MySQL을 사용할 때 여러 쿼리를 하나의 작업으로 묶어 처리하고 싶을 경우 트랜잭션을 사용한다. 트랜잭션을 사용하면 중간에 에러가 발생했을 때 이전 작업을 모두 취소할 수 있어 데이터 정합성을 보장할 수 있다.Node.js 환경에서 MySQL 커넥션을 사용한 트랜잭션 처리의 핵심 메서드는 다음과 같다.1. beginTransaction()트랜잭션의 시작을 선언하는 메서드이다. 이 시점부터 실행되는 쿼리들은 commit()을 호출하기 전까지 실제로 DB에 반영되지 않는다.await conn.beginTransaction();2. commit()트랜잭션 내에 실행한 모든 쿼리를 실제 DB에 반영하는 메서드이다. 이 명령이 실행되면 트랜잭션은 종료되고, 데이터는 확정적으로 저장된다.await conn.com..

[Nuxt.js] Nuxt 3에서 nitro.devProxy와 운영 환경 API 연동

개발 중프론트는(nuxt3) localhost:3000, 백엔드는 (node.js) localhost:5000에 띄워져 있는 상황. 위처럼 작성 시 post 방식의 api는 잘만 호출이 되는데.get 방식은 상대경로를 써주니 405 Method Not Allowed 에러가 자꾸 떠버린다. 이제야 알게 된 nitro.devProxy.... ✅ nitro.devProxy란?nitro.devProxy는 Nuxt 3에서 제공하는 개발 모드 전용 프록시 기능입니다.개발 중 클라이언트가 Nuxt 서버(localhost:3000)로 API 요청을 보내면, 해당 요청을 백엔드 서버(localhost:5000 등)로 자동으로 중계(proxy) 해주는 역할을 합니다.⚙️ 사용 예시nuxt.config.ts에 다음..

삼분공부/Vue 2025.04.14

[Node.js] Node.js에서 node-schedule로 작업 예약

🛠️ node-schedule이란?node-schedule은 Node.js에서 크론(Cron)처럼 정해진 시간에 작업을 실행할 수 있게 해주는 모듈.크론만 사용해 봤지 노드 스케쥴러는 처음이다.  📦 설치 방법npm install node-schedule🧪 기본 사용법const schedule = require('node-schedule');schedule.scheduleJob('*/5 * * * * *', () => { console.log('5초마다 실행됩니다!');});'*/5 * * * * *': 매 5초마다총 6자리: [초 분 시 일 월 요일]⏰ 예제 모음✅ 1. 매일 오전 9시 정각에 실행schedule.scheduleJob('0 0 9 * * *', () => { console.lo..

[Linux] 서버 로그 파일 다운로드하는 가장 간단한 방법: scp 명령어 사용법

서버에 저장된 로그 파일을 로컬 PC로 다운로드해야 할 일이 생길 때가 있습니다. 예를 들어, Nginx, FastAPI, Django 등에서 쌓이는 로그를 분석하거나 보관용으로 백업하고 싶을 때 말이죠.이럴 때 유용하게 사용할 수 있는 명령어가 바로 scp입니다.📌 scp란?scp는 Secure Copy Protocol의 줄임말로, SSH 기반의 안전한 파일 복사 명령어입니다.즉, 원격 서버와 로컬 PC 간에 파일을 복사할 수 있는 리눅스 기본 명령어입니다.✅ 기본 사용법scp [옵션] 사용자명@서버주소:원격파일경로 로컬저장경로 📂 예제: 로그 파일 다운로드하기서버에서 /var/log/myapp.log 파일을 내 컴퓨터의 Downloads 폴더로 받고 싶다면 아래처럼 입력합니다:scp ubuntu@..

삼분공부/Server 2025.04.09

[css] CSS 크기 단위 비교

퍼블리셔가 있어도 간간히 개발자들이 고쳐야하는 부분이 있다. 3년차지만 .. . 이제와서 궁금해진 rem ... 단위기준점특징예시결과 (기준 font-size: 16px)px고정 픽셀값가장 직관적이고 정확함margin: 16px;16픽셀em부모 요소의 font-size중첩 시 크기 계산 복잡margin: 1em;보통 16px (부모 기준)rem최상위 html의 font-size항상 기준이 일정해서 예측 쉬움margin: 1rem;16px (html 기준)%부모 요소의 크기 비율반응형에 자주 사용width: 50%;부모의 절반 크기📌 예시 코드 em 예시 rem 예시 1em → 20px (div가 기준)1rem → 16px (html이 기준)🧠 언제 어떤 걸 쓰..

삼분공부/기타 2025.04.07

[Nuxt] Nuxt3에서 Audio 중복 재생 문제 해결하기 & preload/load 이해하기

Nuxt3 프로젝트를 진행하며 사용자 알림용 소리나 효과음을 넣을 일이 종종 생깁니다. new Audio('/alarm.mp3')처럼 간단히 구현할 수 있지만, 한 가지 문제가 있습니다:✅ 버튼을 여러 번 누르면 이전 오디오가 겹쳐서 동시에 재생되는 현상!이 글에서는 이 문제의 원인과 해결 방법, 그리고 오디오 관련 속성인 preload, load()의 개념까지 정리해보겠습니다.📌 문제: 오디오가 겹쳐 재생된다?다음과 같은 코드가 있다고 가정해봅시다:const audio = new Audio('/alarm.mp3')audio.play() 이 코드를 버튼 클릭 시마다 실행하면, 매번 새로운 Audio 인스턴스가 생성되어 각각 따로 재생됩니다. 그래서 버튼을 여러 번 누르면 소리가 겹쳐 들리게 됩니다.✅ ..

삼분공부/Vue 2025.04.07

[Linux] 리눅스 파일 관련 명령어 총정리

cat, vi, nano, less, more 사용법 및 차이점✅ 1. cat (concatenate)기능: 파일 내용을 출력하거나 새 파일을 생성할 때 사용주요 사용법:cat filename.txt # 파일 내용 출력cat > newfile.txt # 새 파일 생성 (입력 후 Ctrl + D)cat file1 file2 > all.txt # 파일 병합장점: 빠르고 간단단점: 긴 파일은 불편 (스크롤 불가, 수정 불가)✅ 2. vi (Vim 에디터)기능: 터미널 기반 강력한 텍스트 편집기주요 사용법:vi filename.txt # 파일 열기i # 입력 모드 진입Esc # 명령 모드 복귀:w ..

삼분공부/기타 2025.04.03

[Nuxt] meta 태그의 name과 property 차이점

웹 페이지를 만들다 보면 태그를 자주 보게 됩니다. 특히 Nuxt3나 Vue 기반 프로젝트에서 useHead를 사용할 때 meta 속성 안에 name과 property를 혼용하게 되는 경우가 많죠. 그런데 이 두 개, 정확히 어떤 차이가 있을까요?오늘은 meta 태그의 name과 property 속성이 어떻게 다르고, 언제 각각을 사용하는 게 맞는지 쉽게 정리해볼게요.✅ meta 태그란?먼저 간단히 짚고 넘어가자면, 태그는 HTML 문서의 "메타데이터"를 정의하는 태그예요. 페이지의 설명, 키워드, 작성자, 뷰포트 설정 등 눈에 보이지 않는 중요한 정보를 담고 있어요.예시:🔍 name vs property 차이점1. name: HTML 표준 메타데이터용도: 일반적인 페이지 정보 설정사용 예: 검색 ..

삼분공부/Vue 2025.04.02

[Git] You have not concluded your merge (MERGE_HEAD exists). hint: Please, commit your changes before merging. Exiting because of unfinished merge.

이 메시지는 Git에서 병합(Merge) 작업을 완료하지 않고 중단한 상태라는 의미입니다. 즉, 이전에 git merge를 실행했는데 충돌(conflict)이 발생하거나 커밋을 완료하지 않아서 Git이 다음 병합을 막고 있는 것입니다. ✅ 1. 병합 상태 확인 git status✅ 2. 충돌 해결 (충돌이 있을 경우)충돌이 있는 파일을 직접 열어 충돌을 해결하고, 수정 내용을 저장한 뒤: git add ✅ 3. 병합 커밋 완료충돌을 해결하고 스테이징한 후: git commit✅ 4. 병합 다시 시도 (필요할 경우)이제 병합이 완료되었으므로 원래 하려던 병합 명령어를 다시 시도해도 됩니다:git merge ❗ 병합을 취소하고 싶다면? git merge --abort   정신 차리고 머지하십시오.

삼분공부/기타 2025.04.01

[MySQL] GET_LOCK()을 활용한 동시성 제어 — Spring Boot에서 안전한 주문 번호 생성하기

동시성이 중요한 시스템에서는 "동시에 들어온 요청이 같은 값을 쓰면 안 되는" 상황이 자주 발생합니다. 특히 주문 번호(billNo)를 생성할 때 순서를 보장해야 하는 경우, 단순한 카운트 기반 로직은 예상치 못한 중복 문제를 일으킬 수 있습니다.이번 글에서는 Spring Boot + MySQL 환경에서 GET_LOCK()을 이용해 이러한 문제를 간단하게 해결하는 방법을 소개합니다.💥 문제 상황예를 들어, 아래와 같이 특정 일자의 주문 건수를 카운트해서 billNo를 생성한다고 가정해봅시다: int orderCount = orderRepository.count(storeNo, regDate);int billNo = orderCount + 1;✅ 해결 방법: MySQL GET_LOCK() 사용MySQL은..