묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
MSA와 사가 패턴을 찾아보면서 궁금했던 부분이 있어서 질문 남겨봅니다.
모든 자료가 그런 것은 아니지만 많은 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. 보상 트랜잭션과 관련하여각자의 로컬 트랜잭션만 보장하고 문제가 생기면 그게 반하는 트랜잭션을 새로 발행해서 상태를 상쇄시키는 형식인 것 같습니다. 상태 머신이 명확하게 구분된다면 보상 트랜잭션 구현이 용이하겠지만, 그렇지 않을 경우나 모호한 경우가 있을 것이라 생각됩니다. 또한 보상 트랜잭션이 실패하는 경우 더더욱 현상 파악이 쉽지 않을 것 같기도 하고, 구현하는 서비스마다 제각각이라 노하우를 구하기 쉽지 않을 것으로 보여서 구현 난이도가 꽤 올라갈 것으로 보이는데, 이런 부분을 보완할 수 있는 방법이 있을지 궁금합니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
안녕하세요! MSA에 대해서
안녕하세요! 궁금한게 있습니다. 저희회사에서는 프로젝트가 멀티모듈로 되어있습니다. 그리고 CMS(운영관리 모듈), API, COMMENT 모듈 이렇게 3개의 애플리케이션 모듈을 사내 도커레지스트리에 도커 이미지로 올리고 AWS에 각각 3개의 모듈을 띄우는데요! 이게 음.. 데이터베이스는 한개로 씁니다. 그러니까 각 3개의 데이터베이스가 따로 한개씩 있는 것이아닌 마스터 하나에 슬래이브 1개의 레플리카로 구성되어있습니다. 이것또한 MSA라고 할수있을까요? 신입이라 아직 정확하게는 모르겠지만 저는 DB도 각 애플리케이션 마다있어야한다고 보고 그게 MSA라고 생각하고 있거든요.! 선생님의 의견이 궁금합니다! 감사합니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
비교적 최신 버전에서 에러가 발생합니다.
에러 내용을 자세하게 이해하진 못했지만 사용중인 임베디드 톰캣 버전에서 `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]
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
서비스 디스커버리 관련 질문입니다.
안녕하세요. 수업 잘 듣고있습니다. 서비스 디스커버리 관련 질문인데요, 스프링 유레카를 클라우드에 올릴때, 1개의 서버(팟)에만 올려야 하는지요? 여러개의 팟에 올려서 등록된 인스턴스가 공유가 가능한건가요? 서버1개에서만 유레카가 돌면 서비스디스커버리 자체의 트래픽이 높아져, 혹은 커넥션이 꽉차 장애가 나는경우가 있지 않을까 해서요. 감사합니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
java.lang.NoClassDefFoundError: Could not initialize class javax.xml.bind.DatatypeConverterImpl 에러 대처법
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. private boolean isJwtValid(String jwt) { boolean returnValue = true; String subject = null; try { subject = Jwts.parser().setSigningKey(env.getProperty("token.secret")) .parseClaimsJws(jwt).getBody() .getSubject(); }catch (Exception ex){ returnValue = false; } if(subject==null || subject.isEmpty()){ returnValue = false; } return returnValue;} 이부분에서 디버깅을 따라가던중 getBody() 메서드에서 오류가 발생하는것을 발견 하였습니다. java.lang.NoClassDefFoundError: Could not initialize class javax.xml.bind.DatatypeConverterImpl 이러한 오류가 발생하였을때 pom.xml에 <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.1</version> </dependency> 해당 종속성을 추가해주게 되면 해결됩니다. 혹시 저같은 오류가 발생하신 분들에게 도움이 되었으면 좋겠습니다~! 음 뒷강의에서.... 바로 추가해주시는군요 ...ㅎㄷㄷ....
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
설정 정보가 다른 CircuitBreaker 사용하는 방법
안녕하세요. 강의 잘 듣고 있습니다. 예제에서 Resilience4jConfig를 통해 CircuitBreaker에 대한 설정을 하여 사용하는 것으로 확인을 했습니다. MSA를 연동하는 서비스에 따라 CircuitBreaker에 대한 설정 값을 다르게하여 복수개를 사용하는 경우도 있을 것 같은데, 이럴 경우 Resilience4JConfig에 대한 Bean 등록과 Config 를 어떻게 잡으면 될까요? 감사합니다.
-
미해결15일간의 빅데이터 파일럿 프로젝트
mac으로 진행해도 큰 문제 없을까요?
Mac으로 환경 구성 하려고 하는데 앞으로 수업 내용들이 전부 Window 기준으로 되어있다고 하셔서, mac 사용시 혹시 크게 불편한 부분이 있나요?
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Api Gateway와 Service Discovery의 차이가 무엇인가요?
ServiceDiscovery layer 없이 Api gateway가 Instance A, B, C로 직접 호출할 수도 있을 것 같은 생각이 드는데요, Api gateway와 각 인스턴스들 사이에 ServiceDiscovery가 있어야하는 이유가 무엇인가요?
-
해결됨15일간의 빅데이터 파일럿 프로젝트
카프카 아키텍처 (3/3) 질문
멀티 브로커(Broker1, Broker2)와 Multi Node를 가지는 아키텍처에 대해서 설명해주셨는데요. 중간에 각 Broker에 있는 Topic들을 하나도 묶을 수 있다는 내용이 있는데 정확히 어떤 의미인가요? Broker들끼리 서로 데이터를 공유한다는 말인가요? Consumer 1과 Consumer2가 같은 저장소를 바라본다는 말씀이 Node 1에 접근하더라도 Node 2에 있는 데이터에 접근 할 수 있다는 의미인가요?
-
해결됨15일간의 빅데이터 파일럿 프로젝트
virtualbox error
vitualbox 최신 버전으로 설치하고 강의에 나와있는 부분을 따라서 실행하다가 클러스터 설치 중 다음과 같은 에러가 발생합니다. vitualbox 다른 버전으로 설치하면 아예 실행도 안됩니다. (강의자료 19페이지 수행 중 에러 발생)
-
해결됨15일간의 빅데이터 파일럿 프로젝트
java 버전 선택 관련 질문
1. java 버전으로 1.8을 설치한다고 하셨는데 1.8로 설치하는 이유를 알고 싶습니다. 2. 환경 변수에 이미 JAVA_HOME이 있으면 어떻게 해야하나요? 3. 이클립스 installer를 다운받고 실행했더니 다음과 같이 뜨는데 어떤 것을 설치해야하나요 4. vitualbox download 하는 부분에서 no longer supported라고 명시되어있음에도 다운받아서 사용하는 이유를 알고 싶습니다. 5. 파일질라를 사용하는 대신에 scp 나 rsync 명령어를 사용하여 진행할 수 있을까요
-
해결됨15일간의 빅데이터 파일럿 프로젝트
접근제어 보안 구조관련 질문
아파치센트리의 경우 중앙에 서버를 두고 주변 노드들에게 접근 권한을 주는 것으로 이해를 했는데 커베로스는 클라이언트마다 서버를 따로따로 두는 것인가요? 커베로스도 KDC를 하나 두고 각 클라이언트들이 인증을 요청해서 티켓을 받는 방식인가요? 아, 아파치 센트리에서는 노드들에게 센트리 에이전트를 설치하는 대신 커베로스에서는 인증 요청하는 방식으로 진행되는 것인가요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
kafka sink connector 관련 질문드립니다
안녕하세요, 도원님. 좋은 강의 덕분에 MSA 관련 지식이 많이 느는 것 같아 감사합니다. 다름이 아니라, kafka sink connector 쪽 관련해서 문의드리고 싶은 내용이 있어 질문을 올리게 되었습니다. confluent 의 kafka sink connector 공식 문서를 봤을 때, sink connector 는 at least once delivery 를 보장한다고 하는데, 만약 그런 경우가 발생하면 실제로 같은 데이터가 2번 적재되는 현상이 생길 거 같습니다. 이런 경우를 위해 따로 처리를 하는 로직을 넣어야하는지, 아니면 그냥 sink connector 내부에서 밀어넣었는데 에러가 나고 이를 넘기는 방향으로 처리를 하는지 여쭤보고 싶습니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
강의자료
안녕하세요~ 강의자료 올려주시면 안될까요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
무한 대기 설정 질문드립니다.
안녕하세요. 강의를 보고 따로 책으로 학습중인데 책 내용에 서비스에서 서비스 끼리 호출할때 timeout 설정을 하지 않으면 무한정 대기가 걸릴 수 있다고 하더라고요.그런데 강의 실습하면서 따로 timeout 설정한 부분이 없었던 거 같았는데, 혹시 제가 놓쳤던 것인지 아니면 의도적으로 설정하지 않으신건지 궁금해서 여쭤봅니다!감사합니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
강사님 안녕하세요. 강의 항상 잘 듣고 있습니다.
질문은.. 강의랑 똑같이 했는데 이상하게 whitelabel error page만 보이네요.. 혹시 datasource 설정해줘야하나 해서 추가해봤는데도 안 되고.. 1편 강의처럼 Spring Security 때문도 아니고.. 원인을 못 찾겠어서 문의드립니다..
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
카프카 에러메시지 삭제에 관해 질문이 있습니다.
안녕하세요, 처음 질문을 남겨보는것 같은데, 우선 강사님 강의에서 정말 많이 배우고 있습니다. 제가 강의를 듣고 따라하던중 Schema의 Field datatype을 string으로 적어야 하는데 String으로 잘못 적은 문제가 있었습니다. 이때 발생한 에러 메시지들이 topic에 쌓여서 지속적으로 문제가 발생했어서 topic의 메시지는 kafka-topic.sh에 retention.ms를 짧게 바꿨다가 늘리는 방법으로 해결을 했습니다. 질문드리는 내용은 1. 혹시 이와같이 kafka 작업중 에러로인해 잘못된 메시지가 쌓일경우, 이것을 처리하는 방법이 위의 방법이 가장 나은지(해결하지 않으니 잘못된 메시지들을 불러오면서 계속 에러를 발생시키더라구요) 2. 두번째로는 이러한 에러메시지들이 kafka connect에도 쌓여서 서버 기동시마다 에러메시지를 쭈욱 불러옵니다. 가동에는 문제가 없으나, 혹시 깔끔하게 정리할 수 있는 방법이 있으면 알려주시면 감사하겠습니다. 좋은 강의 해주셔서 감사드립니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
선생님. Postman에서 Socket hang up 에러가 납니다.
안녕하세요. 선생님! 회원가입, 로그인은 잘 되는데, AuthenticationHeaderFilter를 적용하고 127.0.0.1:8000/user-service/welcome 으로 get 호출하면 NoClassDefFoundError가 발생합니다. filter 코드도 github에 있는 거 그대로이고, application.yml에도 filter로 등록했는데 postman에서 응답을 받을 수 없다면서 Socket hang up 에러가 납니다. 그런데 get으로 저의ip:port/welcome 으로는 조회가 잘 되요..! 제가 h2를 선생님이 설정한 방식이 아닌 tcp 통신으로 진행하고 있었습니다. 이게 문제인 걸까요..? h2를 tcp로 연결 : (jdbc:h2:tcp://localhost/~/user-service)
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
로그인을 다시 하지 않고 이전에 사용했던 JWT 토큰 사용
안녕하세요 ~ 26분에 user-service를 재실행하고 회원가입을 새로 한 다음에, 로그인을해서 JWT를 새로 발급받지 않고 기존 JWT를 사용하셨는데, JWT토큰은 만료기간만 지나지 않으면 계속 사용할 수 있는건가요??!
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
h2 데이터베이스
안녕하세요 강사님! h2 console에서 test connection을 했는데 whitelabel error page가 뜹니다.. datasource를 추가해서 시도해보고 여러 가지를 시도해봤는 데도 해결이 안 되네요ㅜ