묻고 답해요
132만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결파이썬 무료 강의 (기본편) - 6시간 뒤면 나도 개발자
왜 Wraith 클래스에서 부모 클래스 호출할 때 왜 self가 안 들어가나요?
# 공중 공격 유닛 클래스 (다중 상속 받음) class FlyableAttackUnit(AttackUnit, Flyable): def __init__(self, name, hp, damage, flying_speed): AttackUnit.__init__(self, name, hp, 0, damage) # 지상 speed 0 Flyable.__init__(self, flying_speed) def move(self, location): # move 함수 재정의 (오버라이딩) print("[공중 유닛 이동]") self.fly(self.name, location) # 레이스 class Wraith(FlyableAttackUnit): def __init__(self): FlyableAttackUnit.__init__("레이스", 80, 20, 5) self.clocked = False # 클로킹 모드 (해제 상태) def clocking(self): # 클로킹 모드 -> 모드 해제 if self.clocked == True: print("{0}: 클로킹 모드 해제합니다.".format(self.name)) self.clocked = False # 클로킹 모드 해제 -> 모드 설정 else: print("{0}: 클로킹 모드 설정합니다.".format(self.name)) self.clocked = True FlyableAttackUnit 클래스나 다른 클래스에서는 class FlyableAttackUnit(AttackUnit, Flyable): def __init__(self, name, hp, damage, flying_speed): AttackUnit.__init__(self, name, hp, 0, damage) # 지상 speed 0 Flyable.__init__(self, flying_speed)이렇게 부모 클래스 생성자를 호출(?)할 때 꼬박꼬박 self를 넣어주는데 왜 Wraith 클래스만class Wraith(FlyableAttackUnit): def __init__(self): FlyableAttackUnit.__init__("레이스", 80, 20, 5)이렇게 부모 클래스 생성자를 호출(?)하면서 왜 파라미터로 self를 넣어주지 않는지 궁금합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
수업 질문사항입니다
질문1중간테이블을 사용하는 이유가 상품 가격이나 다른 속성이추가될 경우 추가 정보를 저장할 곳이 없어 양쪽에 추가해야 하는경우도 생길수 있어서 사용 하는 걸로 이해하면 될까요?질문2OrderItem 클래스는 주문과 상품 간의 관계를 나타내며, 각각의 주문 상품 항목이 어떤 상품에 속하고 어떤 주문에 속하는지를 기록하고 있는지 하나의 주문에 여러 상품이 들어갈 수 있고, 각 상품이 여러 주문에 속할 수 있게 되는 걸로 이해하면 되는 건가요??질문3같은 엔티티에서 부모-자식 관계를 나타내는 이유를 정확히 알고 싶습니다.이해가 잘안되요 ㅠㅠ
-
해결됨실전 연습으로 익히는 고급 타입스크립트 기술
extends와 = 의 차이는 무엇인가요?
export type Maybe<T extends string | boolean | number> = T; type tests = [ // @ts-expect-error Maybe<null>, // @ts-expect-error Maybe<undefined>, Maybe<string>, Maybe<false>, Maybe<0>, Maybe<""> ]; export type Maybe<T = string | boolean | number> = T; type tests = [ // @ts-expect-error Maybe<null>, // @ts-expect-error Maybe<undefined>, Maybe<string>, Maybe<false>, Maybe<0>, Maybe<""> ]; 뭔가 extends와 = 가 같은것 같으면서도 다른가 봅니다. extends는 에러가 안나는데 =는 에러가 나네요
-
미해결스프링 시큐리티 OAuth2
keycloak이 강의 버전과 맞지 않아서 생기는 오류 일부 정리
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.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
왜 실패가 뜨는지 모르겠습니다
CMD 들어가서 java -version 확인해서 17버전인데 java version "17.0.10" 2024-01-16 LTSJava(TM) SE Runtime Environment (build 17.0.10+11-LTS-240)Java HotSpot(TM) 64-Bit Server VM (build 17.0.10+11-LTS-240, mixed mode, sharing) 인텔리로 실행하면 왜 저렇게 뜨는지 모르겠습니다... 삭제하고 다시 설치했는데도 저러는데 뭐가 문제일까요 ㅠ
-
해결됨실전 연습으로 익히는 고급 타입스크립트 기술
any를 이용해서 풀어야 하는군요 ㅠㅠ
type GetParametersAndReturnType<T extends (...rest: T) => U> = { params: Parameters<T>; returnValue: ReturnType<T>; }; type tests = [ Expect< Equal< GetParametersAndReturnType<() => string>, { params: []; returnValue: string } > >, Expect< Equal< GetParametersAndReturnType<(s: string) => void>, { params: [string]; returnValue: void } > >, Expect< Equal< GetParametersAndReturnType<(n: number, b: boolean) => number>, { params: [number, boolean]; returnValue: number } > > ];이거 저거 엄청 했는데, 못풀었는데 any를 주는 방법밖에 없군요!
-
미해결장고 설계철학으로 시작하는 파이썬 장고 입문
도커 설치관련
강사님 안녕하세요. 강의참고하여 파이썬 버전 11로 설치는 완료했습니다. 도커가 이번엔 문제인데..설치는하였으나 이미지파일과같이 떴는데 어떻게 처리하는것이나을까요?일단 스킵하고 다음과정 수강해도될까요?
-
해결됨설계독학맛비's 실전 Verilog HDL Season 2 (AMBA AXI4 완전정복)
AXI에서 aresetn의 사용에 대한 질문
안녕하세요 맛비님.항상 좋은 강의 잘 듣고 있습니다. 지난 강의에서 주로 ASIC에서 asresetn을, FPGA에서 (synchronous) reset을 사용한다고 말씀하셨던 것 같은데요.AXI 버스에서는 aresetn을 사용하는 특별한 이유가 있을까요?ASIC에서도 사용하는 프로토콜 이기 때문일까요?주로 ASIC에서는 APB를, FPGA에서는 AXI-Lite를 사용한다고 하셔서 더욱 왜인지 궁금증이 드네요:)FPGA에서 APB를 잘 사용하지 않는 이유도 궁금합니다! AXI interconnect와 같은 IP가 잘 되어 있어서 그럴까요? 답변 미리 감사합니다! =================현업자인지라 업무때문에 답변이 늦을 수 있습니다. (길어도 만 3일 안에는 꼭 답변드리려고 노력중입니다 ㅠㅠ)강의에서 다룬 내용들의 질문들을 부탁드립니다!! (설치과정, 강의내용을 듣고 이해가 안되었던 부분들, 강의의 오류 등등)이런 질문은 부담스러워요.. (답변거부해도 양해 부탁드려요)개인 과제, 강의에서 다루지 않은 내용들의 궁금증 해소, 영상과 다른 접근방법 후 디버깅 요청, 고민 상담 등..글쓰기 에티튜드를 지켜주세요 (저 포함, 다른 수강생 분들이 함께보는 공간입니다.)서로 예의를 지키며 존중하는 문화를 만들어가요.질문글을 보고 내용을 이해할 수 있도록 남겨주시면 답변에 큰 도움이 될 것 같아요. (상세히 작성하면 더 좋아요! )먼저 유사한 질문이 있었는지 검색해보세요.잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.==================
-
해결됨카프카 완벽 가이드 - 코어편
Kafka 클라이언트 To VM kafka 연결 질문
안녕하세요.강의 잘 보고 있습니다. 제가 회사에서 강의를 보고 있어서 그런데 강의 세팅과 조금 다르게 진행해서 연결에서 막힙니다. 일단 저는, 개인 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:22192.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이 부분을 보아하니 토픽은 인지하는 것 같은데 말이죠..감사합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
getline()에 대하여
안녕하세요 🙂 큰돌님!새로 교안 업그레이드를 해주시면서 getline()에 대한 설명을 읽어보았는데요,getline()의 경우 cin과 달리, '\n'까지 입력받는 것은 이해하였는데,밑의 출력 예시를 보면 getline()이 입력받은 뒤에 오는 개행문자를 삭제한 것 같은데, 제가 잘못 이해한 것인지 질문드리고 싶습니다! 다른 질문글에 답변 주신 것도 읽어보았는데 잘 이해가 안되어서요ㅜㅜ
-
해결됨실전 연습으로 익히는 고급 타입스크립트 기술
제네릭 문제 맞췄습니다!.
const returnWhatIPassIn = <T = number | string>(t: T) => { return t; }; const one = returnWhatIPassIn(1); const matt = returnWhatIPassIn("matt"); type tests = [Expect<Equal<typeof one, 1>>, Expect<Equal<typeof matt, "matt">>];감사합니다.
-
해결됨독하게 시작하는 C 프로그래밍
강의 "16진수 표기가 사용되는 예" 에서의 질문
해당 강의에서 보여주시는 메모리 화면에서 메모리 주소 오른쪽에 있는 문자들은 앞에 0x가 따로 없는데도 16진수라고 하셨는데, 저 문자들은 그냥 16진수 읽기로 약속된 문자들 이라고 이해하면 될까요 ?? 그리고 그렇다면 왜 앞에 0x가 붙어있지 않은지도 알려주실 수 있나요 ??
-
미해결쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
2-3 진행 중 에러 발생
2-3 강의 중 12분 쯤에 Send를 누르면 200 OK가 떠야한다고 하셨는데 저는 500 에러가 발생합니다!package com.jyujyu.review.api; import com.jyujyu.review.service.TestService; import lombok.AllArgsConstructor; import lombok.Getter; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @AllArgsConstructor @RestController public class TestEntityApi { private final TestService testService; @PostMapping("/test/entity/create") public void createTestEntity( @RequestBody CreateTestEntityRequest request ) { testService.create(request.getName(), request.getAge()); } @AllArgsConstructor @Getter public static class CreateTestEntityRequest { private final String name; private final Integer age; } } package com.jyujyu.review.api; import com.jyujyu.review.service.TestService; import lombok.AllArgsConstructor; import lombok.Getter; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @AllArgsConstructor @RestController public class TestEntityApi { private final TestService testService; @PostMapping("/test/entity/create") public void createTestEntity( @RequestBody CreateTestEntityRequest request ) { testService.create(request.getName(), request.getAge()); } @AllArgsConstructor @Getter public static class CreateTestEntityRequest { private final String name; private final Integer age; } } package com.jyujyu.review.repository; import com.jyujyu.review.model.TestEntity; import org.springframework.data.jpa.repository.JpaRepository; public interface TestRepository extends JpaRepository<TestEntity, Long> { // Long -> TestEntity에 @Id가 있는 필드의 자료형을 작성한다. } package com.jyujyu.review.model; import jakarta.persistence.*; import lombok.Getter; @Getter @Table(name = "test") @Entity public class TestEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private Integer age; public TestEntity(String name, Integer age) { this.name = name; this.age = age; } public TestEntity() { } public void changeNameAndAge(String name, Integer age) { this.name = name; this.age = age; } }plugins { id 'java' id 'org.springframework.boot' version '3.2.2' id 'io.spring.dependency-management' version '1.1.4' } group = 'com.jyujyu' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } repositories { mavenCentral() } configurations { compileOnly { extendsFrom annotationProcessor } } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation 'org.springframework.boot:spring-boot-starter-test' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' runtimeOnly 'com.h2database:h2' } tasks.named('test') { useJUnitPlatform() } server.port=8081 spring.h2.console.enabled=true spring.h2.console.path=/h2-console spring.h2.console.settings.web-allow-others=true spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:mem:rss spring.datasource.username=sa spring.jpa.hibernate.ddl-auto=create spring.jpa.show-sql=true알려주신대로 코드를 작성하고 포스트맨에서 Send를 눌러도 500 Internal Server:Error 라고 뜨네요 ㅠ 원인을 찾아봐도 안보여서 여쭙습니다..! 참고로 포트는 8081이 맞습니다혹시 파일 필요하실까봐 링크 첨부했습니다https://drive.google.com/file/d/1W65YQNY5rOGjWuqr-ntff7_QuTWz4eDw/view?usp=sharing
-
미해결입문자를 위한 자바스크립트 기초 강의
디지털 시계 만들기 질문 드립니다.
강의를 듣고 먼저 배운대로 new 연산과 Date 객체, setInterval 메소드를 활용해서 현재 시간을 반영한 디지털 시계를 만드는 코드를 짜봤는데요. 제 생각으로는 변수 안에 new 연산이 있으니, setInterval로 1초 마다 getTime 함수가 실행될 때마다, new 연산을 하는 변수 hour, min, sec가 실행되어서 1초마다 다시 연산을 해서 현재 시간을 업데이트해 줄 것으로 예상했는데, 실시간으로 업데이트가 안되더라구요.(멈춰있음)그래서, hour, min, sec 변수 선언들을 getTime 함수 안에 넣어서 실행했더니 실시간으로 1초마다 시간이 반영이 되었습니다.똑같은 변수인데, 함수 밖에 있는 것과 안에 있는 것이(전역변수인지 아닌 지에 따라) 차이가 있는건가요?
-
미해결AWS Certified Solutions Architect - Associate 자격증 준비하기
수강연장 부탁드립니다...
타의로 인해 다른 클라우드를 이용하느라 이제서야 준비하게 되었습니다... 연장을 부탁드립니다...
-
해결됨실전 연습으로 익히는 고급 타입스크립트 기술
오예 정답 입니다.
type Fruit = | { name: "apple"; color: "red"; } | { name: "banana"; color: "yellow"; } | { name: "orange"; color: "orange"; }; type TransformedFruit = { [key in Fruit as `${key["name"]}:${key['color']}`]: `${key["name"]}`; }; type tests = [ Expect< Equal<TransformedFruit, { "apple:red": "apple"; "banana:yellow": "banana"; "orange:orange": "orange"; }> >, ];
-
해결됨실전 연습으로 익히는 고급 타입스크립트 기술
union 기준으로 나누기 위해 key값을 특정 프로퍼티로 정의해서 풀어 보았습니다.
type Fruit = | { name: "apple"; color: "red"; } | { name: "banana"; color: "yellow"; } | { name: "orange"; color: "orange"; }; type TransformedFruit = { [key in Fruit as key["name"]]: `${key["name"]}:${key["color"]}`; }[Fruit["name"]]; type tests = [ Expect< Equal<TransformedFruit, "apple:red" | "banana:yellow" | "orange:orange"> > ];감사합니다
-
해결됨실전 연습으로 익히는 고급 타입스크립트 기술
오 오랜만에 정답을 맞췄습니다
interface FruitMap { apple: "red"; banana: "yellow"; orange: "orange"; } type TransformedFruit = { [key in keyof FruitMap]: `${key}:${FruitMap[key]}`; }[keyof FruitMap]; type tests = [ Expect< Equal<TransformedFruit, "apple:red" | "banana:yellow" | "orange:orange"> > ];덕분에 typescript 재밋습니다 :)
-
미해결버그헌팅과 시나리오 모의해킹 전문가 되기
언제부터 http://192.168.x.x/secret 입력하면 자동으로 https로 계속 바뀌는데
언제부터 http://192.168.x.x/secret 입력하면 자동으로 https로 계속 바껴서 접속이 안되는데 왜그런건가요?
-
해결됨스프링 핵심 원리 - 고급편
콘크리트프록시를 구현시 원본 구체를 파라메터로 받는이유
콘크리드프록시를 생성 할 때 기존 구체를 상속을 받고 오버라이딩 할 때 아래 예시와 같이 부모 메소드를 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 해서 멤버 변수로 받고 그 원본 구현체를 호출하는 이유가 있을까요?