조회수가 많아요 🫢
-
키크론 키보드 fn + f1~12 키 기본 설정
개요감사하게도 지인분께 키크론 k8 pro 키보드를 선물 받아 사용하던 중 키크론 키보드는 f1키를 입력하면 자동으로 fn + f1키가 입력 되고 fn + f1키를 입력해야 f1키가 입력되는 것을 알게 되었다.개발자로써 f1 ~ 12까지의 키를 쓸 일이 많아 그때마다 fn키까지 같이 눌러줘야하는게 굉장히 불편했는데 맥 자체의 설정으로도 키를 돌릴 수 없는 것을 알게 되었고 열심히 찾아보아도 기능키를 기본 맥 키보드처럼 쓸 수 있는 방법은 찾지 못했다... 하InteliJ에서 파일 리팩토링 단축키가 shift + f6인데 리팩토링을 하기위해 shift + f6 + fn 이렇게 세 키를 누를 때마다 참을 수 없는 분노가 올라와서 결국 키크론 키보드 런처에 접속해 직접 부딪혀서 설정하게 되었다.설정 방법유선으..
-
Linux - ls -al 명령어 각 항목별 설명
개요linux를 사용하다 보면 자주 사용하게 되는 ls -al 명령어에서 각 항목이 무슨 의미인지 생각이 안 날 때가 있어 글로 정리 하려한다.각 항목별 설명항목예시설명권한-rw-r--r--파일 유형 및 접근 권한- 첫 글자는 파일 유형(-: 파일, d: 디렉토리 등), 다음 9글자는 소유자, 그룹, 기타 사용자의 권한링크 수1해당 파일이나 디렉토리에 연결된 하드 링크의 수소유자user파일이나 디렉토리의 소유자 이름그룹staff파일이나 디렉토리가 속한 그룹 이름크기1024파일의 크기(바이트 단위) 디렉토리의 경우 메타데이터 크기수정 날짜 및 시간Oct 5 12:34마지막으로 파일이나 디렉토리가 수정된 날짜와 시간파일명example.txt파일이나 디렉토리의 이름예시권한 | 링크 수 | 소유자 | 그룹 | ..
-
Ubuntu - java 21 설치
명령어# apt 리스트 업데이트sudo apt update# java 21 버전 다운로드sudo apt install openjdk-21-jdk-headless# 설치 가능한 java 버전 확인# sudo apt list openjdk*
-
⚙ 임베디드와 펌웨어의 차이
임베디드란정의- 기계장치를 사용하기 위해 기계 내부에 탑재된 컴퓨터를 뜻한다.- 범용 컴퓨터(일반 pc)의 반대 개념- 특정 목적을 가지고 만들어진 프로그래밍 가능한 컴퓨터예시세탁기나 냉장고 등 가전제품에 들어가는 단일목적 컴퓨터특징- 프로그램 최적화 - 임베디드 시스템의 하드웨어는 성능이 열악하기 때문에 코드를 최대한 압축시켜 최고의 효율을 내야한다.- 복잡한 알고리즘 - 마이크로프로세서에 의해 수행되는 명령이 고도의 정교함을 요할때가 있다.- GUI, 실시간 처리 지원, 멀티레이트, 하드웨어 지식 등등펌웨어란정의- 임베디드 시스템에서 구현되는 소프트웨어- 전자기기 등의 기본적인 제어 및 구동을 맡는 소프트웨어- 하드웨어와 소프트웨어의 중간 개념이라고도 한다.예시세탁기나 냉장고 등 컴퓨터 기반으로 동작..
-
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 = { "행복한", "똑똑한", "즐거운", "강한", "빠른", "재치있는", "충성스러운", "멋진", "훌륭한", "즐거운", "아름다운", "기쁜", "사랑스..
-
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(..
-
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" # 호스..
-
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..
-
tailwind - important
tailwind class에 !important 적용 시키는 법 클래스 명 앞에 느낌표를 붙이면 된다. 클래스 명 앞에 느낌표를 붙이면 된다.
-
Spring - 랜덤 인증번호 생성기
개요프로젝트를 진행하던 중 흔히들 사용하는 랜덤 인증번호 생성 프로세스가 필요해 작성해보았다.생성되는 인증번호는 영어 소문자와 숫자의 조합이다. (인증번호에 대소문자 구분하는 것 만큼 짜증나는 것이 없기에...)코드import java.security.SecureRandom;/** * 랜덤 인증번호 생성 클래스 */public class RandomAuthCode { // 인증 코드에 사용될 문자들 private static final String CHARACTERS = "abcdefghijklmnopqrstuvwxyz0123456789"; // 인증 코드의 길이 (6자리) private static final int CODE_LENGTH = 6; // 보안 강화를 위한 Sec..
최근에 올렸어요💡
-
기타 - compinit:480: compdump: function definition file not found 에러 해결(feat. m4 에어 마이그레이션)
개요드디어 맥북을 업그레이드 했다. 오랜 기간 동고동락한 m1 에어를 보내주고 m4 에어를 질러버렸다.기분좋게 마이그레이션까지 마치고 VScode에서 터미널을 열었는데 갑자기 아래와 같은 에러가 출력되기 시작했다.compinit:480: compdump: function definition file not found.zshrc:188: add-zsh-hook: function definition file not foundcompinit 관련 에러zsh에서 compinit은 자동 완성 기능을 초기화할 때 사용하는 함수인데, 뭔가 꼬였는지 함수 파일 자체를 못 찾는다고 에러가 발생했다.그래서 .zshrc에 다음 스크립트를 추가해보았다autoload -Uz compinitcompinitautoload -U b..
-
PHP - Apache server status 설정 + 프록시 IP 처리
개요Grafana로 PHP 서버 상태를 모니터링하려고 하다가 Apache 환경에서의 설정과 보안 문제를 겪게 되어, 그 과정을 정리해보았다.특히 server-status를 외부에서 접근 가능하게 열었을 때 생기는 보안 이슈와, Nginx 프록시 환경에서의 IP 처리 문제를 어떻게 해결했는지를 중심으로 다룬다.Apache server-status 활성화Apache에서는 mod_status 모듈을 활성화한 뒤 /server-status 엔드포인트를 열어 서버 상태 정보를 확인할 수 있다.Grafana로 apache 서버를 모니터링 할때는 해당 데이터를 수집하기 위해 보통 Prometheus용 Apache Exporter와 연결하여 시각화한다.처음에는 다음과 같은 설정으로 server-status를 활성화했었..
-
DB를 털리다.
피곤한 월요일, 여느 때와 같이 일을 하다 잠깐 쉬는 시간에 내 사이트는 잘 돌아가고 있나 들어가보았는데?메인페이지에서 500 에러가 발생하고 있었다.경험상 잘 돌아가던 사이트의 메인페이지에서 에러가 발생하는 경우는 보통 db 연결에 장애가 생겨 그런 경우가 대부분이었어서 '뭐지 db가 꺼졌나?', 'cloudflare 연결한게 원인인가? 아닌데.. db는 ip로 연결해서 별 관련 없는데..' 하는 생각을 하며 서버에 접속을 해보았다.흐으음... db는 안 내려갔고... 이상이 없는데? redis가 내려갔나? redis도 정상적인데....원인을 찾지 못하고 애꿎은 서버 로그만 뒤적이고 있었다.그런데???All your data is backed up. You must pay 0.0100 BTC to bc..
-
Nginx - Nginx Proxy Manager + Cloudflare ssl 적용
개요가난한 개발자는 무료 서버를 사용할 수 밖에 없고 8,000km나 떨어진 서버를 사용하는 사이트에 접속하면 속도는 끔찍한 경우가 대부분이다.특히나 메인페이지에 접속할때마다 자체 이미지 호스팅 서버에서 수많은 이미지를 불러오고, db 서버에서 복잡한 조회 쿼리를 실행하는 내 사이트의 속도는 최악 중의 최악에 치달았다.이를 해결하기 위해 방법을 찾아보다 CDN 서비스라는 것을 알게 되었고, 그 중에 전세계 1등 CDN 서비스 회사인 Cloudflare를 사용하게 되었다.DNS 설정을 하고, 처음보는 서비스가 신기해 이것저것 설정을 해본 후 속도가 얼마나 빨라졌나 기대를 하며 내 사이트에 접속을 하는데! 이게 뭐람? 정상적이던 내 사이트가 갑자기 접속이 안 되기 시작했다.ERR_SSL_PROTOCOL_ER..
-
Go - 이미지 리사이즈 기능(/h2non/bimg)
개요Go로 이미지 호스팅 서버를 개발하던 중, 이미지 리사이즈 기능을 구현하는 과정에서 고민했던 점들을 정리해보았다.go 주요 이미지 리사이즈 라이브러리 비교라이브러리장점단점bimg- libvips 기반으로 매우 빠른 처리 속도 - 메모리 사용량이 적음 - 다양한 이미지 포맷 지원- C 바인딩으로 인한 설치 복잡도 증가 - libvips 의존성 필요 - Windows 환경에서 설정이 까다로움imaging- 순수 Go로 작성되어 설치가 간단 - 크로스 플랫폼 지원이 용이 - API가 직관적이고 사용하기 쉬움- 처리 속도가 상대적으로 느림 - 메모리 사용량이 많음 - 일부 고급 이미지 처리 기능 부재nfnt/resize- 가볍고 단순한 구현 - 순수 Go로 작성되어 의존성이 ..
-
PHP - 클로저(Closure, 익명 함수)
개요개발을 하다보면 변수를 넣어야하는 문자열을 또 변수로 사용하게 될때가 있는데 매번 문자열을 불러와서 변수를 .으로 붙여주거나 복잡하게 넣어주게 돼서 간단한 방법이 없나 찾아보다 클로저 함수라는 것을 사용하게 되었다.사용 예시// 문자열에 변수 추가$exam_url = fn($id) => "https://example.com/user/$id";echo $exam_url(123); // "https://example.com/user/123"// 문자열에 변수 여러 개 추가$profile = fn($name, $age) => "이름: $name, 나이: $age";echo $profile("aleph", 26); // "이름: aleph, 나이: 26"// 문자열에 삼항연산자로 변수 추가$status = ..
-
PHP - html 태그 추출기
개요웹개발을 할때 svg 아이콘이 필요하면 유튜브에서 사용하는 svg 태그를 가져다 사용하고 있는데 유튜브에 존재하는 모든 svg를 미리 분류해두고 싶어 php를 사용해 유튜브 페이지의 전체 html에서 svg 태그만 추출하기 위해 php로 태그 추출기를 만들어보았다.코드(.*?)/is";preg_match_all($pattern, $html, $matches);// 결과 처리$output = implode("\n", $matches[0]);// 파일로 저장file_put_contents('output.html', $output);echo "태그 추출이 완료되었습니다.";사용 예시input.html 위 html을 php 파일과 같은 경로에 input.html로 저장하..
-
HTML, CSS - 별점 선택(Star Rating)
See the Pen Star Rating by 김채민 (@aleph-kim) on CodePen.
-
PHP - Docker-Compose 환경 PHP 프로젝트 빌드 시 Composer 설치
개요php, docker compose로 프로젝트를 진행하면서 composer를 설치하려는데 뭐 컨테이너를 따로 만들고 어쩌구 볼륨을 설정하고 어쩌구 이상하리만치 복잡하길래 간단한 방법을 만들어보았다.파일docker-compose.yml기본 compose 파일로 composer를 쓰나 안 쓰나 차이는 없다.version: '3.8'services: web: build: . ports: - "8080:80" volumes: - .:/var/www/htmlDockerfileDockerfile에서 직접 composer를 설치하고, 라이브러리도 설치한다.# PHP 7.4와 Apache 이미지 사용FROM php:7.4-apache# Composer 설치에 필요한 패키지 설치 ..
-
Go - 파일 호스팅 서버 프로젝트 기술 설명서
🌟 프로젝트 기술 설명서 🌟이 프로젝트는 파일 호스팅를 위한 RESTful API 서버입니다. Go 언어로 작성되었으며, Docker를 이용해 배포할 수 있도록 구성되었습니다. 🚀 서버는 사용자가 인증된 상태에서 파일을 업로드하고 관리할 수 있도록 기능을 제공합니다.관련 링크 📑아래는 프로젝트와 관련된 다양한 링크 정보입니다.서버 url: https://img.aleph.kr/api 명세서 url: https://github.com/Aleph-Kim/img-host-server/wiki깃허브: https://github.com/Aleph-Kim/img-host-server 🧑💻 주요 기능 🧑💻파일 업로드: 인증된 사용자만 파일을 업로드할 수 있습니다. 파일은 사용자별로 구분된 폴더에 저..
-
Docker - sudo 없이 docker 명령어 사용하기
개요현재 인스턴스 서버에서 docker 명령어를 실행할 때마다 sudo를 붙여야 하는 불편함이 있어 이를 해결하기 위해 방법을 찾아보았다.1. 현재 사용자 Docker 그룹에 추가하기# 현재 사용자를 docker 그룹에 추가하는 명령어sudo usermod -aG docker $USER2. 세션 재시작 또는 로그아웃 후 다시 로그인그룹 변경 사항이 적용되기 위해 로그아웃 후 다시 로그인하거나 터미널을 재시작3. 권한 확인# 현재 사용자의 그룹 리스트 출력groups출력 결과에 docker 그룹이 포함되어 있다면 성공적으로 추가된 것이다.
-
Docker - Debian 서버에 docker, docker compose 설치하기
Docker 설치# 필수 패키지 설치sudo apt-get updatesudo apt-get install apt-transport-https ca-certificates curl software-properties-common# Docker GPG key 추가curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg# Docker 저장소 추가echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https..
-
Go - error strings should not end with punctuation or newlines (ST1005)
개요Go로 새로운 프로젝트를 진행하던 중 vscode에서 errors.New("에러가 발생했습니다.") 부분에 노란색 밑줄이 생겼다.그냥 냅둬도 서버 굴리는 데에 아무런 영향 없이 잘 돌아가지만 저 노란색 밑줄을 용납할 수 없어 조금 찾아보았다.원인오류 메시지의 문자열 첫 번째 글자가 대문자인 경우오류 메시지의 문자열 끝에 마침표, 느낌표, 물음표 등의 구두점이나 개행 문자가 포함될 경우해결방법원인에 따라 첫 번째 글자를 소문자로 바꾸거나 끝에 특수문자가 들어가지 않도록 수정하면 된다.하지만하지만 한국인의 에러 메시지가 마침표로 끝나는 것은 일어날 수 있는 일이 아닌가? 나는 에러가 발생했습니다 라며 마침표 없이 끝나는 에러 메시지를 보고 싶지 않다.고로 노란색 밑줄이 뜨지 않도록 vscode의 설정을 ..
-
Git - 특정 파일의 변경 사항 추적 제어 (올라간 파일 업데이트 안 하는 방법)
명령어설명예시git update-index --skip-worktree [파일명]지정한 파일에 대해 skip-worktree 플래그를 설정합니다. 로컬 변경 사항을 Git이 무시하도록 합니다.git update-index --skip-worktree config.txtgit update-index --no-skip-worktree [파일명]설정된 skip-worktree 플래그를 해제하여, 해당 파일의 변경 사항을 다시 추적하도록 합니다.git update-index --no-skip-worktree config.txtgit ls-files -v현재 추적 중인 파일들의 상태를 보여줍니다. `H`는 일반 상태, `S`는 skip-worktree가 설정된 파일입니다.git ls-files -v
-
PHP - 내장 함수만으로 .env 파일 사용하기
개요다른 라이브러리를 사용하지 않고 php 내장 함수만으로 .env 파일을 사용하는 방법에 관한 포스팅이다.코드loadEnv 함수사용 예시후기사랑해 php야 망하지만 말아줘...
-
HTML, CSS - song card slide
개요프로젝트를 진행하며 flickity 라이브러리를 사용하여 만든 노래 슬라이드를 코드펜에 정리해보았다.codepen See the Pen song card slide by 김채민 (@aleph-kim) on CodePen.
-
CSS - 노멀라이즈 / 리셋
비교특징CSS 리셋 (Reset)CSS 노멀라이즈 (Normalize)기본 스타일 처리브라우저 기본 스타일을 모두 제거하여 모든 요소를 초기화합니다.브라우저 간 기본 스타일 차이를 보완하면서 유용한 기본 스타일은 그대로 유지합니다.접근 방식모든 요소의 스타일을 제거한 후, 개발자가 전부 직접 스타일을 정의합니다.기본 스타일의 일관성을 높여 브라우저 차이를 줄이고 접근성을 개선합니다.대표 라이브러리Elad Shechter’s CSS Resetnormalize.css장점- 초기 상태에서 스타일링을 시작하여 예측 가능성이 높습니다. - 모든 요소를 동일한 상태로 만듭니다.- 기본 스타일의 장점을 유지하면서 일관성을 제공합니다. - 접근성과 사용성을 개선합니다.단점- 기본 스타일을 모두 제거하므로 추가적..
-
PHP - include, include_once, require, require_once 차이
함수에러 처리중복 포함사용 용도사용 용도 예시include()파일이 없으면 경고(E_WARNING) 발생, 실행 계속중복 포함 가능선택적 파일 포함디자인 레이아웃 파일, 광고 배너, 언어 팩 파일include_once()파일이 없으면 경고(E_WARNING) 발생, 실행 계속 (단, 중복 방지)중복 방지선택적 파일 포함플러그인 파일, 서브 기능 모듈, 임시 설정 파일require()파일이 없으면 치명적 오류(E_COMPILE_ERROR) 발생, 실행 중단중복 포함 가능필수 파일 포함데이터베이스 연결 파일, 구성 파일, 핵심 라이브러리require_once()파일이 없으면 치명적 오류(E_COMPILE_ERROR) 발생, 실행 중단 (단, 중복 방지)중복 방지필수 파일 포함프레임워크 초기화 파일, 핵심 모..
-
docker - docker compose networks 옵션과 드라이버 종류
개요프로젝트를 진행하던 중 나의 작고 소중한 php 서버가 mysql 서버를 접근하지 못하여 찾아보니 컨테이너간 네트워크가 연결되어있지 않아 발생한 해프닝이었다.딸깍만 하면 모든게 자동으로 되는 환경을 원하기 때문에 docker compose의 networks 옵션에 대해서 찾아보았다.Docker Compose 네트워크 옵션옵션설명예시external이미 만들어진 네트워크를 사용한다.(새로 만들지 않음)external: truename네트워크의 이름을 정한다.name: my_custom_networkdriver컨테이너들이 서로 연결되는 방식을 정한다.(default: bridge)driver: overlaydriver_opts드라이버가 필요로 하는 추가 설정한다.driver_opts: com.docker...
-
한글명언 OPEN API 기술 설명서
🌟 한글명언 OPEN API 기술설명서본 문서는 한글명언 OPEN API 프로젝트의 전반적인 시스템 구성, 사용 기술(버전 포함), 모듈별 역할, 실행 방법, 배포 환경, 관련 링크 정보 및 CI/CD 파이프라인 설정에 관한 설명서입니다.1. 개요api key나 복잡한 인증 필요없이 한글로 번역한 명언을 받아볼 수 있는 OPEN API 서비스 구현2. 관련 링크 📑아래는 프로젝트와 관련된 다양한 링크 정보입니다.API 문서: https://quote.aleph.kr/api-docs/(API 문서 페이지)관리자 페이지: https://quote.aleph.kr/admin(관리자 전용 명언 관리 페이지)깃허브: https://github.com/Aleph-Kim/korean-quote(프로젝트 소스 코드..
- 방문자수
전체 방문자
오늘 방문자
어제 방문자