전체 글 39

JSON이 뭔가요?

들어가며개발과 관련된 일을 하다 보면 JSON 형식을 많이 보셨을 텐데요. 이번 시간에는 JSON이 무엇인지에 대해 알아보도록 하겠습니다. JSON이 뭔가요?JSON(JavaScript Object Notation)은 키-값 쌍을 기반으로 구조화된 데이터를 나타내는 텍스트 형식입니다. 아래와 같이 나타냅니다.{ "name": "Leo Kim", "age": 30, "isStudent": false, "languages": ["Korean", "English"], "address": { "street": "123 St", "city": "Seoul", }}  사용가능한 데이터 타입은 아래와 같습니다.StringNumberBooleannullArray..

Web 2024.08.23

브라우저 핑거프린팅(Browser fingerprinting)이란?

들어가며오늘날 웹사이트에는 많은 사용자들이 방문합니다. 이들을 식별할 수 있다면 웹사이트를 운영하는 데 있어 큰 도움이 될 수 있습니다. 그런데 로그인 정보나 쿠키의 도움 없이 사용자들을 어떻게 식별할 수 있을까요? 이번 시간에는 이를 가능케 하는 브라우저 핑거프린팅(Browser fingerprinting) 기술에 대해 알아보겠습니다. 브라우저 핑거프린팅이란?브라우저 핑거프린팅이란 웹사이트가 브라우저와 기본 운영체제의 구별되는 특징들을 수집하고 결합해 특정 브라우저(더 나아가 특정 사용자)를 식별하는 방식인데요. 간단히 말해 웹 사용자의 디지털 지문을 만들어낸다고 볼 수 있습니다. 브라우저 핑거프린트는 주로 자바스크립트를 통해 수집이 이루어지는데요. 대표적인 브라우저 핑거프린팅 라이브러리인 Finger..

Web 2024.07.26

정렬 알고리즘 알아보기 (2) - 효율적인 정렬 알고리즘

들어가며지난 시간에는 기본적인 정렬 알고리즘에 대해 알아봤는데요. 이번 시간에는 그보다 효율적인 정렬 알고리즘에 대해 알아보겠습니다. 병합 정렬(Merge sort)분할 정복 알고리즘의 대표적인 예로, 리스트를 반으로 나누어 정렬한 뒤 다시 병합하는 방식으로 동작합니다. 병합 정렬의 동작 과정은 다음과 같습니다.원소 개수가 1 또는 0이 될 때까지 리스트를 절반으로 나눕니다.각 부분 리스트를 정렬합니다.정렬된 두 부분 리스트를 병합합니다.      시간복잡도O(n log n) 공간복잡도O(n) 특징분할 정복 알고리즘안정 정렬추가적인 메모리 공간 필요병렬 처리에 적합대규모 데이터 처리에 효과적 힙 정렬(Heapsort)힙 자료구조를 활용하여 정렬을 수행하는 알고리즘입니다. 동작 과정은 다음과 같습니다.주어..

Algorithm/Sort 2024.06.23

정렬 알고리즘 알아보기 (1) - 기본 정렬 알고리즘

들어가며이번 시간에는 기본 정렬 알고리즘에는 어떤 것들이 있는지 알아보겠습니다.버블 정렬(Bubble sort)리스트의 첫 원소부터 시작해 인접한 두 원소를 비교하여 정렬하는 가장 단순한 알고리즘입니다.동작 과정은 다음과 같습니다.리스트의 첫 번째 원소부터 마지막 원소까지 인접한 두 원소를 비교합니다.앞의 원소가 뒤의 원소보다 크다면 두 원소의 위치를 서로 바꿉니다.이 과정을 리스트의 마지막 원소까지 반복합니다.이 과정을 리스트가 정렬될 때까지 반복합니다.  시간 복잡도O(n²)최선의 경우 O(n). 리스트가 이미 정렬되어 있는 경우 정렬을 한 번만 수행하면 됩니다. 공간 복잡도O(1) 특징안정 정렬제자리 정렬리스트가 이미 정렬되어 있는 경우 효율적거의 모든 상황에서 최악의 성능 정렬이 이루어지는 모습이..

Algorithm/Sort 2024.06.21

VSCODE 언어별 설정 바꾸기

들어가며 vscode를 사용하다보면 언어별로 탭 사이즈나 기본 포맷터 등을 다르게 지정하고 싶을 때가 있는데요. 이번 시간에는 그 방법에 대해 알아보겠습니다. 설정 바꾸기 Ctrl + Shift + P를 눌러 Command Pallete를 킵니다. Preferences: Configure Language Specific Settings를 입력합니다. 원하는 언어를 입력합니다. e.g. javascript, python 원하는 옵션을 검색하고 수정합니다. e.g. Tab Size, Default Formatter Editor: Tab Size Editor: Default Formatter 마치며 이번 시간에는 vscode에서 언어별로 설정을 바꾸는 방법에 대해 알아보았는데요. 손쉽게 바꿀 수 있어 좋았습니..

카테고리 없음 2024.04.16

Docker Desktop is unable to detect a Hypervisor 에러 해결하기

들어가며Docker Desktop을 설치하고 실행했더니 다음과 같은 에러를 마주쳤습니다.Docker Desktop is unable to detect a Hypervisor  이번 시간에는 이 에러를 해결하는 방법에 대해 알아보겠습니다. 가상화 설정Docker를 사용하기 위해서는 가상화 설정이 필요합니다.https://docs.docker.com/desktop/troubleshoot/topics/#virtualizationWindows HomeWindows Home의 경우 WSL2가 필요합니다.Windows Features에서 다음 옵션 체크Virtual Machine PlatformWindows Subsystem for Linux이후 재부팅이 필요합니다.바이오스에서 가상화 설정 사용WSL 설치WSL 설..

Troubleshooting 2024.04.10

MySQL에서 Supabase로 마이그레이션하기

들어가며 사이드 프로젝트에서 DB 플랫폼으로 PlanetScale을 사용하고 있었는데요. 이번에 무료 플랜이 사라진다고 하여 대안인 Supabase로 마이그레이션 하게 되었습니다. 왜 Supabase인가 Supabase | The Open Source Firebase Alternative Build production-grade applications with a Postgres database, Authentication, instant APIs, Realtime, Functions, Storage and Vector embeddings. Start for free. supabase.com Supabase is an open source Firebase alternative. Start your pro..

Side Project 2024.03.30

[프로그래머스] 다음 큰 숫자

문제 https://school.programmers.co.kr/learn/courses/30/lessons/12911 예시 코드 def solution(n): x = n # 1. 가장 낮은 '1'비트 찾기 right_one = x & -x # 2. 가장 낮은 '1'비트에 1 더하기 added_one_bit = x + right_one # 3. 변경된 비트 패턴 찾기 modified_pattern = x ^ added_one_bit # 4. 변경된 비트 패턴 조정하기 # 4-1. 오른쪽 끝으로 시프트하기 adjusted_pattern = (modified_pattern) // right_one # 4-2. 오른쪽으로 2비트 시프트하기 adjusted_pattern >>= 2 # 5. 최종 결과 구하기 n..

Code Problems 2024.03.20