묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
강의 20분13초 내용 질문입니다.
requestMatchers("/login").permitAll()로 /login에 대한 요청은 인증이 필요없게 설정했는데, .formLogin()을 설정하고 나서 "/login" 요청이 formLogin 방식의 필터에 걸리는 건가요?formLogin() 설정을 해도 이미 위에서 equestMatchers("/login").permitAll() 로 /login 에 대한 요청은 인증이 필요없으므로 필터에 걸리지 않고 바로 컨트롤러 PostMapping("/login")으로 가야되는거 아닌가요?
-
해결됨독하게 시작하는 C 프로그래밍
실행파일 미생성으로 인한 빌드 오류
안녕하세요, 우선 양질의 강의에 감사드립니다. 다름이 아닌, 별다른 설정을 만지지 않았는데 비주얼 스튜디오 내에서 컴파일을 실행할 때마다 exe파일이 생성되지 않았다는 경고문이 뜨며 빌드가 되지 않습니다. 경고문에 적힌 주소를 확인해보니 exe파일이 존재하지 않은 것을 확인했습니다.구글링을 해보아도 답을 찾기가 어렵네요ㅜㅜ 어떻게 해결해야할지 알려주실 수 있으신가요? 감사합니다.
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
기능 구현 질문드립니다.
강의 영상 알차게 잘 보고 있습니다!출시까지 목표로 두고 있는 프로젝트라고 하셔서 캐릭터 장비요소는 필수라 생각되어 혹시나 장비드랍 및 장착기능 구현이 업데이트 내용에 있나 궁금해서 여쭤봅니다.1.장비아이템도 드랍 및 가챠뽑기방식2.장비아이템이 추가된다면 같은 장비라도 옵션이 다르게 보여지고 인벤토리로 저장되는 방식으로 구현되는지 궁금합니다. (예시 : 디아블로 아이템 옵션수치 및 옵션랜덤 방식)
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
(Interlocked) Race condition에서 number가 0이 되는 경우가 너무 신기합니다.
Interlocked 강의 부분에서 전역 변수 number = 0에 대해Thread 1은 for문으로 number++Thread 2는 for문으로 number-- 여기서 Thread 두 개가 race condition으로 인해 반복횟수가 많아지면 number를 가져오고, 연산하고 대입하는 과정에서 원자성이 보장되지 않아 number가 변한다고 설명하셨는데요. 오히려 그러면 for문에서 1만번의 반복 과정에서는 number = 0 으로 제대로 나타났는데, 그게 이해가 되지 않습니다. 반복 과정에서도 각 Thread가 race condition이기 때문에 number가 변동할 것 같은데, 제 컴퓨터로 돌려봐도 어느정도 연산량이 적으면 number = 0으로, 이상하게 올바르네요. 이유가 무엇일까요? Thread 2가 실행되기 전에, 컴퓨터의 연산이 빨라서 Thread 1에서 number를 1만번 ++의 계산이 끝나는 걸까요?
-
해결됨RAG를 활용한 LLM Application 개발 (feat. LangChain)
streamlit import 불가
안녕하세요, 비개발자로 streamlit 부분까지 따라왔는데 막혀버렸습니다 ^^;streamlit import가 되지 않아서 문의드립니다. 콘솔창에서 hello streamlit 입력했을 때 정상적으로 브라우저에 뜨는 것을 확인했는데, 아래처럼 VScode에서는 import가 되지 않습니다. 혹시 가상환경에 문제가 있는걸까요? inflearn-llm-application 가상환경에서 mkdir로 inflearn-streamlit을 만들었고 아래처럼 inflearn-streamlit 을 activate 한 상황입니다. 확인 부탁드리겠습니다! 감사합니다.
-
미해결토비의 스프링 부트 - 이해와 원리
프로퍼티 빈의 후처리기 도입 AnnotationUtils의 사용
강의 도중 AnnotationUtils를 사용하여 애노테이션의 정보를 얻어오는 부분이 있습니다.MyConfigurationProperties annotation = AnnotationUtils .findAnnotation(bean.getClass(), MyConfigurationProperties.class); if (annotation == null) return bean; Map<String, Object> attributes = AnnotationUtils.getAnnotationAttributes(annotation); String prefix = (String) attributes.get("prefix"); return Binder.get(env).bindOrCreate(prefix, bean.getClass()); 여기에서 attributes를 가져오지 않고 annotation.prefix() 를 사용해서 정보를 가지고 올 수도 있다고 생각됩니다만 AnnotationUtils를 사용할 때의 다른 이점이 있는 것인가요??MyConfigurationProperties annotation = AnnotationUtils .findAnnotation(bean.getClass(), MyConfigurationProperties.class); if (annotation == null) return bean; return Binder.get(env).bindOrCreate(annotation.prefix(), bean.getClass());
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
WriteLock이 기존 진행 되는 ReadLock이 끝남을 기다리는 과정에 대해서 질문드립니다.
int desired = (Thread.CurrentThread.ManagedThreadId << 16) & WRITE_MASK; while (true) { for(int i = 0; i < MAX_SPIN_COUNT; i++) { if (Interlocked.CompareExchange(ref _flag, desired, EMPTY_FLAG) == EMPTY_FLAG) return; } Thread.Yield(); } desired 부분에서 마스크를 통해 WriteThreadId를 제외하고 밀어버린 뒤 Interlocked부분에서 비교를 통해 ReadLock과 WriteLock이 없는지 비교하고 있습니다. 위 과정에서 만약 먼저 ReadLock이 잡혀있다면 ReadLock이 풀릴 때 까지 기다리게 되는데 만약 끊임없이 Read가 일어나 ReadLock이 풀리는 틈이 없어 Write가 되지않는 극단적인 경우는 일어나지 않는건가요? 혹시라도 일어나지 않는다면 Read 하는 과정이 매우 짧기 때문에 그런 일이 발생하지 않는 것인지 궁금합니다.
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
24년 2회기출 35분 52초
24년 2회기출 35분 52초 에 아스키코드 65,97 설명하시는데65가 더 작은 소문자 a 라고 말한게 잘못말한거 같아요
-
해결됨비전공자도 이해할 수 있는 Docker 입문/실전
workdir 대신에 RUN mkdir /directory COPY 상대경로 /directory/복사할파일 이런식으로 구현해도 되나요 ?
둘 중 뭐가 보편적으로 사용되는 편인지 궁금합니다! 1번 사안WORKDIR /directory 2번 사안 RUN mkdir /directoryCOPY [복사할 파일의 상대경로] [/directory/복사할 파일]
-
미해결실리콘밸리 데이터 리더가 알려주는 기초 SQL
DuckDB API 사용시 Connection Error가 발생합니다.
실습 코드를 순서대로 진행하니 아래와 같은 에러가 발생했습니다.*********************확인해보니 3번째 셀에서 duckdb를 연결하고%sql duckdb:///duckdb.db 그 아래에서 다음과 API로 연결을 시도하면 계속 에러가 발생합니다.duckdb_con = duckdb.connect("duckdb.db") **********************그래서 노트북 세션을 초기화하고 duckdb.db 파일을 삭제하고 3번째 셀을 실행하지 않고 duckdb API로 바로 연결하니 그때서야 제대로 연결되었습니다.
-
미해결비전공자도 이해할 수 있는 Redis 입문/실전 (조회 성능 최적화편)
@Cacheable key 속성에서 page, size 파라미터값 null
BoardService.class@Cacheable( cacheNames = "getBoards", key = "'boards:page:' + #page + ':size:' + #size", cacheManager = "boardCacheManager" ) public List<Board> getBoards(int page, int size) { log.info("page={},size={}", page, size); Pageable pageable = PageRequest.of(page - 1, size); Page<Board> pageOfBoards = boardRepository.findAllByOrderByCreatedAtDesc(pageable); return pageOfBoards.getContent(); }BoardController.class@GetMapping public List<Board> getBoards( @RequestParam(name = "page", defaultValue = "1") int page, @RequestParam(name = "size", defaultValue = "10") int size ) { log.info("page={}, size={}", page, size); return boardService.getBoards(page, size); }#page, #size 값에 모두 null이 저장되는 것 같습니다.위 코드에서처럼 BoardService.getBoards(), BoardController.getBoards() 두 메서드 전부 page, size 값을 로그로 출력해보니 각각 1, 10으로 여기서는 정상적으로 나오는데, 어디서 문제가 있는지 모르겠습니다.구글링을 해도 마땅한 답을 구할 수 없어서 질문 남깁니다!
-
미해결한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
카운터앱 구현하기에서 커스텀훅으로 관리하는 방법은 어떤가요?
안녕하세요!카운터앱 구현하기를 조금 다르게 코드를 짜보았는데, 커스텀훅을 활용법에 익숙하지 않아서, 이렇게 구현하는 방법이 적절한지 감이 안와요.. 바쁘신데 죄송하지만 아래와 같은 커스텀훅 구현방식의 장단점에 대해서 알려주시면 감사하겠습니다! 먼저 useCount.jsx를 아래와 같이 작성하였구요import { useState } from 'react'; function useCount() { const [num, setNum] = useState(0); const onClinkCount = (e) => { setNum(num + Number(e.target.value)) } return [num, onClinkCount]; } export default useCount; 아래는 넘버 조작 부분인 Controller.jsxconst Controller = ({ onClinkCount }) => { return ( <div> <button onClick={onClinkCount} value="-1">-1</button> <button onClick={onClinkCount} value="-10">-10</button> <button onClick={onClinkCount} value="-100">-100</button> <button onClick={onClinkCount} value="+100">+100</button> <button onClick={onClinkCount} value="+10">+10</button> <button onClick={onClinkCount} value="+1">+1</button> </div> ) } export default Controller카운트 넘버 표시부분인 Viewer.jsxconst Viewer = ({ num }) => { return ( <div> <div>현재 카운트:</div> <h1>{num}</h1> </div> ) } export default Viewer그리고 부모 컴포넌트인 App.jsx 입니다.import "./App.css" import Controller from './components/Controller' import Viewer from './components/Viewer' import useCount from './hooks/useCount' function App() { const [num, onClinkCount] = useCount(); return ( <div className='App'> <h1>Simple Counter</h1> <section> <Viewer num={num} /> </section> <section> <Controller onClinkCount={onClinkCount} /> </section> </div> ) } export default App 🚨 아래의 가이드라인을 꼭 읽고 질문을 올려주시기 바랍니다 🚨질문 하시기 전에 꼭 확인해주세요- 질문 전 구글에 먼저 검색해보세요 (답변을 기다리는 시간을 아낄 수 있습니다)- 코드에 오타가 없는지 면밀히 체크해보세요 (Date와 Data를 많이 헷갈리십니다)- 이전에 올린 질문에 달린 답변들에 꼭 반응해주세요 (질문에 대한 답변만 받으시고 쌩 가시면 속상해요 😢)질문 하실때 꼭 확인하세요- 제목만 보고도 무슨 문제가 있는지 대충 알 수 있도록 자세한 제목을 정해주세요 (단순 단어 X)- 질문의 배경정보를 제공해주세요 (이 문제가 언제 어떻게 발생했고 어디까지 시도해보셨는지)- 문제를 재현하도록 코드샌드박스나 깃허브 링크로 전달해주세요 (프로젝트 코드에서 문제가 발생할 경우)- 답변이 달렸다면 꼭 확인하고 반응을 남겨주세요- 강의의 몇 분 몇 초 관련 질문인지 알려주세요!- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
해결됨Godot Engine 마리오라이크 2D PC 게임 만들기
Region Rect 디버그할때 수치가 바뀌는걸 볼 수 없어요.
배경화면이 X, Y 축으로 반복되면서 흐르는 걸 하는 중인데요...region_rect.position이 계속 증가하면 수치가 커지니까Vector2.ZERO로 초기화하는 부분을 하고 있어요.코드는 작성했고 동작은 정상적으로 하는데제 고도엔진 화면에서는 영상처럼 Region의 Rect.x Rect.Y의 수치가 변하지 않고 0으로 고정되어있는데 무슨 문제일까요?
-
해결됨2시간으로 끝내는 코루틴
async await 관련 질문
안녕하세요.val job1 = async { apiCall1() } val job2 = async { apiCall2(job1.await()) } printWithThread(job1.await() + job2.await())만약, job1에 대한 결과를 메인 코루틴과 job2 코루틴 각각에서 사용하고 싶으면 위와 같이 작성하면 되나요?제가 실제로 apiCall1에 print문을 넣어 보니까 1번만 출력이 되는 것을 확인했습니다. 만약, 위에 질문이 맞다면 코루틴 job을 생성하고 해당 결과를 받을 때는 항상 await() 함수를 호출하면 되나요?여기서 궁금한 점은 만약 서버와 통신하는 api라고 한다면, 새롭게 호출하고 싶을 때도 있을 텐데 이럴 때는 어떻게 기존 값이 아닌 새로운 값을 받을 수 있는지도 궁금합니다. 감사합니다.
-
해결됨Godot Engine 마리오라이크 2D PC 게임 만들기
영상에서는 디버깅할때 Sprite2D에서 Region Rect 수치가 계속 변하는걸로 보이는데...
어려운 점이 있으신가요? 망설이시지 말고 인프런이나 유투브에 질문을 남겨주세요.가능한 시간에 답변을 남겨 드리겠습니다. 또는 아래 커뮤니티에도 도움을 요청해 보세요.Sweet Spot 디스코드 서버- https://discord.gg/veAnCmBf고도 엔진 코리아 디스코드 서버- https://discord.com/invite/XK8Emsf고도 엔진 코리아 네이버 카페- https://cafe.naver.com/godotk커뮤니티에 본인을 소개하고 직접 완성하신 작품도 자랑해보세요 :)
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
학습자료 통합본
수업자료 PDF 통합본 언제쯤 나오나요? 이제 한 달이 채 안 남았네요ㅠㅠ
-
해결됨비전공자도 이해할 수 있는 CI/CD 입문·실전
region
만약에 사용자가 한국에도 있고 다른나라 미국 프랑스 에도 있다고 한다면어떻게 해야할까요 ?
-
해결됨코딩테스트 [ ALL IN ONE ]
노션이 뭐죠??
그냥 구글폼에 제 메일주소 eovnfjfpa@naver.com으로 교재 신청했는데 아직 안와서요교재 좀 부탁드릴게요 노션이 뭔지 아무 설명이 없는데 메일로는 강의 교재가 안와서 문의드려요
-
해결됨독하게 시작하는 C 프로그래밍
파일에 대한 질문입니다.
안녕하세요 좋은 강의 잘 보고 있습니다!파일에 대해서 질문이 있어서 합니다.현재 저의 수준에서 User mode에서 파일이라 함은 장치를 추상화한 파일과 데이터 파일 두개가 존재한다고 보면 될까요?장치를 추상화한 파일을 콘솔로 예를 들어서 설명해 주셔서 직관적으로는 이해는 간 것 같습니다. 그렇다면 데이터 파일의 경우 우리가 모니터로 보는 데이터 파일 또한 추상화한 데이터라고 생각하여 모니터로 표현된 파일에 DATA를 쓴다면 사실은 내부적으로 추상화된 파일에서 파일 시스템에 접근 후에 필터와 드라이버를 거쳐서 HDD나 SDD에 접근하여 실제 물리적인 부분?을 고친 것이다. 라고 이해하면 될까요?
-
해결됨2시간으로 끝내는 코루틴
코루틴 실행 순서 궁금합니다.
안녕하세요.먼저 선생님 강의가 도움 많이 되고 있습니다.감사합니다. 질문이 두 가지 있습니다.질문 1.fun main() = runBlocking { println("START") launch { println("1") } launch { println("2") } launch { println("3") } launch { println("4") } yield() println("END") }이런식으로 되어 있다면yield실행 후에 1~4번 중 어떤게 출력될지는 랜덤인건가요?실제 실행 시에는 순서대로 되는걸 확인 했는데, 이게 항상 launch가 호출된 순서대로 출력되는건가요?질문 2.fun main() = runBlocking { println("START") launch { println("1") } launch { println("2") } launch { yield() println("3") } launch { println("4") } yield() println("END") }만약 3번에 yield 가 있다면, 어떻게 되는건가요?3번에 들어온 순간 끝나지 않은 Coroutine 중에서 랜덤하게 호출되는건가요?아니면 main으로 가서 END가 출력되는건가요?감사합니다.