개발공부

· 개발공부
UUID는 중복을 방지하고 예측할 수 없는 값이기 때문에 Primary Key의 값으로 좋은 선택지입니다.하지만 UUID로 인해 성능 이슈가 발생할 수 있는 여지가 있고 이를 개발자 수준에서 고려하고 적절히 대처해야 합니다.이번 포스팅에서는 PostgreSQL 기준으로 UUID 사용 시 발생할 수 있는 성능 이슈에 대해 정리하려 합니다. UUID 저장 시 UUID 전용 데이터 타입에 저장하기흔히 UUID를 저장하기 위한 데이터 타입으로 Text 타입 혹은 String 타입을 사용합니다.uuid는 128 비트 길이의 값을 생성하기 때문에 메모리 상에서 16바이트의 공간을 차지합니다.( 1byte = 8bit, 128bit / 8bit = 16byte ) 이런 uuid 값의 길이는 항상 고정적이기 때문에 P..
· 개발공부
평소 주변 동료분들 중에 Go 언어를 좋아하시는 Gopher 분들이 계셔서 Go 언어에 대한 장점들을 익히 들어왔는데최근 관심이 생긴 회사에서 Go를 사용하고 있어 이번에 Go 언어는 무엇인지에 대해 알아보고자 합니다.( 온전히 기술적인 측면에서 Go를 탐구하고 배경이나 역사 같은 건 넘어가도록 하겠습니다 ) 1. Go는 무엇이 좋은가?1-1. 단순성(Simple)Go는 문법이 간결하고 명확하여 러닝커브가 낮습니다.Go의 예약어는 25개로 Python이 36개, Java가 53개의 예약어가 있는 것을 고려하면 굉장히 적은 것을 알 수 있습니다.이처럼 Go는 불필요한 복잡성을 최대한 제거하고 코드 가독성을 높이도록 위해 설계되었습니다. 1-2. 병행성(Concurrency)Go는 고루틴(goroutine)..
· 개발공부
PostgreSQL은 동시성 이슈를 해결하고 데이터 무결성을 보장하기 위해 다양한 Lock을 제공합니다.( 동시성 이슈가 무엇인지 모르겠다면 해당 포스팅을 참고해 주세요. )이번 포스팅은 PostgreSQL이 제공하는 강력한 기능 중 하나인 Lock에 대해 기술해보려 합니다. 1. Lock 이란?Lock은 특정 리소스에 대한 접근을 제한하는 메커니즘입니다.PostgreSQL은 트랜잭션의 동시성을 제어하고 데이터 손상을 방지하기 위해 여러 수준의 잠금을 제공합니다. 2. PostgreSQL Lock의 종류2-1. 테이블 수준 Lock테이블 수준 Lock은 테이블 전체에 다른 트랜잭션이 접근하지 못하도록 Lock을 거는 작업입니다.해당 Lock이 걸려있다면 해제되기 전까지 권한이 충돌하는 다른 Lock은 해..
· 개발공부
동시성 이슈는 여러 스레드나 프로세스가 동시에 동일한 데이터에 접근하거나 수정하려고 할 때 발생하는 문제입니다. 이러한 문제는 데이터 일관성을 해치고, 예상치 못한 결과를 초래할 수 있습니다. 동시성 이슈에 대한 이해를 돕기 위해 아래 사진처럼 5명이 버튼을 동시에 누르려하는 예제를 들어보겠습니다.버튼을 누르면 Value 값이 1씩 오른다고 했을 때 Value 값은 무엇이 될까요? 우리는 당연히 5라고 생각합니다.하지만 컴퓨터 세계에서의 답은 알 수 없다 입니다.이유가 무엇일까요?? Value 값이 오르는 과정을 살펴보면 그 이유를 알 수 있습니다.Value 값에 1을 더하기 위해서는 아래 2가지 작업이 필요합니다 1. 현재 Value 값을 가져온다.2. 가져온 Value 값에 1을 더한다. 문제는 여기..
· 개발공부
array와 linked list를 공부하다 보니 내가 자주 사용하는 python의 list는 어떤 방식으로 구현되어 있을까?라는 궁금증이 생겼다. array는 각 요소의 메모리 크기가 고정되어 있어 1개의 타입만 저장이 가능한데 python list는 아래와 같이 서로 다른 타입의 요소가 저장될 수 있다는 특징이 있는 것도 이해가 가지 않았다. sample = [1, "샘플", 1.5] 그래서 나는 python list는 linked list 방식을 사용하나?라고 생각했지만 아무리 생각해도 조회가 빈번하게 일어나는 배열 특성상 조회 성능을 포기하면서 linked list를 사용하진 않았을 거란 생각이 들었다. 그래서 위 궁금증을 해결하기 위해 array와 비교하여 python list의 동작 방식을 살..
· 개발공부
저는 파이썬 기반 프레임워크를 사용해 백엔드 프로그래밍을 해오면서 ORM으로 SQLAlchemy을 애용하고 있습니다. 오늘은 orm을 사용해 본 개발자라면 자주 들어봤을 N + 1 이슈를 해결하기 위해 JPA에서는 Fetch Join을 사용하듯 Python의 SQLAlchemy는 이 이슈를 어떻게 해결하는지 소개해보려 합니다. 아래 예제에서 사용한 코드는 git에 올려두었으니 직접 실습을 원한다면 참고해 주시면 되겠습니다. 예제 코드 : https://github.com/Mactto/SqlAlchemy-join-example/ GitHub - Mactto/SqlAlchemy-join-example: Sqlalchemy에서 N+1 이슈를 해결하는 방법 예제 코드 Sqlalchemy에서 N+1 이슈를 해결하..
· 개발공부
현업에서 개발 경력이 2년이나 되어가는데 지금까지 비밀번호 암호화 기법을 제대로 공부해보지도 않고 사용해 왔다. 지금까지 입사한 회사들에서는 이미 비밀번호 암호화가 잘 구현되어 있어 다른 업무들을 처리하느라 평소 더욱 관심을 가지지 못한 것 같다. 이번에 입사한 회사에서는 외주로 제작된 프로젝트를 다시 내제화하는 작업을 진행 중이라 처음부터 끝까지 개발을 진행하고 있는데 이참에 비밀번호 암호화 방식을 제대로 알아보고 사용하자는 생각이 들어 공부 후 이렇게 기록을 남긴다. 단방향 암호화 방식 비밀번호를 암호화하기에는 어떤 암호화 방식이 적합할까? 학부 때 배운 암호화 방식을 생각해 보면 종류는 크게 아래 2가지가 있다. 양방향 암호화 방식 단방향 암호화 방식 위 2개에 대해 간단히 설명하면 양방향 암호화 ..
· 개발공부
1. What is Debezium? (데비지움이란?) Debezium은 변경 데이터 캡처를 위한 오픈 소스 분산 플랫폼입니다. 간단하게, 데이터베이스에 Insert or Update or Delete가 발생할 경우 이를 감지하고 변경 내용을 캡처해 이벤트로 변환하는 도구입니다. Debezium 공식 문서를 읽어보면 이벤트 스트리밍 플랫폼으로 가장 일반적으로 Kafka를 사용한다고 소개할 정도로 Kafka와 함께 사용한다면 분산 시스템 환경에서 데이터 변경을 쉽게 감지하고 전달할 수 있습니다. 2. How does Debezium detect changes? (데비지움은 어떻게 데이터 변경을 감지할까?) Debezium은 수많은 데이터베이스를 지원하지만 PostgreSQL을 기준으로 설명드리겠습니다. 공..
Mactto
'개발공부' 카테고리의 글 목록