-
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 UPDATE "실시간 전체 노선도 조회 1.2v" 오늘은 나름 JICHUL에 아이덴티티인 역 전광판 실시간 지하철 도착정보 조회 외대부분의 지하철 어플들에 있는 기능인 전체 노선도 기능을 추가하였습니다. 하단에 노선도탭을 선택하면 1 ~9 경의중안선, GTX-A 등등의 현재 전체노선도 내 실시간열차 위치 정보를 확인할 수 있습니다. 너무나 많은 지하철 정보 서비스들과의 그나마 차이점이라고 하면 지선정보들을 최대한자연스럽게 표시하여 볼 수 있도록 했습니다. 공공데이터를 분석하는게 쉽지 않았지만 재미있었습니다. 제가 매일 매일 사용하려고 만드는 서비스를만들어가는 것도 나름 보람이 있네요.. 혹시나 이 JICHUL 서비스를 사용해보고자 하신다면아래 링크로 접속하시면 됩니다. 지출(JICHUL) - 나의 출퇴근 파트너매일 반복되는 출퇴근, 실시간 지하..
-
JICHUL "출퇴근 맞춤형 지하철 도착정보" 출근길 거의 대부분 지하철이 정시에 도착하지만 기상이 좋지 않거나 선로 설비 고장으로 이따금씩 지하철이 늦을 때가 있습니다. 그럴 때면 1분 1초가 신경 쓰이는 출근길 어김없이 지하철 앱을 켜고 열차 도착 정보를 확인하고 싶은 역을 검색했었습니다. 그러던중 출퇴근할 때 탑승 또는 환승하는 역정보만 1분 1초가 아쉬울 출퇴근 길에 바로 확인할 수 있는 서비스가 있지 않을까 찾아보았지만 대부분에 서비스는 꼭 검색을 해서 찾아야 하는 과정이 필요했었습니다. 그래서 그냥 내가 필요해서 한번 만들어 보자! 해서 JICHUL (지하철 출근) 서비스를 만들어 보았습니다. 백엔드 개발자에게 제일어려운 부분은 UI / UX죠.. 그래서 가장 직관적이고 익숙한 지하철 전광판을 참고했습니다. JICHUL(지하철 출근) 메..
-
Heic to Jpg 사진 변환 프로그램 V1 with 파이썬 이전에 윈도우에서 아이폰으로 촬영한 사진을 블로그등 업로드할때 heic 이미지 포맷은 제약사항이 많아 jpg로 변경해야하는 불편함 때문에 프로그램을 만들어 공유한적이 있습니다. 이전글 (https://include-hoany.tistory.com/7) 기존에는 정말 간단하게 제가 사용하려고 만든 프로그램이다보니다듬어지지않았는데 조금 더 개선하여 나름 V1이라는 버전명을 달고 업데이트하였습니다!업데이트 내역은 다음과 같습니다. - 2024-04-17: Heic to Jpg파일 변환시 exif정보는 누락되어 저장되던 문제 해소- 2024-04-18: Heic to Jpg파일 변환시 iccProfile이 누락되어 저장되던 문제 해소- 2024-05-21: v1 1. 별도로 저장경로를 선택하는것이 아닌 h..
-
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에서 구글드라이브에 접근하면 차단된 앱이라는 안내만 나오고 인터넷에 나오는 각종 방법으로 시도했음에도 접속이 불가능 하더군요. 구글드라이브 연동은 ..