-
CI/CD 잦은 배포에 대한 불안감 떨쳐내기 불안감 떨쳐내기 두 번째 이야기입니다. 첫 번째 불안감 떨쳐내기의 방법으로 테스트코드 작성과 Spock 테스트 프레임워크(https://include-hoany.tistory.com/79)에 대해 이야기 했었습니다. 오늘 저의 불안감을 떨쳐내게 해 준 두 번째 방법에 대해 이야기해보려 합니다. 요즘은 워낙 CI/CD 자동화가 잘되어있기에 백엔드 프로젝트도 그렇고 프론트 프로젝트도 그렇고 하루에 여러 번 배포를 하기도 합니다. 다만 한정된 시간 내에 기능을 개발하고 단위테스트, QA 테스트 까지 한다고 해도 우리가 생각지 못한 엣지케이스들이 있을 수 있다는 불안감은 늘 항상 존재했었습니다. 또 알파, 베타 환경과는 다른 운영서버에서 발생할 수 있는 엣지케이스들도 있죠.. 그러면 모든 인스턴스들의 로그를 보..
-
Spring Boot Thread Pool이 부족하게 된다면 어떤일이 일어날까. 요즘 엄무를 진행하며 Chat Gpt에게 자주 물어보는 주제는 기술을 사용하면서 주의해야 할 점에 대한 내용이 대부분인 것 같습니다. 오늘의 주제 또한 이러한 질문으로 시작하게 되었습니다. import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;import java.util.concurrent.Executor;@EnableAsync@Configurationpublic class ThreadPoolConfig { @Bean(name ..
-
Spring Framework에서 복잡한 비즈니스 로직 구조화하기 Filter Chain 오늘은 스프링 프레임워크에서 복잡한 비즈니스 로직을 구조화해 본 경험을 이야기 해보려고 합니다.제가 실제로 해결하고자 했던 비즈니스를 기반으로 설명하면 좋겠지만 아무래도 보안상 문제가 있을 수 있어 배달 어플에서 사용 가능한 쿠폰 목록을 고객에게 안내하는 비즈니스 도메인이 가장 적절하다고 생각하여 해당 도메인으로 설명을 해보도록 하겠습니다. 우리가 해결하고자 하는 비즈니스 도메인은 다음과 같습니다.1. 고객이 보유한 쿠폰 목록 중 주문에 사용 가능한 쿠폰 목록을 보여준다.2. 사용가능한 쿠폰에 대한 정의는 다음과 같습니다.- 고객이 보유한 쿠폰중 사용기한이 만료되지 않은 쿠폰- 고객이 보유한 쿠폰중 전체 브랜드 또는 주문하고자 하는 가게 브랜드에 적용이 가능한 쿠폰- 고객이 보유한 쿠폰중 전체 지역 또는..
-
Jichul "지하철 출근 서비스 회원 500명 돌파!" 출퇴근 시 제가 필요한 지하철 정보를 편하게 보고 싶어서 만든 서비스인데 어쩌다 보니 500명의 회원이 사용하는 서비스가 되었습니다!그렇게 대단한 서비스도 아니고 많은 회원도 아니지만! 그래도 뭔가 알수없는 보람은 있네요. 풀스택으로 개발하고 온프레미스 인프라도 구성해보고 24시간 3개월 동안 한 번에 서버 중단 없이! (가족이 집에 있는 멀티탭 전원을 내려서 중단된 적은... 패스) 잘 돌아갔다는 게 신기합니다. 아주 작디작은 숫자지만 저에게 소중한 회원님들 앞으로도 잘 이용해주시면 감사하겠습니다! 그리고... 기부 버튼을 만들어 두었었는데 직장인에 3대 영양소중 하나인 카페인 메가커피를 구매할 수 있도록기부해 주신 회원분께 다시 한번 감사 인사드립니다. 그리고 정말 마지막으로..업타임이 2000시간..
-
JICHUL "지하철 출근 앱 인프라 구성" 오늘은 제가 사용하려고 서비스 중인 JICHUL (지하철 출근) 인프라 및 CI/CD에 대해 이야기 해보려고 합니다.저는 따로 클라우드 환경에 인프라를 구성하지 않고 집에 있는 데스크탑, 라즈베리파이 5를 활용하여 홈 온프레미스인프라를 구축했습니다. 인프라 구성1. Ubuntu Server (Desktop X86 아키텍처)- Jenkins- Docker Private Registry 2. Raspberry Pi 5 (Arm 아키텍처)- Frontend Container (Nginx + React + SSL)- Backend Container (Spring Boot)- MySql- Redis 3. External Services- Github- Slack- New Relic- Sentry 빠르게 빌드하고 ..
-
JICHUL UPDATE "실시간 전체 노선도 조회 1.2v" 오늘은 나름 JICHUL에 아이덴티티인 역 전광판 실시간 지하철 도착정보 조회 외대부분의 지하철 어플들에 있는 기능인 전체 노선도 기능을 추가하였습니다. 하단에 노선도탭을 선택하면 1 ~9 경의중안선, GTX-A 등등의 현재 전체노선도 내 실시간열차 위치 정보를 확인할 수 있습니다. 너무나 많은 지하철 정보 서비스들과의 그나마 차이점이라고 하면 지선정보들을 최대한자연스럽게 표시하여 볼 수 있도록 했습니다. 공공데이터를 분석하는게 쉽지 않았지만 재미있었습니다. 제가 매일 매일 사용하려고 만드는 서비스를만들어가는 것도 나름 보람이 있네요.. 혹시나 이 JICHUL 서비스를 사용해보고자 하신다면아래 링크로 접속하시면 됩니다. 지출(JICHUL) - 나의 출퇴근 파트너매일 반복되는 출퇴근, 실시간 지하..
-
Mysql Repleication 구현해보기 오늘은 간단하게 Docker, Mysql을 통해 Replication을 구현해보겠습니다. 현업에서는 AWS RDS를 통해서 구현을 해보았는데 온프레미스에 구현한다 생각해보고 진행해 보겠습니다. 먼저 Master DB 1대, Slave DB 2대를 docker-compose를 통해 구현해보도록 하겠습니다.services: master: image: mysql:8.0 container_name: mysql-master restart: always environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: board ports: - "3306:3306" volumes: - /Users/include-h..
-
Private Docker Registre 구축 클라우드 서비스를 사용하지 않고 폐쇄 환경에서 CI/CD를 구축 하고 있습니다. Gitlap, Jenkins 파이프라인을 통해 CI 지속적인 통합 환경을 구축하였고 Docker Registry, Jenkins 파이프라인을 통해 CD환경을 구축하였습니다.그 중 오늘 소개할 방법은 Docker에서 공식적으로 제공하는 registry 이미지를 통해 프라이빗한 Docker image 저장소를 구축하는 방법입니다. 말이 뭔가 도돌이표인것같은 느낌이지만 Docker 환경에 Docker Image를 저장할 수 있는 Docker Registry 컨테이너를 띄워서 폐쇄환경에서 도커 이미지저장소를 구현해보겠습니다. Authentication// 아래 환경은 리눅스 Shell환경에서 진행이 됩니다.// 일단 간단하게 보안설..
-
Ollama 프라이빗 네트워크 환경 에서 LLM 구축 사용해보기 오늘은 간단하게 프라이빗 환경에서 회사문서나 개인적인 문서들을 AI LLM모델에 업로드하고 해당 문서들을 기반으로 질의하면 너무나 좋을것 같다는 궁금증에 로컬 프라이빗 LLM구축을 시도를 해보았습니다! 제가 이번에 사용한 솔루션들은 다음과 같습니다. Ollama, Llama3.1, Open Web Ui Ollama는 다양한 오픈소스 LLM을 간단하게 실행하고 관리할 수 있게 도와줍니다. Llama 3.1은 우리가 너무나 잘 알고있는 Meta 페이스북에서 개발한 언어모델입니다. Llama 3.1은 제가 자주 방문하는 커뮤니티에서 입소문이 자자하기도 하고 혹여나 보안적인 정보들을 학습시켜도 괜찮은 신뢰도가 있는 프로젝트로 시도해 보았습니다. 제가 LLM을 구동하는 하드웨어는 맥북 M2 16gb ram 모델로..
-
PostMan으로 GraphQL요청 하기 오늘은 GraphQL개발을 진행하며 요청과 응답을 클라이언트 관점에서 확인해 볼 수 있도록 PostMan을 활용하여 서버로 요청을 보내는 법을 공유해 보도록 하겠습니다.RestApi를 개발해오며 정말 많이 사용한 PostMan입니다. 예전에 PostMan으로 gRPC요청도 해보았는데 PostMan으로 GraphQL요청 또한 손쉽게 가능합니다.요청할 서버는 localhost:8080 로컬환경입니다. GraphQL은 한개의 엔드포인트만 갖기에 graphql로 요청을 보낼 수 있도록 설정합니다. 또한 GraphQL은 본질적으로 HTTP 프로토콜 이기 때문에 GET, POST를 설정할 수 있습니다. 다만 일반적으로 GET요청에 대한 한계가 있기 때문에 대부분 GraphQL 요청은 POST로 처리합니다. 이 부분..
-
Docker ugeek/webdav를 이용한 간편한 WebDav서버 구축 오늘은 간편하게 Docker ugeek/webdav 이미지를 활용하여 WebDav서버를 구축하는 방법을 알려드리겠습니다. WebDav는 Http프로토콜을 통해 원격 파일 시스템에 대한 액세스와 관리 기능을 제공하는 표준입니다. 말이 어렵지만 그냥 손쉽게 설명하자면 파일 서버라고 생각하시면 편합니다.구글 드라이브를 사용하고 있기에 그닥 필요는 없었지만.. 최근 아이폰, 아이패드에서 사용하고 있는 nPlayer의 구글 드라이브 연동이 막혀버리는 바람에..막혔다기보다 유지보수를 안하고 있어서 구글드라이브 Api연동관련해서 문제가 발생하고 있나봅니다.. nPlayer에서 구글드라이브에 접근하면 차단된 앱이라는 안내만 나오고 인터넷에 나오는 각종 방법으로 시도했음에도 접속이 불가능 하더군요. 구글드라이브 연동은 ..
-
도쿄에서 해피해킹 키보드 구매하기 "빨콩에 해피해킹 배열은 취향저격" 오늘은 정말 살까 말까 백번 고민하다 도쿄 여행간김에 구매한 해피해킹 스튜디오구매기를 올려봅니다. 전 해피해킹 키보드를 대략 9년 전에 Professional 2로 입문한 이후로 쭉 사용해 왔습니다.적응하는데 무려 두 달이나 걸렸지만 지금은 컴퓨터를 사용할 때 손의 이동을 최소화 하면서너무나 잘 사용하고 있습니다. 그런데 전! 또 하나의 긱한 인터페이스를 좋아하는데 바로 씽크패드에 빨콩 트랙포인트입니다. 씽크패드 키보드에 포함된 트랙포인트를 사용하면정말 극단적으로 손의 이동을 최소화할 수 있습니다. 물론 이것도 적응이 필요하긴 합니다.. 그런데!! 극단적으로 손의 이동을 최소화하는 해피해킹 배열에 트랙포인트를 포함하는제품을 해피해킹에서 내놓았습니다. 그런데 해피해킹답게 사악한 가격 44,000엔이라는 ..
-
해피해킹 키보드 황변제거, 윤활 해보기 오늘은 7년넘게 사용한 해피해킹 키보드 윤활에 대한 이야기 입니다.처음 컴퓨터 공학을 입문한 후 해피해킹 키보드를 생일선물로 받은 이후로 주력으로 사용하고 있는 키보드 입니다. 해피해킹 키보드 배열에 적응하기까지 몇달의 시간이 걸렸지만 지금은이 키보드가 아니면 불편해서 사용하기가 불편하더군요. 어느덧 사용하지 7년이 넘어버린 해피해킹 키보드..점점 키가 뻑뻑하기도 하고 소음이 점차 커지다보니 사무실에서 사용하기 눈치가보여서 바로 집으로 데려왔습니다! 처음에는 키보드 윤활 작업을 해주는 업체들에게 연락을 해보았지만 견적이 8만원 가량 나왔습니다.물론 각 업체의 노하우와 인건비를 생각하면 맞는 가격이지만 제가 생각했던 가격보다는 높았기에..직접 할 수 있는지 난이도 파악을 해보니 고맙게도 유튜브와 블로그에 ..
-
아이폰 면세로 구매하기 백수의 시간이 지나가고 10월 이직을 앞둔 9월 마지막주에 붕뜨는 한주 뭐라도 해볼까... 하는 생각이 들어서 SkyScanner 어플을 켜고 가장 저렴한 항공권이 뭐있을가 찾아보니 떡하니 왕복 10만 3천원 히로시마! 출발 8시간전 덜컥 비행기표를 예약했습니다. 출발 8시간 비행기표 예약이라니.. 캐리어도 없이 백팩 하나메고 다녀왔습니다. 이 글에서는 여행기를 적으려는건 아니고.. 여행을 즐기던 와중에 어머니께서 사용하시던 아이폰 X 생각이 나더군요.. 딱 마침 아이폰 16 1차 출시국 판매가 시작되어서 이왕 해외온김에 아이폰 면세로 구매해볼까? 바로 히로시마 역 바로 앞에 있는 빅 카메라를 다녀왔습니다. 위 사진은 인터넷에서 퍼온 사진인데 빅카메라에 가면 아이폰 재고 현황판이 게시되어있습니다. 일본에..