조회수가 많아요 🫢
-
키크론 키보드 fn + f1~12 키 기본 설정
개요감사하게도 지인분께 키크론 k8 pro 키보드를 선물 받아 사용하던 중 키크론 키보드는 f1키를 입력하면 자동으로 fn + f1키가 입력 되고 fn + f1키를 입력해야 f1키가 입력되는 것을 알게 되었다.개발자로써 f1 ~ 12까지의 키를 쓸 일이 많아 그때마다 fn키까지 같이 눌러줘야하는게 굉장히 불편했는데 맥 자체의 설정으로도 키를 돌릴 수 없는 것을 알게 되었고 열심히 찾아보아도 기능키를 기본 맥 키보드처럼 쓸 수 있는 방법은 찾지 못했다... 하InteliJ에서 파일 리팩토링 단축키가 shift + f6인데 리팩토링을 하기위해 shift + f6 + fn 이렇게 세 키를 누를 때마다 참을 수 없는 분노가 올라와서 결국 키크론 키보드 런처에 접속해 직접 부딪혀서 설정하게 되었다.설정 방법유선으..
-
JWT - JWT 시크릿 키 생성
개요spring security + jwt 기초 세팅을 하던 중 블로그를 둘러보면 다들 jwt 시크릿 키가 있는데 어디서 만드는 지 몰라 찾아보았다.jwt 공식 사이트에서 만들어주는 건가 했는데 찾아본 결과 그냥 마음대로 만드는 거였다.직접 만들기도 귀찮으니 랜덤으로 만들어주는 터미널 명령어를 찾아보았다.명령어# OpenSSL을 사용하여 64바이트 길이의 난수 값을 16진수(hex) 형식으로 생성openssl rand -hex 64
-
Ubuntu - java 21 설치
명령어# apt 리스트 업데이트sudo apt update# java 21 버전 다운로드sudo apt install openjdk-21-jdk-headless# 설치 가능한 java 버전 확인# sudo apt list openjdk*
-
Spring - 랜덤 닉네임 생성기
개요프로젝트를 진행하던 중 랜덤으로 닉네임을 생성해주는 프로세스가 필요해 작성해보았다.코드import lombok.AllArgsConstructor;import org.springframework.stereotype.Component;import java.text.MessageFormat;import java.util.Random;@Component@AllArgsConstructorpublic class RandomNickname { // 형용사 배열 private final String[] ADJECTIVES = { "행복한", "똑똑한", "즐거운", "강한", "빠른", "재치있는", "충성스러운", "멋진", "훌륭한", "즐거운", "아름다운", "기쁜", "사랑스..
-
nginx - nginx proxy manager internal error
에러 발생 nginx proxy manager에서 proxy host를 등록하고 ssl 설정을 하려고 할때 이 오류가 발생했다. 해결 방법 1. 다른 설정 없이 해당 host 주소로 접속이 가능한지 확인한다. 2. 주소로 접속이 안 된다면 도메인의 A레코드 설정을 확인한다. 3. 주소로 접속이 안 된다면 docker에서 해당 port를 열어주었는지 확인한다. 4. 알맞은 ip를 넣었는지 확인한다.
-
⚙ 임베디드와 펌웨어의 차이
임베디드란정의- 기계장치를 사용하기 위해 기계 내부에 탑재된 컴퓨터를 뜻한다.- 범용 컴퓨터(일반 pc)의 반대 개념- 특정 목적을 가지고 만들어진 프로그래밍 가능한 컴퓨터예시세탁기나 냉장고 등 가전제품에 들어가는 단일목적 컴퓨터특징- 프로그램 최적화 - 임베디드 시스템의 하드웨어는 성능이 열악하기 때문에 코드를 최대한 압축시켜 최고의 효율을 내야한다.- 복잡한 알고리즘 - 마이크로프로세서에 의해 수행되는 명령이 고도의 정교함을 요할때가 있다.- GUI, 실시간 처리 지원, 멀티레이트, 하드웨어 지식 등등펌웨어란정의- 임베디드 시스템에서 구현되는 소프트웨어- 전자기기 등의 기본적인 제어 및 구동을 맡는 소프트웨어- 하드웨어와 소프트웨어의 중간 개념이라고도 한다.예시세탁기나 냉장고 등 컴퓨터 기반으로 동작..
-
Python - SSL: CERTIFICATE_VERIFY_FAILED 에러
개요python으로 외부 사이트를 긁어오는 작업 진행 중 아래와 같은 오류를 만났다.Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/urllib/request.py", line 1348, in do_open h.request(req.get_method(), req.selector, req.data, headers, File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/http/client.py", line 1286, in request self._send_request(met..
-
Java - 소수점 올림, 반올림, 버림
올림Math.ceil()double num = 123.4567891011;double test = Math.ceil(num); // 124// Math.cail()는 소수점 첫째자리를 기준으로 올림하는 메소드이다.반올림Math.round()double num = 123.4567891011;double test = Math.round(num); // 123// Math.round()는 소수점 첫째자리를 기준으로 반올림하는 메소드이다.double result1 = Math.round(num * 100) / 100.0; // 123.46// 둘째자리까지 나타내려면 100을 곱해주고 후에 100.0으로 나눠준다. 100으로 나누면 정수형으로 변환되기 때문에 100.0으로 나눠야 한다.버림String.fomat(..
-
js - 시간 차이 계산(시:분:초)
코드/** * 시간차이를 시분초 단위로 계산해주는 함수 * @param {String} time * @returns {String} 시간차이 */function 시간차이(time) { // 현재 시간 기준으로 차이 계산 var now_time = new Date(); var deadline = new Date(time); // 시간 차이를 초 단위로 변수에 저장 var diff_time = (deadline - now_time) / 1000; var diff_hour = Math.floor(diff_time / (60 * 60)).zf(2); var diff_minute = Math.floor((diff_time % diff_hour) / 60).zf(2); ..
-
Python - pip 모든 패키지 삭제
개요이전 시간에는 homebrew 패키지를 정리(하다가 기껏 정리 다 해놓고 마지막에 실수로 모든 패키지를 삭제해버림)해보았다.이번 시간에는 무분별하게 설치된 pip 패키지를 정리하려 한다.pip 패키지도 오늘 설치한 패키지만 삭제하려 했는데 생각해보니 homebrew와는 다르게 pip은 다양한 관리 도구가 있는데 내가 사용하지 않은 것이고, 다른 사람들은 다들 관리 도구를 사용할 것이기 때문에 굳이 오늘 설치한 pip 패키지 정렬 방법을 찾는다거나, 특정 기간에 설치된 pip 패키지 삭제 방법등은 필요하지 않을 것 같았다.그리하여 그냥 모든 pip 패키지를 깡그리 삭제하려고 한다ㅎㅎ삭제 명령어pip freeze | xargs pip uninstall -y설명pip freeze: 모든 패키지 목록 출력|..
최근에 올렸어요💡
-
Python - pip 모든 패키지 삭제
개요이전 시간에는 homebrew 패키지를 정리(하다가 기껏 정리 다 해놓고 마지막에 실수로 모든 패키지를 삭제해버림)해보았다.이번 시간에는 무분별하게 설치된 pip 패키지를 정리하려 한다.pip 패키지도 오늘 설치한 패키지만 삭제하려 했는데 생각해보니 homebrew와는 다르게 pip은 다양한 관리 도구가 있는데 내가 사용하지 않은 것이고, 다른 사람들은 다들 관리 도구를 사용할 것이기 때문에 굳이 오늘 설치한 pip 패키지 정렬 방법을 찾는다거나, 특정 기간에 설치된 pip 패키지 삭제 방법등은 필요하지 않을 것 같았다.그리하여 그냥 모든 pip 패키지를 깡그리 삭제하려고 한다ㅎㅎ삭제 명령어pip freeze | xargs pip uninstall -y설명pip freeze: 모든 패키지 목록 출력|..
-
Linux, homebrew - 오늘 설치한 brew 패키지 삭제하기
개요파이썬 토이 프로젝트 진행 중 무지성 chatGPT 따라하기를 시전한 결과 내 소중한 맥북에 이상한 패키지가 잔뜩 설치되었다.나는 2개 정도의 패키지만 설치하려 했는데 패키지가 패키지를 설치하고 그 패키지가 또 패키지를 설치하면서 약 20개 정도의 패키지가 추가되는 참사가 발생했다.하지만 homebrew는 기본적으로 설치된 패키지 노출 시 패키지명 오름차순으로 출력하고 설치 시간과 관련한 리스팅을 지원하지 않기 때문에 일일이 brew info 패키지명 명령어를 사용해야 설치 시간을 알 수 있다.내 맥북에 설치된 수많은 패키지의 정보를 일일이 조회할 순 없으니 약간의 꼼수를 부려보았고 이는 그 꼼수에 관한 포스팅이다.주의사항아래에서 설명할 방법은 패키지 설치 시간뿐만 아니라 수정 시간도 포함하여 삭제를..
-
Linux - ls -al 명령어 각 항목별 설명
개요linux를 사용하다 보면 자주 사용하게 되는 ls -al 명령어에서 각 항목이 무슨 의미인지 생각이 안 날 때가 있어 글로 정리 하려한다.각 항목별 설명항목예시설명권한-rw-r--r--파일 유형 및 접근 권한- 첫 글자는 파일 유형(-: 파일, d: 디렉토리 등), 다음 9글자는 소유자, 그룹, 기타 사용자의 권한링크 수1해당 파일이나 디렉토리에 연결된 하드 링크의 수소유자user파일이나 디렉토리의 소유자 이름그룹staff파일이나 디렉토리가 속한 그룹 이름크기1024파일의 크기(바이트 단위) 디렉토리의 경우 메타데이터 크기수정 날짜 및 시간Oct 5 12:34마지막으로 파일이나 디렉토리가 수정된 날짜와 시간파일명example.txt파일이나 디렉토리의 이름예시권한 | 링크 수 | 소유자 | 그룹 | ..
-
express - cors 허용
cors 라이브러리 설치npm install corscors 라이브러리 사용// index.jsconst express = require('express')const app = express()const port = 3000const cors = require('cors')app.use(cors());app.get('/', (req, res) => { res.send('Hello World!')})app.listen(port, () => { console.log(`Example app listening on port ${port}`)})
-
express - sequelize 모델 인스턴스 validation 공통 처리
개요express.js 프로젝트 진행 중 모델 인스턴스 validation을 일일히 작성해주는게 귀찮아 공통으로 처리하는 작업을 진행했다.프로젝트 디렉토리 구조project├── app.js├── middlewares│ └── beforeValidateHandler.js└── config └── db.jsmiddlewares/beforeValidateHandler.jsconst { ValidationError } = require('sequelize');/** * 모델 인스턴스 validation * * @param {Object} entity - 검증할 모델 인스턴스 * @throws {ValidationError} 속성 규칙에 따라 필드 값이 유효하지 않은 경우 예외 발생 */functi..
-
PostgreSQL - docker compose 파일로 PostgreSQL 디비 실행하기
docker-compose.ymlversion: '3.8' # Docker Compose 파일 버전services: postgres: image: postgres:16 # PostgreSQL 최신 이미지 사용 container_name: postgresql-container # 컨테이너 이름을 'postgresql-container'로 지정 environment: POSTGRES_USER: postgres # 슈퍼유저 계정으로 'postgres' 사용 권장 POSTGRES_PASSWORD: 비밀번호 # DB 접속 비밀번호 설정 POSTGRES_DB: 데이터베이스 # 생성할 기본 데이터베이스 이름 설정 ports: - "5432:5432" # 호스..
-
Redis - docker compose 파일로 redis 디비 실행하기
docker-compose.ymlversion: '3.8'services: redis: image: redis:latest # 최신 Redis 이미지를 사용 container_name: redis-container # 컨테이너 이름을 'redis-container'로 지정 ports: - "6379:6379" # 로컬의 6379 포트를 Redis 컨테이너의 6379 포트에 매핑 volumes: - redis_data:/data # 로컬의 'redis_data' 볼륨을 컨테이너의 /data 디렉토리에 매핑하여 데이터 영속성 유지 environment: REDIS_PASSWORD: 비밀번호 # Redis 서버에 접근할 때 사용할 비밀번호 환경 ..
-
Docker - Nginx Proxy Manager(npm) Docker로 실행하기
개요아....... 글 80% 작성 완료했는데 날아가서 새로 써야하네요.... 정말 속상합니다....한 서버에서 여러 프로젝트를 돌려야 하는데 각 서브 도메인마다 ssl 인증 관리를 해주어야 해서 열심히 삽질을 한 결과Nginx Proxy Manager(이하 npm, js 패키지 매니저 아님)를 사용하는게 가장 쉽고 편하다는 것을 깨닫게 되었다.그리하여 docker compose를 사용하여 npm을 컨테이너로 실행하고 서브도메인별로 ssl 인증을 받는 과정을 정리해본다.서버 디렉토리 구조.ssh├── nginx│ └── docker-compose.yml├── project1│ └── docker-compose.yml└── project2 └── index.jsnginx/docker-co..
-
Github - 디스코드 깃허브 알림 action(Discord Github Notification) 설명서
프로젝트 개요프로젝트 이름: 🛎️ Discord Github NotificationGithub repository urlGithub marketplace url프로젝트 설명이 프로젝트는 GitHub Action을 통해 GitHub에서 발생하는 다양한 이벤트(예: Pull Request 생성, 이슈 생성 등)를 Discord 채널 알림으로 전송하는 프로세스를 단순화해주는 서비스입니다.이 Action을 사용하면 중요한 개발 이벤트를 놓치지 않고 바로 Discord에서 확인할 수 있습니다!이 Action은 커스텀 알림 메시지를 지원하며, 한국어 🇰🇷와 영어 🇬🇧 중 원하는 언어로 알림을 받을 수 있습니다.👤 개발자: 김채민(Aleph Kim)🔧 주요 기능📝 PR 알림Pull Request 생성,..
-
Discord - AWS 요금 알림 봇
개요매일 정오에 이번 달 aws 요금이 얼마나 나왔는지 알려주는 봇을 만드는 과정이다.친절하게 한화로도 알려주게끔 만들었다.무분별한 수정과 배포를 환영합니다.준비물1. ssh 접속이 가능하고 docker, docker-compose가 정상 설치된 서버2. 채팅을 올리려는 채널의 discord 봇 webhook url3. 요금을 보려는 aws 계정의 access keydiscord 봇 webhook url 만드는 방법을 모른다면? Discord - 봇 만들기개요discord 기본 봇을 만드는 과정을 담은 글이다.1. 채널 편집 페이지2. 연동 - 웹후크3. 웹후크 만들기웹후크 url이 필요없다면 이름과 프로필 사진만 바꾸면 된다.웹후크 url이 필요할 경우 아래dev-kimchi.tistory.comaws..
-
AWS - Access Key 생성
개요AWS access key 생성에 관한 정리 글이다.1. AWS 홈페이지 -> 보안 자격 증명 페이지 이동2.엑세스 키 만들기스크롤을 밑으로 조금만 내리면 있는 2개의 버튼 중 마음에 드는 버튼을 클릭하면 된다.3.루트 사용자 엑세스 키의 대안 무시하기엑세스 키 만들기 버튼을 누르면 만들지 말라는 경고문이 뜨는데 가볍게 무시하고 체크박스에 체크한 후 엑세스 키 만들기 버튼을 클릭하면 된다.오늘도 건강하지 못한 개발 문화를 만드는데 일조했다는 뿌듯함은 덤이다.4. 엑세스 키 페이지엑세스 키와 비밀 엑세스 키 복사하고 사용하고 싶은 곳에 사용하면 된다.이 키는 재발급이 안 되니 분실하지 않도록 주의하자.
-
Discord - 봇 만들기
개요discord 기본 봇을 만드는 과정을 담은 글이다.1. 채널 편집 페이지2. 연동 - 웹후크3. 웹후크 만들기웹후크 url이 필요없다면 이름과 프로필 사진만 바꾸면 된다.웹후크 url이 필요할 경우 아래 이미지 속 표시된 버튼을 누르면 url 복사된다.
-
Docker - failed to solve: ~~~: error getting credentials - err: exit status 1, out: `` 에러
개요MacOS 환경에서 docker-compose 사용 시 해당 에러가 발생했다. => ERROR [~~~ internal] load metadata for docker.io/library/~~~ 0.7s------ > [~~~ internal] load metadata for docker.io/library/~~~:------failed to solve: ~~~: error getting credentials - err: exit status 1, out: ``해결방법docker 설정의 credsStore부분을 변경한다파일 경로 : ~/.docker/config.jsonsudo vi ~/.docker/config.json위 명령어로 들어간 파일의 내용 ..
-
Python - No module named 'currency_converter' error
개요aws CloudShell에서 python 파일을 실행하던 중 해당 오류를 만났다.Traceback (most recent call last): File "/home/cloudshell-user/discord-cost-bot/cost_send.py", line 4, in from currency_converter import CurrencyConverterModuleNotFoundError: No module named 'currency_converter'해결방법CurrencyConverter 라이브러리 설치우선 CurrencyConverter 라이브러리를 설치하지 않았다면 설치를 진행하자.pip install CurrencyConverter하지만 정상적으로 라이브러리를 설치했음에도 똑같은 ..
-
Python - 달러 환율 계산
개요aws 비용 발송 discord 봇을 만들던 중 한화로 변환해서 보여주면 좋겠다는 생각이 들어 만들어보았다.코드# 환율 변환 라이브러리from currency_converter import CurrencyConverter# 환율 데이터 zip 파일을 반환해주는 europa.eu 사이트 urlurl = 'https://www.ecb.europa.eu/stats/eurofxref/eurofxref-hist.zip'# 환율 변환 클래스 인스턴스 생성, 유로화 환율 데이터를 제공하는 zip 파일을 사용하여 초기화c_list = CurrencyConverter(url)# 1달러를 한화로 변환한 결과 출력print(c_list.convert(1, 'USD','KRW'))
-
Python - SSL: CERTIFICATE_VERIFY_FAILED 에러
개요python으로 외부 사이트를 긁어오는 작업 진행 중 아래와 같은 오류를 만났다.Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/urllib/request.py", line 1348, in do_open h.request(req.get_method(), req.selector, req.data, headers, File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/http/client.py", line 1286, in request self._send_request(met..
-
express - Docker + express.js 핫빌드 / 핫리로드
개요express 개발 세팅을 하던 중 핫리로드 기능을 추가하려 했는데 최신 글은 없는 것 같아 포스팅하게 되었다.spring에 비해 express는 확실히 자료가 너무 적어 매번 애를 먹는 것 같다...핫리로드 기능 패키지는 nodemon을 사용했다.핫빌드 / 핫리로드란?핫빌드 (Hot Build): 코드 변경 시 전체 애플리케이션을 다시 빌드하여 반영. 주로 백엔드 또는 빌드 도구에서 사용.핫리로딩 (Hot Reloading): 코드 변경 시 변경된 부분만 즉시 반영. 주로 프론트엔드 개발에서 사용하며, 애플리케이션 상태가 유지됨.내가 작업한 부분은 핫리로드다.하지만 제목에 핫빌드도 써두어야 검색 유입이 늘어날 것 같아 핫빌드도 써두었다. ㅎㅎ ^^프로젝트 디렉토리 구조project├── docker..
-
express - Docker + github action CI/CD 구현
개요express.js로 토이 프로젝트를 진행하던 중 cicd를 구현하려는데 마땅한 글을 찾지 못해 직접 구현한 후 정리하게 되었다.준비물1. ssh 접속이 가능하고 docker, docker-compose가 정상 설치된 서버2. docker hub 계정3. 프로젝트 repositoryGithub Repository Secrets 등록repository -> Settings -> Secrets and Variables -> Actions1. SERVER_IP - 서버 ip2. SERVER_USER - SSH 사용자명3. SSH_PRIVATE_KEY - 서버 SSH 접속 시 사용하는 private key4. DOCKER_USERNAME - docker hub 유저명5. DOCKER_PASSWORD - do..
-
Spring - Gmail로 메일 발송 기능 구현
개요프로젝트 진행 중 메일 발송 기능 구현이 필요했는데 자주 사용되는 코드라 귀찮음을 무릅쓰고 포스팅한다.gmail 앱 비밀번호 발급과 LOC_GAMIL_USERNAME, LOC_GAMIL_PASSWORD 환경변수 설정이 필요하다.gmail 앱 비밀번호 발급 내용은 잘 정리되어 있는 다른 분의 글을 인용한다. Google - Gmail SMTP 사용을 위한 세팅Google - Gmail SMTP 사용을 위한 세팅 G메일에서 제공하는 SMTP를 사용하여 메일발송을 해야 하는 경우가 있습니다. 보통 자체 서버를 운용하는 게 아니라, 웹호스팅 등을 사용하고 있는 경우라면 SMTPkincoding.com 만약 구글 계정 사이트에서 앱 비밀번호 설정 페이지가 보이지 않는다면 구글 계정 사이트에서 아래 이미지처럼 ..
-
Spring - 랜덤 인증번호 생성기
개요프로젝트를 진행하던 중 흔히들 사용하는 랜덤 인증번호 생성 프로세스가 필요해 작성해보았다.생성되는 인증번호는 영어 소문자와 숫자의 조합이다. (인증번호에 대소문자 구분하는 것 만큼 짜증나는 것이 없기에...)코드import java.security.SecureRandom;/** * 랜덤 인증번호 생성 클래스 */public class RandomAuthCode { // 인증 코드에 사용될 문자들 private static final String CHARACTERS = "abcdefghijklmnopqrstuvwxyz0123456789"; // 인증 코드의 길이 (6자리) private static final int CODE_LENGTH = 6; // 보안 강화를 위한 Sec..
- 방문자수
전체 방문자
오늘 방문자
어제 방문자