테스트 끝나고나서 데이터를 클리어해주는 방법을 설명하시기 전에 findAll()함수에서 오류가 나타나야 하는데 전 왜.. 다 초록불이 뜰까요 package com.example.hello_spring.repository; import com.example.hello_spring.domain.Member; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import java.util.List; import java.util.Optional; import static org.assertj.core.api.Assertions.*; public class MemoryMemberRepositoryTest { MemberRepository repository = new MemoryMemberRepository(); @Test //실행할 수 있게함 public void save() { Member member = new Member(); member.setName("spring"); repository.save(member); Member result = repository.findById(member.getId()).get(); //Assertions.assertEquals(result, member); // result와 member가 같은지 확인 assertThat(member).isEqualTo(result); } @Test public void findByName(){ Member member1 = new Member(); member1.setName("spring1"); repository.save(member1); Member member2 = new Member(); member2.setName("spring2"); repository.save(member2); Member result = repository.findByName("spring1").get(); assertThat(result).isEqualTo(member1); } @Test public void findAll(){ Member member1 = new Member(); member1.setName("spring"); repository.save(member1); Member member2 = new Member(); member2.setName("spring2"); repository.save(member2); List<Member> result = repository.findAll(); assertThat(result.size()).isEqualTo(2); } }
User Service - 프로젝트 생성 강의 듣고 있는데요. 저는 yml에서 아래처럼 주었는데요. server: prot: 8761 http://localhost:8761/eureka/ 뜨다가 포트는 8080으로 시작한다는 메세지가 조회되는데요. 컴퓨터 내부에서 포트를 8761쓰다가 자동으로 8080으로 바꿨다는 얘기인가요? 2024-07-17T18:27:14.441+09:00 INFO 11100 --- [discover] [ main] c.n.eureka.cluster.PeerEurekaNodes : Adding new peer nodes [http://localhost:8761/eureka/] 2024-07-17T18:27:06.225+09:00 INFO 11100 --- [discover] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '' 2024-07-17T18:52:42.764+09:00 INFO 10484 --- [discover] [ main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 8080 2024-07-17T18:52:43.848+09:00 INFO 10484 --- [discover] [ main] c.e.d.DiscoveryApplication : Started DiscoveryApplication in 13.147 seconds (process running for 16.512)
// a. public void update( String password, String nickname) { this.password = password; this.nickname = nickname; } // b. public void update(UpdateContent content) { this.password = content.getPassword; this.nickname = content.getNickname; } 안녕하세요 update 방식에 대해 궁금한점이 생겼는데, Member 엔터티 클래스 내부에 위와 같이 update 메서드를 둔다고 했을 때, 매개변수의 개수가 많다고 가정하면, 별도의 클래스를 만들어서 b.처럼 전송해주는 방식을 사용해도 괜찮을까요? 엔터티 클래스와 별도의 클래스가 결합?되는 느낌이라 찝찝한데, a.와 b.중 좀 더 정석적인 방식이 있는지 궁금합니다!
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] MemberService.jav a 내에서 join() 함수입니다. @Transactional public Long join(Member member) { validateDuplicateMember(member); //중복회원 검증 memberRepository.save(member); return member.getId(); } 이때 member를 저장하면 persist하게 되고, commit까지는 일어나지 않는다고 이해하고 있습니다. db에 저장이 되어 있지 않은 상태라면 이중화 시 각 was에 jpa persist된 값이 있을 것 같은데, validateDuplicateMember을 호출할 때 name 컬럼에 unique 제약조건을 줘서 저장이 안되게 한다고 하더라도. validateDuplicateMember는 통과가 되고, 아래 save에서 오류가 나게될 것 같은데요. 제가 생각하는 로직이 맞는지 궁금합니다. 맞다면 여기에 대한 코드 보완이 따로 필요할 것으로 보여서요. (강의 보완이 아니라, 제가 나중에 코딩할 때 보완을 하려고 합니다:) )
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 1. 멀티스레드에 안전하게 처리하기 위해 Atomic.. 을 사용하셨는데, 실무에서는 데이터베이스같은곳에서 정보를 받아와야 하는데, 프로메테우스에서 데이터베이스의 테이블을 접근중일때 READ가 발생할텐데, 현재 유저한테 서비스되는 클라이언트단에서 READ, WRITE가 발생할때 lock이 발생하는 경우는 없나요? 2. 1번 질문과 이어서.. 아래와 같은 곳에서 정보를 수집하는데 동시성/데드락/경합 문제가 발생하지는 않나요? 아래에서 정보를 가져올때는 어떻게 하는게 best practice인지 궁금합니다 - State DB(Mysql, postgresql, mongodb) - InMemory DB(Redis) - Kafka Topics 3. 현재는 설치형으로 강의를 진행해주셨는데, docker나 k8s 환경에서 수집을 한다면 같은 네트워크에도 묶여야되는 등 신경써야 할 부분이 많은 것 같은데요.. 베어메탈에서 wget 등으로 받아서 띄우는거 말고 컨테이너 환경에서는 어떻게 하는지 또 궁금합니다!
Server = 하드웨어 = OS가 없는 PC 서버의 역할은 하드웨어 재원을 제공한다로 이해하고 있습니다. 웹서버는 80포트를 열어줌,도메인설정, 정적 컨텐츠 서빙, 로드밸런싱, SSL인증서 설치... 등등의 역할 WAS는 동적 콘텐츠 생성, HTTP 메서드 ,비지니스 로직 , 세션처리...등등의 역할 웹서버 , WAS 둘 다 Server 위에서 동작하는 소프트웨어로 서버는 하드웨어 재원을 제공하며 서버 위에서 돌아가는 소프트웨어인 웹서버,WAS는 위에 명시된 역할을 수행. 예를들어 Nginx , Tomcat 사용하고 있으면 실제로 서버가 2개 띄워져있어야 함 SpringBoot는 WAS로 톰켓을 내장 그럼 우리가 배포를 한다고 했을때 서버에 SpringBoot Application을 올리고 boot가 Tomcat을 내장하여 WAS로 사용하는 구조 간략히 말하면 "xx서버에는 SpringBoot 올라가있어" 라고 말할 수 있음 이렇게 정리를 하였는데 혹시 잘못 이해한 부분이 있을까요?
강의자료를 기반으로 코드를 작성하여 왔는데, 실행하는 것에는 문제는 없으나, 회원 목록 조회 기능에서 whitelabel error page가 발생하였습니다. 어떻게 해야하나요? github 저장소: https://github.com/devcjw/Spring-Boot-Study
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. Order status 는 enum으로 만들었는데 이게 왜 그런건지 까먹었어요 스프링 기본에서 썼었던거 같은데…
MemberServiceTest하는데 오류가 납니다.. 어떻게 해야할지 계속 찾아보는데 못하겠네요 다음은 오류 내용입니다. java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null) at org.mockito.internal.configuration.plugins.PluginLoader$1.invoke(PluginLoader.java:84) at jdk.proxy3/jdk.proxy3.$Proxy135.getHandler(Unknown Source) at org.mockito.internal.util.MockUtil.getMockHandlerOrNull(MockUtil.java:158) at org.mockito.internal.util.MockUtil.isMock(MockUtil.java:147) at org.mockito.internal.util.DefaultMockingDetails.isMock(DefaultMockingDetails.java:32) at org.springframework.boot.test.mock.mockito.MockReset.get(MockReset.java:106) at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.resetMocks(ResetMocksTestExecutionListener.java:85) at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.resetMocks(ResetMocksTestExecutionListener.java:73) at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.beforeTestMethod(ResetMocksTestExecutionListener.java:60) at org.springframework.test.context.TestContextManager.beforeTestMethod(TestContextManager.java:320) at org.springframework.test.context.junit.jupiter.SpringExtension.beforeEach(SpringExtension.java:240) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) Suppressed: java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null) at org.mockito.internal.configuration.plugins.PluginLoader$1.invoke(PluginLoader.java:84) at jdk.proxy3/jdk.proxy3.$Proxy135.getHandler(Unknown Source) at org.mockito.internal.util.MockUtil.getMockHandlerOrNull(MockUtil.java:158) at org.mockito.internal.util.MockUtil.isMock(MockUtil.java:147) at org.mockito.internal.util.DefaultMockingDetails.isMock(DefaultMockingDetails.java:32) at org.springframework.boot.test.mock.mockito.MockReset.get(MockReset.java:106) at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.resetMocks(ResetMocksTestExecutionListener.java:85) at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.resetMocks(ResetMocksTestExecutionListener.java:73) at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.afterTestMethod(ResetMocksTestExecutionListener.java:67) at org.springframework.test.context.TestContextManager.afterTestMethod(TestContextManager.java:487) at org.springframework.test.context.junit.jupiter.SpringExtension.afterEach(SpringExtension.java:278) ... 2 more Caused by: java.lang.IllegalStateException: Internal problem occurred, please report it. Mockito is unable to load the default implementation of class that is a part of Mockito distribution. Failed to load interface org.mockito.plugins.MockMaker at org.mockito.internal.configuration.plugins.DefaultMockitoPlugins.create(DefaultMockitoPlugins.java:105) at org.mockito.internal.configuration.plugins.DefaultMockitoPlugins.getDefaultPlugin(DefaultMockitoPlugins.java:79) at org.mockito.internal.configuration.plugins.PluginLoader.loadPlugin(PluginLoader.java:75) at org.mockito.internal.configuration.plugins.PluginLoader.loadPlugin(PluginLoader.java:50) at org.mockito.internal.configuration.plugins.PluginRegistry.<init>(PluginRegistry.java:27) at org.mockito.internal.configuration.plugins.Plugins.<clinit>(Plugins.java:22) at org.mockito.internal.MockitoCore.<clinit>(MockitoCore.java:73) at org.mockito.Mockito.<clinit>(Mockito.java:1683) at org.springframework.boot.test.mock.mockito.MockReset.get(MockReset.java:105) at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.resetMocks(ResetMocksTestExecutionListener.java:85) at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.resetMocks(ResetMocksTestExecutionListener.java:73) at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.beforeTestMethod(ResetMocksTestExecutionListener.java:60) at org.springframework.test.context.TestContextManager.beforeTestMethod(TestContextManager.java:320) at org.springframework.test.context.junit.jupiter.SpringExtension.beforeEach(SpringExtension.java:240) ... 2 more Caused by: java.lang.reflect.InvocationTargetException at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486) at org.mockito.internal.configuration.plugins.DefaultMockitoPlugins.create(DefaultMockitoPlugins.java:103) ... 15 more Caused by: org.mockito.exceptions.base.MockitoInitializationException: Could not initialize inline Byte Buddy mock maker. It appears as if your JDK does not supply a working agent attachment mechanism. Java : 21 JVM vendor name : Oracle Corporation JVM vendor version : 21.0.2+13-58 JVM name : OpenJDK 64-Bit Server VM JVM version : 21.0.2+13-58 JVM info : mixed mode, sharing OS name : Windows 10 OS version : 10.0 at org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker.<init>(InlineDelegateByteBuddyMockMaker.java:260) at org.mockito.internal.creation.bytebuddy.InlineByteBuddyMockMaker.<init>(InlineByteBuddyMockMaker.java:23) ... 18 more Caused by: java.lang.IllegalArgumentException at java.instrument/sun.instrument.InstrumentationImpl.appendToClassLoaderSearch0(Native Method) at java.instrument/sun.instrument.InstrumentationImpl.appendToBootstrapClassLoaderSearch(InstrumentationImpl.java:280) at org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker.<clinit>(InlineDelegateByteBuddyMockMaker.java:177) ... 19 more Caused by: [CIRCULAR REFERENCE: java.lang.IllegalStateException: Internal problem occurred, please report it. Mockito is unable to load the default implementation of class that is a part of Mockito distribution. Failed to load interface org.mockito.plugins.MockMaker] Internal problem occurred, please report it. Mockito is unable to load the default implementation of class that is a part of Mockito distribution. Failed to load interface org.mockito.plugins.MockMaker java.lang.IllegalStateException: Internal problem occurred, please report it. Mockito is unable to load the default implementation of class that is a part of Mockito distribution. Failed to load interface org.mockito.plugins.MockMaker at org.mockito.internal.configuration.plugins.DefaultMockitoPlugins.create(DefaultMockitoPlugins.java:105) at org.mockito.internal.configuration.plugins.DefaultMockitoPlugins.getDefaultPlugin(DefaultMockitoPlugins.java:79) at org.mockito.internal.configuration.plugins.PluginLoader.loadPlugin(PluginLoader.java:75) at org.mockito.internal.configuration.plugins.PluginLoader.loadPlugin(PluginLoader.java:50) at org.mockito.internal.configuration.plugins.PluginRegistry.<init>(PluginRegistry.java:27) at org.mockito.internal.configuration.plugins.Plugins.<clinit>(Plugins.java:22) at org.mockito.internal.MockitoCore.<clinit>(MockitoCore.java:73) at org.mockito.Mockito.<clinit>(Mockito.java:1683) at org.springframework.boot.test.mock.mockito.MockReset.get(MockReset.java:105) at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.resetMocks(ResetMocksTestExecutionListener.java:85) at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.resetMocks(ResetMocksTestExecutionListener.java:73) at org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener.beforeTestMethod(ResetMocksTestExecutionListener.java:60) at org.springframework.test.context.TestContextManager.beforeTestMethod(TestContextManager.java:320) at org.springframework.test.context.junit.jupiter.SpringExtension.beforeEach(SpringExtension.java:240) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) Caused by: java.lang.reflect.InvocationTargetException at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486) at org.mockito.internal.configuration.plugins.DefaultMockitoPlugins.create(DefaultMockitoPlugins.java:103) ... 15 more Caused by: org.mockito.exceptions.base.MockitoInitializationException: Could not initialize inline Byte Buddy mock maker. It appears as if your JDK does not supply a working agent attachment mechanism. Java : 21 JVM vendor name : Oracle Corporation JVM vendor version : 21.0.2+13-58 JVM name : OpenJDK 64-Bit Server VM JVM version : 21.0.2+13-58 JVM info : mixed mode, sharing OS name : Windows 10 OS version : 10.0 at app//org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker.<init>(InlineDelegateByteBuddyMockMaker.java:260) at app//org.mockito.internal.creation.bytebuddy.InlineByteBuddyMockMaker.<init>(InlineByteBuddyMockMaker.java:23) ... 18 more Caused by: java.lang.IllegalArgumentException at java.instrument/sun.instrument.InstrumentationImpl.appendToClassLoaderSearch0(Native Method) at java.instrument/sun.instrument.InstrumentationImpl.appendToBootstrapClassLoaderSearch(InstrumentationImpl.java:280) at org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker.<clinit>(InlineDelegateByteBuddyMockMaker.java:177) ... 19 more
안녕하세요. 다시 스프링부트의 자동 구성으로 전환하는 강의에서 application.properties 에 server.~ 과 data.~ 로 정의했던 것들을 아래 코드와 같이 스프링의 자동구성에서 사용하는 프로터피 이름으로 변경하라고 하셨습니다. spring.servlet.context-path=/app spring.servlet.port=9090 spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:mem: spring.datasource.username=sa spring.datasource.password= 근데 위와같이 변경하지 않아도 아래 자동주입 및 @PostConstruct가 문제없이 동작되듯 실행이 잘 됩니다.. @SpringBootApplication public class HellobootApplication { JdbcTemplate jdbcTemplate; public HellobootApplication(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } @PostConstruct void init() { jdbcTemplate.execute("create table if not exists hello(name varchar(50) primary key, count int)"); } public static void main(String[] args) { SpringApplication.run(HellobootApplication.class, args); } 직접만든 자동구성클래스를 삭제했으니 datasource나 JdbcTemplate또한 spring의 자동구성이 필요할텐데, 실행로그를 보면 기존 datasource정보를 읽어서 동작하더라구요. 왜 그런걸까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에서 답변을 보면, @PostMapping("/members/new") public String create(MemberForm form){ Member member = new Member(); member.setName(form.getName()); memberService.join(member); return "redirect:/"; } 위와 같이 코드를 작성하면, "members/new"로 POST 메소드가 호출되었을 때, 스프링이 create() 메서드를 실행하기 위해 MemberForm 객체를 만들어야 하고, setter를 불러와서 멤버변수에 파라미터를 주입한다고 이해했습니다. 그런데, 한가지 의문이 들었습니다. MemberForm에 name을 저장하고, 그 값을 다시 Member 객체에 저장할거면, 한번에 Member에 저장하면 안되나? Member에도 멤버변수로 name이 있고, setter도 있으니, 안될 건 없다고 생각했습니다. 그래서 아래와같이 코드를 작성했습니다. @PostMapping("/members/new") public String create(Member member){ memberService.join(member); return "redirect:/"; } 이렇게 작성하고 회원가입, 회원목록 기능을 모두 수행해본 결과, 똑같이 잘 작동했습니다. 혹시 강사님께서 굳이굳이 MemberForm을 거쳐서 Member 객체를 만드신 이유가 있나요? 어떤 성능상의 이점이 있는 건가요? 아님 두번째 방법이 위험한 방법이라서 그런건가요? 왜 그런건가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] MemberServiceIntegration 클래스서 회원가입 test를 실행시켰을 때, '이미 존재하는 회원입니다.'라는 에러가 뜨지 않고 "A Java agent has been loaded dynamically" 이런 경고만 뜨면서 test가 실행됩니다. 버전 업그레이드 문제일까요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요 좋은 강의 잘 듣고 있습니다!! 이번 강의를 들으면서 @EnableConfigurationProperties(MyDataSourcePropertiesV1.class)를 통해 MyDataSourcePropertiesV1.class 클래스를 스프링 빈으로 등록해야지 외부 설정을 읽어서 해당 클래스에 바인딩하고 Config에서는 그걸 주입 받아 DataSource에 주입하는 걸로 이해를 했습니다. 여기서 저는 단순히 스프링 빈으로 등록하는 거라면 @Import를 사용하거나 MyDataSourcePropertiesV1.class에 @Component를 붙여서 컴포넌트 스캔 대상이 되도록 하는 등의 방법으로 해도 잘 동작하는게 아닐까? 라는 생각에 2가지 다 사용해서 테스트를 진행했는데 별문제가 없었습니다. 분명히 @EnableConfigurationProperties을 만든 이유가 있을듯한데 저의 짧은 지식으로는 잘 모르겠습니다. @ConfigurationPropertiesScan은 @ConfigurationProperties가 붙은 클래스를 마치 컴포넌트 스캔과 같이 간편하게 스프링 빈으로 등록할 수 있다는 장점이 보이지만 @EnableConfigurationProperties 이 친구는 정말 모르겠습니다
안녕하세요. 현재 강의 너무 재밌게 듣고있습니다. 아무래도 제가 카프카에 대해 잘 모르다보니 감이 없어 이해도가 낮습니다. 조금 부족한 질문이라도 이해 부탁드립니다. ㅠㅠ 현재 강의에서 프로젝트에서 생성한 구조는 kafka source connector가 없이 kafka sink connector만 만들고 직접 kafka topic에 저장하고 이를 동기화시키는 방식이라고 이해했습니다. 혹시 제가 이해한 구조가 맞을까요? 혹시 현업에서도 source connector가 굳이 필요 없다면 위와 같은 구조로 사용해도 상관 없을까요? 현재 MSA 관련 프로젝트를 준비하고있으며. DB를 서비스별로 어떻게 분리해야할지 굉장히 고민하고 있습니다. 만약 배포되는 모든 서비스가 각자 다른 db를 가지고 있는 방식으로 구성해야한다면, 동일한 도메인 내에 있는 서비스는 db를 동기화를 시켜주는 작업이 필요할 것 같은데요. 제가 테스트해본 결과 source connector쪽 db에 데이터를 삽입했을 때는 sink connector쪽 db에도 데이터가 똑같이 삽입되지만, source connector쪽 db 데이터를 삭제하거나 수정하는 경우는 반영이 안되는 것을 확인했습니다. 혹시 이런 상황에서 참고할만한 키워드나 문서가 있을까요? ㅠㅠ