질문1 중간테이블을 사용하는 이유가 상품 가격이나 다른 속성이 추가될 경우 추가 정보를 저장할 곳이 없어 양쪽에 추가해야 하는 경우도 생길수 있어서 사용 하는 걸로 이해하면 될까요? 질문2 OrderItem 클래스는 주문과 상품 간의 관계를 나타내며, 각각의 주문 상품 항목이 어떤 상품에 속하고 어떤 주문에 속하는지를 기록하고 있는지 하나의 주문에 여러 상품이 들어갈 수 있고, 각 상품이 여러 주문에 속할 수 있게 되는 걸로 이해하면 되는 건가요?? 질문3 같은 엔티티에서 부모-자식 관계를 나타내는 이유를 정확히 알고 싶습니다. 이해가 잘안되요 ㅠㅠ
keycloak 버전이 제일 낮은 게 20 버전이라서 저는 가장 최근 버전인 23 버전으로 사용했습니다. 23 버전 기준으로, 제가 파악한, 강의와 다른 부분입니다. 20 버전부터는 최초 로그인 할 때 동의 항목이 안 나올텐데요. 관리자 콘솔에서 Clients -> Cliend details에서 Login settings에서 Consent required를 켜면 됩니다. 엑세스 토큰 발급 이후에 userinfo 엔드포인트로 user 데이터를 요청하면 body에 아무 것도 안 나올 겁니다. 응답 헤더 살펴보면 insufficient_scope이며 Missing openid scope이라고 나오는데요. 이렇게만 써있으면 userinfo 요청할 때 param에 scope=openid 넣으면 될 것 같지만 안 됩니다. 토큰에 해당 정보가 없는 거라서, 토큰 발급 전에(code 얻어야할 때) scop에 openid를 추가하면 됩니다. http://localhost:8080/realms/oauth2/protocol/openid-connect/auth?response_type=code&client_id=oauth2-client-app&scope=profile email openid&redirect_uri=http://localhost:8081 공식문서 에 나와 있습니다. In case an access token is missing openid scope.
안녕하세요 맛비님. 항상 좋은 강의 잘 듣고 있습니다. 지난 강의에서 주로 ASIC에서 asresetn을, FPGA에서 (synchronous) reset을 사용한다고 말씀하셨던 것 같은데요. AXI 버스에서는 aresetn을 사용하는 특별한 이유가 있을까요? ASIC에서도 사용하는 프로토콜 이기 때문일까요? 주로 ASIC에서는 APB를, FPGA에서는 AXI-Lite를 사용한다고 하셔서 더욱 왜인지 궁금증이 드네요:) FPGA에서 APB를 잘 사용하지 않는 이유도 궁금합니다! AXI interconnect와 같은 IP가 잘 되어 있어서 그럴까요? 답변 미리 감사합니다! ================= 현업자인지라 업무때문에 답변이 늦을 수 있습니다. (길어도 만 3일 안에는 꼭 답변드리려고 노력중입니다 ㅠㅠ) 강의에서 다룬 내용들의 질문들을 부탁드립니다!! (설치과정, 강의내용을 듣고 이해가 안되었던 부분들, 강의의 오류 등등) 이런 질문은 부담스러워요.. (답변거부해도 양해 부탁드려요) 개인 과제, 강의에서 다루지 않은 내용들의 궁금증 해소, 영상과 다른 접근방법 후 디버깅 요청, 고민 상담 등.. 글쓰기 에티튜드를 지켜주세요 (저 포함, 다른 수강생 분들이 함께보는 공간입니다.) 서로 예의를 지키며 존중하는 문화를 만들어가요. 질문글을 보고 내용을 이해할 수 있도록 남겨주시면 답변에 큰 도움이 될 것 같아요. (상세히 작성하면 더 좋아요! ) 먼저 유사한 질문이 있었는지 검색해보세요. 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. ==================
안녕하세요. 강의 잘 보고 있습니다. 제가 회사에서 강의를 보고 있어서 그런데 강의 세팅과 조금 다르게 진행해서 연결에서 막힙니다. 일단 저는, 개인 PC 로 IP - 192.168.100.170 인 서버 컴퓨터로 원격 연결 을 하고 그 안에서 VB로 ubuntu VM 을 생성했습니다. VM의 고정 IP는 192.168.88.111 로 설정했습니다. 이후 편한 환경을 위해 putty같은 프로그램으로 ssh 연결을 했습니다. VM의 Port Forwarding으로 ssh는 192.168.100.170:27722 -> 192.168.88.111:22 192.168.100.170:29092 -> 192.168.88.111:9092 으로 진행했고 성공했습니다. 이후 개인 PC에서 Intelij로 SimpleProducer 실습을 진행하는데, props.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "192.168.100.170:29092"); 로 나름 머리를 써서 작성했습니다. 물론, VM의 server.properties 에서 외부 연결을 허용하도록 했습니다만, 정확한지 확신은 없습니다. 이후, 코드를 실행했더니, socket timeout 에러가 나오고 카프카 컨슈머에 들어오지 않았습니다. Log를 자세히 보니 분명히 kafka topicId를 인지하는 걸 보니 연결은 된 것 같은데 뭐가 문제인지 모르겠습니다. Starting Gradle Daemon... Gradle Daemon started in 1 s 324 ms > Task :producers:compileJava UP-TO-DATE > Task :producers:processResources NO-SOURCE > Task :producers:classes UP-TO-DATE > Task :producers:SimpleProducer.main() [main] INFO org.apache.kafka.clients.producer.ProducerConfig - ProducerConfig values: acks = -1 batch.size = 16384 bootstrap.servers = [192.168.100.170:39092] buffer.memory = 33554432 client.dns.lookup = use_all_dns_ips client.id = producer-1 compression.type = none connections.max.idle.ms = 540000 delivery.timeout.ms = 120000 enable.idempotence = true interceptor.classes = [] key.serializer = class org.apache.kafka.common.serialization.StringSerializer linger.ms = 0 max.block.ms = 60000 max.in.flight.requests.per.connection = 5 max.request.size = 1048576 metadata.max.age.ms = 300000 metadata.max.idle.ms = 300000 metric.reporters = [] metrics.num.samples = 2 metrics.recording.level = INFO metrics.sample.window.ms = 30000 partitioner.class = class org.apache.kafka.clients.producer.internals.DefaultPartitioner receive.buffer.bytes = 32768 reconnect.backoff.max.ms = 1000 reconnect.backoff.ms = 50 request.timeout.ms = 30000 retries = 2147483647 retry.backoff.ms = 100 sasl.client.callback.handler.class = null sasl.jaas.config = null sasl.kerberos.kinit.cmd = /usr/bin/kinit sasl.kerberos.min.time.before.relogin = 60000 sasl.kerberos.service.name = null sasl.kerberos.ticket.renew.jitter = 0.05 sasl.kerberos.ticket.renew.window.factor = 0.8 sasl.login.callback.handler.class = null sasl.login.class = null sasl.login.connect.timeout.ms = null sasl.login.read.timeout.ms = null sasl.login.refresh.buffer.seconds = 300 sasl.login.refresh.min.period.seconds = 60 sasl.login.refresh.window.factor = 0.8 sasl.login.refresh.window.jitter = 0.05 sasl.login.retry.backoff.max.ms = 10000 sasl.login.retry.backoff.ms = 100 sasl.mechanism = GSSAPI sasl.oauthbearer.clock.skew.seconds = 30 sasl.oauthbearer.expected.audience = null sasl.oauthbearer.expected.issuer = null sasl.oauthbearer.jwks.endpoint.refresh.ms = 3600000 sasl.oauthbearer.jwks.endpoint.retry.backoff.max.ms = 10000 sasl.oauthbearer.jwks.endpoint.retry.backoff.ms = 100 sasl.oauthbearer.jwks.endpoint.url = null sasl.oauthbearer.scope.claim.name = scope sasl.oauthbearer.sub.claim.name = sub sasl.oauthbearer.token.endpoint.url = null security.protocol = PLAINTEXT security.providers = null send.buffer.bytes = 131072 socket.connection.setup.timeout.max.ms = 30000 socket.connection.setup.timeout.ms = 10000 ssl.cipher.suites = null ssl.enabled.protocols = [TLSv1.2, TLSv1.3] ssl.endpoint.identification.algorithm = https ssl.engine.factory.class = null ssl.key.password = null ssl.keymanager.algorithm = SunX509 ssl.keystore.certificate.chain = null ssl.keystore.key = null ssl.keystore.location = null ssl.keystore.password = null ssl.keystore.type = JKS ssl.protocol = TLSv1.3 ssl.provider = null ssl.secure.random.implementation = null ssl.trustmanager.algorithm = PKIX ssl.truststore.certificates = null ssl.truststore.location = null ssl.truststore.password = null ssl.truststore.type = JKS transaction.timeout.ms = 60000 transactional.id = null value.serializer = class org.apache.kafka.common.serialization.StringSerializer [main] INFO org.apache.kafka.common.utils.AppInfoParser - Kafka version: 3.1.0 [main] INFO org.apache.kafka.common.utils.AppInfoParser - Kafka commitId: 37edeed0777bacb3 [main] INFO org.apache.kafka.common.utils.AppInfoParser - Kafka startTimeMs: 1706742127571 [kafka-producer-network-thread | producer-1] INFO org.apache.kafka.clients.Metadata - [Producer clientId=producer-1] Resetting the last seen epoch of partition test-topic-0 to 0 since the associated topicId changed from null to jRkpHnfwT8mfWJ3PB9HHmg [kafka-producer-network-thread | producer-1] INFO org.apache.kafka.clients.Metadata - [Producer clientId=producer-1] Cluster ID: ysNHdh2DQTKvR3X0yruxdg [kafka-producer-network-thread | producer-1] INFO org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Disconnecting from node 0 due to socket connection setup timeout. The timeout value is 9728 ms. [kafka-producer-network-thread | producer-1] INFO org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Disconnecting from node 0 due to socket connection setup timeout. The timeout value is 18153 ms. [kafka-producer-network-thread | producer-1] INFO org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Node 0 disconnected. [kafka-producer-network-thread | producer-1] WARN org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Connection to node 0 (/192.168.88.111:9092) could not be established. Broker may not be available. [kafka-producer-network-thread | producer-1] INFO org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Node 0 disconnected. [kafka-producer-network-thread | producer-1] WARN org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Connection to node 0 (/192.168.88.111:9092) could not be established. Broker may not be available. [kafka-producer-network-thread | producer-1] INFO org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Node 0 disconnected. [kafka-producer-network-thread | producer-1] WARN org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Connection to node 0 (/192.168.88.111:9092) could not be established. Broker may not be available. [kafka-producer-network-thread | producer-1] INFO org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Node 0 disconnected. [kafka-producer-network-thread | producer-1] WARN org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Connection to node 0 (/192.168.88.111:9092) could not be established. Broker may not be available. [main] INFO org.apache.kafka.clients.producer.KafkaProducer - [Producer clientId=producer-1] Closing the Kafka producer with timeoutMillis = 9223372036854775807 ms. [main] INFO org.apache.kafka.common.metrics.Metrics - Metrics scheduler closed [main] INFO org.apache.kafka.common.metrics.Metrics - Closing reporter org.apache.kafka.common.metrics.JmxReporter [main] INFO org.apache.kafka.common.metrics.Metrics - Metrics reporters closed [main] INFO org.apache.kafka.common.utils.AppInfoParser - App info kafka.producer for producer-1 unregistered Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0. You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins. For more on this, please refer to https://docs.gradle.org/8.4/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation. BUILD SUCCESSFUL in 2m 5s 2 actionable tasks: 1 executed, 1 up-to-date 오전 8:04:07: Execution finished ':producers:SimpleProducer.main()'. [Producer clientId=producer-1] Resetting the last seen epoch of partition test-topic-0 to 0 since the associated topicId changed from null to jRkpHnfwT8mfWJ3PB9HHmg 이 부분을 보아하니 토픽은 인지하는 것 같은데 말이죠.. 감사합니다.
안녕하세요 🙂 큰돌님! 새로 교안 업그레이드를 해주시면서 getline()에 대한 설명을 읽어보았는데요, getline()의 경우 cin과 달리, '\n'까지 입력받는 것은 이해하였는데, 밑의 출력 예시를 보면 getline()이 입력받은 뒤에 오는 개행문자를 삭제한 것 같은데, 제가 잘못 이해한 것인지 질문드리고 싶습니다! 다른 질문글에 답변 주신 것도 읽어보았는데 잘 이해가 안되어서요ㅜㅜ
해당 강의에서 보여주시는 메모리 화면에서 메모리 주소 오른쪽에 있는 문자들은 앞에 0x가 따로 없는데도 16진수라고 하셨는데, 저 문자들은 그냥 16진수 읽기로 약속된 문자들 이라고 이해하면 될까요 ?? 그리고 그렇다면 왜 앞에 0x가 붙어있지 않은지도 알려주실 수 있나요 ??
강의를 듣고 먼저 배운대로 new 연산과 Date 객체, setInterval 메소드를 활용해서 현재 시간을 반영한 디지털 시계를 만드는 코드를 짜봤는데요. 제 생각으로는 변수 안에 new 연산이 있으니, setInterval로 1초 마다 getTime 함수가 실행될 때마다, new 연산을 하는 변수 hour, min, sec가 실행되어서 1초마다 다시 연산을 해서 현재 시간을 업데이트해 줄 것으로 예상했는데, 실시간으로 업데이트가 안되더라구요. (멈춰있음) 그래서, hour, min, sec 변수 선언들을 getTime 함수 안에 넣어서 실행했더니 실시간으로 1초마다 시간이 반영이 되었습니다. 똑같은 변수인데, 함수 밖에 있는 것과 안에 있는 것이(전역변수인지 아닌 지에 따라) 차이가 있는건가요?
콘크리드프록시를 생성 할 때 기존 구체를 상속을 받고 오버라이딩 할 때 아래 예시와 같이 부모 메소드를 super를 통해서 호출이 가능한데요 public class OrderControllerConcreteProxy extends OrderControllerV2 { private final LogTrace logTrace; public OrderControllerConcreteProxy(OrderServiceV2 orderService, LogTrace logTrace) { super(orderService); this.logTrace = logTrace; } @Override public String request(String itemId) { TraceStatus status = null; try { status = logTrace.begin("OrderController.request()"); //target 호출 String result = super.request(itemId); logTrace.end(status); return result; } catch (Exception e) { logTrace.exception(status, e); throw e; } } @Override public String noLog() { return super.noLog(); } } 이렇게 super를 통해서 호출하지 않고 OrderControllerV2를 따로 new 해서 멤버 변수로 받고 그 원본 구현체를 호출하는 이유가 있을까요?
안녕하세요 또 이렇게 질문을 해서 죄송합니다. 마지막 강의까지 다 듣고 배포까지 했는데 갑자기 홈 화면에 오른 화살표를 클릭을 하면 지금 1월 인데 누르면 3월로 이동 됩니다. 그런데 1월에서 2월 넘어갈때만 그래요 뒤로 가는건 잘 작동합니다. 홈 강의 다시 보고 틀린거 있나 확인했는데 못 찾아서 이렇게 연락드려요 https://github.com/jeain/Diary