본문 바로가기

분류 전체보기

(Front) 유용한 웹디자인 오픈소스 사무실 키오스크 앱을 꾸미면서, 웹디자인 오픈소스에 관심이 생겼다. 마음에 드는 오픈소스들을 정리해보고자 한다. 🎨 CSS / JavaScript 오픈소스 1.Strobe Light Effect for Text Glitch effect strobocops ... codepen.io 2. Confetti Falling Background Using Canvas Confetti ... codepen.io 3. Looking Through Water Blur Animation Effect – 5 Styles https://codemyui.com/looking-water-blur-animation-effect-5-styles/ 4. Microsoft Defrag (MSDOS) - Now on your brows..
(Django) Django와 PostgreSQL 성능 개선을 위한 7가지 패턴 Django와 PostgreSQL으로 구성된 서비스를 6개월간 최적화를 하면서, 패턴화한 것들을 정리해보고자 합니다. 아래의 9가지 원칙을 반복하면, 점진적으로 시스템을 개선할 수 있습니다. 1. 인덱스 추가하기 2. 인덱스를 잘 타도록 쿼리 개선하기 3. N+1 쿼리 줄이기 4. 불필요한 트래픽 줄이기 5. Transaction은 짧게 유지하기 6. 실시간성이 필요하지 않은 기능은 비동기로 처리하기 7. 캐시 적용하기 1. 인덱스 추가하기 a. 빈번하게 사용되는 검색조건에는 인덱스를 추가해줍니다. 디스크 사용량이 우려된다면, 인덱스 파티셔닝을 적절하게 활용하여 인덱스를 추가하는게 좋습니다. b. FK에 BTREE Index 추가하기 Ruby On Rails와 Django의 마이그레이션은 FK 관계로 설..
도커/쿠버네티스를 활용한 컨테이너 개발 실전 입문 03. 컨테이너 실전 구축 및 배포 애플리케이션과 시스템 내 단일 컨테이너의 적정 비중 도커는 애플리케이션과 인프라를 도커 컨테이너라는 단위로 분리한 것이라 볼 수 있다. 이런 관점에서 웹 애플리케이션과 워커형 상주 애플리케이션 프로세스 하나를 하나의 컨테이너로 만드는 방식 (컨테이너 1개 = 프로세스 1개)이 괜찮게 생각될 수 있다. 실제로 도커 초기에는 "컨테이너 1개 = 프로세스 1개"를 반드시 지켜야 한다고 생각하는 사용자가 있어 자주 토론거리가 됐다. 그러나 "컨테이너 1개=프로세스 1개" 원칙을 고수하는 것은 무리이다. 예를 들어, 크론 프로세스에서, 다른 job을 실행하는 경우가 있다. 사실 도커 공식문서에는 "컨테이너는 하나의 관심사에만 집중해야 한다"라고 적혀있다. 즉, 컨테이너 하나가 ..
(Google) 개발자를 위한 구글 스프레드 시트 팁 최근에 구글 스프레드 시트를 활용하면서 배운 팁들을 정리해보고자 합니다. 이 글에서 사용한 샘플 데이터 시트는 다음과 같습니다. 1. 여러개의 시트를 하나로 합치기 ={'제주도-카페'!A2:C2; '서울-카페'!A2:C2} 합칠 시트와 범위를 {} 괄호 안에 입력합니다. 수직으로 합치고 싶은 경우에는 Sheet를 세미콜론(;)으로 구분하고, 수평으로 합치고 싶은 경우에는 콤마(,)으로 구분합니다. 2. 시트 데이터에 쿼리 적용하기 =QUERY('카페 총합'!A2:D, "select A,B,C,D where A is not null AND B = '디저트'") 스프레드 시트에 쿼리를 적용하여 데이터를 가져올 수 있습니다. 3. 여러개의 시트에서 필요한 데이터만 가져와서, 하나의 시트에 합치기 ={FILTE..
(Django) Django에서 비즈니스 로직 관리하기 Django와 Ruby On Rails를 사용하면서, 항상 고민되는 점이 있다. 각 프레임워크에서 비즈니스 로직을 모아두고, 관리하기에 적합한 위치가 어디인가에 대한 점이다. Rails 3/4 버전을 사용하면서, 찾아봤던 글은 레일즈에 Service/Decorator Layer 적용하기에 정리했었다. 이번에는 Django에서 비즈니스 로직을 관리하는 방법에 대해서 정리해보고자 한다. Django에서 비즈니스 로직을 추가할만한 곳은 크게 4가지이다. 그리고 이들 모두 각각 장/단점을 갖고 있다. model view service queryset / manager 1. Model Django에서 제안하는 비즈니스로직 관리 방식은 Model에 기능을 추가하는 것이다. MVC의 기본 설계 패턴은 Fat Mode..
(Django) CacheOps - ORM에 Redis Cache 쉽게 적용하기 django-cacheops는 Django에 Redis Cache를 쉽게 적용하고, 관리할 수 있도록 도와주는 라이브러리이다. Cacheops의 가장 큰 장점은 ORM에 캐시를 간편하게 적용할 수 있단 점이다. 이번 포스팅에서는 Cacheops의 특징과 주의할점에 대해서 정리해보고자 한다. Cacheops의 특징 A. ORM Cache A-1. 사용방법 모델에서 캐시를 바라보도록 변경하고 싶으면, 설정 파일에 아래와 같은 옵션을 추가해주면 된다. CACHEOPS = { 'auth.user': {'ops': 'get', 'timeout': 60}, } 위와 같이 추가하면, User 모델을 get으로 조회하는 경우, DB보다 캐시를 먼저 바라보게 된다. User.objects.get(user_id=1) 특정..
(Cloud) Text To Speech API 비교하기 IT 기술 관련 음성을 텍스트로 변환하는 방법에 대해서 스터디를 하면서, CTTS API들을 비교해봤다. 비교해본 API 서비스는 크게 3가지이다. 1.네이버 클로바 - Clova Speech Recognition(CSR) 2.AWS - Amazon Transcribe 3.구글 클라우드 - Cloud Speech-to-Text 비교 결과는 다음과 같다. 서비스 네이버 Amazon Transcribe Google Cloud 음성 파일 전송 방식 바이너리 데이터를 API으로 전송한다. S3에 저장된 파일을 전송한다. 바이너리 데이터를 API으로 전송하거나, 구글 스토리지에 저장된 경로를 전달한다. 음성 파일 크기 60초 이내 60초 이상 지원 60초 이상 지원 결과 인식 비동기 처리 지원 X ( API으로 ..
티스토리 에디터처럼 코드 하이라이트 변경하기 1. HTML에 아래의 코드를 추가한다. atom css 파일은 hilight.js에서 다운받은 후, 티스토리에 업로드해서 사용하면 된다. 2. 티스토리 CSS 변경하기 /* 문단 간격 */ .entry-content p { margin-bottom:30px; display: block; margin-block-start: 1em; margin-block-end: 1em; margin-inline-start: 0px; margin-inline-end: 0px; } /* code highlight */ .entry-content pre { background-color: #fafafa; padding:20px; font-size: 14px; padding: 15px; border-radius: 3px; f..