@Jiy0ung_e
- [OSSCA] 오픈소스컨트리뷰션 아카데미 참여형 회고록 7월부터 진행했던 오픈소스컨트리뷰션 아카데미 참여형이 끝이 났다!중간중간 블로그에 기록을 남기려고 했으나.. 이직까지 성공해버려서 아주 바쁜 하루하루를 보내느라 이제 기록을 남긴다!!! 아주 열심히 참여를 했었는데 우리 Githru팀이 무려 우수상 까지 받았다ㅎㅎ 우선 나는 vibe팀 리드멘티를 맡아서 멘토님과 멘티간의 소통이나 멘티들간 소통이나 정리에 열심히 노력을했다 ㅎㅎ보고서나 자료들 만드는것도 그 과정과 결과를 담으려고 아주 퇴근하고 밤늦게까지 리드멘티들과 열심히 달렸었다.... 나는 오픈 소스 기여에 대한 관심은 있었지만 막상 어떻게 해야할지, 내가 할 수 있을지 용기가 안나서 계속 미뤄왔었는데 이 프로그램을 하면서 누구나 오픈소스에 기여할 수 있고, 어떤 흐름으로 기여를 할 수 있는지에 대한.. 2025.12.07
- [MCP] LLM이 외부 도구를 사용할 수 있게 해주는 MCP 서버란? ✅ MCP란 무엇인가요?MCP (Model Context Protocol)는 2024년 Anthropic이 제안한 표준화된 LLM 에이전트 프로토콜입니다.✨ 주요 목적LLM이 외부 시스템과 안전하고 구조화된 방식으로 상호작용할 수 있도록 지원도구 호출(Function Calling), 외부 데이터 조회(RAG 보완), 시스템 연동 등을 모듈화된 구조로 쉽게 구현✅ MCP 서버란?MCP 서버는 LLM이 사용할 수 있는 외부 도구(tool)를 연결해주는 허브입니다.쉽게 말해, AI가 세상과 연결될 수 있도록 “손과 발”을 달아주는 역할을 하죠.🔧 어떤 도구들이 연결될 수 있나요?파일 시스템데이터베이스 조회외부 API 호출Notion, Google Calendar, GitHub 등 다양한 SaaS 연동✅ 동.. 2025.08.19
- [OSSCA] 2025 오픈소스 컨트리뷰션 아카데미 발대식 후기 이번에 Playhive에서 만난 팀원분의 추천으로 오픈소스 컨트리뷰션 아카데미에 지원하게 되었다!사실 이런 컨트리뷰션 관심 있었는데 혼자 하기에는 너무 어려울 것 같다는 생각에 나도 모르게 뒤로 미루고 있었다...정말 좋은 기회가 될 것 같아서 아주 그냥 바로 지원했다! 참여 프로젝트가 15개나 있어서 고르는데 너무 많고 어려운것도 많았다.....나는 개발할때 git을 활용 하는데, git의 복잡한 구조를 시각화해서 개발 history를 잘 이해할 수 있게 해주는 프로젝트인 [Githru-VScode-Extension] 프로젝트 팀에 지원했다 ㅎㅎ 사실 나는 스프링 프레임워크를 사용하면서 VSCode보다 Intellij를 많이 사용하지만, 예전부터 관심있던 Extension을 경험해볼 기회라고 생각해서.. 2025.07.17
- [PlayHive] Redisson을 제거했더니, 성능이 2.5배 빨라졌다 - 추천 기능 리팩토링의 두번째 진화 "락은 정말 필요했던 걸까?" 코드 리뷰 도중 백엔드 팀원은 한 마디가 시작이었다."이거... Redisson 분산락 쓰셨던데, 추천 수가 자주 바뀌고 조회도 많은 API잖아요? 락 계속 쓰면 오히려 병목 되지 않을까요?" 🔍 질문에서 시작된 새로운 고민기존에 Redisson을 도입해 추천 기능에 분산락을 적용한 이유는 명확했다:"추천은 사용자별 중복을 막아야 하고, 멀티 인스턴스에서도 정합성이 보장되어야 하니까." 그러나 새로 합류한 팀원의 질문은 단순히 도구 사용 여부가 아니라, 설계 자체의 적합성을 다시 돌아보게 만들었다.“추천이면, 락보다 Redis에서만 처리하고 나중에 DB로 밀어넣는 방식이 더 좋지 않을까요?” 🧠 생각의 전환 – 도구보다 데이터 흐름이 먼저다사실 처음엔 멀티 인스턴스 환경.. 2025.06.26
- [PlayHive] Headless Chrome 크롤링 시 좀비 프로세스 정리 및 메모리 문제 해결 방법 기존에 batch 서버를 구축하여 크롤링을 진행하시던 백엔드 개발자 분이 팀을 나가시면서 작업하셨던 부분을 넘겨받아 운영중에 일어나는 에러나 크롤링 코드를 유지보수하게 되었다.배치 인스턴스가 갑자기 중단되거나 크롤링이 메모리문제로 Fail뜨는 경우가 종종 있었는데 내가 넘겨받게되면서 문제를 해결하고 싶어서 이것저것 살펴보게되었다. 그래서 이 포스팅은 Playhive 서비스 뉴스 크롤링 배치 서버에서 발생한 문제 해결 사례를 공유하려고 한다. 우선 작업을 넘겨받게 되고나서, 뉴스 크롤링이 while문을 사용하여 새로운 뉴스를 모두 가져오는 것이 좋지만 현재는 끊기지 않고 운영이 잘되는것이 목표이며, 모든 뉴스를 가져오지는 않는 전제로 스크롤 max 수치를 정하여 크롤링하도록 코드 수정하였다.또한, WebD.. 2025.06.18
- [PlayHive] S3 PresignedUrl 기반 파일 업로드/삭제 API 구현기 (with AWS & MinIO) 게시판이나 댓글과 같은 커뮤니티 기능에서 이미지/동영상 업로드가 필요해져서 S3를 이용해서 파일 업로드를 구현하게 되었다.서버에서 파일을 직접 받아 S3에 업로드하는 구조도 고려했지만, 다음과 같은 이유로 Presigned URL 방식을 선택했다.🔒 보안 강화서버를 거치지 않고 클라이언트가 직접 S3에 업로드함으로써, 서버에 파일이 직접 노출되지 않음Presigned URL에 유효시간 제한을 둠으로써, 만료된 URL로는 접근이 불가능업로드 가능한 경로와 권한을 세밀하게 제어 가능 (ex. 특정 경로에만 PUT 허용)🚀 성능 향상파일이 서버를 거치지 않고 바로 S3로 전송되기 때문에 서버 부하 감소서버의 네트워크 I/O와 메모리 사용량 절감🧱 시스템 아키텍처 분리업로드/다운로드 로직이 스토리지와 클라.. 2025.06.18
- [PlayHive] Redis, Redisson 으로 조회수·댓글수·추천수 처리 성능 44% 향상시키기 📌 이글 이후, Redisson 분산락 구조 역시 다시 점검하게 되면서 성능을 더 끌어올리기 위한 리팩토링을 진행했습니다.👉 2025.06.26 - [# Study/프로젝트] - [PlayHive] Redisson을 제거했더니, 성능이 2.5배 빨라졌다 - 추천 기능 리팩토링의 두번째 진화 [PlayHive] Redisson을 제거했더니, 성능이 2.5배 빨라졌다 - 추천 기능 리팩토링의 두번째 진화"락은 정말 필요했던 걸까?"코드 리뷰 도중 백엔드 팀원의 한 마디가 시작이었다."이거... Redisson 분산락 쓰셨던데, 추천 수가 자주 바뀌고 조회도 많은 API잖아요? 락 계속 쓰면 오히려 병목 되지jiy0ung.tistory.com🎯 프로젝트 배경과 기능의 목적이 글은 스포츠 커뮤니티 서비스 .. 2025.06.17
- [PlayHive] 댓글/대댓글 구조 리팩토링하기 🎯 프로젝트 배경과 기능의 목적본 리팩토링은 스포츠 커뮤니티 서비스 Playhive의 댓글/대댓글 기능 개선을 위한 작업입니다.Playhive는 게시판, 뉴스, 경기 예측 등 다양한 콘텐츠를 중심으로 팬들이 소통하는 플랫폼으로, 사용자 간 활발한 상호작용을 위해 댓글 기능이 핵심적으로 사용됩니다.특히 “내가 쓴 댓글 보기” 기능 추가 요청이 들어오면서, 기존 구조에서 성능 문제와 유지보수 이슈가 불거졌고, 이에 따라 전체 댓글 시스템의 구조를 재설계하게 되었습니다.이 글에서는 기존 설계의 한계를 짚고, 이를 어떻게 단일 테이블 구조로 리팩토링하여 성능과 확장성을 개선했는지를 써본 정리글입니다.❗️기존 설계의 한계점을 만나다...처음 DB를 설계 할 당시 게시판/뉴스/경기 예측 등 카테고리 마다 별도의 .. 2025.06.11
- [Spring] @Controller, @RestController 차이 보통 웹에서 화면 전환 없이 이루어지는 동작들은 대부분 비동기 통신이다. 비동기 통신을 하기 위해서는 클라이언트가 서버로 요청 메시지의 body에 데이터를 담아서 보내야 하고, 서버도 클라이언트에 응답하기 위해서 body에 데이터를 담아 보내야한다.이 때의 body를 각각 Request Body와 Response Body라고 부르는데, 이러한 body에 담기는 데이터 형식은 JSON이다. @RequestBody 어노테이션은 이러한 비동기 통신에서 쓰이는 body안의 데이터(JSON)를 자바 객체(VO)로 변환해주는 어노테이션이고, @ResponseBody 어노테이션은 보내려는 자바 객체(VO)를 데이터객체(JSON)로 바꿔 body안에 넣어주는 어노테이션이다. @Controller 와 @RestContr.. 2025.01.21