묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결바닥부터 시작하는 STM32 드론 개발의 모든 것
6-4 ESC Calibration
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 6-4 ESC Calibration을 하는 도중 USB port 빛이 안나오고 swc를 prescaler 2000으로 내리면 esc Calibration이 되지않습니다 usb 포트에 불이 들어와야 esc에 입력되는 걸까요?
-
해결됨김영한의 실전 데이터베이스 입문 - 모든 IT인을 위한 SQL 첫걸음(SQL부터 차근차근)
문제5번 - 함수 코드 중복 방지를 위한 방법 중 서브쿼리와 CTE의 차이
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]질문이 서론과 본론으로 구분되어 있으며, 실제 질문 내용은 본론에 있습니다! 서론안녕하세요 영한님.문제5번에서는 SUBSTRING_INDEX(email, '@', 1) 함수를 user_id와 id_length에서 두 번 반복해서 사용하게 됩니다.중복 문제를 개선하기 위해 초기에는 다음과 같이 CHAR_LEGNTH(user_id) AS id_length로 시도를 했으나 실패했습니다. -- 에러 발생 코드 SELECT email, SUBSTRING_INDEX(email, '@', 1) AS user_id, CHAR_LENGTH(SUBSTRING_INDEX(user_id) AS id_length FROM customers ;그 이유는 SELECT 절의 모든 표현식이 논리적으로 동시에 평가되기 때문이라고 판단했고, 이를 해결하기 위한 방법 중 서브쿼리와 CTE(Common Table Expression) 방식을 찾았고 이를 직접 적용해봤습니다. -- sol1. 서브 쿼리 SELECT email, user_id, CHAR_LENGTH(user_id) AS id_length FROM (SELECT email, SUBSTRING_INDEX(email, '@', 1) AS user_id FROM customers ) AS dt ;-- sol2. CTE WITH email_parts AS ( SELECT email, SUBSTRING_INDEX(email, '@', 1) AS user_id FROM customers ) SELECT email, user_id, CHAR_LENGTH(user_id) AS id_length FROM email_parts; 본론이 과정에서 "서브 쿼리와 CTE의 성능 차이가 있는가?"에 대한 의문이 들어서 리서치를 했으나 제 수준이 부족한 탓인지 이에 대한 명확한 답변을 찾지 못했는데요(현재 '상황에 따라 다르다' 수준으로만 이해한 상태입니다).혹시 실무에서는 서브 쿼리와 CTE 중 (성능, 가독성, 개발팀 관례 등의 이유로 인해) 무엇을 선호하는지 의견을 들을 수 있을까 싶어 질문 남깁니다!혹시 다음 강의에서 다루는/다룰 내용이라면 제가 추후에 해당 강의를 들을 때 학습하도록 하겠습니다!
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
@Lock(OPTIMISTIC)이 필요한 이유
안녕하세요!강의를 복습하던 중 의문이 생겼습니다. JPA에서 @Version을 사용하면 자동으로 낙관적락이 적용되는 걸로 알고 있는데 @Lock(OPTIMISTIC)이 필요한 이유가 궁금했습니다. 그래서 알아보니 @Version의 경우는 엔티티에 수정/삭제가 될 경우에만 version을 체크하기 때문에 읽기만 존재할 때도 다른 곳에서 변경이 됐는지 감지하기 위해서는 @Lock(OPTIMISTIC)을 사용하라고 하던데 이게 맞을가요? 혹시 맞다면 @Lock(OPTIMISTIC)을 사용해서 OptimisticLockException이 발생하는 예시코드 부탁드립니다. 아래와 같이 테스트코드를 작성해봤는데 테스트가 성공하지 않아서요 @Test void optimistic_lock_on_read_conflict() throws Exception { ExecutorService executor = Executors.newFixedThreadPool(2); Callable<Void> task1 = () -> { service.readWithOptimisticLock(productId); return null; }; Callable<Void> task2 = () -> { service.updatePrice(productId, 4000); return null; }; Future<Void> f1 = executor.submit(task1); Future<Void> f2 = executor.submit(task2); f2.get(); assertThatThrownBy(f1::get) // 읽기만 했던 쪽도 커밋 시점에서 충돌 감지 .hasCauseInstanceOf(OptimisticLockingFailureException.class); executor.shutdown(); } //service.readWithOptimisticLock(productId); @Transactional(readOnly = true) public void readWithOptimisticLock(Long id) { productRepository.findByIdWithOptimisticLock(id); try { Thread.sleep(2000); } catch (InterruptedException e) { throw new RuntimeException(e); } productRepository.flush(); } //service.updatePrice(productId, 4000); @Transactional public void updatePrice(Long id, int newPrice) { Product product = productRepository.findById(id).orElseThrow(); product.setPrice(newPrice); productRepository.flush(); // flush 시점에 @Version 체크됨 }
-
미해결
평생수강권 환불규정
아직 결제전입니다.평생수강권을 등록 후 2달뒤에 수강취소를 할 수 있나요?환불은 필요없고, 지원금으로 수강하는거라 2달 이후에 수강취소 증빙자료가 필요해서 여쭙니다.
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
데이터 패칭과 프리패칭 순서
안녕하세요 강사님,복습하는 과정 중에 Page Router 기준으로 SSR + 프리패칭 + Hydration 흐름을 제가 이해한 대로 정리해보았는데, 이게 맞는지 확인 부탁드립니다.사용자가 /a 페이지에 있을 때 <Link href="/c" prefetch> 가 있으면, 브라우저는 백그라운드에서 /c.js (코드 스플리팅된 JS 청크)만 미리 받아 캐시에 저장해둔다.→ 이 단계에서는 HTML이나 데이터(getServerSideProps 결과)는 가져오지 않는다.사용자가 실제로 /c를 클릭하면, 서버가 getServerSideProps를 실행해서 데이터를 패칭하고, 그 결과를 반영한SSR HTML + JSON을 브라우저에 내려준다.브라우저는 HTML을 먼저 렌더링해서 FCP가 나오고, 이어서 캐시에 있던 /c.js를 실행한다.그 후 React가 HTML과 JS를 매칭시켜 Hydration을 수행하여 이벤트 핸들러를 연결한다.즉, SSR 페이지 전환 시1. User 클릭 → (서버) HTML 생성 및 데이터 패칭 → (브라우저) HTML 렌더링 → JS 실행 → Hydration이고, 프리패칭은 그 전에 JS만 준비해 두는 과정으로 이해했습니다.제가 이해한 흐름이 맞을까요? 머메이드로 도식화하자면 다음과 같습니다. 위가 맞다면, 빠른 페이지 전환을 위해하는 프리패칭을 했지만 결국 데이터 패칭 및 HTML을 서버에서 다시 그려오는데 빠른 전환이 가능한건지 궁금합니다.혹시 여기서 놓치고 있는 부분이나, 실제 네트워크 요청에서 다른 점이 있다면 알려주시면 감사하겠습니다!
-
미해결Git & GitHub, 원리부터 차근차근 - 근본깃 [완성편]
Git 머지 커밋 되돌리기(revert)와 머지 방식 선택의 안전성 질문
깃에서 머지(Merge)를 되돌려 이전 상태로 돌아가려면 어떤 방법을 써야 하는지 궁금합니다. fast-forward 머지인 경우에는 git reset을 이용해야 한다는 건 알겠습니다.그런데 머지 커밋이 생성되는 일반 머지의 경우, 해당 머지 커밋에 대해 git revert를 적용해서 이전 상태로 되돌릴 수 있을 것 같은데 그렇다면 fast-forward 머지보다 머지 커밋을 생성하는 방식이 더 안전한 선택인지도 궁금합니다.
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
튜플, 딕셔너리는 자료 첨부가 안되어있네요
안녕하세요튜플, 딕셔너리 에는 자료가 첨부되어있지않습니다. 이럴경우 별도로 자료 요청을 해야하나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
동시성 관련 질문입니다
링크위 링크 속 질문에서 영한쌤이 아래와 같은 답변을 해줬습니다"서버가 한대만 있고, 자바(JVM)로 웹 애플리케이션을 단 하나만 구동하는 상황이면 자바 만으로 동시성 제어를 할 수 있습니다." MVC 1편 강의에서 배운 내용으로는클라이언트 요청이 들어오면 was 내에 미리 만들어진 쓰레드들이 각 요청을 받고 서블릿 코드를 실행한다고 이해하고 있습니다 그렇다면 서버가 한 대여도 쓰레드는 이미 여러개가 만들어져 있으므로동시에 여러 요청 처리가 가능하기에 자바만으로 동시성 제어가 안 되는거 아닌가요? 잘못 이해한 부분이 있다면 지적부탁드립니다
-
미해결100가지 프롬프트로 배우는 AI 활용법: 입문편
82 강의 내용이 81 강의 내용과 동일합니다.
아래 두 강의 내용이 동일합니다.82 강의 및 자료가 81 강의 와 동일합니다.조치 요청드립니다<동일한 강의 내용>81: AI가 질문하도록 프롬프트82: 다단계 작업 한 번에 지시
-
미해결이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
4강에서 콤보 공격시 다음 공격을 할 경우 ActivateAbility가 자동으로 발동되는 이유
언리얼 5.6으로 진행하다가 이상한 버그가 터져서 다시 5.4로 복습도 할겸 해서 처음부터 만들어보고 있는데 콤보 공격할 때 ActivateAbility가 발동되고 콤보의 첫번째 공격이 끝나게 되면 무조건 EndAbility가 발동합니다. 5.6으로 했을때와 5.4로 했을때의 코드적으로 다른점도 없는데왜 처음에는 첫번째 공격을 하고 두번째 콤보 공격을 하면 EndAbility가 아닌 ActivateAbility가 다시 호출되고,두번째 할때는 왜 첫번째 공격이 끝나면 무조건 EndAbility가 호출될까요..??ㅠ
-
해결됨비개발자 4주만에 수익화 서비스 만들기: AI 바이브코딩 웹 + 앱 ALL IN ONE
2-3강 질문이 있습니다
2-3 강 7분~안녕하세요. Cursor Rule 관련 부분이 질문이 있습니다.7분 무렵보면 AI 가 자동 초안을 생성하여 일관성을 향상시켜준다고 하였는데, 이것은 외부 파일을 이어 받아 프로젝트를 진행할때 필요한 과정인건가요? 만약 제가 혼자서 처음부터 끝까지 Cursor 에서 작업을 한다면 따로 Cursor Rule 을 만들 필요까지는 없는건지 아니면 그 경우에도 일관성을 위해 어느정도 코드를 만들어 놓은 상황에서 이것을 진행하여 AI 가 조금 지나고 났을때 잊지 않게 해야하는지 궁금합니다.
-
해결됨이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
언리얼 공부방법에 대해 질문드립니다.
안녕하세요.언리얼엔진 을 잘하기위해서는 ,클래스 계층구조 파악, 어떻게 구현되었는지 딥하게 들여다 보는게 맞을까요?
-
해결됨[2025 리뉴얼]플러터플로우로 코딩 없이 한달 안에 앱 만들기
collection 내 image 에러
7월에 강의 들으면서는 모두 잘 되고 성공했었습니다. 그런데 1달여만에 다시 진행을 하니까, user collection이나 post collection의 text나 시간 등은 잘 나오는데, 두 개의 컬렉션에서 모두 photo는 못 불러오고, 새로 저장도 안 됩니다. (파일 탐색기는 뜨는데 선택하고 버튼 눌러도 동작을 안 해요)에러는 다음과 같습니다.
-
해결됨코딩 없이 AI 자동화 전문가가 되는 법, n8n 완벽 가이드
추가 강의 있어요!
이번 강의 끝나면 추가 강의(40강?) 쪽으로 넘어갈 것인지 물어봅니다. 대략적으로 기능만 익히고 막히면 버리고,그쪽으로 넘어가도 좋을 것 같습니다. (물론 스스로 해볼려고 하는 공부는 추천하지만 시간이 없으면 추가강의도 보고 고민하셔도 좋을 것 같습니다.)
-
미해결Vue3 완벽 마스터: 기초부터 실전까지 - "실전편"
TypeError 질문
TypeError: relativeURL.replace is not a function at async fetchPost (PostDetailView.vue:58:20)PostDetailView에서 number를 string타입으로 변경 후 콘솔에러가 뜹니다. router 폴더도 강의와 같이 수정했고, api 폴더 안에 index.js랑 posts.js도 강의와 같이 수정했는데 왜 타입에러가 뜨는지 문의드립니다.return posts.get(id);이 부분을 return posts. gen (id + ' ') 로 변경해야 콘솔 에러가 없어져요.다른 부분은 강의와 똑같이 수정하였습니다.
-
미해결피그마(Figma)를 활용한 UI디자인 입문부터 실전까지 A to Z
하단바 고정
현재 섹션 13의 61강을 듣고 있습니다. 그런데 Constraints가 업데이트되면서 강의에 나온 위치와 지금은 다르더라고요. 프로토타입에서 스티키를 활용하면 하단바가 고정된다고 하는데, 보시는 것처럼 제 경우에는 고정이 되지 않네요. 뭐가 문제일까요?
-
미해결동영상으로 배우는 PTC Creo Parametric 6.0 3D모델링, Part 1
15강 오프셋에 관한 문의
안녕하세요. 버전이 달라서 그런지 모르겠지만, 오프셋 할 때 직관적으로 단일,체인,루프 이런식으로 안뜨고 값을 지정하고 선을 클릭하면 단일로만 그려지는데 shift를 누르면서 하면 나머지 2개도 어찌저찌 되긴하는데 정확한 방법을 모르겠어서,, 질문드립니다. 감사합니다.
-
해결됨회사에서 바로 쓰는 업무자동화 AI 에이전트 (w. n8n, LangGraph)
QNA 챗봇 - 기존 index 에 있는 내용 삭제 문의
강의 잘 듣고 있습니다. 감사드립니다. ^^QNA 챗봇 서비스 기능을 테스트중입니다.구글 드라이브에서 PDF 문서를 읽어와서 벡터 스토어에 저장하는데,수정된 내용으로 업데이트하는 경우,기존 index 에 있는 내용을 삭제하고, 입력하는 방법은 어떻게 구현하면 될까요?
-
미해결타입스크립트로 배우는 리액트(React.js) : 기초부터 최신 기술까지 완벽하게
vscode 호버힌트 툴팁
redux slice 생성 강의(1:37)에 호버하면 뜨는 툴팁에서 위에 간략한 설명은 똑같이 뜨는데 강사님처럼 아래 Error 로 더 자세히 뜨는 부분도 보고 싶은데 안 보입니다. 어떻게 설정해야 하나요?
-
해결됨BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)
weekly retention 구하기 과제
weekly retention 구하기 과제 해 봤습니다. 처음에 알려주신대로 두 가지 방법 1) EXTRACT 과 2) DATA_TRUNC 을 써서 각각 해 봤는데 일을 자르는 기준이 달라서 그런지 첫 데이터는 값이 같은데 1주가 차이나는 시점부터 데이터들의 값이 미세하게 차이가 나더라구요.그리고 차이를 계산할 때도 INT 타입이라 DIFF_DATE 대신 그냥 컬럼끼리 빼는 방법으로 계산해야 됐습니다. 만약 이게 동일 년도 내에서만 해야하는 분석이라면 어떤 방법이 더 좋은지 궁금합니다. WITH base AS( SELECT DISTINCT user_id, user_pseudo_id, event_name, DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul')) AS event_date, DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime FROM `advance.app_logs` WHERE event_date BETWEEN '2022-08-01' AND '2022-11-03' ) , first_week_data AS( SELECT *, MIN(week_date) OVER(PARTITION BY user_pseudo_id) AS first_week FROM ( SELECT user_pseudo_id, event_date, -- DATETIME_TRUNC(DATE(event_date), WEEK(MONDAY)) AS week_date, EXTRACT(WEEK FROM event_date) AS week_date FROM base ) ), week_diff_data AS ( SELECT *, -- DATE_DIFF(week_date, first_week, WEEK) AS week_diff (week_date-first_week) AS week_diff FROM first_week_data ), first_week_value_data AS( SELECT *, FIRST_VALUE(user_cnt) OVER (ORDER BY week_diff) AS first_week_value FROM( SELECT week_diff, COUNT(DISTINCT user_pseudo_id) AS user_cnt, FROM week_diff_data GROUP BY ALL) ORDER BY week_diff ) SELECT *, ROUND(SAFE_DIVIDE(user_cnt, first_week_value),3) AS retention FROM first_week_value_data