분류 전체보기 (12) 썸네일형 리스트형 CGI, WCGI, ASGI: CGI, WCGI, ASGI는 어플리케이션 게이트웨이, 또는 서버 인터페이스라고 볼 수 있습니다. JAVA 진영의 Tomcat과 비슷한 역할을 하고 있습니다. 위와같이 대부분의 (CGI, WCGI, ASGI)서버는 Nginx와 같이 쓰입니다. 클라이언트가 www.django.com 주소를 입력하면 DNS서버에서 IP를 얻어와 서버로 접속을 합니다. 서버에서 제일 처음 Nginx를 만나고, Nginx는 client가 static(정적)인 자료를 요청한다면 Nginx에서 바로 Client에게 정적인 자료를 Return합니다. 만약 동적인 요청이 들어왔을경우 Gunicorn에게 요청을 보내서 HTTP요청을 Python코드로 변환해 Django서버에게 요청을하고, Django는 이에 맞는 응답을 하게됩니다. .. 데이터베이스 인덱스:정의와 활용 데이터베이스 인덱스란?데이터베이스 인덱스는 책의 색인처럼 데이터를 빠르게 검색할 수 있도록 돕는 구조입니다. 인덱스를 사용하면 WHERE, JOIN, ORDER BY 절에서 데이터를 효율적으로 탐색할 수 있습니다. 하지만 인덱스 자체도 데이터로 저장되기 때문에 용량을 차지하며, 무조건적으로 모든 컬럼에 인덱스를 추가하는 것은 오히려 비효율적일 수 있습니다.인덱스의 주요 특징인덱스는 특정 컬럼을 기반으로 데이터를 정렬하여 검색 속도를 높입니다.인덱스가 적용된 컬럼을 WHERE 절로 검색하지 않으면 인덱스가 사용되지 않습니다.SELECT 성능은 향상되지만, CREATE, UPDATE, DELETE 연산에서는 추가적인 성능 비용이 발생합니다.인덱스의 구조B-Tree:기본적으로 데이터베이스 인덱스는 B-Tree.. 파이썬의 변경 가능한 객체와 변경 불가능한 객체란? 1. 변경 가능한 객체(Mutable Object)정의변경 가능한 객체는 생성된 후에도 객체 내부의 값을 변경할 수 있습니다. 이러한 객체를 수정해도 동일한 메모리 주소를 유지하며, 새로운 객체를 생성하지 않습니다.주요 특징- 동일 객체를 참조하는 모든 변수에 영향을 미침.- 메모리 효율적으로 사용할 수 있지만, 동시성 환경에서는 데이터 불변성을 보장하기 어렵습니다.대표적인 Mutable 객체- list, dict, set예제: 리스트의 변경 가능성# 리스트는 변경 가능한 객체my_list = [1, 2, 3]print(id(my_list)) # 메모리 주소 출력my_list.append(4) # 리스트에 값 추가print(my_list) # [1, 2, 3, 4]print(id(my_list.. 클린 아키텍처: 정의와 이유, 그리고 활용 소프트웨어 개발에 있어 구조화된 아키텍처는 유지보수성과 확장성을 높이는 핵심 요소입니다.그중에서도 클린 아키텍처는 복잡한 시스템을 설계하고 관리하는 데 있어 강력한 가이드를 제공합니다.이번 글에서는 클린 아키텍처의 정의, 사용하는 이유, 그리고 다른 아키텍처들과의 비교를 통해 클린 아키텍처의 장점을 살펴보겠습니다.더불어 클린 아키텍처가 도메인 주도 설계(DDD)와 객체지향 개발(OOP)을 어떻게 지원하는지도 함께 이야기합니다.클린 아키텍처란?클린 아키텍처(Clean Architecture)는 로버트 C. 마틴(“Uncle Bob”)이 제안한 소프트웨어 설계 패턴으로, 비즈니스 로직을 외부 시스템(데이터베이스, 프레임워크 등)의 변화로부터 보호하고, 독립적이고 유연한 소프트웨어를 만드는 것을 목표로 합니다.. golang 오픈소스 컨트리뷰트 하고싶었던 이야기 오픈소스 컨트리뷰트가 하고싶다. 오픈소스 컨트리뷰트를 하게 된다면 그 분야에 대해서 어느정도 알 수준이 될거라 생각하기 때문에 오픈소스 컨트리뷰트로 나를 증명하고 싶었다. 불편한 함수의 발견 go언어를 사용하던중에 os.Getenv()를 발견했는데 python과 다르게 default값을 정할 수 없었다. 함수의 정의는 이러하다. key값을 name으로 갖고있는 환경변수를 갖고있다. name이 비어있으면 empty값을 reuturn한다. name이 비어있는지 확인하고 싶으면 LookupEnv를 사용하면 된다. python은 default값을 정할 수 있는데 go는 안되나? func Getenv(key string) string { testlog.Getenv(key) v, _ := syscall.Getenv.. [Docker] Golang으로 도커 이미지 만들기 기본적으로 golang은 컴파일 언어이기 때문에 go build 명령어를 통해서 하나의 파일을 만들어냅니다. 이 build하는 과정까지 docker image에 포함한다면 이미지의 크기가 커질 수 있기 때문에 멀티 스테이지를 이용한 빌드 방법으로 빌드 된 파일 하나만을 가지고 도커 이미지를 만드는 방법이 있습니다. 빌드 할 예시 파일 gin의 예시코드를 실행시키는 dockerfile을 예시로 build연습을 해보겠습니다! package main import ( "net/http" "github.com/gin-gonic/gin" ) func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H.. [깃랩] gitlab 설치형 오류 모음 gitlab push 401 에러 remote: GitLab: Internal API error (401) To https://gitlab.깃랩주소.git ! [remote rejected] master -> master (pre-receive hook declined) gitlab_rails['internal_api_url'] = 'https://git.깃주소' → 주석 처리 후 해결 Can't verify CSRF token authenticity. 422 에러 Can't verify CSRF token authenticity. Completed 422 Unprocessable Entity in 2ms (ActiveRecord: 0.0ms | Elasticsearch: 0.0ms | Allocatio.. [레디스] key값 갯수 제한 레디스는 키 갯수가 몇개가 제한일까? Redis can handle up to 2^32 or 4,294,967,296 keys per instance. 4,294,967,296개 까지 가능하지만 이론적인 limit이고 컴퓨터의 사양에 따라 달라진다고 생각하면 될거 같다. https://www.quora.com/How-many-keys-can-Redis-handle [레디스] 클러스터링을 구성하면서 생긴 오류 모음 error: got 4 elements in cluster info address, expected 2 or 3 7.0 버전에서 나는 오류. 6.대로 레디스 버전을 변경하면 해결된다. https://github.com/go-redis/redis/issues/2085 Address updated for node Redis 계속해서 로그가 엄청 많이 쌓이는 문제 Address updated for node 34192c4b802580dd7eaf39700d2fa9ec8d3a172b, now 127.0.0.1:5004 위와 같은 로그는 클러스터링이 제대로 안되어 있을때 다시 클러스터링을 해주려고 나오는 로그이다. redis-cli로 접속하여 cluster nodes를 확인해 보면 클러스터링이 제대로 연결이 되어있.. [레디스] 클러스터링 적용하기 - predixy 레디스 클러스터링 적용하기 predixy란 predixy는 haproxy와 같은 프록시 서버로서 클러스터링 되어있는 레디스의 키값을 클라이언트단에서 분산처리 해줄 필요 없이 predixy서버로 요청을 보내면 알아서 분산처리를 해줍니다. predixy에서 알아서 key값에 맞는 레디스에 접근하기 때문에 따로 설정을 해줄 필요가 없습니다. 설치 git clone https://github.com/joyieldInc/predixy.git cd predixy apt-get update apt-get -y install make apt-get -y install g++ make cp src/predixy /usr/local/bin predixy -h predixy를 설치한 후 predixy -h 명령어가 정상 동.. 이전 1 2 다음