분류 전체보기 295

[싹틔움] 04/07 개발일지 FeignClient 도입으로 분산 서버에서의 인증 문제 해결

💡 개요메인서버와 알림서버가 분리된 현 구조의 알림서버는 누구나 다른 사람의 알림을 확인할 수 있다는 치명적인 오류가 있었다. 이를 해결하기 위한 고민을 담았다. 💡 문제 분석 @GetMapping(value = "/v1/notifications/{userId}/subscribe", produces = MediaType.TEXT_EVENT_STREAM_VALUE) public SseEmitter subscribe(@PathVariable Long userId) { SseEmitter emitter = notificationService.subscribe(userId); 기존 방식에서는 단순히 userId 값을 param 으로 받아서 구독하고 해당 userId 로 들어오는 알림 ..

Project/싹틔움 2025.04.07

Feign Client 를 만든 Netflix

✔️ Feign Client 란?Feign Client 는 HTTP 요청을 인터페이스만으로 처리를 할 수 있게 도와주는 클라이언트이다.Spring Cloud 에서 제공하는 @FeignClient 어노테이션을 이용해서 메서드 호출처럼 외부 API 나 다른 마이크로서비스를 쉽게 호출할 수 있게 한다. ✔️ 넷플릭스는 왜 Feign Client 를 만들었을까?넷플릭스는 전 세계 수억 명에게 서비스를 제공하면서, 초대형 마이크로서비스 아키텍처로 전환했다.서비스 간의 수많은 HTTP 통신을 안정적이고 효율적으로 처리해야 했고, 이 과정에서 문제들을 겪는다.  HTTP 요청 코드가 너무 많고 반복적이다.실패 처리(fallback)나 로드밸런싱을 일일이 다 구현해야 한다.코드가 복잡해서 유지보수가 힘들다.그래서 간결..

[싹틔움] 04/06 개발일지 Kafka 도입

💡 목표싹틔움 서버에 Kafka 를 도입해 메인서버와 알림서버 사이에서 데이터들이 성공적으로 주고 받을 수 있고자 했다.📚 메인서버 Kafka 설정KafkaConfig더보기@Configuration@EnableKafkapublic class KafkaConfig { @Value("${app.kafka-brokers}") private String kafkaBrokers; @Bean public KafkaTemplate kafkaTemplate() { return new KafkaTemplate(producerFactory()); } @Bean public ProducerFactory producerFactory() { Map produce..

Project/싹틔움 2025.04.07

RabbitMQ vs Kafka 과 알림 서버 분리에 따른 메세지 큐 반영 고민

📚 RabbitMQ특징프로토콜: AMQP (표준 메시징 프로토콜 지원)메시지 전달: Push 모델 기반. 브로커가 소비자에게 메시지를 적극적으로 전달.큐 중심 설계: 메시지가 큐에 저장되고, 소비자가 이를 처리하는 전통적인 방식. 메시지 삭제는 소비자가 처리 후 ACK(확인 응답)를 보내면 이루어짐.라우팅: Exchange를 통해 Direct, Topic, Fanout, Headers 방식으로 유연하게 메시지 라우팅 가능.구성: 단일 노드에서 동작 가능하며, 클러스터링 지원은 있지만 Kafka만큼 분산 시스템에 특화되지 않음. 메시지 보장: 메시지 확인 및 재전송 메커니즘으로 높은 신뢰성 제공한다.사용 사례작업 큐 관리: 예를 들어, 사용자 등록 후 환영 이메일 전송, 이미지 변환 작업 등 비동기 작업..

[싹틔움] 04/05 개발일지 알림서버 분리 MSA 방식

🌱 개요싹틔움 메인서버에서 알림 기능을 구현하는 서버를 따로 분리해 MSA 방식으로 구현하고자 했다. 🌱 왜 굳이 서버를 분리할까?1. 독립적인 확장성알림 기능은 사용량이 급격하게 늘어날 수 있는 부분이다. 그렇기 때문에 MSA 로 분리하면 알림 서버만 별도로 스케일 업/아웃할 수 있어 유연성이 증가한다. 2. 장애 격리알림기능에 트래픽이 몰리거나, 카카오 등 외부 API 알림 기능을 구현할 때 이 기능에서 문제가 생겨도 메인 서버에 영향을 주지 않아 안정성이 증가한다. 3. 독립적인 배포 및 개발알림 서버는 다른 주기로 배포하거나, 다른 언어나 프레임 워크로 개발이 가능해진다.  4. 유지보수 용이성관심사가 명확하게 분리되어 집중적으로 관리할 수 있고 다른 팀원들과 협업시에도 수월하다. 코드베이스가..

Project/싹틔움 2025.04.06

[React Native] Todo 어플리케이션

✔️ TouchableOpacity, ...styles Work Travel  header 에서 onPress 를 활용해서 work 와 travel 의 상태를 true 로 저장시켰다.이 상태값을 활용해서 이후에 placeholder, list 들을 상태값에 따라 다르게 보여지게 한다. styles 앞에 ... 을 붙이면 기존 객체를 그대로 가져와서 새로 추가하는 내용만 수정한다는 뜻이다. ✔️ TextInput TextInput 의 다양한 prop 을 이용해서 Customizing 해주었다.완료 버튼을 done 으로 바꿔주었다.onSubmitEditing 에 addTodo 함수를 연결해주었다. ✔️ Todo 저장const onChangeText = (payload) => setText(payl..

[React Native] React Native 공식문서 및 Expo SDK, Layout, Component

✔️ React Native Components and apishttps://reactnative.dev/docs/components-and-apis Core Components and APIs · React NativeReact Native provides a number of built-in Core Components ready for you to use in your app. You can find them all in the left sidebar (or menu above, if you are on a narrow screen). If you're not sure where to get started, take a look at the following catreactnative.dev ✔️ ..

[React Native] 개념 및 작동원리, 환경세팅

✔️ Application Structure 우리가 직접 코드를 짜는 곳은 JavaScript 와 Markup/Styling 이다.하지만 어플리케이션은 그 이외에 구조들이 필요하다.Android 같은 경우에는 나머지 부분이 Java 로 되어있고, IOS 같은 경우는 swift 로 되어있다.그렇기 때문에 우리가 앱을 만들 때에는 Java, X-code 등 환경세팅이 복잡하게 필요한 것이다.✔️ React Native 작동 원리기존에 ReactJS 같은 경우는 코드를 그대로 브라우저에서 실행하는 원리이지만,React Native 는 코드를 그대로 실행하는 브라우저가 있는 것이 아닌, ios 와 android 로 각 각 번역해주는 번역기 라고 생각을 해주면 된다.각 각의 ios 와 android 에 bridg..

[트렌드매거진] 25.03.25 개발일지/ 클러스터링 기반 태그 분류 고민, 태그 임베딩과 FAISS

📚 개요기존에 구현했던 방식인 아티클 생성 후에 태그들이 생성되어도 사용자 관심도를 계산하기 위해서 태그들간의 유사도를 계산하는 로직이 들어가지 않는 한 사용자가 그 전에 게시글과 상호작용을 하여도 관심도를 계산할 수가 없다.그렇다고 유사도를 측정하는 로직을 넣자니, 시간이 오래 걸리기 때문에 한계가 있었다. 📚 고민* 클러스터링 기반 접근 태그를 사전에 클러스터링해서 새 태그를 클러스터에 매핑. 사용자 관심도도 클러스터 단위로 관리 (?)세부 과정:초기 클러스터링:태그를 메인 카테고리(예: "스포츠")별로 나눠 클러스터 생성(예: "축구 클러스터", "농구 클러스터").Tag_Clusters에 저장.새 태그 처리:기존 클러스터와 비교 → 유사하면 배정, 아니면 Temp_Tags에 임시 저장.새벽에 ..