묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
실무에서 sequence 생성시 궁금한점
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 강의를 듣고 실무에 적용하던 중 궁금한 점이 있어 문의를 드리게 되었습니다.id를 생성하는데 있어서 sequence 전략이 좋아보여 사용하려는데 보통 sequence는 schema 별로 하나만 만들어서 테이블에서 공통적으로 사용하나요? 아니면 schema의 table당 하나씩 만들어서 사용하나요?사용하는 DB는 MariaDB입니다.감사합니다.
-
해결됨ASP.NET core Blazor 디테일 강의 - 초급편
blazor server 에서의 token auth 진행 과정
안녕하세요. 혼자서 아무리 찾아봐도 아리송한 부분이 있어 오랜만에 질문 남깁니다.다름이아니라 제가 jwt token을 활용한 인증을 구현하려고 하고있습니다.페이지에는 @attribute [Authorize] 를 통해 토큰을 갖고있는 사용자만 접근할 수 있게 구현하였습니다.인증에 대한 부분은 제대로 구현이 되었는데 token을 만료시키기 위해 expire을 주었는데도 시간이 지나도 만료가 되지 않았습니다. 그래서 제가 생각한 원인이 혹시 내부적으로 blazor server에서는 인증할 때 매번 토근을 주고받지 않는건가? 라는 생각이 들었습니다 (실제로 관리자 콘솔을 봐도 blazor server에서는 네트워크 부분에 요청하고 받는게 없기때문에 당연히 그 헤더에 포함될 token도 없었기에 이렇게 생각하게 되었습니다) 제 생각처럼 blazor server는 인증할때 처음 한번만 하는건가요??만약 한번만 인증한다면 blazor server 에서는 자동으로 만료 시킬수는 없을것 같은데, 그렇다면 따로 제가 만료시간을 가져와서 비동기함수를 만들어 특정시간 후에는 삭제해버리던가(그 사이에 토큰이 탈취되면 계속 사용할수있다는 문제점 있음), 조건문을 통해 시간이 지난 토큰은 없애고싶은데... 어느부분에서 토큰을 통한 인증을 진행하는지 몰르겠어서 이 부분도 쉽지않을거같습니다... 혹시 방법이 있을까요?
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
다익스트라와 크루스칼 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 최단거리를 구하라는 문제와, 최소거리를 구하라는 문제는 동일한 문제로 보고, 다익스트라나 크루스칼 둘 중 하나로 사용해도 상관없는건가요??
-
해결됨리눅스 커맨드라인 툴 (Full ver.)
검색 14:56
찾는 단어 하이라이트 키는명령어가 뭔가요?
-
미해결따라하며 배우는 리액트 A-Z[19버전 반영]
react.memo 를 했는데 안되요 오타도 아닌데 왜그럴까요?
import React from 'react' const List = React.memo (({ id, title, completed, todoData, setTodoData, provided, snapshot }) =>{ console.log('List is Rendering'); const handleClick =(id) => { let newTodoData = todoData.filter((data)=> data.id !== id) console.log ('newTodoData', newTodoData); //this.setState({todoData: newTodoData}); setTodoData(newTodoData); }; const handleCompleteChange = (id) => { let newTodoData = todoData.map(data => { if(data.id === id){ data.completed = !data.completed; } return data; }) //this.setState({ todoData : newTodoData}) setTodoData(newTodoData); }; return ( <div key={id} {...provided.draggableProps} ref={provided.innerRef} {...provided.dragHandleProps} className={`${snapshot.isDragging ? "bg-gray-400" : "bg-gray-100"} flex items-center justify-between w-full px-4 py-1 my-2 text-gray-600 bg-gray-100 rounded`}> <div className='item-center'> <input type="checkbox" defaultChecked={completed} onChange={() => handleCompleteChange(id)}/> <span className={completed ? 'line-through' : undefined}>{title}</span> </div> <div className='item-center'> <button className="px-4 py-2 float-right" onClick={()=> handleClick(id)}>x</button> </div> </div> ) }); export default List import React from 'react' import { DragDropContext, Draggable, Droppable } from 'react-beautiful-dnd'; import List from './List'; const Lists = React.memo(({ todoData,setTodoData }) => { console.log('Lists Component'); const handleEnd = (result) => { console.log('result', result); if(!result.destination) return; const newTodoData = todoData; //1. 변경시키는 아이템을 배열에서 지워줍니다. //2. return 값으로 지워진 아이템을 잡아줍니다. const [reorderedItem] = newTodoData.splice(result.source.index, 1); //3. 원하는자리에 reorderedItem을 insert 해줍니다. newTodoData.splice(result.destination.index, 0, reorderedItem); setTodoData(newTodoData); }; x return ( <div> <DragDropContext onDragEnd={handleEnd}> <Droppable droppableId='todo'> {(provided) => ( <div {...provided.droppableProps} ref={provided.innerRef}> {todoData.map((data, index) => ( <Draggable key={data.id} draggableId={data.id.toString()} index={index} > {(provided, snapshot) => ( <List key={data.id} id={data.id} title={data.title} completed={data.completed} todoData={todoData} setTodoData={setTodoData} provided={provided} snapshot={snapshot} /> )} </Draggable> ))} {provided.placeholder} </div> )} </Droppable> </DragDropContext> </div> ); }); export default Lists
-
미해결스프링 시큐리티
Security 듣는 중 드리는 질문
매번 여쭤보기보다 누적했다가 한번에 질문드리는게 더 좋을 것 같은데 강의를 일일이 찾기 어려워 한번에 올리겠습니다. 1. MySecurityConfig.class에 붙은 @Configuration은 어떤 일을 하나요?>> @Configuration은 내부에 있는 @Bean 메소드를 스프링 컨테이너에서 싱글톤으로 관리될 수 있게끔 보장해주는 Annotation인 것으로 알고 있습니다. 하지만 Spring Configuration 클래스 내부에는 별다른 Bean 등록 객체가 없는 것 같은데, 추상적으로 [Spring에게 이 Security Configuration을 사용할거야]라고 알려주는 것보다 조금 더 무슨 역할을 하는지 궁금해서 질문 드립니다. 2.UserDetailService, CustomAuthenticationProvider 등을 왜 직접 Custom화 하는건가요?>> 그 때마다 앱 내에서 사용하는 Authorities들과 [사용자]로 쓰는 객체가 매번 달라서 그렇다고 이해하면 될까요? 가령, 앱에서는 [Member, Account] 등을 사용, Spring 에서는 UserDetails란 인터페이스를 지원 3. CustomAuthenticationProvider 만 따로 Bean 주입 메소드를 작성해준 이유가 있을까요?@Bean public AuthenticationProvider authenticationProvider() { return new CustomAuthenticationProvider(); }>> AuthenticationProvider 역할의 구현체를 이 앱에선 CustomAuthProvider 구현체를 사용할 것이다라는 메소드를 통해 Bean 등록을 해주는 모습입니다. 하지만 CustomUserDetailService 는 @Service Annotation을 통해 바로 컨테이너에 넣었습니다. 이는 @Service 내에 포함되어 있는 @Component로 인해 Bean 등록이 되는 것으로 알고 있습니다. 이 때, CustomAuthenticationProvider는 @Component로 하지 않고 저렇게 메소드로 해주는 이유가 있을까요? 4. CustomAuthenticationProvider.class 내 authenticate()에 대해서@Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { String username = authentication.getName(); String credentials = (String) authentication.getCredentials(); // 비번 AccountContext userDetails = (AccountContext) userDetailsService.loadUserByUsername(username); // UDS에서 알맞은 유저 가져온다 (우리가 만들어준 객체를 사용할 것이라 등록함) if(!passwordEncoder.matches(credentials, userDetails.getAccount().getPassword())){ String msg = "비밀번호 불일치, 인증 실패하였습니다"; log.error("Error while handling CustomAuthenticationProvider authenticate(): {}", msg); throw new BadCredentialsException("Error while handling CustomAuthenticationProvider authenticate():: " + msg); } // 일치하면 인증 완료, Authentication 온전한 결과를 넣어줘야 한다 // Form 에서 사용하는 Authentication 객체는 하위 (근데 새로 만들어줌?) UsernamePasswordAuthenticationToken authenticatedToken = new UsernamePasswordAuthenticationToken(userDetails.getAccount(), null, userDetails.getAuthorities()); return authenticatedToken; }다음은 강의에서 사용하신 소스코드 입니다! 이전에 해주신 이론 설명을 바탕으로 해당 코드를 작성하면서 생긴 의문은 Authentication authentication 객체입니다. " AuthenticationProvider에서 받은 [인증 전] Authentication 객체와 내보낼 [인증 후] Authentication 객체가 같은 객체이다"라고 해주셨던 것 같은데, 해당 코드 아래에서 Authentication 인증 객체를 새로 생성하는 것 같은데, 왜 그런지 알 수 있을까요? 5. Bean 주입 관련3번 질문과 연관된 질문입니다! 직접적으로 Security 관련이 아닌 Bean 주입 관련한 내용이라... 양해부탁드립니다 ㅠ.ㅠ 다름이 아니라 직접 Bean 주입을 3번과 같이 하는게 아니라 @Component로 한다면, 자동으로 해당 구현객체를 쓴다는 점이 궁금합니다! 가령, 위에 AuthenticationProvider 의 구현체를 CustomAuthentication 으로 사용한다고 직접적으로 Bean 주입을 해줬기 때문에 해당 구현체를 사용하는 것이 이해가 가지만, CustomUserDetailsService 클래스 같은 경우 @Service annotation 으로 빈 등록을 하게 해줬습니다. 이럴 때는 기존에 사용하고 있던 UserDetailsService 구현체는 어떻게 사용하지 않는다는걸 스프링이 알게 될까요? @Service 를 사용하는 것은 자동주입이고, 기존에 Security 가 사용하는 구현체는 수동 주입했을 것 같은데, 이럴 경우 수동 주입이 우선권을 가지게 되지 않나 싶어서 문의드립니다! 감사합니다.
-
미해결리눅스 커맨드라인 툴 (Full ver.)
백스페이스 누르면 앞칸으로 이동하는데요.
화면과 다르게 앞칸으로 이동합니다. 윈도우 터미널에서 인서트 모드 누르고 글 적을 때 일어나는 현상이 일어납니다.글 적으면 뒤에 위치한 글자를 타이핑한 글자로 덮어씌어 집니다.
-
미해결예제로 배우는 스프링부트 입문
25강 security 관련 에러 (Is there an unresolvable circular reference?)
프로젝트 다 만들고 테스트를 하니까 BeanCurrentlyInCreationException 이 발생했습니다. 에러 메시지가 다음과 같았습니다. :org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'webSecurityConfig': Requested bean is currently in creation: Is there an unresolvable circular reference?circular reference이 문제라고 에러 메시지가 나오더군요. 검색을 해보니까 스프링부트 2.6.x 부터는 순환참조 (circular reference)가 금지되었다고 합니다. 강사님이 권하신 스프링 부트 버전이 아마 아닌 것 같은데 저는 그냥 제 멋대로 더 높은 버전을 써버린 것 같습니다. 여튼 그 해결책도 검색해봤습니다.application.properties에spring.main.allow-circular-references=true한 줄을 적어 넣으면 된다고 합니다. 저와 같은 문제를 겪는 분들이 있을지 모르니까 글 남깁니다. 이 해결책이 좋은 해결책인지는 모르겠지만 여튼 예제는 돌아갑니다. ^^
-
미해결Redux vs MobX (둘 다 배우자!)
Redux toolkit 과 axios API 호출에 관한 질문입니다.
안녕하세요 제로초님!항상 감사합니다. 제로초님 강의로 실력을 매우 키우고있습니다. 친구의 API 로 개인 프로젝트를 진행하고있습니다.환경은 typescript, next.js 이고 redux toolkit으로 상태관리를 하고있습니다. getServerSideProps에서 dispatch를 하여 모든 게시글을 불러오는 작업을 하고있습니다.여기서 문제는아래 주석으로 보시는바와 같이 fetch를 통해서 API를 호출하면 정상적으로 JSON 형식의 API가 잘 호출이 됩니다. 그런데 axios 로 API를 호출해서 data를 확인하면 계속이런식으로 깨져서 나옵니다.axios config 에서 headers에 content-type을 application/json charset=utf-8 로 시도해도 똑같고axios config 에서 responseType을 json으로 변경해도 똑같이 깨져서 나옵니다.. 어디서 제가 잘못설정한게 있을가요..
-
미해결타입스크립트 입문 - 기초부터 실전까지
제거부분 질문
toString부분에 자꾸 불이들어오는데 뭐가 잘못된걸까요? T 형식에 toString형식이없다는데 다른분들 코드 비교해봐도 어느부분이 안맞는건지 잘 모르겠어서요!
-
미해결Vue.js + TypeScript 완벽 가이드
vue3에서 router 폴더별 모듈화 진행
안녕하세요.학습과 다른 내용으로 질문하나 드립니다.vue3 + typescript 연습하고있는데요router폴더에서 modules파일안에있는것들을 자동 import 시키고 싶은데 require.context 에러가 납니다. require를 사용할 수 없다는데 이유 알 수 있을까요? 서칭해서 이것저것해봤는데 해결을 못했습니다.위의사진은 폴더구조이며아래사진은 에러내용입니다,Cannot find name 'require'. Do you need to install type definitions for node? Try npm i --save-dev @types/node and then add 'node' to the types field in your tsconfig.ts(2591)
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
화면레이아웃에 대한 2차 질문
먼저 주말까지 답변 달아주신 거 너무 너무 감사드립니다. 큰 회사는 아니라 저희는 boot대신 스프링mvc프로젝트를 이용해서 관리하고 있고 기존 jsp만 이용해서 뷰를 관리하고 있었습니다 리뉴얼을 하기 위해서 고민하던 중기본 JSP로 개발되던 것을 완전 thymeleaf로 교체해서 사용할지아님 jsp+tiles로 레이아웃 관리를 변경할 것인 지를 두고 고민 중에 있습니다.말씀하신대로 tiles가 old해서 아닌가 싶기도 하고 아직도 사용하는 프레임워크 인지도 궁금하고 전문가님의 의견을 듣고 싶어 글을 남기게 되었습니다.'감사합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
event와 delegate 질문드립니다!
차이점event와 delegate 는 개념이 거의 같은데,delegate는 어디서든 호출이 가능하고 event는 public 한정자로 생성해도생성된 클래스 내에서만 호출이 가능즉 다른 곳에서는 직접호출 불가능만약 다른 클래스에서 사용하려면 Update처럼 뭔가를 만들어서(이런것도 프로퍼티라고 하나요?) 안에 넣어서 사용해야 된다. event는 메서드를 추가할 때 꼭 +=, -= 를 사용한다 으로 이해했는데 이렇게 생각해도 괜찮을까요? delegate 질문OnInputKey InputKey;InputKey = OnInputTest;위에 것이내부적으로는OnInputKey InputKey = new OnInputKey(OnInputTest);로 실행된다고 답글을 남기신 것을 보았는데개발자들이 조금 더 편하게 사용하려고 생략한 방법인가요?둘 다 똑같은 것이고 표기만 다르다면 실무에서는 어떤 표기를 사용하나요??위에 두 것이 같은 것이라면1.InputKey = OnInputTest;2.InputKey += OnInputTest;3.OnInputKey InputKey = new OnInputKey(OnInputTest);다 같은 것일까요?? delegate 체이닝 질문 1.InputKey = OnInputTest1 +OnInputTest2는 안되는데2.InputKey = new OnInputKey(OnInputTest1) +new OnInputKey(OnInputTest2)는 되는 이유가 있을까요??내부적으로는 같은데.. 컴파일러가 인식을 못 하는 것인가요? event개인적인 생각으로 event가 더 안전?하고+= 함수1+= 함수2이런 식으로 구독해서 사용하는 것이 참 보기도 좋다고 생각하는데 delegate만 사용하지 말고 아예 전부 event로 사용하지 않는 이유가 있을까요?
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 기본편
excel관련 질문입니다.
안녕하세요. 엑셀파일을 create 하려고 하는데, 매번 이렇게 workbook이 정의되지 않아서 생성이 안된다고 뜹니다. ㅠㅠ 선생님께서 알려주신 스튜디오에서도 안되고, 쥬피터 노트북에서도 보았지만 계속 정의되지 않았다고 오류만 뜨네요... 답변 주시면 감사하겠습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
선생님 홀수인 경우가 살짝 이해가 안됩니다.
홀수일 경우 2^5 = 2^2 * 2^2 * 2^1 이됩니다. 아래 코드를 보시면 조금 다른 것 같습니다 ret = (ret * ret) % c;if(b % 2)ret = (ret * a)% c; 하지만 위의 홀수일때의 계산을 풀어보면ret = ((ret * ret) % c * a) %c가 됩니다. 이를 다시 풀어보면 ret % c %c * ret %c %c * a %c 됩니다. 이러면 모듈러 연산이 두번씩 이루어지는 부분이 생기기 때문에 맞지 않는거 아닌가요?
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
18 버전 노드에서 에러나시는 분
저는 nvm 파일 다운받아서 node 16.13.0 버전으로 재설치해서 해결되었습니다.
-
미해결처음 시작하는 Infrastructure as Code: AWS & 테라폼
terraform으로 eks 구성 관련하여 질문 + 기타 질문
안녕하세요, 현재 스타트업에서 일하고 있는 장선우라고 합니다. 팀에서 aws cloud를 terraform으로 관리하는 것을 도입중에 이 강의를 우선 듣게 되었습니다.먼저 좋은 강의 감사합니다 :) 얼마전 인프콘 발표도 정말 인상깊게 들었는데, 정말 감사드려요.저희는 현재 eksctl로 eks를 운영(helm, argocd활용) 하고 있습니다. terraform으로 이를 마이그레이션 하려고 할 때 몇가지 궁금증이 생겨 질문 드립니다. 1. eks에서 helm을 운영하는경우에, terraform provider helm을 사용하는 경우가 많나요? 아니면, terraform에서 eks만 띄워두고, helm은 따로 yaml파일로 사용하나요?2. 혹시 후자인 경우에는 보통 repository는 분리해서 사용하나요? (아니면 tf폴더와 helm 템플릿 관련 폴더가 나눠져 있을까요?) aws workshop 레퍼런스를 봤는데 해당 파일의 샘플앱은 kuberenets 템플릿을 yaml이 아닌 tf로 구성하고 있는데, 낯설게 느껴지기도 하고 helm에도 적용이 될지, 실제 현업에서도 사용하는 베스트 프렉트스 일지 궁금해서 질문 드립니다. (관련 레퍼런스는 여기 입니다.) 기타 질문최근 '확장 가능한 테라폼 코드 관리'라는 자료를 읽게 되었습니다. 해당 자료에서는 확장성이나 커스텀을 위해 외부 모듈 사용 (e.g., terraform-aws-module) 을 지양해야 한다는 내용이 있었습니다. 같은 생각이신지 궁금합니다. 이 부분을 배제하고 terraform을 세팅하는 것이 좋을지 궁금해서 질문드렸습니다. 질문이 너무 길었네요. 강의 정말 감사드립니다.
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
Dio 패키지가 http 패키지의 역할을 하는 것인가요?
이전 개인적인 경험상 api데이터를 받아오거나 네트워킹을 할때 dart.dev 에서 제공하는 http package (pub.dev/packages/http) 를 사용하고 했었는데, dio 가 그 역할을 하는 것인가요?어차피 극히 일부분만 다루었어서 둘 다 잘은 모르지만, http 패키지가 아닌 dio 패키지를 사용하는 결정적 차이나 각각의 장단점을 간략하게 알려 주실 수 있을까요? dio는 이번에 첨 알았는데 둘 다 어마어마한 좋아요를 받은 패키지라 궁금합니당.감사합니다.
-
미해결Slack 클론 코딩[실시간 채팅 with React]
스크롤탑 동기처리 이슈.
안녕하세요 제로초님.인피니티 스크롤 로딩 후 추가 데이터를 로딩하고 스크롤 위치를 유지하는 로직에 문제가 있어서 문의드립니다.아래 코드에서는 setSize의 then문 안에 setTimeout으로 한 번 더 감싸주었는데setTimeout이 없는경우 데이터가 불러와지기전에(스크롤의 높이가 늘어나지 않은 상태에서) setTimeout내부의 로직이 실행됩니다.그로인해 스크롤의 높이는 기존높이 - 기존높이 로 scrollTop(0) 과 같은 상태가 되어버리는데요.setTimeout으로 0초의 딜레이를 주면 또 순서대로 동작을 합니다...이런경우에 좋은 해결책이 있을까요? const onScroll = useCallback((values: positionValues) => { if (values.scrollTop === 0 && !isReachingEnd) { setSize((prevSize) => prevSize + 1).then(() => { setTimeout(() => { if (typeof scrollbarRef !== "function" && scrollbarRef?.current) { scrollbarRef.current.scrollTop(scrollbarRef.current.getScrollHeight() - values.scrollHeight); } }, 0); }); } }, []);
-
미해결
scikit-learn설치에 문제점이 있어서 질문합니다!
안녕하세요 저는 처음 python을 설치하여 파이썬의 ㅍ자도 모르는 정말 아무지식이 없는 초보입니다. 어쩌다 scikit-learn을 설치해야하게 되어 파이썬을 설치 후 scikit-learn 홈페이지에 나와있는 대로pip install -U scikit-learn을 입력후 엔터를 눌러봤는데 File "<stdin>", line 1 pip install -U scikit-learn ^^^^^^^SyntaxError: invalid syntax>>> 이라는 구문만 뜹니다. 전혀모르겠습니다 어떻게 해야할까요?인터넷에 나온 방법에 있는건 다 해보았습니다 (환경 변수 편집(파이썬 주소 path에 넣기),(pip 주소 환경 변수 path에 넣기) + 레지스트리 편집((LongPathsEnabled) 1에서 0로 바꾸어 놓기) 아나콘다도 설치하고 visual c++ (2015~2022) Redistributable (x64)도 설치했는데 아무것도 안됩니다(명령 프롬프트는 작동이 되네요)