실전 프로젝트27 실전 프로젝트 17 - 카프카 이벤트 처리 (Product Consumer) 상품 관련 재고 수정 이벤트 처리의 Consumer 부분 처리 @Configuration public class KafkaConsumerConfig { @Value(value = "${kafka.address}") private String bootstrapAddress; @Bean public ConsumerFactory stockConsumerFactory() { HashMap config = new HashMap(); config.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapAddress); config.put(ConsumerConfig.GROUP_ID_CONFIG, "group_3"); config.put(ConsumerConfig.KEY_DES.. 2023. 8. 22. 실전 프로젝트 16 - 카프카 이벤트 처리(Auction Producer) 독립적으로 서비스하는 경매 도메인에서 입찰 이벤트를 회원 도메인으로 보내기 위해서 카프카 관련 설정 및 코드를 작성하는 과제를 하게 되었다. 주키퍼와 카프카 서버를 로컬에서 띄운뒤, 콘솔 컨슈머를 이용해 실제로 발생하는 입찰 이벤트가 콘솔 컨슈머에서 정상적으로 나타나는지 확인하는 게 오늘의 목표. @EnableKafka @Configuration public class KafkaProducerConfig { @Bean public ProducerFactory producerFactory() { Map properties = new HashMap(); properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "127.0.0.1:9092"); properties.p.. 2023. 8. 21. 실전 프로젝트 15 - MVP 중간발표 아무래도 프로젝트를 계획하고 설계하는 데 있어 차지한 지분이 크다보니 중간발표는 내가 맡아서 보다 상세하게 설명하고 피드백을 받는 게 좋을 것 같다는 생각이 들었다. 그래서 각 마이크로서비스마다 도전해야하는 과제들은 해당 도메인을 담당하고 있는 팀원들에게 따로 받고 전체적인 서비스에 대해 설명하는 ppt를 작성하면서 하루를 보냈다. MVP 구현 영상 발표 PPT 다양한 부분에서 피드백들을 받고 질문들을 받을 수 있었는데 질문들을 알음알음 대답은 할 수 있어도 빈약한 것도 많았고, 미처 생각하지 못한 부분이었기에 대답을 하지 못한 질문도 많았다. 특히 구체적인 구현 방법에 대한 질문들은 설계. 프론트엔드 구현에 집중했던 MVP 주간이었기에 답하기 어려웠던 부분들이 있었다. 이번 중간 발표에서 받은 질문들을.. 2023. 8. 19. 실전 프로젝트 14 - 동기, 비동기 동기 동기적 작업은 각 작업이 순차적으로 하나씩 실행되는 것을 말한다. 동기적 작업이 호출되면 프로그램은 해당 작업이 완료될 때까지 기다린 후 다음 작업으로 넘어간다. 이는 작업이 시간이 걸릴 때 해당 작업이 완료될 때까지 전체 프로그램이 일시중지됨을 의미한다. 동기적 작업은 이해하기 쉽고 다루기도 간단하지만, 시간이 오래 걸리는 작업을 기다려야 하는 애플리케이션에서 성능 병목 현상과 반응성 저하를 초래할 수 있다. 비동기 비동기적 작업은 작업을 순차적으로 실행하지 않고 병행적으로 실행할 수 있는 것을 의미한다. 비동기 작업이 시작되면 프로그램은 작업이 완료될 때까지 기다리지 않는다. 대신, 다른 작업을 계속하고 비동기 작업이 완료되면 콜백이나 다른 메커니즘을 사용하여 프로그램에 완료를 알린다. 이 접근.. 2023. 8. 19. 실전 프로젝트 13 - 서비스 아키텍처 서비스 아키텍처 1. API Gateway, Discovery Service 2.MicroService, DB, Kafka 3.Monitoring, CI/CD 경매 도메인 아직도 모르는 게 많지만 대략적인 느낌으로 경매 도메인의 흐름을 구상했다. 고민인 부분은 회원 도메인과 분리가 됨으로써 입찰가에 대한 유효성 검사를 실시하고 만약 입찰에 성공하게 된다면 회원 도메인으로 입찰 이벤트를 보내는 부분이다. 이러한 흐름에서 고민이 되는 부분은 여러가지가 존재하는데, 1. 어떻게 입찰한 회원이 보유하고 있는 포인트 데이터를 회원 도메인으로부터 받을 것인가 2. 정해진 시간 내에 많은 입찰 요청이 오게 된다면 빈번한 트랜잭션으로 인해 성능적인 면에서 하자가 발생하지 않을까 3. 같은 시간에 동일한 입찰 금액의 요.. 2023. 8. 17. 실전 프로젝트 12 - Axios Axios Axios는 웹 브라우저나 Node.js에서 HTTP 요청을 만드는 데 사용되는 JavaScript 라이브러리 요청 및 응답 인터셉터 Axios를 사용하면 요청과 응답을 전역적으로 가로챌 수 있으므로 데이터를 보내거나 받기 전에 데이터를 조작하거나 변환. 편리한 메소드 Axios는 GET, POST, PUT, DELETE와 같은 일반적인 HTTP 메소드에 대해 간단하고 직관적인 메소드를 제공하여 CRUD 작업을 더 쉽게 수행 . 자동 JSON 구문 분석 Axios는 JSON 응답을 자동으로 구문 분석하므로 응답 데이터를 수동으로 구문 분석할 필요가 없다. const div = document.querySelector(".product-detail"); const productId = local.. 2023. 8. 16. 실전 프로젝트 11 - @EnableScheduling, 테스트 코드 @Scheduled @Override @Scheduled(cron = "0 0 17 * * *") @Transactional(readOnly = true) public void checkAndCloseAuctions() { Auction auction = auctionRepository.findByClosingTimeBetween(LocalDateTime.now().withHour(15), LocalDateTime.now().withHour(16).withMinute(59)).orElseThrow(); closeAuction(auction); } public void closeAuction(Auction auction) { Member winningAuctionMember = memberRepositor.. 2023. 8. 15. 실전 프로젝트 10 - 크롤링 많은 데이터를 DB에 저장하기 위해 컴퓨터 관련 제품들을 웹사이트에서 크롤링해야할 필요가 있었다. 해당 데이터드를 '다나와'웹사이트에서 크롤링하기로 결정한 후, 간결하고 가독성이 좋은 Python을 이용해 데이터를 끌어오고자 했다. Python에 익숙하지 않고 크롤링을 시도해본 적이 없어서 생각보다 어려운 과정이 되고 있다. import random import time from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.suppor.. 2023. 8. 12. 실전 프로젝트 9 - 카프카 코어 카프카는 대용량 실시간 데이터 스트림을 처리하고 관리하기 위한 오픈 소스 메시징 시스템. 아파치 소프트웨어 재단에서 개발되었으며, 대량의 데이터를 안정적으로 처리하고 여러 시스템 간에 데이터를 신속하게 전달하는 데 주로 사용된다. Broker 카프카 시스템은 여러 대의 브로커로 구성된다. 브로커는 데이터 메시지를 저장하고 처리하는 서버로, 각 브로커는 독립적으로 동작하며, 여러 개의 브로커가 하나의 클러스터를 형성한다. Topic 토픽은 데이터 스트림의 주제를 나타낸다. 데이터는 토픽으로 분류되어 브로커에 저장되며, 다양한 Consumer가 해당 토픽의 데이터를 구독할 수 있다. Producer 프로듀서는 데이터를 생성하고 토픽에 전송하는 역할을 한다. 예를 들어, 로그 메시지를 생성하거나 이벤트 데이터.. 2023. 8. 11. 실전 프로젝트 8 - 이벤트 스토밍, 클래스 다이어그램 MSA에 가장 효과적인 도메인 주도 설계를 적용해보기 위해 바인딩 컨텍스트들을 나누고 이들을 정립해보는 과정을 가졌다. 다만 클래스 다이어그램의 VO 설정에 있어서는 고민이 좀 더 필요할 것 같다. 정확히 VO가 사용되는 이유랑 어떤 방식으로 Entity의 속성들을 VO로 묶을지에 대해서 개념이 정립되지 않았다는 느낌이 들었다. 그 동안 설계라는 걸 너무 안일하게 생각하고 프로젝트를 진행하지 않았나라는 생각이 들었다. 이번 주 안에 설계에 모든 걸 쏟아붓는다는 느낌으로 진행해야지 싶다. 2023. 8. 9. 이전 1 2 3 다음