묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결CloudNet@ - Amazon EKS 기본 강의
api 서버 갯수 질문
eksctl로 생성하기 첫 번째 과정을 보면, 가용영역을 두개로 만들어서 api서버가 두 가용 영역에만 생성 되는 것으로 나오는데......api 서버는 3개 이상 구성 되어야하지 않는지요?그리고 etcd는 몇개 생성 되는지요?
-
미해결스프링 시큐리티 OAuth2
ClientRegistrationRepository 커스터마이즈
ClientRegistrationRepository 를 구성하는 방법으로 client_id, secret 을 properties 나 빈으로 만들어 준비하는 방식으로 많이 예제가 있는데 Resource Owner 와 Client 가 동일해 client_credentials 방식으로 인가를 진행하고 싶을 경우 어떻게 customizing 할 수 있을까요? 고객사마다 가입해 client_id, secret 을 발급받는 상황에서는 미리 properties 나 bean 으로 하드 코딩 해둘 수 없을 것 같습니다.
-
해결됨팀 개발을 위한 Git, GitHub 입문
강의자료 부탁드립니다!
수업 이해가 잘되어서 강의자료보고 나중에 다시 깃을 쓸 때, 참고하고싶습니다!! n9805h@naver.com 입니다!!
-
해결됨김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
[은행 계좌 입출금 코드 작성] 해당 코드도 맞는지 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요, 다름이 아니라 [김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음] / 9. 메서드 / 은행 계좌 입출금 문제에 관련하여 질문이 있어 작성하게 되었습니다.해당 문제에 대해 입력값은 다음과 같다고 생각하고 BufferedReader로 풀었습니다.1 10000 2 8000 2 3000 3 4package method; // TODO 1. 공통 출력 부분을 start()라는 메서드로 따로 빼서 반복 호출하여 수행 // TODO 2. 입금 출금 등 요구 사항에 따라 구현이 다른 부분을 메서드로 추출 // TODO 3. 이때, 선택에 따른 숫자값과 입금액 및 출금액 등을 파라미터로 전달 // TODO 4. 잔액 확인 및 종료는 별다른 연산이 필요 없으므로 void로 설계 // TODO 5. 이때, 종료는 종료라는 책임이 해당 메서드에 배당이 되어야 하므로 메서드 내부에서 System.exit(0);을 수행 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Method { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st; String str; int balance = 0; while ((str = br.readLine()) != null) { st = new StringTokenizer(str, " "); int index = Integer.parseInt(st.nextToken()); // TODO Operator '==' cannot be applied to 'boolean', 'int' // TODO == 연산자는 boolean 타입과 int 타입 사이에서 지원 / 적용될 수 없습니다. -> int가 아닌 boolean을 지원한다는 것 int money = (st.hasMoreTokens()) ? depositOrWithdraw(st) : 0; if (index == 1) { balance = deposit(index, balance, money); } else if (index == 2) { balance = withDraw(index, balance, money); } else if (index == 3) { check(index, balance); } else { exit(index); } } } private static int depositOrWithdraw(StringTokenizer st) { return Integer.parseInt(st.nextToken()); } private static void start() { System.out.println("---------------------------------"); System.out.println("1.입금 | 2.출금 | 3.잔액 확인 | 4.종료"); System.out.println("---------------------------------"); } private static int deposit(int index, int balance, int depositAmount) { start(); System.out.println("선택: " + index); balance += depositAmount; System.out.println("입금액을 입력하세요: " + balance); System.out.println(balance + "원을 입금하였습니다. 현재 잔액: " + balance + "원"); return balance; } private static int withDraw(int index, int balance, int withdramAmount) { start(); System.out.println("선택: " + index); if (balance >= withdramAmount) { balance -= withdramAmount; System.out.println("출금액을 입력하세요: " + withdramAmount); System.out.println(balance + "원을 출금하였습니다. 현재 잔액: " + balance + "원"); } else { System.out.println(withdramAmount + "원을 출금하려 했으나 잔액이 부족합니다."); } return balance; } private static void check(int index, int balance) { start(); System.out.println("선택: " + index); System.out.println("현재 잔액: " + balance + "원"); } private static void exit(int index) { start(); System.out.println("선택: " + index); System.out.println("시스템을 종료합니다."); System.exit(0); } } 그런데, 답지 코드를 보니 BufferedReader가 아닌 Scanner더군요.제가 아직 Scanner는 잘 써보지 않아서 입력값이 주어지지 않은 상황에서 Scanner로 작성된 코드를 BufferedReader로 어떻게 변환해야할지를 잘 모르겠습니다. 따라서 질문은 다음과 같습니다.입력값이 위와 같이 주어진다고 생각하고 푸는게 맞는지맞다면, 해당 BufferedReader 코드도 동일한 값을 내는게 맞는지아니라면, 어느 부분을 잘못 작성하였으며 어떻게 수정하면 되는 것인지앞으로 하드 코딩이 아니라 프로그램을 작성하는 문제에 대해서는 입력값을 어떻게 고려하여 작성하면 좋을지 궁금합니다. 감사합니다.
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
26강 삭제 기능관련 질문입니다..!!
UpdateUser 사용시deleteUser 사용시2024-02-10 21:46:30.786 ERROR 10012 --- [nio-8080-exec-9] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.IncorrectResultSizeDataAccessException: query did not return a unique result: 2; nested exception is javax.persistence.NonUniqueResultException: query did not return a unique result: 2] with root cause오류코드를 보니 updateUser는 findById의 결과값이 고유하므로 문제가 일어나지않는데, deleteUser는 findByName으로 유저를 찾기때문에 같은 이름이 존재하면 결과값이 고유하지않으므로 오류가 발생하는거 같은데, (엄준식이 2명존재) 처음부터 Id 값을 받아오거나 생성시에 같은 이름을 못만들게 막는거 말고는해결할 방법이 없을까요?
-
미해결3. 웹개발 코스 [스프링 프레임워크+전자정부 표준프레임워크]
신규강의 무료쿠폰 신청 부탁드립니다. 감사합니다 즐거운 설되셔요
안녕하세요. 좋은 강의 너무 감사합니다.개발자PARK님 spring+전자정부프레임워크 수강을 신청했습니다.여기저기 살펴보다 보니 고마우신 글이 있어 실례지만 부탁 드려봅니다.EA + egovframe 신규 강의 무료쿠폰 주신다 하여 쪽지를 남겨봅니다.너무 감사합니다! 새해 복많이 받으시고 건강조심하셔요. 그리고 즐거운 설 명절되셔요또 좋은 강의 기대하겠습니다감사합니다.
-
해결됨직장인에게 꼭 필요한 파이썬-아래아한글 자동화 레시피
문자가 표안에 있는지 여부를 확인하고 싶어요.
안녕하세요~일코님 (맞는지 모르겠네요.)어젠가 그젠가 부터 https://martinii.fun/ 사이트 접속이 안되네요.. ㅠㅠ 아무튼 질문은표밖의 글자만 일괄 수정작업을 하고 있습니다. 볼드체만 추려서 일괄적으로 작업하고 있는데, 표안의 글자들이 바뀌고는 해서 표안의 글자는 패스~ 하게 하고 싶어서 홈페이지를 찾아보려했는데 저만 그런건지 먹통이네요.. ㅠㅠ 현재 상태는 1번부터 100번 문제가 있으면, 중간중간 지워야 하는 문제들이 있어서 넘버링 작업을 하고 있습니다.(1~XX 번까지 순서대로 수정하는 작업) 이것을 자동화하는 중에각 문제마다 지문이 표안에 있습니다.예) 번호(볼드) 문제지문(표안에 있음)이렇게 문제들의 반복인데, 간혹 지문(표안에 있는)에 볼드 숫자들이 들어가서 문제의 번호를 일괄로 바꾸다가 지문의 숫자가 바뀌어서 좀... 난간하게 되는데, 표안의 문자들은 패스하게 하는 코드를 알고 싶습니다. 그러니까... 문자가 표안에 있는지 여부를 확인 할 수 있으면 될것같습니다. 설 연휴 잘 보내시고, 새해 복 많이 받으세요~~
-
해결됨[개정판] 파이썬 머신러닝 완벽 가이드
피마 인디언 당뇨병 예측
안녕하십니까 선생님. 강의 너무 잘 듣고 있는 머신러닝 꿈나무 도은우입니다. 저는 현직의사로 의료ai의 길을 걸을려고 하는데 선생님의 강의가 너무 많은 도움이 되고 있습니다. 다름이 아니라, 인디언 당뇨병 예측에서 zero_features의 0의 값을 zero_features의 값의 mean으로 replace하셨는데, 이럴경우에 애초에 0이 있는것 때매 의미 있는 평균값이 나오지 않는다고 저는 생각했습니다. 애초에 0이 아닌 값들의 평균으로 하는건 어떤가요>???
-
미해결비전공자의 전공자 따라잡기 - 자료구조(with JavaScript)
let current = this.head 질문 있습니다!
this.head 대신 let current = this.head 처럼 current변수에 할당하여 사용하는 이유가 무엇일까요?ㅠ변수에 할당하여 사용하지 않았을 때 값을 보니 값이 다르게 나와 문의드립니다. li.add(3)이 실행될때 첫번째 노드가 사라짐 정상출력
-
미해결자바 11 LTS 업데이트 - JAVA 9, 10, 11 새기능 요약
Optional<T> 새 기능 7초 정도 영상이 안나옵니다
02:40 ~ 02:49 부분이 나오지 않습니다. Optional.of 와 Stream에 관한 부분을 설명하셨을 것 같은데, 확인 부탁드립니다 !
-
해결됨야, 너도 AI 서비스 만들 수 있어. [이미지 AI 서비스 서버리스 풀스택]
Lecture 5 내용중 heic변환관련..
안녕하세요 정말 재미있을꺼 같아서 강좌 나오자마자 결제해서 보고있습니다.Lecture 5 내용중에 파일변환 하는 부분이있는데 heic2any 룰 활용해서 heic 변환하잖아요?로컬로 리액트 돌리고 이미지 업로드 할때 heic 제외하고 전부 이미지는 업로드가 되고..heic를 포함해서 업로드하면 아무런 페이지가 나오지 않는데.. 왜그런걸까요?윈도우 사용하고있는데.. 혹시나 몰라서 ms에서 제공하는 heic 코덱을 구매해서 윈도우상에서는 이미지가 읽어는 지더라구요.. 웹에서는 heic 제외하고 정상 작동합니다.. 확인 부탁드립니다! heic 포함했을때 heic 포함하지 않을때
-
해결됨모의해킹 실무자가 알려주는, SQL Injection 공격 기법과 시큐어 코딩 : PART 1
시큐어 코딩적용 완성된 PHP 소스, 강의자료 공유
시큐어 코딩적용 완성된 Board PHP 소스 공유 (mySQL, MS SQL. Oracle) 가능할련지요?또한 강의 자료도 공유 가능한지요? 감사합니다.
-
미해결카프카 완벽 가이드 - 코어편
nocommit 관련 질문
package com.example; import org.apache.kafka.clients.consumer.*; import org.apache.kafka.common.TopicPartition; import org.apache.kafka.common.errors.WakeupException; import org.apache.kafka.common.serialization.StringDeserializer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.time.Duration; import java.util.Arrays; import java.util.Map; import java.util.Properties; public class ConsumerPartitionAssignSeek { public static final Logger logger = LoggerFactory.getLogger(ConsumerPartitionAssignSeek.class.getName()); public static void main(String[] args) { String topicName = "pizza-topic"; Properties props = new Properties(); props.setProperty(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "192.168.56.101:9092"); props.setProperty(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName()); props.setProperty(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName()); //props.setProperty(ConsumerConfig.GROUP_ID_CONFIG, "group_pizza_assign_seek_v001"); //props.setProperty(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, "6000"); props.setProperty(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "false"); KafkaConsumer<String, String> kafkaConsumer = new KafkaConsumer<String, String>(props); TopicPartition topicPartition = new TopicPartition(topicName, 0); //kafkaConsumer.subscribe(List.of(topicName)); kafkaConsumer.assign(Arrays.asList(topicPartition)); kafkaConsumer.seek(topicPartition, 5L); //main thread Thread mainThread = Thread.currentThread(); //main thread 종료시 별도의 thread로 KafkaConsumer wakeup()메소드를 호출하게 함. Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { logger.info(" main program starts to exit by calling wakeup"); kafkaConsumer.wakeup(); try { mainThread.join(); } catch(InterruptedException e) { e.printStackTrace();} } }); //kafkaConsumer.close(); //pollAutoCommit(kafkaConsumer); //pollCommitSync(kafkaConsumer); //pollCommitAsync(kafkaConsumer); pollNoCommit(kafkaConsumer); } private static void pollNoCommit(KafkaConsumer<String, String> kafkaConsumer) { int loopCnt = 0; try { while (true) { ConsumerRecords<String, String> consumerRecords = kafkaConsumer.poll(Duration.ofMillis(1000)); logger.info(" ######## loopCnt: {} consumerRecords count:{}", loopCnt++, consumerRecords.count()); for (ConsumerRecord record : consumerRecords) { logger.info("record key:{}, partition:{}, record offset:{} record value:{}", record.key(), record.partition(), record.offset(), record.value()); } } }catch(WakeupException e) { logger.error("wakeup exception has been called"); }catch(Exception e) { logger.error(e.getMessage()); }finally { logger.info("finally consumer is closing"); kafkaConsumer.close(); } } private static void pollCommitAsync(KafkaConsumer<String, String> kafkaConsumer) { int loopCnt = 0; try { while (true) { ConsumerRecords<String, String> consumerRecords = kafkaConsumer.poll(Duration.ofMillis(1000)); logger.info(" ######## loopCnt: {} consumerRecords count:{}", loopCnt++, consumerRecords.count()); for (ConsumerRecord record : consumerRecords) { logger.info("record key:{}, partition:{}, record offset:{} record value:{}", record.key(), record.partition(), record.offset(), record.value()); } kafkaConsumer.commitAsync(new OffsetCommitCallback() { @Override public void onComplete(Map<TopicPartition, OffsetAndMetadata> offsets, Exception exception) { if(exception != null) { logger.error("offsets {} is not completed, error:{}", offsets, exception.getMessage()); } } }); } }catch(WakeupException e) { logger.error("wakeup exception has been called"); }catch(Exception e) { logger.error(e.getMessage()); }finally { logger.info("##### commit sync before closing"); kafkaConsumer.commitSync(); logger.info("finally consumer is closing"); kafkaConsumer.close(); } } private static void pollCommitSync(KafkaConsumer<String, String> kafkaConsumer) { int loopCnt = 0; try { while (true) { ConsumerRecords<String, String> consumerRecords = kafkaConsumer.poll(Duration.ofMillis(1000)); logger.info(" ######## loopCnt: {} consumerRecords count:{}", loopCnt++, consumerRecords.count()); for (ConsumerRecord record : consumerRecords) { logger.info("record key:{}, partition:{}, record offset:{} record value:{}", record.key(), record.partition(), record.offset(), record.value()); } try { if(consumerRecords.count() > 0 ) { kafkaConsumer.commitSync(); logger.info("commit sync has been called"); } } catch(CommitFailedException e) { logger.error(e.getMessage()); } } }catch(WakeupException e) { logger.error("wakeup exception has been called"); }catch(Exception e) { logger.error(e.getMessage()); }finally { logger.info("finally consumer is closing"); kafkaConsumer.close(); } } public static void pollAutoCommit(KafkaConsumer<String, String> kafkaConsumer) { int loopCnt = 0; try { while (true) { ConsumerRecords<String, String> consumerRecords = kafkaConsumer.poll(Duration.ofMillis(1000)); logger.info(" ######## loopCnt: {} consumerRecords count:{}", loopCnt++, consumerRecords.count()); for (ConsumerRecord record : consumerRecords) { logger.info("record key:{}, partition:{}, record offset:{} record value:{}", record.key(), record.partition(), record.offset(), record.value()); } try { logger.info("main thread is sleeping {} ms during while loop", 10000); Thread.sleep(10000); }catch(InterruptedException e) { e.printStackTrace(); } } }catch(WakeupException e) { logger.error("wakeup exception has been called"); }finally { logger.info("finally consumer is closing"); kafkaConsumer.close(); } } } 해당 코드에 문제가 없는 것으로 보입니다. java.lang.IllegalStateException: This consumer has already been closed. at org.apache.kafka.clients.consumer.KafkaConsumer.acquireAndEnsureOpen(KafkaConsumer.java:2456) at org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:1218) at org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:1211) at com.example.ConsumerPartitionAssignSeek.pollNoCommit(ConsumerPartitionAssignSeek.java:63) at com.example.ConsumerPartitionAssignSeek.main(ConsumerPartitionAssignSeek.java:53) 해당하는 에러가 띄는데 이유를 알 수 있을까요? git 코드는 잘돌아가는 것을 확인했습니다. 차이점이 알 수가 없어서 질문드립니다,
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
User 클래스에 @Getter사용시 컴파일 오류
User클래스의 getter들을 정리하고싶어서Lombok의 @Getter 어노테이션을 사용해봤는데컴파일 에러가 나요 ㅠㅠUser 클래스를 @Getter로 만든사진UserResponse 클래스가 getId/getName/getAge 메소드를찾지 못했다는 에러가 발생합니다.User 클래스에 Getter를 직접 만들어준 모습정상작동하는모습롬복은 컴파일 시점보다 빠르게 getter을 만들어주는게 맞는데,제가 모르는 JPA관련 체킹로직이 롬복이 getter을만들기전에 동작해서 오류가 발생하는걸까요?다른 class들은 @Getter관련 문제가 없었거든요..제 나름대로 왜 이럴까 + 해결방법을 고민해봤는데잘모르겠어서 질문남깁니다...질문입니다!! @Entity가 붙은 class 에는 @Getter 어노테이션을 사용할 수 없나요:? +추가)생성자 관련 어노테이션도 안되는것 같습니다.2024-02-10 20:44:49.142 ERROR 15448 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.orm.jpa.JpaSystemException: No default constructor for entity: : com.group.libraryapp.domain.User; nested exception is org.hibernate.InstantiationException: No default constructor for entity: : com.group.libraryapp.domain.User] with root cause ///// @NoArgsConstructor(access=AccessLevel.PROTECTED) ///////////////////////////////////////// protected User() {}에러메세지에 No default construtor라는데 둘이 같지 않나요? 이거도 역시 직접 생성자를 만들어주니 문제없이 작동하네요.. 롬복이 문제인걸까요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
[체크박스-멀티] 안녕하세요. #ids의 작동 방식에 대한 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요, 우선 좋은 강의에 감사드립니다.다름이 아니라, 강의를 듣는 도중 멀티 체크박스를 정의하는 과정에서 #ids.prev('regions')부분에서 이해가 되지 않았습니다. th:each를 사용하는 경우 id에 1, 2, 3과 같은 숫자를 붙여 regions1, regions2.. 와 같이 만드는데, 왜 #ids.prev에선 'regions'를 입력으로 넣는지가 이해가 되지 않았습니다.(뿐만 아니라 전체 흐름을 조금 더 명확하게 이해하고 싶었습니다.)구글링을 해봤는데, 해당 강의에 대한 블로그 정리는 많지만 제가 원하는 내용은 찾지를 못했습니다..ㅜㅜ그래서, 이번 기회에 소스코드를 찾아보며 이해를 해보려고 했는데, 아래 작성된 과정이 맞는지, 제가 잘 이해한게 맞는지가 궁금하여 질문 드리게 되었습니다. 너무나도 긴 질문이라 미리 죄송하다는 말씀 드립니다..다음 코드는 SpringInputCheckboxFieldTagProcessor 클래스의 doProcess()와, AbstractSpringFIeldTagProcess 클래스의 computeId() 메서드 입니다.protected void doProcess(ITemplateContext context, IProcessableElementTag tag, AttributeName attributeName, String attributeValue, IThymeleafBindStatus bindStatus, IElementTagStructureHandler structureHandler) { String name = bindStatus.getExpression(); name = name == null ? "" : name; String id = this.computeId(context, tag, name, true); // 이하 생략.. } protected final String computeId(ITemplateContext context, IProcessableElementTag tag, String name, boolean sequence) { // 이전 부분 생략.. if (sequence) { Integer count = context.getIdentifierSequences().getAndIncrementIDSeq(id); return id + count.toString(); } } computeId()를 보면, sequence인 경우(→ 이 경우는 th:each가 들어간 경우라고 추측합니다.) Id에 count를 붙여서 반환하도록 되어있습니다.2.IdentifierSequences 클래스public final class IdentifierSequences { private final Map<String, Integer> idCounts = new HashMap(1, 1.0F); public IdentifierSequences() { } public Integer getAndIncrementIDSeq(String id) { Validate.notNull(id, "ID cannot be null"); Integer count = (Integer)this.idCounts.get(id); if (count == null) { count = 1; } this.idCounts.put(id, count + 1); return count; } public Integer getPreviousIDSeq(String id) { Validate.notNull(id, "ID cannot be null"); Integer count = (Integer)this.idCounts.get(id); if (count == null) { throw new TemplateProcessingException("Cannot obtain previous ID count for ID \\"" + id + "\\""); } else { return count - 1; } } } IdentifierSequences 클래스를 보면, idCounts 라는 Map에 id와 count 정보를 저장하고, 1에서의 computeId()는 getAndIncrementIDSeq() 를 통해 count 정보를 얻어냅니다.이 세부 과정을 생각해보면,처음에 th:field=”*{regions}”를 통해 regions라는 id가 들어가면 IdentifierSequences 클래스의 Map<String, Integer> idCounts 에는 regions라는 id가 없어 getAndIncrementIDSeq() 의 count값은 1이 됩니다.this.idCount.put(id, count + 1); 을 통해 idCounts에는 {”regions” : 2}가 저장되며, getAndIncrementIDSeq()가 반환하는 count값은 1이 됩니다.즉, 처음에 regions라는 id가 들어가면, 이는 <input> 태그에는 regions1이라는 id로 지정되지만 IdentifierSequence의 idCount 맵에는 count가 2로 되어있는 상태입니다.IDs 클래스public class Ids { private final ITemplateContext context; public String prev(Object id) { Validate.notNull(id, "ID cannot be null"); String str = id.toString(); return str + this.context.getIdentifierSequences().getPreviousIDSeq(str); } public Ids(ITemplateContext context) { Validate.notNull(context, "Context cannot be null"); this.context = context; } } 그러면 #ids.prev(’regions’) 를 통해 label이 regions1로 등록되는 과정은 다음과 같이 이해할 수 있을 것 같습니다.prev 메서드는 id를 입력받아, IdentifierSequence 의 getPreviousIDSeq()을 호출하여 얻은 숫자를 뒤에 붙여 label의 id를 지정합니다.이전 문단의 IdentifierSequence의 getPreviousIDSeq() 코드를 보면, idCount에서 얻은 count에 1을 빼서 반환합니다.idCount에는 count가 2로 지정되어 있기에, 최종적으로 #ids.prev(’regions’)의 결과는 regions1이 됩니다.활용 : #ids.next의 사용<label th:for="${#ids.next('regions')}" th:text="${region.value}" class="form-check-label">서울</label> <input type="checkbox" th:field="*{regions}" th:value="${region.key}" class="form-check-input"> label과 input 태그의 위치를 바꾸고 #ids.next를 사용하면, 이전과 같이 label의 for와 input의 id를 일치시킬 수 있습니다. 결과는 다음과 같습니다.<!-- multi checkbox --> <div> <div>등록 지역</div> <div class="form-check form-check-inline"> <label for="regions1" class="form-check-label">서울</label> <input type="checkbox" value="SEOUL" class="form-check-input" id="regions1" name="regions"><input type="hidden" name="_regions" value="on"/> </div> <div class="form-check form-check-inline"> <label for="regions2" class="form-check-label">부산</label> <input type="checkbox" value="BUSAN" class="form-check-input" id="regions2" name="regions"><input type="hidden" name="_regions" value="on"/> </div> <div class="form-check form-check-inline"> <label for="regions3" class="form-check-label">제주</label> <input type="checkbox" value="JEJU" class="form-check-input" id="regions3" name="regions"><input type="hidden" name="_regions" value="on"/> </div> </div> 세부 과정을 보면 다음과 같습니다.public String next(Object id) { Validate.notNull(id, "ID cannot be null"); String str = id.toString(); return str + this.context.getIdentifierSequences().getNextIDSeq(str); } next()는 IdentifierSequences의 getNextIDSeq() 를 통해 count 정보를 얻습니다.public Integer getNextIDSeq(String id) { Validate.notNull(id, "ID cannot be null"); Integer count = (Integer)this.idCounts.get(id); if (count == null) { count = 1; } return count; } getNextIDSeq() 를 보면, idCounts에 id가 없는 경우 1을 반환합니다. 즉, 처음에 #ids.next(’regions’)가 입력되면, getNextIDSeq()는 1을 반환하기에 첫 번째 label은 for=’regions1’ 이 됩니다.다음 과정은 2번 문단에 적은 세부 과정과 동일한데, 이전의 #ids.prev에서와 달리 #ids.next는 count에 1을 뺀 값이 아닌 count 그대로를 반환하므로, #ids.prev를 사용할 때와 같이 for와 id가 일치된다고 생각할 수 있습니다.읽어주셔서 감사드립니다. 새해 복 많이 받으세요!(질문 작성일이 설 당일이라.. 겸사겸사 인사드립니다!)
-
해결됨[코드캠프] 입문자를 위한 Javascript 알고리즘 이론+실습
잡았다 요놈! 풀이
맨 마지막 연습문제인 잡았다요놈!의 reference code에서if (el.time > 0)이 아닌if (el.time > 제일늦은시간)으로 해야 time의 최댓값이 갱신될 것 같습니다.좋은 강의 감사합니다!
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
리스트 번호 클릭시 current가 항상 0입니다.
섹션 3. 리액트와 API서버 통신 - 목록처리(1) 학습중인데요. serverData를 console.log로 찍어보면 current가 항상 0입니다. 어디서 확인해야할까요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
Test코드 실행 시 findItems에서 오류 발생합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]7:56에서 하신 테스트를 실행했을 때 강의에서는 정상적으로 동작했지만 저는 오류 발생하며 테스트가 정상적으로 되지 않습니다.오류 로그테스트 코드에서 item3이 무슨 이유인지 모르지만 같이 넘어가서 문제가 되는 것으로 보입니다.왜 이럴까요?
-
미해결
import style 목록에 borderTransparent가 없어요
token 플러그인 import style 목록에 해당컬러가 없습니다..어떡해야되나요..? light, dark set엔 없고 global엔 뜹니다..
-
해결됨자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 2(마스터편)
큐 구현하기 질문드립니다
public String deQueue() { if(isEmpty()){ System.out.println("Queue is Empty"); return null; } String data = front.getData(); front = front.next; if( front == null ){ // 마지막 항목 rear = null; } return data; }강사님께서 올려주신 코드인데 처음에는 head가 null이니까 isEmpty가 true라서 return null이 되는데enQueue 실행하고 deQueue를 2번 실행하면 head가 null이 아니라서 isEmpty가 false가 되면서NullPointerException이 발생합니다. 어떻게 수정하면 좋을까요?