묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결비전공자도 이해할 수 있는 쿠버네티스 입문/실전
설치 관련 문의
강사님, Docker Desktop 설치 중 Hyper-V 활성화 단계에서 질문 있습니다.PowerShell을 관리자 권한으로 실행한 뒤 아래 명령어를 입력했습니다.Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All그런데 아래와 같은 오류가 발생합니다.Enable-WindowsOptionalFeature : Microsoft-Hyper-V은(는) 알 수 없는 기능 이름입니다. 현재 제 Windows 버전은 Windows 11 Home입니다.찾아보니 Windows 11 Home에서는 Hyper-V 기능을 사용할 수 없다고 하는데, 이 경우 Hyper-V 대신 WSL2 방식으로 Docker Desktop을 설치해도 강의 실습을 따라가는 데 문제가 없을까요?예를 들어 아래 기능들을 활성화한 뒤 Docker Desktop 설치 시 Use WSL 2 instead of Hyper-V 옵션으로 진행하면 되는지 궁금합니다
-
미해결프롬프트 엔지니어링
어텐션의 정의
강사님이 강의 중 어텐션이라는 용어를 자주 사용하는데, (예를 들어 어텐션의 부작용) 이해가 될듯 하면서도 정확한 의미를 잘 모르겠습니다.
-
미해결[무료 Live] 클로드 코드 x 게임 - AI를 활용해 도전할 가치가 있는 1인 창업 분야 소개
챌린지 라이브 시간이 지나면 강의는 볼 수 없는건가요?
챌린지 라이브 시간이 지나면 강의는 볼 수 없는건가요?
-
미해결2026 코딩테스트 올인원 [JAVA]
커리큘럼 중 정렬 관련 질문
안녕하세요! 강의 커리큘럼을 보니까 정렬 관련 강의가 위상정렬만 있던데 혹시 삽입 선택 퀵 등과 같은 다른 정렬 강의도 업데이트 계획이 있으실까요??
-
미해결클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지
이전 커밋으로 롤백을 하고 다시 롤백하기 전 커밋으로 돌아가려고 하는데 그래프 패널에서 main이 사라져 버립니다.
-
해결됨Claude Code로 만드는 n8n 자동화 실전
섹션2(skill +references폴더 생성) 이후 섹션3에서 builder 와 라우팅 업데이트등 과정을 어디서 확인할수있는걸까요?
제목 그대로입니다. 따라하려하는데 과정이 생략되고 찾을수가없네요
-
미해결[기초 2부] OpenClaw.AI 마스터 클래스: 텔레그램과 비전 AI로 완성하는 스마트폰 원격 비서
gemini api key값 변경 설정파일 문의
안녕하세요.openclaw에 연동한 gemini api key값을 변경하고 싶은데, 어떤 설정파일에서 변경해야할지 모르겠습니다...말씀 부탁드려요!
-
미해결TRACE32 입문 - MCU & RTOS 개발자를 위한 실전 디버깅 과정
T32 Simulator 사용법 질문
안녕하세요 강사님첨부된 파일을 사용하여 T32 Simulator를 사용해보려 하는데 설치가이드에 따라 동작하면 아래와 같이 Error가 발생합니다.해결방법이 있을까요?
-
해결됨Claude Code로 만드는 n8n 자동화 실전
User MCPs vs Project MCP
n8n-mcp를 설치하는 도중, 강의 화면과 좀 달라 질문 드립니다. User MCPs로 안뜨는데 진행해도 괜찮을까요?
-
해결됨친절한 블렌더 - [LV.1] 기초 모델링
모델링1 14:9
막힌 부분의 시간(예를들면 3:24)과 안 되는 부분과 현상을 자세히 써주셔야 해결이 빠릅니다. - 3:24, 여기서 막혔어요 (X) - 3:24, 영상에서는 원형인데 저는 타원형으로 만들어져요. (O) - 3:24, 베벨과 익스투르드까지는 적용이 되는데 미러 모디파이어는 반응이 없어요. (O) 문제되는 물체를 선택한 상황에서 일부가 아닌 전체 스크린샷 사진을 첨부해주시면 훨씬 좋습니다. - 아웃라이너나 프로펄티스도 문제 상황 파악에 도움이 되므로 함께 찍어주세요. y 눌렀는데 반응이 없습니다 ㅠ
-
미해결클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지
CLAUDE.md 에 import 문법 질문
궁금한게 있습니다 2026 05 06 기준 Docs 에서 200줄 이하로 CLAUDE.md 를 유지하라고했는데 만약 import 문법으로 CLAUDE.md 파일을 줄였는데 import 로 가져온 md 내용의 길이가 200줄이 넘거나 좀 많다고 가정하면 그건 괜찮은 건가요?... import 문법으로 줄인다고해도 결국.. claude 가 import 한 md 파일을 읽을 텐데 그건 import로 해서 CLAUDE.md 가 줄어들었다고 해도 읽는 양은 똑같지 않나하는 궁금증에 여쭤봅니다..
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
작업형2 모의문제1 (30강)
수업에서는 수치형 데이터에 대한 스케일링을 미실시 하였고, 학습 모델도 랜덤포레스트로만 진행하였습니다. 수치형 데이터에 대해 StandardScaler, RobustScaler 등의 스케일링을 실시하고, lightgbm 모델도 학습을 했을 때 랜덤포레스트 모델보다 성능이 좋게 나왔습니다. 혹시 이 문제에서 스케일링을 하면 안되는 이유나 lightgbm으로 했을 때 발생할 수 있는 문제가 있을까요?
-
미해결김영한의 실전 데이터베이스 - 설계 2편, 실무에서 반드시 마주치는 9가지 설계 패턴
다음 강의는 언제쯤 나올까요?
다음 강의는 언제쯤 나오나요? 성능 최적화 배우고 싶습니다 😄
-
해결됨Next.js 마스터 클래스: Part 3 - 실전 아키텍처 완성 (서버-클라이언트 동기화, 극한의 최적화, 풀스택 보안)
BFF의 필요성
안녕하세요, 수업 너무 잘 듣고 있습니다!프로젝트와 병행하면서 수강 중이었는데 인증/인가 부분에서 궁금증이 있어 문의드립니다.같은 도메인 내에 웹사이트/프론트 서버를 두고 프론트 서버와 백엔드 서버가 통신하는 BFF 패턴을 사용하면, 민감한 토큰을 브라우저에 노출하지 않고 서버 사이드에서 보관할 수 있어 보안에 유리하다고 이해했습니다.그런데 소셜 로그인(OAuth)을 도입하면 인가 처리를 Google, Kakao 같은 외부 provider에게 위임하게 되는데, 이 경우에도 BFF가 여전히 필요한가요? 필요하다면 BFF가 소셜 로그인 흐름에서 구체적으로 어떤 역할을 담당하게 되는지 궁금합니다.
-
미해결[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
섹션 5 CSS selector사용해서 클로링하기2의 커리큘럼 일정 부재?
섹션 5 CSS selector사용해서 클로링하기2 영상엔 커리큘럼 일정에 해당하는 박스와 내용이 있는데 현재 이https://davelee-fun.github.io/blog/crawl_test_css.html링크내 없는 부분이라 연습해볼수가 없습니다. 커리큘럼 일정의 박스와 내용 업데이트 가능할까요?
-
미해결실습으로 배우는 핵심 네트워크 기술
Default Route 실습 관련 질문드립니다.
Default Route 실습 진행 과정에서해당 실습파일이 없어서 Q&A를 찾아보니섹션 9 그외 기능 NAT 첨부파일에 있다는 사실을 알게되어 해당 실습파일을 다운 받아 NAT 초기설정 파일을 실행하여 강의를 보며 공부하는 과정에서 모든 PC에서 100.1.1.16 으로 통신이 되는것을 확인하고 모든 라우터에서 Default route 설정을 해줬는데 200.1.10.10으로 통신이 되질 않습니다. ISP 라우터에 대한 설정을 따로 해줘야 하는 부분이 있을까요?? 강의에서는 없어서요...DSW01, 02, 03 ,WAN 은ip route 0.0.0.0 0.0.0.0 100.1.1.16 Busan 은ip route 0.0.0.0 0.0.0.0 100.1.2.1로 명령어를 적용하고 진행했습니다.
-
미해결클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지
Github 404 Error
MISSION 7 실행하려고 하는데, 404 Error가 계속 뜹니다. Claude와 같이 해결하려고 하니, Action 탭에서 확인한 내용을 바탕으로 Github 인프라 일시적 문제라고 하는데, 맞을까요? 확인 한 번 부탁 드립니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
코딩살구클럽 입장이 안됩니다
구글 폼에 작성완료해서 보냈었습니다.어제자로 보내고 오늘 들어가보려 하니 입장이 안되어 문의 남깁니다
-
해결됨클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지
settings.json, settings.local.json 관련 질문입니다!
만약에 지금 현재 디렉토리의 settings.json에 아래와 같은 설정이 있고,{ "permissions": { "allow": [ "Bash(git checkout *)", "Bash(git merge *)" ] }, }settings.local.json에 아래와 같은 설정이 있다고 가정하면{ "permissions": { "allow": [] } } }아래 docs에 나온 것처럼Local이 Project보다 더 높은 우선순위(?)를 가지기 때문에, 최종적으로 현재 디렉토리의 클로드 코드 세션에서는 allow 되는건 settings.local.json의 빈배열([]) 이라서 자동으로 허용이 안된다 라고 생각하면 될까요?------------+ 추가질문입니다. (만약에 settings.local.json의 우선순위가 높아서 빈배열만 적용되었다는게 맞다면)예를 들어 클로드코드랑 하나의 세션안에서 티키타카를 하다가(예를 들면 Bash를 사용하는 git 명령어를 클코가 권한을 물어볼때)1,2,3 선택문구가 나올때 제기억으로는 지금현재는 2번문구가 이 세션안에서는 더이상 안물어보고 accept 하겠다였던거같은데그걸 선택했을때 아마 settings.local.json의 allow항목에 Bash(git ~~)이렇게 자동으로 갱신돼서 찍혔던걸로 기억합니다.근데 만약에 이상황이라면 팀 프로젝트을위해 clone해서 가져온 디렉토리의 settings.json의 allow항목에 이미 Bash관련된게 있다면 제가 아까 질문한 내용과 우선순위 관련해서 겹치는 사항들이 있을거같은데 이경우는 어떻게 방향을 잡는게 바람직할까요?좀 더 쉬운 예시 상황은 아래와 같습니다.// settings.json (clone해서 가져옴 -> 즉, 팀 규칙) { "permissions": { "allow": ["Bash(npm run dev)"] } } // settings.local.json (이 후 클로드 코드랑 티키타카 하면서 세션 중 자동 추가됨) { "permissions": { "allow": ["Bash(git commit *)"] } }이상태에서 앞으로 터미널을 시작하면 settings.local.json의 우선순위가 높아서 Bash(git commit *) 만 허용될거같은데 어떻게 해야할까요 ㅠㅠㅠ(이 경우 그냥 settings.json allow항목을 local.json에도 똑같이 복붙을 해놓을까요?)+(allow뿐만 아니라 범위별 셋팅 파일안에 들어가는 Key들을 봤을때 서로 같은 Key가 없게끔 하는게 맞을까요?) (뭔가 뒤의 [추가미션] 설정 및 메모리 관리 실습 를 진행하다가 또 궁금해져서 질문을 추가하느냐 좀 길어졌습니다ㅠㅠ 죄송합니다..!!)
-
해결됨제미니의 개발실무 - 커머스 백엔드 기본편
궁금한점이 여러개 생겼습니다.
안녕하세요, 2회독 하는중입니다. 확실히 강의 활용하면서 진행하니깐 느끼기(?)가 뭔지 알것같고 궁금한점이 생기네요. CouponService 에서 이미 다운받은 쿠폰은 내려주지 않는 로직을 만들면서 궁금한점이 여러개 생겼습니다.작성하면서 정리하니깐 궁금한점이 계속 꼬리물어서 생긴다고 해야하나 그래서 의식의 흐름대로 적는 것 같아서 미리 죄송합니다 🥲/// CouponService public List<Coupon> getCouponsForMenus(Principal principal, Collection<Long> couponIds) { Set<Long> applicableCouponIds = couponFinder.findApplicableCouponIds(couponIds); Set<Long> downloadedCouponIds = issuedCouponFinder.findDownloadedCouponIds(principal.getId()); Set<Long> downloadableCouponIds = applicableCouponIds.stream() .filter(id -> !downloadedCouponIds.contains(id)) .collect(Collectors.toSet()); return couponFinder.findAllById(downloadableCouponIds); } // CouponFinder public Set<Long> findApplicableCouponIds(Collection<Long> menuIds) { List<CouponTargetEntity> menuTargets = couponTargetRepository.findByTargetTypeAndTargetIdIn( CouponTargetType.MENU, menuIds ).stream().filter(CouponTargetEntity::isActive).toList(); List<CouponTargetEntity> categoryTargets = couponTargetRepository.findByTargetTypeAndTargetIdIn( CouponTargetType.MENU_CATEGORY, menuCategoryRepository.findByCategoryIdIn(menuIds).stream() .filter(MenuCategoryEntity::isActive) .map(MenuCategoryEntity::getCategoryId).collect(Collectors.toSet()) ); return Stream.concat(menuTargets.stream(), categoryTargets.stream()) .map(CouponTargetEntity::getCouponId) .collect(Collectors.toSet()); } CouponService 에서 implement 계층 CouponFinder, IssuedCouponFinder 를 의존하고 있는 상황에서 각 계층끼리 소통할 때강사님 Q/A 답변중에서 가능한 db 엔티티 대신에 개념객체를 넘기는 방향으로 설계하는걸 지향하신다고 말씀하신 답변이 기억이 나는데요, 지금 상황에서는 개념객체까지 변환하는것보다는 id 컬렉션만 뽑아내서 넘기는게 더 효율적이고 깔끔한 것 같습니다.이런 패턴(?) 이 자주 나올 것 같아서 괜찮은지 궁금 합니다.꼭 id 컬렉션을 넘기는게 아니더라도 entity를 반환해야만 매핑하기 편한 경우가 많을 것 같더라구요회원/비회원 요구사항https://inf.run/GTxAx해당 Q/A 를 보기도 했고 마침 강의 활용해서 커피 판매 어플리케이션을 만들고 싶어서 비회원처리가 필요했습니다.public class PrincipalArgumentResolver implements HandlerMethodArgumentResolver { private static final String PRINCIPAL_ID_HEADER = "Gu-Coffee-Principal-Id"; private static final String PRINCIPAL_TYPE_HEADER = "Gu-Coffee-Principal-Type"; @Override public boolean supportsParameter(MethodParameter parameter) { return parameter.getParameterType().isAssignableFrom(Principal.class); } @Override public @Nullable Object resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer, NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) throws Exception { HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class); if (request == null) throw new CoreException(ErrorType.INVALID_REQUEST, null); Authenticated annotation = parameter.getParameterAnnotation(Authenticated.class); String id = request.getHeader(PRINCIPAL_ID_HEADER); String type = request.getHeader(PRINCIPAL_TYPE_HEADER); validatePrincipal(annotation, id, type); return Principal.of(id, type); } private void validatePrincipal(Authenticated annotation, String id, String type) { boolean isRequired = (annotation != null && annotation.required()); if (isRequired) { if (id == null) throw new CoreException(ErrorType.UNAUTHORIZED, null); if (!PrincipalType.USER.name().equals(type)) { throw new CoreException(ErrorType.UNAUTHORIZED, "회원 전용 서비스입니다."); } } if (type == null) { throw new CoreException(ErrorType.INVALID_REQUEST, null); } } } @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public @interface Authenticated { boolean required() default true; } 저는 Authenticated 라는 메타 어노테이션을 사용해서@GetMapping("/v1/issued-coupons") private ApiResponse<List<IssuedCouponResponse>> getIssuedCoupons(@Authenticated Principal principal) { List<IssuedCoupon> issuedCoupons = issuedCouponService.getIssuedCoupons(principal); return ApiResponse.success(IssuedCouponResponse.from(issuedCoupons)); } @PostMapping("/v1/coupons/{couponId}/download") private ApiResponse<?> download( Principal principal, @PathVariable Long couponId) { couponService.download(principal, couponId); return ApiResponse.success(); } public void download(Principal principal, Long couponId) { if (principal.getType().equals(PrincipalType.GUEST)) { throw new CoreException(ErrorType.UNAUTHORIZED, "비회원은 쿠폰을 다운로드할 수 없습니다."); } 애초에 회원만 접근 가능한 api 는 어노테이션으로 처리하던가 서비스 단에서 예외를 던지게 할 수도 있을 것 같아서 이렇게 만들어 봤습니다.이런식의 접근이 괜찮은지당장은 인증객체(Principal)? 랑 User 랑은 다른 개념일 것 같아서 강의내 User 대신에 사용했습니다.@Table(name = "cart_item") @Entity public class CartItemEntity extends BaseEntity { private Long userId; private String guestKey; @Enumerated(EnumType.STRING) private PrincipalType principalType; private Long menuId; private Long quantity; } public class Cart { private Principal principal; private List<CartItem> items; } 마지막으로 장바구니에 비회원도 담을 수 있다는 요구사항이 있다고 가정하면 테이블에는 userId 만 둬서 null 로 구분하는 것 보다 key 필드를 추가하고public interface CartItemRepository extends JpaRepository<CartItemEntity, Long> { @Query("SELECT c FROM CartItemEntity c " + "WHERE (:type = 'USER' AND c.userId = :id) " + "OR (:type = 'GUEST' AND c.guestKey = :key)") List<CartItemEntity> findByPrincipal( @Param("type") String type, @Param("id") Long id, @Param("key") String key ); } 이런식으로 쿼리로 분기처리해야지 생각했는데요. 예전 강사님 Q/A 답변 중에서 쿼리중심의 어플리케이션이 되는걸 지양한다는 느낌의 답변을 봤던 것 같습니다.AI 한테 물어봤을때는 해당 로직은 필터링 목적이니 쿼리로 처리하는게 성능상 효과적이라는 답변을 줬는데요.List<IssuedCouponEntity> issuedCoupons = issuedCouponRepository.findByUserId(userId) .stream() .filter(IssuedCouponEntity::isActive) .toList(); isActive 인 데이터를 가져올 때 강사님이 findByXXAndStatus 로 한번에 가져오거나 혹은 위처럼 filter로 처리하는 두가지 패턴을 보여주셨습니다.이걸 처음 봤을 때, 미세한 성능보다는 filter 로 직관적으로 활성상태인 데이터만 가져온다는 목적을 코드로 보여주는게 더 괜찮겠다고 생각했는데요.근데 이것도 결국 필터링 목적이니깐 메서드 네이밍(findByXXAndStatus)으로 처리하는게 일관성 있는게 아닌지 궁금합니다.