묻고 답해요
129만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨프로젝트로 배우는 Python 챗봇 만들기 - LangChain, Gradio 활용
10강에서 poetry 프로젝트 생성시 오류가 납니다.
어제는 정상적으로 프로젝트 만들고 강의하면서 따라 했는데 오늘은 파워쉘에서 만들려고 하니 아래와 같은 오류가 납니다. 왜 그럴까요? ㅡㅡ;poetry를 뭔가 실행해야 되나요?
-
미해결딥러닝을 활용한 자연어 처리 (NLP) 과정 (기초부터 ChatGPT/생성 모델까지)
Transformer 번역기 부분에 대해 질문 있습니다.
아래 사이트는 Encoder / Decoder를 하나의 Class로 만들었는데요..강사님도 해당 예제는 많이 보셨을거 같습니다.https://keras.io/examples/nlp/neural_machine_translation_with_transformer/ 아래와 같이 Encoder / Decoder Class를 선언하고..추가로 shape들을 찍어 보았습니다.(참고로 get_config 함수는 지면상 뺐습니다.)class TransformerEncoder(keras.layers.Layer): def init(self, num_heads, embed_dim, dense_dim, **kwargs): super().__init__(**kwargs) self.num_heads = num_heads self.embed_dim = embed_dim self.dense_dim = dense_dim self.class_name = 'TransformerEncoder' self.attention = keras.layers.MultiHeadAttention(self.num_heads, key_dim=self.embed_dim, value_dim=self.embed_dim) self.dense = keras.models.Sequential([keras.layers.Dense(self.dense_dim, activation='relu'), keras.layers.Dense(self.embed_dim)]) self.layer1 = keras.layers.LayerNormalization() self.layer2 = keras.layers.LayerNormalization() self.support_mask = True def call(self, inputs, mask=None): tf.print('ClassName=TransformerEncoder-------------------------------------------------------') if mask is not None: #print('ClassName={}, mask.shape={}'.format(self.class_name, mask.shape)) padding_mask = mask[:, tf.newaxis, :] tf.print('mask.shape=', padding_mask.shape) else: padding_mask = None tf.print('mask=None') attention_out = self.attention(query=inputs, key=inputs, value=inputs, attention_mask=padding_mask) tf.print('input.shape=', inputs.shape) tf.print('attention_out.shape=', attention_out.shape) layer1_out = self.layer1(inputs+attention_out) #print('ClassName={}, layer1_out.shape={}'.format(self.class_name, layer1_out.shape)) dense_out = self.dense(layer1_out) tf.print('dense_out.shape=', dense_out.shape) return self.layer2(layer1_out+dense_out) class TransformerDecoder(keras.layers.Layer): def init(self, num_heads, embed_dim, latent_dim, **kwargs): super().__init__(**kwargs) self.num_heads = num_heads self.embed_dim = embed_dim self.latent_dim = latent_dim self.class_name = 'Decoder' self.attention_1 = keras.layers.MultiHeadAttention(num_heads=self.num_heads, key_dim=self.embed_dim) self.attention_2 = keras.layers.MultiHeadAttention(num_heads=self.num_heads, key_dim=self.embed_dim) self.layer_1 = keras.layers.LayerNormalization() self.layer_2 = keras.layers.LayerNormalization() self.layer_3 = keras.layers.LayerNormalization() self.dense = keras.models.Sequential([keras.layers.Dense(self.latent_dim, activation='relu'), keras.layers.Dense(self.embed_dim)]) self.supports_masking=True def call(self, inputs, encoder_outputs, mask=None): tf.print('ClassName=TransformerDecoder-------------------------------------------------------') #inputs.shape=(None, 35, 32), encoder_outputs.shape=(None, 35, 32) #tf.print('aaaaaaaaa=', inputs.shape) casual_mask = self.get_casual_attention_mask(inputs) tf.print('inputs.shape=', inputs.shape) tf.print('casual_mask.shape=', casual_mask.shape) if mask is not None: padding_mask = tf.cast(mask[:, None, :], dtype='int32') padding_mask = tf.minimum(padding_mask, casual_mask) tf.print('padding_mask.shape=', padding_mask.shape) else: padding_mask = None tf.print('padding_mask = None') attention_1_out = self.attention_1(query=inputs, key=inputs, value=inputs, attention_mask=casual_mask) tf.print('attention_1_out.shape=', attention_1_out.shape) layer_1_out = self.layer_1(inputs+attention_1_out) attention_2_out = self.attention_2(query=layer_1_out, key=encoder_outputs, value=encoder_outputs, attention_mask=padding_mask) layer_2_out = self.layer_2(layer_1_out + attention_2_out) dense_out = self.dense(layer_2_out) tf.print('dense_out.shape=', dense_out.shape) return self.layer_3(layer_2_out + dense_out) def get_casual_attention_mask(self, inputs): #input_shape=(2, 35, 32) =(BatchSize, Sequence_len, Embed_Len) input_shape = tf.shape(inputs) batch_size, sequence_length = input_shape[0], input_shape[1] #i=(35, 1), j=(35,) #i=[[0], [1], [2], ... [35]], j=[0 1 2 ... 34] i = tf.range(start=0, limit=sequence_length)[:, tf.newaxis] j = tf.range(start=0, limit=sequence_length) # tf.cast 함수는 보통 조건에 따른 True, False 의 판단 기준에 따라 True 면 1, False 면 0을 반환한다. # mask.shape=(1, 35, 35), mask=[[[1 0 0 .. 0], [1 1 0 0 ...0], [1 1 1 1 ...1 0], [1 1 1 1 ... 1 1]]] mask = tf.cast(i>=j, dtype='int32') mask = tf.reshape(mask, (1, input_shape[1], input_shape[1])) # mult = (2, 1, 1), (BatchSize, 1, 1) mult = tf.concat([tf.expand_dims(batch_size, -1), tf.convert_to_tensor([1,1])], axis=0) return tf.tile(mask, mult) MAX_EMBED=32 MAX_VOCAB=5000 MAX_SEQ = 35 MAX_DENSE=1024 MAX_HEAD=1 encoder_inputs = keras.layers.Input(shape=(MAX_SEQ,), dtype='int64', name='encoder_inputs') encoder_embed_outs = PositionalEmbedding(MAX_SEQ, MAX_VOCAB, MAX_EMBED)(encoder_inputs) encoder_transformer_outs = TransformerEncoder(num_heads=1, embed_dim=MAX_EMBED, dense_dim=MAX_DENSE)(encoder_embed_outs) #encoder_transformer_outs == (None, 80, 256) decoder_inputs = keras.layers.Input(shape=(MAX_SEQ,), dtype='int64', name='decoder_inputs') decoder_embed_outs = PositionalEmbedding(MAX_SEQ, MAX_VOCAB, MAX_EMBED)(decoder_inputs) #decoder_embed_outs == (None, 80, 256) decoder_transformer_outs = TransformerDecoder(1, MAX_EMBED, MAX_DENSE)(decoder_embed_outs, encoder_transformer_outs) decoder_dropout_outs = keras.layers.Dropout(0.5)(decoder_transformer_outs) decoder_outputs = keras.layers.Dense(MAX_VOCAB, activation='softmax')(decoder_dropout_outs) model = keras.Model(inputs=[encoder_inputs, decoder_inputs], outputs=decoder_outputs) model.summary() 호출(호출은 Log만 찍어보게 BatchSize를 줄였습니다.)q_train_seqs = q_seqs[:2] a_train_seqs = a_seqs[:2] print(q_train_seqs.shape, a_train_seqs.shape) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) history = model.fit([q_train_seqs, a_train_seqs[:, :-1]], a_train_seqs[:, 1:], epochs=1) 이렇게 해서 돌리면 결과가 아래와 같이 찍힙니다.ClassName=TransformerEncoder------------------------------------------------------- mask=None input.shape= TensorShape([None, 35, 32]) attention_out.shape= TensorShape([None, 35, 32]) dense_out.shape= TensorShape([None, 35, 32]) ClassName=TransformerDecoder------------------------------------------------------- inputs.shape= TensorShape([None, 35, 32]) casual_mask.shape= TensorShape([None, 35, 35]) padding_mask = None attention_1_out.shape= TensorShape([None, 35, 32]) dense_out.shape= TensorShape([None, 35, 32]) 1/1 [==============================] - 4s 4s/step - loss: 8.2735 - accuracy: 0.0000e+00 질문은 아래와 같습니다.Encoder 파트에서 mask=None 으로 Mask가 들어있지 않습니다. 그럼 굳이 mask는 구현할 필요가 없는건지? Decoder 파트에서는 첫번째 Self-Attention 부분에서만 제대로된 마스킹 값이 들어가고 Encoder의 Key와 매핑 시키는 부분에서는 마찬가지로 padding_mask가 None 입니다. 이 부분에 대해 조금 더 자세한 설명을 해 주시면 감사하겠습니다. 다시 한번 설명 드리면class TransformerEncoder(keras.layers.Layer): ... def call(self, inputs, mask=None): tf.print('ClassName=TransformerEncoder-------------------------------------------------------') if mask is not None: #print('ClassName={}, mask.shape={}'.format(self.class_name, mask.shape)) padding_mask = mask[:, tf.newaxis, :] tf.print('mask.shape=', padding_mask.shape) else: padding_mask = None tf.print('mask=None') #Encoder 에서 padding_mask는 None으로 찍힘 attention_out = self.attention(query=inputs, key=inputs, value=inputs, attention_mask=padding_mask) class TransformerDecoder(keras.layers.Layer): def call(self, inputs, encoder_outputs, mask=None): casual_mask = self.get_casual_attention_mask(inputs) #mask는 None 으로 들어옴 if mask is not None: padding_mask = tf.cast(mask[:, None, :], dtype='int32') padding_mask = tf.minimum(padding_mask, casual_mask) else: padding_mask = None # casual_mask는 현재 위치 이후는 0 으로 패딩 된 것 확인 attention_1_out = self.attention_1(query=inputs, key=inputs, value=inputs, attention_mask=casual_mask) layer_1_out = self.layer_1(inputs+attention_1_out) # 하지만 padding_mask는 None 임 attention_2_out = self.attention_2(query=layer_1_out, key=encoder_outputs, value=encoder_outputs, attention_mask=padding_mask) layer_2_out = self.layer_2(layer_1_out + attention_2_out)
-
미해결2주만에 통과하는 알고리즘 코딩테스트 (2024년)
백준 1816 Javascript
로컬 테스트에서는 잘 동작되는데, 백준에서는 계속 '틀렸습니다' 오답 상태입니다JS 문법상 고려해야할 사항을 빼먹은 건지, 어떤 다른 테스트 케이스의 경우를 고려 못한 건지 모르겠네요🥺
-
미해결[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
작업형1 모의문제1 에서 에러가 나는데 왜이럴까요 ?
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요먼저 유사한 질문이 있었는지 검색해보세요위와 같은 에러가 나서 info로 확인해봤는데 df는 데이터프레임형태였습니다..다시 실행해보아도 똑같이 나오는데 어디에서 문제가 있었던걸까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
스프링 메시지 소스 사용 = 오류 발생건입니다.
실행하면 아래와 같은 메세지가 뜹니다.실행 자체가 안되는거 같은데요?spring.messages.basename=messages 설정 여부와 상관없이 오류가 납니다.@SpringBootTest public class MessageSourceTest { @Autowired MessageSource ms; @Test void helloMessage() { String result = ms.getMessage("hello", null, null); assertThat(result).isEqualTo("안녕"); } } Execution failed for task ':test'.> There were failing tests. See the report at: file:///C:/CodingStudy/스프링/message/build/reports/tests/test/index.html* Try:Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
-
미해결카프카 완벽 가이드 - ksqlDB
Pull 쿼리 제약에 대한 이유
안녕하세요,강의 내용 중 table에 대해서 source를 topic으로 하는 경우 pull 쿼리가 불가능 한 이유에 대해 강사님께서 구체적으로 확인이 되지 않았지만 rocksdb 이슈로 추정된다라고 말씀하신 것 같은데요, 혹시 아래의 이유가 아닐 지 확인 부탁드립니다. https://docs.ksqldb.io/en/latest/concepts/materialized-views/In ksqlDB, a table can be materialized into a view or not. If a table is created directly on top of a Kafka topic, it's not materialized. Non-materialized tables can't be queried, because they would be highly inefficient. On the other hand, if a table is derived from another collection, ksqlDB materializes its results, and you can make queries against it. document에 따르면 source가 topic인 table의 경우는 mview가 아니라고 하는 것 같습니다.(mview가 아니기 때문에 비효율적이다.) 그렇다면 이 경우는 rocksdb를 통해 stateful한 결과를 저장한 뒤 가져오는 것이 아닌 토픽으로부터 전체 레코드를 읽어와서 compact한 처리를 하는 케이스라고 볼 수 있을 것 같습니다. 즉, source가 topic인 케이스는 오히려 rocksdb를 사용하지 않는 케이스이기 때문에 그런 것이 아닐까 추측이 되는데요 어떻게 생각하시는지 궁금합니다.
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
강의자료 부탁드립니다.
안녕하세요. 강의자료 부탁드립니다.이메일은 linseong00@naver.com 입니다.감사합니다!
-
미해결Golang을 통한 백엔드 개발 및 환경 구축하기
소스 코드가 있는 github 주소 공유 부탁드려도 될까요?
소스 코드가 있는 github 주소 공유 부탁드려도 될까요?
-
미해결리액트네이티브 블록체인 dapp 개발 시리즈4(기초입문)
시뮬레이터 기종이나 설정은 어떻게 진행해야할까요?
'리액트 네이티브 설치3 expo' 강의에서는 메인 화면에서 바로 시뮬레이터를 선택가능하게 보여지시는데 저는 메인 화면에서 그걸 발견할 수 없더라고요. 따로 검색해서 tool로 들어가서 시뮬레이터를 설치했는데 어떤 디바이스를 선택해야하는지 문의드립니다. 혹시 디바이스 사이즈도 많은 영향을 주는걸까요??그리고 수업 중간중간에 텀과 화면 멈춤이 있어서 어느 부분을 진행하고 있는지 알 수 없습니다..책이야기를 하시는 데 어디서 어떤 걸 봐야하는지 알 수 없어서요ㅜㅜ
-
미해결배달앱 클론코딩 [with React Native]
readme
수업에서 보여주시는 리드미를 어디들어가야 하나요? 첫시작 으로 시작하는 거 입니다 ㅠㅠ 아래의주소로https://github.com/ZeroCho/react-native-naver-map들어가니 리드미가 달라서 어디 들어가야하는지 모르겠어요
-
미해결리액트네이티브 블록체인 dapp 개발 시리즈4(기초입문)
Intel x86 Emulator Accelerator (HAXM installer) 설치가 불가능합니다.
'리액트 네이티브 설치 안드로이드' 강의 중 1:57에 보여지는 화면을 따라 설치하려고 하는데, 설치 에러가 떠서 문의드립니다.Intel x86 Emulator Accelerator (HAXM installer)를 설치하려고 하면 아래와 같은 메세지가 나옵니다.메세지에 적힌 곳으로 가면 어떤 걸 다운받아야 할 지 모르겠더라구요,,혹시 이 tool이 없더라도 괜찮을지 문의드립니다!! Running Intel® HAXM installerIntel HAXM installation failed!For more details, please check the installation log: C:\Users\SSAFY\AppData\Local\Temp\haxm_install-20240423_1325.logIntel® HAXM installation failed. To install Intel® HAXM follow the instructions found at: https://github.com/intel/haxm/wiki/Installation-Instructions-on-WindowsDone
-
미해결김영한의 실전 자바 - 중급 1편
섹션2 : 불편객체 - 예제
여기에서 실행 결과가 ImmutableAddress로 나오는데 왜 그런건가요??선생님것을 보면 Address 클래스로 나오는데...다시 삭제했다가 다시 만들어도 실행 결과에서 ImmutableAddress클래스로 나오는 이유를 모르겠습니다.package lang.immutable.address; public class MemberMainV1 { public static void main(String[] args) { Address address = new Address("서울"); // x005 MemberV1 memberA = new MemberV1("회원A", address); // x002 MemberV1 memberB = new MemberV1("회원B", address); // x003 // 회원A, 회원B의 처음 주소는 모두 서울 System.out.println("memberA = " + memberA); System.out.println("memberB = " + memberB); memberB.getAddress().setValue("부산"); System.out.println("부산 -> memberB.address"); System.out.println("memberA = " + memberA); System.out.println("memberB = " + memberB); =================================================================== -실행결과 memberA = MemberV1{name='회원A', address=ImmutableAddress{value='서울'}} memberB = MemberV1{name='회원B', address=ImmutableAddress{value='서울'}} 부산 -> memberB.address memberA = MemberV1{name='회원A', address=ImmutableAddress{value='부산'}} memberB = MemberV1{name='회원B', address=ImmutableAddress{value='부산'}} } }
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
43번 채점결과
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.#include<stdio.h> #include<algorithm> using namespace std; int a[1001], n; int Count(int s){ int i, cnt=1, sum=0; for(i=1; i<=n; i++){ if(sum+a[i]>s){ cnt++; sum=a[i]; } else sum=sum+a[i]; } return cnt; } int main(){ //freopen("input.txt", "rt", stdin); int m, i, lt=1, rt=0, mid, res, maxx=-2147000000; scanf("%d %d", &n, &m); for(i=1; i<=n; i++){ scanf("%d", &a[i]); rt=rt+a[i]; if(a[i]>maxx) maxx=a[i]; } while(lt<=rt){ mid=(lt+rt)/2; if(mid>=maxx && Count(mid)<=m){ res=mid; rt=mid-1; } else lt=mid+1; } printf("%d\n", res); return 0; } 강사님께서 직접 올려주신 코드 복사해서 돌려봐도 채점 결과가 아래 사진과 같이 뜹니다 그동안 다른 문제들 채점 프로그램은 이상이 없었는데 43번만 채점결과가 이상해서 질문 드립니다.
-
미해결맛집 지도앱 만들기 (React Native + NestJS)
yarn start 안드로이드 실행 오류 [해결 방법]
AILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:installDebug'. > com.android.builder.testing.api.DeviceException: No connected devices! 실패: 예외로 인해 빌드가 실패했습니다. * 무엇이 잘못되었는지: ':app:installDebug' 작업 실행에 실패했습니다. > com.android.builder.testing.api.DeviceException: 연결된 장치가 없습니다!Android Studio 실행More Actions -> Virtual Device Manager
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
레이지 익셉션 문의 드려요
SellBuyList 테이블에서 단방향 연관관계매핑 했습니다.join fetch 를 쓴다면 정상적으로 잘 작동됩니다.fetch를 뺸다면 레이지 익셉션 나오는이유가 궁금합니다.db에는 정상적으로 데이터가 있어요.MusicList 에 id필드만 fetch없이 레이지가 안터지고 잘돼고요MusicList 에 나머지 필드 title, content, price 등등 다 레이지 터지네요,,
-
미해결실리콘밸리 엔지니어가 가르치는 파이썬 기초부터 고급까지
dictionary comprehension
correct_score_dict = {name: score + 5 for (name, score) in incorrect_score_dict.items() if score < 80}이 코드를 print 하면 {'Lisa' : 80} 만 출력되는데,만약 80점 이하의 점수만 수정해서 원래대로 {'Tom': 80, 'Lisa':80, 'Sarah':90} 이렇게출력 하려면 if 뒤에 추가적인 코드가 필요할 것 같은데 그런 경우에는 코드를 어떻게 작성해야할까요?
-
미해결맛집 지도앱 만들기 (React Native + NestJS)
yarn start 아이폰 실행 오류 [해결 방법]
Unable to open 'package.json': Unable to read file '/package.json' (Error: Unable to resolve non-existing file '/package.json'). 'package.json'을 열 수 없습니다: '/package.json' 파일을 읽을 수 없습니다(오류: 존재하지 않는 파일 '/package.json'을 확인할 수 없습니다). error iOS devices or simulators not detected. Install simulators via Xcode or connect a physical iOS device 오류 iOS 장치 또는 시뮬레이터가 감지되지 않습니다. Xcode를 통해 시뮬레이터를 설치하거나 실제 iOS 장치를 연결하세요.Xcode 실행 -> Settings -> Platforms[GET] iOS 17.4분명히....이전에...GET 했었는데...요상함...
-
해결됨김영한의 실전 자바 - 중급 1편
자바 버전 질문합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 강의를 듣다 보니까 자바 버전 1.5부터 오토 박싱과(Auto-Boxing), 오토 언박싱(Auto-UnBoxing)을 지원한다고 하였습니다.그리고 예전 기억으로 따르면 1.7, 1.8 버전을 주로 쓰고 있다고 들었고,또 다른 기억에 따른다면 버전은 앞에 숫자리 가 바뀌면 뭔가 혁신적 인게, 바뀐다고 한다는게 기억이 나는 데..1.xx버전에서 2.xx버전의 차이점과 가장 큰 변화는 무엇인가요?(검색해 봐도 모르 겠더라고요.)답변 부탁 드립니다.(학생 수준 으로요.)
-
미해결Next + React Query로 SNS 서비스 만들기
Arrow Function vs Regular Function
안녕하세요!React 와 Next 의 component 선언 방식에 대한 convention 이 궁금하여 질문드립니다.Arrow Function vs Regular FunctionComponent 는 사실 하나의 함수입니다. 그리고 JavaScript 에서는 2가지 방식으로 함수를 선언할 수 있습니다. 하나는 화살표 함수이고 또 다른 하나는 function keyword 를 사용하는 것입니다.이 두 함수 선언 방식의 차이에는 크게 hoisting 과 this keyword 가 있습니다. 궁금하신 분들은 Arrow Functions vs Regular Functions in JavaScript – What's the Difference? (freecodecamp.org) 를 읽어보시면 좋을 것 같습니다. 이번 질문은 기능상의 차이 보다는 "일반적으로" 무엇을 사용하느냐 에 대한 질문입니다.Q. React 에서는 component 를 선언할 때 arrow function 을 일반적(많은 개발자들이 사용)으로 사용하는 것으로 알고 있습니다. Next 는 arrow function 를 일반적으로 사용하나요 아니면 regular function 을 사용하나요?Arrow Function Componentinterface ComponentProps { ... } const Component = ({ ... }: ComponentProps) => { ... } export default Component;Regular Function Componentinterface ComponentProps { ... } export default function Component({ ... }: ComponentProps) { ... }제가 생각했을 때는 export default 를 한번에 사용하기 위해서 regular function 으로 공식 문서나 강의 자료가 작성되어 있는 것으로 생각이 되어지는데, 더 일반적인 선언 방식은 무엇일까요? 물론 convention 이라는 게 없을 수도 있고 사실 프로젝트마다 다르게 정할 수는 있겠지만, 더 일반적인 방식이 무엇인지 궁금하여 질문드립니다.
-
해결됨코드로 배우는 React with 스프링부트 API서버
이동한 페이지 번호가 회색 색상으로 변하지 않습니다 ㅠ
데이터는 정상적으로 가져와지고 있습니다. 하지만 선택된 페이지 번호가 회색으로 변경이 안되고 있는데, 어느 부분이 문제인지 모르겠습니다...PageComponent.js 에서 선택된 페이지 번호에 회색을 부여하는 것으로 알고 있는데, 왜 안되는 걸까요..? 아래는 PageComponent.js 코드입니다. 강의 내용과 피피티와 코드가 동일합니다.import React from 'react'; function PageComponent({serverData, movePage}) { // serverData.prev, pageNumList, next return ( <div className="m-6 flex justify-center"> {serverData.prev ? <div className="m-2 p-2 w-16 text-center font-bold text-blue-400 " onClick={() => movePage({page: serverData.prevPage})}> Prev </div> : <></>} {serverData.pageNumList.map(pageNum => <div key={pageNum} className={`m-2 p-2 w-12 text-center rounded shadow-md text-white ${serverData.current === pageNum ? 'bg-gray-500' : 'bg-blue-400'}`} onClick={() => movePage({page: pageNum})}> {pageNum} </div> )} {serverData.next ? <div className="m-2 p-2 w-16 text-center font-bold text-blue-400" onClick={() => movePage({page: serverData.nextPage})}> Next </div> : <></>} </div> ); } export default PageComponent; 그리고 콘솔창에서 다음과 같은 경고창이 뜨는데 가장 좋은 해결 방법에 대해 알 수 있을까요?이 문제는 해결됐습니다! 제가 ListComponent.js 파일 안에서 div 태그 안의 key 속성에 todo.tno 를 큰따옴표로 묶은 오타였습니다.