묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨카프카 완벽 가이드 - 커넥트(Connect) 편
connector 여러 개 생성 시 지연 현상 문의
안녕하세요 강의를 들으면서 cdc를 익히고 있는 수강생입니다.해당 강의 내용을 바탕으로 oracle --> kafka --> oracle 로 cdc 구성을 하고 있는데요. 구성 중 질문이 있어 남기게 되었습니다.A라는 테이블에 대해 source connector 와 sink connector 를 하나만 생성 했을 때는데이터 변경 시 정상적으로 빠르게 작동을 하는데요.추가적으로 B라는 테이블 source connector 와 sink connector 를 생성하면 A,B 모두 데이터 변경이 엄청 느립니다. 대략 5-10분 정도 뒤에 변경이 되는데요 원인이 무엇일까요? (sink 쪽에서 느립니다.)참고로 debezium 버전은 2.1 입니다.1.9에서는 최초 source connector 생성시 스냅샷 시간이 별로 걸리지 않았는데요, 2.1에서는 스냅샷 시간이 상당히 늘어났습니다. 혹시 다른 옵션이 있을까요? 매뉴얼에서는 찾지 못해 질문 드립니다."auto.evolve": "true" 옵션 사용 시 source 에서 컬럼을 추가하면 sink 에서도 생성이 되는 것은 확인했는데 source 에서 다시 컬럼을 삭제하면 sink 에서는 삭제가 안되는데요. 추가 해야 될 옵션이 있을까요? 아니면 아직 컬럼 삭제에 대한 지원이 되지 않는 것일 까요??참고로 제가 작성한 json 내용은 아래와 같습니다.#########################################################################################A 테이블 sourcecurl -i -X POST -H "Accept:application/json" -H "Content-Type:application/json" localhost:8083/connectors/ -d '{"name": "source_connector_af_claim","config" : {"connector.class" : "io.debezium.connector.oracle.OracleConnector","db_type":"oracle","tasks.max" : "1", "database.server.name" : "source_connector_01_af_claim","database.user" : "xxxxx","database.password" : "xxxxx","database.url": "jdbc:oracle:thin:@10.74.102.218:1521:aaa","database.dbname" : "aaa","database.out.server.name":"ora_source_af_claim_out", "schema.history.internal.kafka.bootstrap.servers" : "10.74.105.61:9092","schema.history.internal.kafka.topic": "ora_source_af_claim_history", "include.schema.changes": "true","database.connection.adapter": "logminer","topic.prefix": "ORA_SOURCE_01", "schema.include.list": "xxxxx","table.include.list":"xxxxx.AF_CLAIM","include.schema.changes": "true", "auto.evolve": "true","time.precision.mode": "connect", "key.converter": "org.apache.kafka.connect.json.JsonConverter","value.converter": "org.apache.kafka.connect.json.JsonConverter", "snapshot.mode" : "initial", "tombstones.on.delete": "true", "transforms": "rename_topic","transforms.rename_topic.type" : "org.apache.kafka.connect.transforms.RegexRouter","transforms.rename_topic.regex" : "ORA_SOURCE_01(.*)","transforms.rename_topic.replacement" : "source_$1", "transforms": "unwrap","transforms.unwrap.type": "io.debezium.transforms.ExtractNewRecordState","transforms.unwrap.drop.tombstones": "false" }}'#########################################################################################A 테이블 sinkcurl -i -X POST -H "Accept:application/json" -H "Content-Type:application/json" localhost:8083/connectors/ -d '{"name": "sink_connector_af-claim","config": {"connector.class": "io.confluent.connect.jdbc.JdbcSinkConnector","tasks.max": "1","table.name.format": "AF_CLAIM_TEST","topics": "ORA_SOURCE_01.xxxxx.AF_CLAIM", "connection.url": "jdbc:oracle:thin:@10.74.102.218:1521:aaa","connection.user": "xxxxx","connection.password": "xxxxx", "auto.evolve": "true","insert.mode": "upsert","delete.enabled": "true", "key.converter": "org.apache.kafka.connect.json.JsonConverter","value.converter": "org.apache.kafka.connect.json.JsonConverter", "table.include.list" : "xxxxx.AF_CLAIM","pk.fields": "AF_CLAIM_GROUP_NO , AF_CLAIM_NO","pk.mode": "record_key" }}'#########################################################################################B 테이블 sourcecurl -i -X POST -H "Accept:application/json" -H "Content-Type:application/json" localhost:8083/connectors/ -d '{"name": "source_connector_af_cs_mgmt","config" : {"connector.class" : "io.debezium.connector.oracle.OracleConnector","db_type":"oracle","tasks.max" : "1", "database.server.name" : "source_connector_02_af_cs_mgmt","database.user" : "xxxxx","database.password" : "xxxxx","database.url": "jdbc:oracle:thin:@10.74.102.218:1521:aaa","database.dbname" : "aaa","database.out.server.name":"ora_source_af_cs_mgmt_out", "schema.history.internal.kafka.bootstrap.servers" : "10.74.105.61:9092","schema.history.internal.kafka.topic": "ora_source_af_cs_mgmt_history", "schema.include.list": "xxxxx","include.schema.changes": "true","database.connection.adapter": "logminer","topic.prefix": "ORA_SOURCE_02","table.include.list":"xxxxx.AF_CS_MGMT","include.schema.changes": "true", "auto.evolve": "true","time.precision.mode": "connect", "key.converter": "org.apache.kafka.connect.json.JsonConverter","value.converter": "org.apache.kafka.connect.json.JsonConverter", "snapshot.mode" : "schema_only", "tombstones.on.delete": "true", "transforms": "rename_topic","transforms.rename_topic.type" : "org.apache.kafka.connect.transforms.RegexRouter","transforms.rename_topic.regex" : "ORA_SOURCE_02(.*)","transforms.rename_topic.replacement" : "source_$1", "transforms": "unwrap","transforms.unwrap.type": "io.debezium.transforms.ExtractNewRecordState","transforms.unwrap.drop.tombstones": "false" }}'#########################################################################################B 테이블 sinkcurl -i -X POST -H "Accept:application/json" -H "Content-Type:application/json" localhost:8083/connectors/ -d '{"name": "sink-connector_af_cs_mgmt","config": {"connector.class": "io.confluent.connect.jdbc.JdbcSinkConnector","tasks.max": "1","table.name.format": "AF_CS_MGMT_TEST","topics": "ORA_SOURCE_02.xxxxx.AF_CS_MGMT", "connection.url": "jdbc:oracle:thin:@10.74.102.218:1521:aaa","connection.user": "xxxxx","connection.password": "xxxxx", "auto.evolve": "true","insert.mode": "upsert","delete.enabled": "true", "key.converter": "org.apache.kafka.connect.json.JsonConverter","value.converter": "org.apache.kafka.connect.json.JsonConverter", "table.include.list" : "xxxxx.AF_CS_MGMT","pk.fields": "AFCR_NO","pk.mode": "record_key" }}'
-
미해결Vue3 완벽 마스터: 기초부터 실전까지 - "실전편"
fetchPosts 함수 동작 순서 관련 질문입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요.딜레이 되는 동안 AppLoading 컴포넌트가 보여지고, Error가 없다면 게시글 목록이 보이는 상태입니다. 에러가 발생하지 않았다면,로딩화면 보임-> 로딩화면 사라짐 -> 게시글 목록 데이터 표출으로 화면이 보여지는데요 제 의문은, 두 번째 이미지에 보이는 코드에서로딩화면 사라짐 -> 게시글 목록 데이터 표출은 정의된 적이 없는 것 같은데 이렇게 작동하는 것에 있습니다. try문에서 loading.value = true가 되어 로딩화면이 보이게 되고,그 상황에서 getPosts로 데이터를 뿌리게 됩니다.그리고나서 정상적으로 가져오고 나면finally문에서 loading.value = false가 되면서 로딩화면이 사라지게 되는거 아닌가요? 즉, fetchPosts 함수는로딩화면 보임 -> 로딩화면과 동시에 게시글 목록 데이터 표출 -> 로딩화면 사라짐을 명령하고 있는 상황 아닌가요?
-
미해결HTML+CSS+JS 포트폴리오 실전 퍼블리싱(시즌1)
vscode 괄호 안에서 엔터 후 줄바꿈
선생님 안녕하세요! 현재 선생님강의와 프론트엔드 개발 공부를 함께하고있는데, 설정을 만지는 와중에 그랬는지 언제부턴가 중괄호 안에서 엔터를 치면 원래 괄호 사이에 빈 공간이 생기고 그 안에서 커서가 생겼는데, 지금은 사진과 같이 괄호 사이에 빈 공간이 없이 되어서 전처럼 하려면 어떻게해야할까요??
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
시즌3 예정에 열렬한 환호를 보냅니다.
시즌3 예정에 열렬한 환호를 보냅니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
h2 회원정보 저장 오류
회원가입과 돌아오는 페이지는 정상으로 작동은 하나 h2에 저장 되지도 않고 강의 내용처럼 insert 문이 나오지 않습니다https://drive.google.com/file/d/1Mnh-hxiK1AQlaSlFOuuQrzRgAT0lEI9t/view?usp=sharing
-
미해결홍정모의 따라하며 배우는 C++
constexpr을 사용했을때의 장점
2.9강 9:10초 정도부터 컴파일 내에서 정해지는 상수를 정의할때 constexpr을 사용할 수 있다고 하셨는데 const말고 constexpr을 사용 했을때 장점이 무엇인가요?제가 생각했을때의 장점은 런타임중에 정해지는 상수에만 const를 쓰니까 컴파일중 정해지는 상수와 좀더 쉽게 구분할수 있다...정도인데 이게 constexpr을 쓰는 이유가 맞나요? - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
해결됨Microservice 설계(with EventStorming,DDD)
애그리거트 추출 질문드립니다.
안녕하세요 선생님,자세한 도메인 기술은 어렵다고 생각해서 간략하게 상황을 가정하겠습니다.기존에 있던 애그리거트는 한 뭉탱이로 돌아다녔는데기획이 변경되어 스토밍으로 추출했던 기존 애그리거트 루트와 VO 객체가 서로 생명주기가 다른 상황이 되었습니다.루트가 VO를 리스트로 가지고 있으며 루트가 생성되고 특정 이벤트 후에 VO가 생성되어 루트에 추가되고 일정시간이 지나면 VO를 업데이트 해야 하는 상황입니다.VO가 불변객체라 리스트에서 새로운 객체로 갈아치우 것도 아닌 거 같아서,, 현재 억지로 갈아치우게끔 만들어 놓긴 했습니다,,또, 아무리봐도 서로 생명주기가 달라 VO를 다른 애그리거트로 전환하려고 하는데제가 애그리거트들을 수정하는데 있어 근거가 부족하거나, 놓치는 부분이 있을까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
findByName() 테스트 시 NoSuchElementException 에러
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]안녕하세요 강의 잘 보고 있습니다 ㅎㅎ다름이 아니라 저는 getter와 setter를 따로 작성하지 않고 Lombok을 이용해서 getter, builder 어노테이션으로 getter와 setter를 생성했는데요save() 테스트는 정상적으로 통과하지만findByNmae() 테스트 시에는 아래와 같은 오류가 발생합니다. 그리고 아래 처럼 get() 메서드에 노란 점선이 표시되며 옆에 이상한 문구가 뜨는데 lombok을 사용해서 발생한 오류일까요 ??스프링 부트 버전은 강의와 똑같이 2.3.1 버전을 사용중이며각 클래스별 코드는 아래와 같습니다.Memberpackage com.example.hellospring.domain; import lombok.Builder; import lombok.Getter; @Getter public class Member { private Long id; private String name; @Builder public Member(Long id, String name) { this.id = id; this.name = name; } } MemberRespositorypackage com.example.hellospring.repository; import com.example.hellospring.domain.Member; import java.util.List; import java.util.Optional; public interface MemberRepository { // 회원 저장 Member save(Member member); // id로 회원 찾기 Optional<Member> findById(Long id); // Optional 타입은 값이 Null일 때 null 반환 // name으로 이름 찾기 Optional<Member> findByName(String name); // 전체 찾기 List<Member> findAll(); } MemoryMemberRepositorypackage com.example.hellospring.repository; import com.example.hellospring.domain.Member; import java.util.*; public class MemoryMemberRepository implements MemberRepository { private static Map<Long, Member> store = new HashMap<>(); private static long sequence = 0L; @Override public Member save(Member member) { Member.builder() .id(++sequence) .build(); store.put(member.getId(), member); return member; } @Override public Optional<Member> findById(Long id) { return Optional.ofNullable(store.get(id)); } @Override public Optional<Member> findByName(String name) { return store.values().stream() .filter(member -> member.getName().equals(name)) .findAny(); } @Override public List<Member> findAll() { return new ArrayList<>(store.values()); } }
-
미해결풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, 배포까지) [풀스택 Part3]
강의자료 문의
안녕하세요. 강의에 첨부된 강의자료 이외에 도커 강의자료 관련 문의 드립니다. 인프런 아이디khd1692@naver.com구글 이메일kkt861104@gmail.com강의명풀스택을 위한 도커와 최신 서버기술 [풀스택 part3]
-
미해결
김영한님의 스프링강의 로드맵을 전체 구매하고싶은데 묶음으로 구매할 수 있나요 ??
로드맵 전체 구매 버튼이 따로 없어서 질문합니다.김영한님의 스프링강의 로드맵을 전체 구매하고싶은데 묶음으로 구매할 수 있나요 ??없다면 강의를 개별적으로 하나씩 구매해야할까요 ??
-
미해결함수형 프로그래밍과 JavaScript ES6+ 응용편
DB Insert관련
강의들으면서 공부할겸 게시판을 만들고 있는데예를 들어 이런 식의 html이 있고<input id='title'/><textarea id='content'/><button onclick="onSave">save</button> 실제 코드는 다른데 대략적으로 이런식의 자바스크립트 코드가 있다고 치면async onSave(event) { const param = { title: document.getelementByID('title').value, content: document.getelementByID('content').value } await _.go( [param], _.each(v => { //validation 함수 if (!v.title) {alert('title을입력하세요'); throw new Error(message);} } ), v=>insertData({data:v}), //db insert method _.tap(v=>{ alert('데이터저장성공'); location.href='list.html'; //게시글 작성후 list페이지로 redirect }) ) }이렇게 go에서 validation이나 redirect함수를 넣는것과아래처럼 따로 빼네는것async onSave(event) { const param = { title: document.getelementByID('title').value, content: document.getelementByID('content').value } if(!param.title) { alert('title을입력하세요'); return ; } await _.go( [param], v=>insertData({data:v}), _.tap(v=>{ alert('데이터저장성공') }) ) location.href='list.html'; }둘중 어떤것을 더 선호하고 효율적인지 알고싶습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
/hello 404에러
경로도 바탕화면에 두었다가 영어로 된 파일로 옮겼다가고 해보고, 이것저것 건드려 봤는데 404에러가 사라지지 않습니다. https://drive.google.com/file/d/1Ll-596n9jFVOQtlAAJpPz4_CsVO-dmuO/view?usp=sharing
-
미해결홍정모의 따라하며 배우는 C++
\a 가 소리가 안날때
지난강의에서도 그렇지만 \a가 비프음을 출력하는 기능..? 단어를 뭐라고 표현해야될지 모르겠지만 어쨌든 \a가 그런 역할을 하는데 제 컴퓨터에서는 소리가 안나서 어떤설정이 문제인지 궁금합니다.- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결Atlassian Jira Cloud 입문자를 위한 필수 강의 구성부터 관리까지
버젼 병합
안녕하세요 Jira에서 하고 있는 Version 3.1을 Version 3.0으로 병합하고 싶은데, 병합할 수 없다고 뜹니다.이럴 경우엔 버전을 새로 만들어야 하나요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
상속관계 데이터처리
13분 8초 질문입니다!데이터를 가져올 때, Album과 Item에 있는 것을 join해서 가져와야 된다고 하셨는데Album 이 Item을 상속 받은건데 Item까지 접촉해서 데이터를 가져와야 하는 이유가 뭘까요??
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
통합테스트로 회원가입 실행 시 에러
16:45분경에 통합테스트로 회원가입을 실행하는데 에러가 발생합니다. 해결방법이 있을까요?
-
미해결[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
myref 초기화가 안됩니다
3분 8초에 있는 변경 하는 것을 했습니다처음에 타이틀 출력하는 건 됩니다근데 이후로 넘어 가지를 않습니다버전은 전기뱀장어입니다오류 내용입니다
-
미해결Windows 소켓 프로그래밍 입문에서 고성능 서버까지!
실습 템플릿 선택
실습 코드를 직접 작성해보면서 연습해보고 싶은데빈 프로젝트로 만들어보면 예제 코드랑 구성이 다른 것 같던데혹시 빈 프로젝트 말고 다른 템플릿을 사용해야 하는건가요? _tmain 이런것도 처음봐서 헷갈리네요..구글링 해 보니까 _tmain을 쓰려면 tchar.h헤더를 불러와야 한다는데 예제 코드에서는 그렇지도 않으니 검색한게 맞는건가 잘 모르겠네요 ㅠㅠ..그냥 main 써도 상관 없는걸까요?==========================내용 추가 =======================말로 설명을 어떻게 해야 할지 몰라서 그림으로 질문드리겠습니다 ㅠㅠ아래 그림 중 왼쪽은 제가 만든 프로젝트 파일에 들어간 모습이고,오른쪽은 선생님 예제 코드 파일 열었을 때 모습입니다. 저는 새 프로젝트 만들기 -> 빈 프로젝트로 시작하였는데, 이렇게 시작하면 안되는 건지에 대한 질문이었습니다.
-
미해결스프링 시큐리티
루트에서 로그인 성공후 에러 메시지가 보입니다.
7) 로그아웃 및 인증에 따른 화면 보안 처리 강의 입니다. http://localhost:8080URL 이 위와 같은 상태에서 로그인 페이지로 이동해서 로그인을 하면 아래와 같은 메시지가 나타납니다.http://localhost:8080/mypage 경로 상태에서 로그인 페이지로 이동해서 로그인하면 정상적으로 오류 메시지 없이 잘 되는데 서브 경로가 없는 상태에서 로그인을 하니까 문제가 있어요세션에는 등록이 되고 로그인처리는 되었는데 마지막화면에서 오류메시지만 떠요.답변 부탁드릴게요 로그인 이후 URL : http://localhost:8080/error{"timestamp":"2023-03-10T01:58:06.693+00:00","status":999,"error":"None","message":"No message available"}
-
해결됨스프링 핵심 원리 - 기본편
외부 라이브러리 표시가 안보입니다..
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]프로젝트 안에서 외부 라이브러리 자체가 안보이는 데 보이게 하는 방법이 있을까요?