모든 자료가 그런 것은 아니지만 많은 MSA 관련 자료가 EDA (Event-Driven Architecture)를 이야기하고 있고, 카프카를 도입하면서 느슨하게 연결되어있고 원하는 메시지만 수신할 수 있도록 하는 구조로 설명을 하는 것 같습니다. (메시지 큐를 도입했을 때의 문제점에 대한 이야기는 별로 없고, 그 이상의 무언가를 찾거나 노하우를 구하기 쉽지 않은 듯 하네요.) 디커플링 자체는 상당히 좋은 장점 중 하나이지만, 개별 시스템으로 분리되면서 트랜잭션 관련해서도 고민이 많이 필요하고 연결하는 고리가 많아지는 만큼 신경써야 할 부분도 많을 것으로 보입니다. 그래서 들었던 질문이 몇 가지 있는데 마땅히 답을 구할만한 곳이 없었는데 이 쪽에서 관련된 질문에 답을 해주실 것 같아 달아봅니다. 1. 이벤트 소싱에 대해 맞게 이해한 것인지 ? 우선 이벤트 소싱이 CQRS, 비동기 처리와 많이 엮여서 나오는 주제이긴 하지만 이벤트 소싱 자체만을 두고 봤을 때에는 1) 이벤트의 모든 이력을 남기고 2) 핸들러가 이를 처리하는 것이 전부 라고 이해해도 될까요 ? CQRS는 표면적으로는 변경과 질의를 분리하는 개념이지만, 이벤트 기록을 모두 재생해서 조회하는 것이 어려워서 질의와 변경을 분리하는 아이디어 때문에 이벤트 소싱에서 함께 언급되는 패턴으로 이해했고, 비동기 처리는 이벤트 소싱이 비동기 처리를 편하게 할 수 있는 환경 정도로만 이해했습니다. 제가 이해한게 맞는지 모르겠어서 잘 이해했는지 질문을 드리고 싶구요 ㅎㅎ 2. 짧은 시간 안에 처리되어야 하는 API도 MSA에 적합한가 ? 위에 제가 이해한 것이 맞다는 가정하에 말씀드리는 거긴 한데요. 예를 들면 만약에 OTT에서의 유료 영상 결제, 문서 파일 결제, 웹툰 등에서 결제하자마자 결과를 검증하고 사용해야 하는 과업이 있고, 이 과업을 단일 API로 처리하던 것을 MSA로 전환할 경우에 1) API, gRPC 등 네트워크 통신을 사용하는 MSA의 경우 : 코드나 개념적인 분리를 통해 서비스를 작게 쪼갤 수 있는 장점은 있지만 네트워크 이슈, 롤백 등 신경써야 할 문제가 많아진다 2) 카프카 등의 메시지 큐를 통한 MSA일 경우 : 카프카 자체의 문제 혹은 처리하는 개별 마이크로 서비스에 병목이 생기면 처리가 지연되며, 단일 API로 주고받던 경우에는 앱 수정이 불가피하다 (카프카를 사용하면 더더욱 이벤트 소싱을 고려할 수밖에 없고 PENDING 상태가 기존 앱에서 정의되지 않았기 때문에) 는 문제가 있을 것 같습니다. 아무래도 제가 카프카를 넣는 것이 우려가 되는 이유는 1) 각 서비스에서 발행한 카프카 메시지를 어떻게 추적하는지 쉽지 않다고 생각했고, 2) 장애 포인트가 쪼개지는 서비스와 개념적으로 발생하는 연결의 갯수에 비례해서 많아지기 때문이라 생각했고, 3) 또한 카프카를 통해서 처리하는 속도가 API로 처리하는 지금 속도 대비 느리게 세팅된 상태라 과하게 생각하는건가 싶기도 하고, 4) 앱에서 '서버의 아키텍쳐 변경을 위해 생긴 PENDING 상태에 대해 알고 있어야 하는가'에 대해서 고민이 많아서 그런 것 같습니다. 제가 MSA 관련해서는 경험이 없다보니 의견을 좀 들어보고 싶습니다. 3. 보상 트랜잭션과 관련하여 각자의 로컬 트랜잭션만 보장하고 문제가 생기면 그게 반하는 트랜잭션을 새로 발행해서 상태를 상쇄시키는 형식인 것 같습니다. 상태 머신이 명확하게 구분된다면 보상 트랜잭션 구현이 용이하겠지만, 그렇지 않을 경우나 모호한 경우가 있을 것이라 생각됩니다. 또한 보상 트랜잭션이 실패하는 경우 더더욱 현상 파악이 쉽지 않을 것 같기도 하고, 구현하는 서비스마다 제각각이라 노하우를 구하기 쉽지 않을 것으로 보여서 구현 난이도가 꽤 올라갈 것으로 보이는데, 이런 부분을 보완할 수 있는 방법이 있을지 궁금합니다.
안녕하세요! 궁금한게 있습니다. 저희회사에서는 프로젝트가 멀티모듈로 되어있습니다. 그리고 CMS(운영관리 모듈), API, COMMENT 모듈 이렇게 3개의 애플리케이션 모듈을 사내 도커레지스트리에 도커 이미지로 올리고 AWS에 각각 3개의 모듈을 띄우는데요! 이게 음.. 데이터베이스는 한개로 씁니다. 그러니까 각 3개의 데이터베이스가 따로 한개씩 있는 것이아닌 마스터 하나에 슬래이브 1개의 레플리카로 구성되어있습니다. 이것또한 MSA라고 할수있을까요? 신입이라 아직 정확하게는 모르겠지만 저는 DB도 각 애플리케이션 마다있어야한다고 보고 그게 MSA라고 생각하고 있거든요.! 선생님의 의견이 궁금합니다! 감사합니다.
안녕하세요 저도 import 파일을 발견하지 못한다는 ModuleNotFound 에러에 직면했었습니다. 그래서 test_module 파일 내에서 sys.path.append('경로') -> 이 명령어를 넣어줬더니 import가 문제없이 잘 되네요. 이렇게 해결해도 되는 건가 싶어 글 적었습니다ㅎㅎ
에러 내용을 자세하게 이해하진 못했지만 사용중인 임베디드 톰캣 버전에서 `hasIpAddress` 를 찾지 못하는 것 같습니다. 스프링 버전은 2.6.2 사용중이고, starter-security 그대로 사용하고 있습니다. `hasIpAddress` 대신 다른 메서드를 사용하면 가능은 한데 의도한 것과 다른 것 같아서 남깁니다. java.lang.UnsupportedOperationException: public abstract java.lang.String javax.servlet.ServletRequest.getRemoteAddr() is not supported at org.springframework.security.web.FilterInvocation$UnsupportedOperationExceptionInvocationHandler.invoke(FilterInvocation.java:326) ~[spring-security-web-5.6.1.jar:5.6.1] at com.sun.proxy.$Proxy150.getRemoteAddr(Unknown Source) ~[na:na] at javax.servlet.ServletRequestWrapper.getRemoteAddr(ServletRequestWrapper.java:241) ~[tomcat-embed-core-9.0.56.jar:4.0.FR] at org.springframework.security.web.util.matcher.IpAddressMatcher.matches(IpAddressMatcher.java:65) ~[spring-security-web-5.6.1.jar:5.6.1]
안녕하세요. 강의 4분 40초경부터 설명이 시작되는, Ground Truth로만 학습한다는 것이 잘 이해가 되지 않아 질문 올립니다. IOU를 구하기 위해서는 G.T값 이외의 비교 대상이 필요하다 생각하는데, class를 G.T로만 정한다는 것이 이해가 잘 안되네요.. 답변해주신다면 정말 감사하겠습니다!
안녕하세요. 수업 잘 듣고있습니다. 서비스 디스커버리 관련 질문인데요, 스프링 유레카를 클라우드에 올릴때, 1개의 서버(팟)에만 올려야 하는지요? 여러개의 팟에 올려서 등록된 인스턴스가 공유가 가능한건가요? 서버1개에서만 유레카가 돌면 서비스디스커버리 자체의 트래픽이 높아져, 혹은 커넥션이 꽉차 장애가 나는경우가 있지 않을까 해서요. 감사합니다.
안녕하세요. 강의 잘 듣고 있습니다. 예제에서 Resilience4jConfig를 통해 CircuitBreaker에 대한 설정을 하여 사용하는 것으로 확인을 했습니다. MSA를 연동하는 서비스에 따라 CircuitBreaker에 대한 설정 값을 다르게하여 복수개를 사용하는 경우도 있을 것 같은데, 이럴 경우 Resilience4JConfig에 대한 Bean 등록과 Config 를 어떻게 잡으면 될까요? 감사합니다.
안녕하세요 수업을 듣고 있는 수강생입니다. 다름이 아니라, 피보나치 수열에서 해당 코드는 입력받은 수까지 계속 연산을 하고 있으며, 단순히 프린트 하는 명령이 없기 때문에 프린트를 하지 않는것으로 보이는데, 해당 입력 값이 13일 때, for문 자체를 빠져나가게 하는 방법이 있을까요? else : final_fibo = n1 + n2 n1 = n2 n2 = final_fibo if final_fibo < insertNumber: print (final_fibo , " " )
어느 사이트에서든 어떤 태그 내의 id 속성값은 유일무이하게 해당 태그에서만 사용된다고 봐도 정말로 문제없나요? 이전에 html 실습하면서 공부했을 때 id속성이나 class속성이나 두개 사용하면서 크게 다른게 없다고 느꼈는데 이 영상을 보면서 id가 실무에서는 해당 태그에만 적용되도록 사용하는건지 정확히 알고싶습니다.
안녕하세요 강사님 퀄리티 높은 강의와 디테일좋은 강의 감사드립니다. 머신러닝에도 관심이 있어 공부를 하던와중에 내가직접 서비스를 하려면 백엔드의 지식도 필요할듯하여 감사하게 강의를 듣고있습니다. 머신러닝/딥러닝 서비스를 사용하기위한 백엔드 서비스가 Django 가 좋은것같은데 현업에서도 많은 사용을 하고있나요? (아마 강사님께서도 많은 컨설팅을 해주셔서 아실거라 생각이 들어 질문을 드립니다.) 딥러닝 모델을 웹에서 돌리기위해서는 병렬처리?가 필요할듯한데 Django 에서는 이러한 부분에대한 솔루션이 있는지 또한 궁금합니다. 감사합니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의 하시다가 ' 함수형 프로그래밍' 에 대해서 말씀하셨는데, 이 키워드로 검색하니 많은 강좌가 나와서 올바른 결과인지 무엇보다 잘 모르겠습니다. 하나 추천해주시면 감사하겠습니다. 현 상황은 취업준비생으로, Inflearn Original 로 파이썬 초급부터 시작하여 마지막 단계까지 공부할 계획이라 초급부터 듣고 있습니다. 또한 기계공학 전공자라 CS 지식이 부족하여 정보처리기사 필기 준비와 병행하고 있습니다. (앞으로 python backend를 준비하면서 MLOps 쪽으로 커리어를 진행할까 생각 중입니다.)
which python을 입력하면 which : 'which' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지 검증한 다음 다시 시도하십시오. 위치 줄:1 문자:1 + which python + ~~~~~ + CategoryInfo : ObjectNotFound: (which:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException 라는 오류가 발생합니다. 어떻게 해야되나요
from selenium import webdriver driver = webdriver.Chrome('C:/Users/estee/Desktop/파이썬 작업물/chromedriver.exe') import time # 주소모음 naver_GIBH = "https://map.naver.com/v5/search/%EA%B5%AC%EC%8A%A4%EC%95%84%EC%9D%BC%EB%9E%9C%EB%93%9C%20%EB%B8%8C%EB%A3%A8%ED%95%98%EC%9A%B0%EC%8A%A4/place/505375149?c=14140682.3022615,4508106.9534795,15,0,0,0,dh" naver_GBK = "https://map.naver.com/v5/entry/place/996095686?c=14133872.9335375,4519631.0127127,15,0,0,0,dh" naver_YONGSAN = "https://map.naver.com/v5/entry/place/1905880476?c=14133837.3558283,4513226.0701902,15,0,0,0,dh" naver_adresses = [naver_GIBH, naver_GBK, naver_YONGSAN] # 평점과 리뷰 크롤링 for adress in naver_adresses : driver.get(adress) driver.implicitly_wait(10) driver.switch_to.frame('entryIframe') rating = driver.find_element_by_xpath('//*[@id="app-root"]/div/div/div[2]/div[1]/div/div/div[1]/div/span[1]').text submenu_name = driver.find_element_by_xpath('//*[@id="app-root"]/div/div/div[2]/div[3]/div/div/div/div/a[3]/span').text # 메뉴가 5개 나올 때는, 4번째 탭을 이용하고, 메뉴가 4개 나올 때는 3번째 탭을 이용 if submenu_name != "리뷰" : driver.find_element_by_xpath('//*[@id="app-root"]/div/div/div[2]/div[3]/div/div/div/div/a[4]/span').click() else : driver.find_element_by_xpath('//*[@id="app-root"]/div/div/div[2]/div[3]/div/div/div/div/a[3]/span').click() # 리뷰개수 print( driver.find_element_by_xpath('//*[@id="app-root"]/div/div/div[2]/div[5]/div[4]/div[3]/h2/span').text ) driver.close() 해당 코드는 네이버 지도의 각 매장 별 리뷰 개수를 가지고 오는 코드에요. naver_GIBH , naver_GBK 링크는 리뷰 개수를 불러오는데, 마지막 naver_YONGSAN 링크의 리뷰 개수는 들고오지 못하더라구요. 혹시 이 코드에 관해 봐주실 수 있을까요 ? + 추가 질문인데, 제가 Selenium을 통해서 리뷰개수를 찾아오는 방식은 selenium으로 리뷰 탭을 선택하고 나서, 들고 오는 거에요. 근데 네이버 지도가 인스타그램처럼 스크롤을 내리면 정보를 불러오는 방식으로 설계되어 있더라구요. 혹시 이와 관련해서 Selenium으로 클릭하지 않고, crawling 하는 방법이 따로 있을지도 질문드려요 .