전체 글
ReactiveRedis With Redis Cluster
운영 환경에서 redis cluster 를 구성할때, master node 가 중지되는 경우를 대비하기 위해 Master-Slave 구조로 replication cluster 구성하여, Master가 중지되면 Slave가 Master 역할을 대신합니다. spring boot 기본 설정으로는 master가 중지되었을때 정상적으로 연동하지 못하는 문제가 있습니다. spring boot 에서 redis 를 사용하기 위해 Lettuce를 사용하는데, LettuceClientConfiguration 에서 ReadFrom 설정값을 UPSTREAM_PREFERRED 으로 변경해야합니다. (https://lettuce.io/core/release/api/io/lettuce/core/ReadFrom.html) redis..
AI와 채팅
chat-ai 간단하게 AI와 채팅을 구현 하고자 합니다. AI는 https://beta.openai.com/docs/guides/completion/conversation의 내용을 사용합니다. openai.com 에서는 영문만 지원하기 때문에, naver의 papago api를 사용해서 번역합니다. 현재는 한글도 지원합니다. 제약사항 openai.com은 가입하면 베타 버전이라 3달간만 무료로 사용할 수 있습니다. 서비스가 아닌 스터디 목적이니 3달만 사용하려 합니다. (만기: 23년 1월 중순) 만료 되었네요. naver papago api는 하루 10,000 글자만 번역이 무료 입니다. 번역 대상은 내가 입력한 내용 + AI가 대답한 내용 입니다. 10,000글자를 초과하면 translater fa..
Nginx geoip 연동
Lightsail 셋팅을 하고 나니, 해킹 시도로 의심되는 해외에서 접속이 많았습니다. geoip를 사용해서 해외 접속을 막아 보겠습니다. 차단 방법 maxmind 에 가입하고 License key를 발급 https://dev.maxmind.com/geoip/geolite2-free-geolocation-data?lang=en 중간 배너를 클릭해서 계정을 만들고, License key를 발급 받습니다. geoipupdate 설치 geoip 연동을 위해 geoipupdate를 설치합니다. apt-get install build-essential apt-get install libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev add-apt-repository ppa:m..
Nginx SSL 설정
개인 프로젝트 공간을 Lightsail로 옮기면서 Apache에서 Nginx로 변경했습니다. 옮기고 나니 저사양에서는 Nginx가 훨씬 좋았습니다. 설정도 간단하고, 성능도 좋아졌네요. Nginx에서 SSL 설정 방법을 설명합니다. 개인 환경 static html 페이지 몇 개가 노출 되야 합니다. node.js로 8080 포트로 서비스가 올라갑니다. grafana가 3000 포트로 올라갑니다. SSL 기본 설정 server_name에 도메인을 넣고, static html 노출을 위해 web root 경로를 지정합니다. 키 파일을 지정하고, favicon 관련 불필요한 설정 off 했습니다. server { server_name mydomain.com; listen 443 ssl; location / {..
Oracle 에서 MariaDB로 데이터 마이그레이션
Oracle에서 MariaDB로 DB 전환 프로젝트를 진행하면서 데이터를 마이그레이션해야 했습니다. 별도 솔루션을 사용하기 어려웠고 ssh 터미널에서만 작업이 가능했으며, 마이그레이션 해야하는 테이블이 많은 상황이었습니다. 직접 구현하기로 결정했고, 생산성 좋고 동시성 개발이 편한 go 언어를 사용했습니다. DB 설정을 euckr로 해야 했습니다. Oracle은 euckr이 아닌 데이터도 저장되는데 MariaDB는 euckr이 아닌 데이터를 저장하려면 오류가 발생하기 때문에, euckr 캐릭터셋 체크 및 로그 저장 기능이 들어갔습니다. 전체 소스코드는 여기(https://github.com/lmk/migrationOracle2Maria)서 볼수 있습니다. 버그 테이블 하나에 데이터가 많은 경우 처리하지 ..