inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

@agent-prd-generator

미해결

클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지

docs에 제공해 주신 prd-generator.md를 생성했고 Claude를 실행했을 때 @prd를 하면 아래와 같이 나오는데요, agent-prd-generator는 어디에 나오나요?

  • react
  • next.js
  • cursor
  • tailwindcss
  • claude
read.eun77 댓글 3 좋아요 0 조회수 263

강의자료문의

해결됨

누구보다 빠르게 배우는 Springboot + React RestAPI 게시판 만들기

react ui 만들기 강의에서 헤더의파일같은거는 강의자료에 있다고 하셨는데 강의자료는 어디에 있나요?? 노션에도 없던데

  • react
  • java
  • kotlin
  • spring-boot
  • jpa
댓글 2 좋아요 1 조회수 90

혹시 업데이트 관련 추가사항들도 있을까요

해결됨

The 10x AI-Native Developer: 회사에서 AI로 압도적 성과를 내는 법

claude 에 신기능들에 대한 소개는 앞으로 없을까요? skills, lsp 같은이요!

  • spring-boot
  • next.js
  • 인공지능(ai)
  • ai-활용-(ax)
  • claude
dev.jun28 댓글 2 좋아요 0 조회수 133

도메인 모델 패턴 vs 트랜잭션 스크립트 패턴

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 주문 서비스에서 주문, 주문 취소 메서드 비즈니스 로직이 엔티티에 있는데 이렇게 엔티티가 비즈니스 로직을 가지는 도메인 모델 패턴과 서비스에서 비즈니스 로직을 처리하는 트랜잭션 스크립트 패턴 중에 실무에서는 보통 어떤 것을 사용하나요? 각각의 장단점이 있는지도 궁금합니다

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
www 댓글 1 좋아요 0 조회수 113

로그인시 401 Unauthorized 오류가 뜹니다

미해결

[리뉴얼] React로 NodeBird SNS 만들기

로그인시 401 Unauthorized 오류가 떠서 리덕스 액션을 봤더니 LOG_IN_FAILURE에 error 내용이 비어 있었습니다. routes/user.js const express = require("express"); const bcrypt = require("bcrypt"); const { User, Post } = require("../models"); const passport = require("passport"); const router = express.Router(); router.post("/login", (req, res, next) => { console.log("🧾 req.body:", req.body); passport.authenticate("local", (err, user, info) => { if (err) { console.error(err); return next(err); } if (info) { return res.status(401).send(info.reason); } return req.login(user, async (loginerr) => { if (loginerr) { console.error(loginerr); return next(loginerr); } const fullUserWithoutPassword = await User.findOne({ where: { id: user.id }, attributes: { exclude: ["password"], }, include: [ { model: Post, }, { model: User, as: "Followings", }, { model: User, as: "Followers", }, ], }); return res.status(200).json(fullUserWithoutPassword); }); })(req, res, next); }); router.post("/", async (req, res, next) => { try { const exUser = await User.findOne({ where: { email: req.body.email, }, }); if (exUser) { return res.status(403).send("이미 사용중인 아이디입니다."); } const hashedPassword = await bcrypt.hash(req.body.password, 12); await User.create({ email: req.body.email, nickname: req.body.nickname, password: hashedPassword, }); res.status(201).send("ok"); } catch (error) { console.error(error); next(error); } }); module.exports = router; 세션 쿠키가 잘 전달이 안된건가 싶어서 req.body를 서버 터미널로 찍었더니 req.body: undefined 로 나왔습니다. 로그인 폼에서 데이터를 잘못 넘겨준건가 해서 확인해봤더니 loginForm.js const onSubmitForm = useCallback(() => { console.log(email, password); dispatch(loginRequestAction({ email, password })); }, [email, password]); 데이터도 잘 넘겨준 것 같고 sagas/user.js function logInAPI(data) { return axios.post("/user/login", data); } function* logIn(action) { try { const result = yield call(logInAPI, action.data); yield put({ type: LOG_IN_SUCCESS, data: result.data, }); } catch (err) { console.error(err); yield put({ type: LOG_IN_FAILURE, error: err.response.data, }); } } 사가쪽도 문제가 없어보여서 프론트 쪽 문제는 아닌 것 같고 백엔드쪽 문제 같은데 도저히 어디서 문제가 생긴건지 모르겠습니다. app.js const express = require("express"); const cors = require("cors"); const session = require("express-session"); const cookieParser = require("cookie-parser"); const postRouter = require("./routes/post"); const userRouter = require("./routes/user"); const db = require("./models"); const passportConfig = require("./passport"); const passport = require("passport"); const dotenv = require("dotenv"); dotenv.config(); const app = express(); db.sequelize .sync() .then(() => { console.log("db 연결성공"); }) .catch(console.error); passportConfig(); app.use( cors({ origin: "*", credentials: false, }) ); app.use(express.json()); app.use(express.urlencoded({ extended: true })); app.use(cookieParser(process.env.COOKIE_SECRET)); app.use( session({ saveUninitialized: false, resave: false, secret: process.env.COOKIE_SECRET, }) ); app.use(passport.initialize()); app.use(passport.session()); app.get("/", (req, res) => { res.send("hello express"); }); app.get("/api", (req, res) => { res.json([ { id: 1, content: "hello", }, { id: 2, content: "hello2", }, { id: 3, content: "hello3", }, ]); }); app.get("/api/posts", (req, res) => { res.json([ { id: 1, content: "hello", }, { id: 2, content: "hello2", }, { id: 3, content: "hello3", }, ]); }); app.use("/post", postRouter); app.use("/user", userRouter); app.listen(3065, () => { console.log("서버 실행 중!"); }); passport/local.js const passport = require("passport"); const { Strategy: LocalStrategy } = require("passport-local"); const { User } = require("../models"); const bcrypt = require("bcrypt"); module.exports = () => { passport.use( new LocalStrategy( { usernameField: "email", passwordField: "password", }, async (email, password, done) => { try { console.log("입력값:", email, password); const user = await User.findOne({ where: { email }, }); console.log("찾은 유저:", user && user.email); if (!user) { return done(null, false, { reason: "존재하지 않는 이메일입니다!" }); } const result = await bcrypt.compare(password, user.password); if (result) { return done(null, user); } return done(null, false, { reason: "비밀번호가 틀렸습니다." }); } catch (error) { console.log(error); return done(error); } } ) ); }; passport/index.js const passport = require("passport"); const local = require("./local"); const { User } = require("../models"); module.exports = () => { passport.serializeUser((user, done) => { done(null, user.id); }); passport.deserializeUser(async (id, done) => { try { const user = await User.findOne({ where: { id } }); done(null, user); } catch (error) { console.error(error); done(error); } }); local(); }; 백엔드 코드를 첨부하였습니다. 터미널에 나온 콘솔 내용입니다. local.js파일에서도 콘솔("입력값:","찾은 유저:" )을 찍었는데 터미널에 찍힌 콘솔은 req.body만 찍혔습니다..

  • react
  • redux
  • node.js
  • express
  • next.js
현석 댓글 1 좋아요 0 조회수 116

/init 와 CLAUDE.md 파일 한글화에 대해 질문

미해결

클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지

안녕하세요. 강의 잘 듣고 있습니다. 두가지 질문이 있어서요 프로젝트 진행중에 새로운 기능이나 변경 사항이 있을때마다 /init를 해주면 좋은가요?(토큰 사용량과는 상관없이) CLAUDE.md 파일 내용은 원래 영어로 되어 있는건에 이번 강의에서 보니깐 한글로 요청해서 하시던데, 클코가 프로젝트를 이해하고 수행하는데 영어와는 차이가 없을까요? (역시 토큰 사용량과 상관없이, 한글 사용해도 클코가 잘 이해하고 잘 따르는지 궁금합니다.)

  • react
  • next.js
  • cursor
  • tailwindcss
  • claude
kelo 댓글 1 좋아요 0 조회수 742

Link 컴포넌트는 그러면 웬만하면 무조건 쓰는편이 좋은가요?

미해결

Next.js 까보기: "쓸 줄 아는 개발자"에서 "알고 쓰는 개발자"로

예를들어 landing 페이지에서 특정 페이지를 prefetching하는데 가져오는 그 페이지내에서 사용되는 데이터가많거나 할경우 prefetch가 독이되는 경우가 있을까요? 아니면 웬만하면 무조건 쓰는게 맞을까요?

  • react
  • typescript
  • next.js
dev_junior 댓글 2 좋아요 0 조회수 123

윈도우 git 설치후 파워쉘에서 버전 검색을 했더니 오류가 뜹니다.

미해결

클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지

git : 'git' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확 한지 확인하고 경로가 포함된 경우 경로가 올바른지 검증한 다음 다시 시도하십시오. 위치 줄:1 문자:1 + git -v + ~~~ + CategoryInfo : ObjectNotFound: (git:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException 이렇게 떠용. 재설치 해야 하나요?

  • react
  • next.js
  • cursor
  • tailwindcss
  • claude
조르바 댓글 2 좋아요 0 조회수 273

부분집합 전역변수 질문

미해결

2026 코딩테스트 올인원 [JAVA]

public class Subsets { List<List<Integer>> ans = new ArrayList<>(); List<List<Integer>> solution(int[] nums, int m) { dfs(nums, m, 0, new ArrayList<>()); return ans; } void dfs(int[] nums, int m, int start, List<Integer> curr) { //base case ans.add(new ArrayList<>(curr)); // 매순간 ans에 추가 //상태 전이 for(int i=start; i< nums.length; i++) { curr.add(nums[i]); dfs(nums, m, i+1, curr); curr.remove(curr.size()-1); } } } ans를 전역변수로 설정하고 for문으로 상태 전이할때마다 ans값을 수정하는 방식으로 구현할때 addAll(dfs(nums, m, i+1, curr));으로 하니 dfs가 void로 리턴돼서 에러가 나는데 위의 코드 블럭과 같이 dfs(nums, m, i+1, curr);로 실행하고 basecase에서만 ans에 curr을 추가하는 방식으로 하면 되는걸까요? 질문 봐주셔서 감사합니다!

  • java
  • 코딩-테스트
  • 알고리즘
  • data-structure
ming 댓글 2 좋아요 0 조회수 72

OperationEx3에서 꼭 boolean을 써야 하나요?

미해결

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 김영한님은 이렇게 푸셨는데 저는 이렇게 풀었습니다. 이게 문제가 있는 건지 알고 싶습니다. package operator.ex; public class OperationEx3 { static void main(String[] args) { int score = 88; System.out.println(80 <= score && score <= 100); } }

  • java
  • 객체지향
dhada0137 댓글 1 좋아요 0 조회수 80

강의 잘 듣고 있습니다.

해결됨

[VOD] 6주 완성! 개발 실무를 위한 고농축 바이브코딩 (Cursor AI, Figma)

안녕하세요. 바이브코딩 강의 너무 잘 듣고 있습니다. 혹시 강의에서 완성된 코드의 github 주소 혹은 완성된 결과 프로젝트를 받을 수 있을까요? 매번 자료를 다운로드 받는 게 다소 번거롭기도 하고, 완성된 결과를 비교하면서 공부하고 싶어서 그렇습니다...! ㅠ

  • react
  • next.js
  • cursor
  • 프롬프트엔지니어링
  • 바이브코딩
수수수 댓글 2 좋아요 0 조회수 119

1-8. Dispatcher에 멘토 규칙 추가

미해결

The 10x AI-Native Developer: 회사에서 AI로 압도적 성과를 내는 법

(...중략...) // ===== 기존 보안 규칙들 (그대로 유지) ===== // 규칙 1: .env 파일 접근 제어 if (filePath.includes('.env')) { if (toolName === 'Read' || toolName === 'Grep') { console.error("❌ 보안 규칙 위반: .env 파일은 읽을 수 없습니다. 작업이 차단되었습니다."); process.exit(2); } } (...중략...) // ===== 새로운 아키텍트 멘토 규칙들 ===== // 멘토 규칙 1: 라우터 파일 수정 시 멘토링 if (filePath.includes('/routes/') && (toolName === 'Edit' || toolName === 'Create' || toolName === 'Write')) { const fileName = filePath.split('/').pop() || ''; const entityName = fileName.replace(/Routes?\.(js|ts)$/i, ''); console.error(`🎯 [라우터 수정 감지] ${entityName} API 라우터를 수정하려고 합니다.`); console.error(`📚 아키텍트 멘토의 조언: 라우터 수정 전에 다음을 확인하세요:`); console.error(` - src/models/${entityName}.js (데이터 모델)`); console.error(` - src/services/${entityName}Service.js (비즈니스 로직)`); console.error(` - 기존 API 패턴과의 일관성`); console.error(`먼저 관련 파일들을 읽고 계획을 세워주세요!`); process.exit(2); } 이 코드를 보면 라우터 경로에 있는 파일을 수정하려고 할때와 .env 을 읽을때 동일하게 항상 process.exit(2); 가 실행될 것 같습니다. 환경변수를 절대 읽을 수 없는 것처럼 라우터 경로 파일도 결국 절대로 수정할 수 없어야 하지 않나요? 왜 수정 가능한건가요?

  • spring-boot
  • next.js
  • 인공지능(ai)
  • ai-활용-(ax)
  • claude
Gyu 댓글 2 좋아요 0 조회수 112

예제 빌드시 The compiler is unable to type-check this expression in reasonable time 에러 발생

미해결

SwiftUI + TCA: 실전 프로젝트로 완성하는 차세대 iOS 아키텍처

// // EditImageReducer.swift // AppStore // // Created by Langpeu on 12/24/25. // import ComposableArchitecture import SwiftUI import SwiftData import Photos @Reducer struct EditImageReducer { @ObservableState struct State { var userImage: Image? var assets: [PHAsset] = [] var selectedPhoto: (id: String, data: Data)? @Presents var alert: AlertState<Action>? } enum Action { case onAppear(image: Data?) case setUserImageData(Data?) case setUserImage(Image) case authResult(Bool) case onSelectPhoto(id: String, data: Data) } var body: some Reducer<State, Action> { Reduce { state, action in switch action { case let .onAppear(imageData): return Effect.run { send in let isAuth = await PhotoManager.requestAuthorization() await send(.authResult(isAuth)) await send(.setUserImageData(imageData)) } case let .authResult(isAuth): if isAuth { let assets = PhotoManager.getAssets() state.assets = assets } else { state.alert = AlertState.creatAlert(type: .error(message: "권한이 없습니다")) } case let .setUserImageData(data): guard let data, let uiImage = UIImage(data: data) else { return .none } return .send(.setUserImage(Image(uiImage: uiImage))) case let .setUserImage(image): state.userImage = image return .none case let .onSelectPhoto(id, data): state.selectedPhoto = (id: id, data: data) } return .none } } } struct EditImageView: View { @Bindable var store: StoreOf<EditImageReducer> let colums: [GridItem] = .init(repeating: .init(.flexible()), count: 3) @Query private var users: [User] private var user: User? { users.first } var body: some View { ScrollView { VStack { Text("선택된 이미지") // 선택된 이미지 Group { if let image = store.userImage { image .resizable() .scaledToFit() } else { Color.gray.opacity(0.2) } } .frame(width: 100, height: 100) .clipped() .cornerRadius(8) } LazyVGrid(columns: colums, spacing: 10) { ForEach(store.assets, id: \.localIdentifier) { asset in let isSelectedImage = store.selectedPhoto.id == asset.localIdentifier AssetImageView(asset: asset, isSelected: isSelectedImage, onTap: { data in //TODO: onTap store.send(.onSelectPhoto(id: asset.localIdentifier, data: data)) }) .clipped() .clipShape(RoundedRectangle(cornerRadius: 8)) } } .padding(8) } .onAppear() { store.send(.onAppear(image: user?.imageData)) } } } private struct AssetImageView: View { let asset: PHAsset let isSelected: Bool let onTap: (Data) -> Void let imageWidth: CGFloat = (UIScreen.currentWidth - 16 - 20) / 3 @State private var uiImage: UIImage? = nil var body: some View { Group { if let uiImage = uiImage { Image(uiImage: uiImage) .resizable() .scaledToFill() .onTapGesture { if let data = uiImage.jpegData(compressionQuality: 1.0) { onTap(data) } } } else { Color.gray.opacity(0.2) } } .frame(width: imageWidth, height: imageWidth) .overlay(alignment: .topTrailing, content: { if isSelected { Image(systemName: "checkmark.circle.fill") .foregroundColor(.green) .frame(width: 20, height: 20) } }) .onAppear() { PhotoManager.fetchImage(asset: asset) { uiImage in self.uiImage = uiImage } } } } 75번라인 var body: some View 에서 아래 빌드에러 발생 The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions ---- 위와 같은 에러로 빌드가 안되서 아래 처럼 처리 했습니다. (Xcode26.2 + M1Pro Macbook) 포인트: let isSelectedImage = ... 같은 로컬 let + 복잡한 클로저를 ForEach 내부에서 직접 쓰면 타입체커가 더 힘들어해. 함수로 빼면 거의 항상 해결됨. LazyVGrid(columns: colums, spacing: 10) { ForEach(store.assets, id: \.localIdentifier) { asset in assetCell(asset) } } .padding(8) } .onAppear() { store.send(.onAppear(image: user?.imageData)) } } @ViewBuilder private func assetCell(_ asset: PHAsset) -> some View { let isSelectedImage = (store.selectedPhoto?.id == asset.localIdentifier) AssetImageView( asset: asset, isSelected: isSelectedImage, onTap: { data in store.send(.onSelectPhoto(id: asset.localIdentifier, data: data)) }) .clipped() .clipShape(RoundedRectangle(cornerRadius: 8)) }

  • ios
  • swift
  • swiftui
랑프_Langpeu 댓글 1 좋아요 0 조회수 73

빠른 메모리 저장

미해결

클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지

강의 중 프롬프트 창에 #을 입력해서 빠르게 등록을 하는데, 저의 경우는 #을 입력해도 # to memorize가 보이지 않습니다

  • react
  • next.js
  • cursor
  • tailwindcss
  • claude
크리스추 댓글 1 좋아요 1 조회수 93

claude 스타터킷 개발 설정

해결됨

클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지

스크린샷에서 레이아웃부터 어떻게 설정하면 되는거죠?

  • react
  • next.js
  • cursor
  • tailwindcss
  • claude
read.eun77 댓글 2 좋아요 0 조회수 109

도와주세요 superbase

해결됨

비개발자 4주만에 수익화 서비스 만들기: AI 바이브코딩 웹 + 앱 ALL IN ONE

지금 현재날짜 12.28 슈퍼베이스 없어지고 자체클라우드 연동인데 강의는 다 슈퍼베이스 들어가서 이것저것하는데 공부가 진행이안돼요 보면서 따라해도 계속 막히고 그냥 저 혼자 맨땅에 헤딩하는 느낌이에요... 로그인기능 구현하는데 403에러나서 강의는 슈퍼베이스로 진행하는데 저혼자 그냥 어찌저찌 해보고있는데 강의를 보면서 진행이 안되니.. 미칠거같네요

  • flutter
  • next.js
  • cursor
  • supabase
  • 바이브코딩
킴주니 댓글 2 좋아요 0 조회수 103

synchronized 대신 join 을 사용하여 순서를 보장할 경우 해법이 아닌가요?

미해결

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] synchronized 이전 강의에서 join 을 활용하여 순서를 쓰레드의 순서를 보장하여 실행하는 방법에 대해 배웠습니다. 만약 동시에 같은 값에 대해 접근하는 것이 문제 라고 가정 할 경우 join 을 활용하여 특정 쓰레의 종료 이전 까지 다음 쓰레드 를 시작하는 것을 막는 다면 해결할수 있는 문제가 아닌가 생각합니다. 예를들어 다음과 같이 t1.join() 을 사용하면 t1 의 쓰레드가 종료 이전 까지는 t2 는 대기 상태가 될 것이고 t1 에서 최종 결과가 나오기 전까지는 t2 는 실행하지 못할 것 입니다. public class BankMain { public static void main(String[] args) throws InterruptedException { //BankAccount account = new BankAccountV1(1000); BankAccount account = new BankAccountV1(1000); Thread t1 = new Thread(new WithdrawTask(account, 800), "t1"); Thread t2 = new Thread(new WithdrawTask(account, 800), "t2"); t1.start(); t1.join(); sleep(500); log("t1 state :"+t1.getState()); log("t2 state :"+t2.getState()); t2.start(); //t2.join(); log("최종 잔액 : "+account.getBalance()); } }

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
정동희 댓글 2 좋아요 0 조회수 127

claude code

미해결

클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지

cursor에서 control+esc 를 눌렀을 때 claude code가 나오지 않을때는 어떻게 하나요?

  • react
  • next.js
  • cursor
  • tailwindcss
  • claude
read.eun77 댓글 3 좋아요 0 조회수 204

[질문] CLAUDE.md 파일

미해결

클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지

스크린샷처럼 .claude 안에 md 파일이 없는 경우는 어떻게 해야 하나요?

  • react
  • next.js
  • cursor
  • tailwindcss
  • claude
read.eun77 댓글 2 좋아요 0 조회수 226

인기 태그

인프런 TOP Writers

주간 인기글