inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

OAuth 프로필 생성 관련 질문입니다.

해결됨

한 입 크기로 잘라먹는 React.js 실전 프로젝트 - SNS 편

안녕하세요 강의 정말 잘 듣고있습니다. 현재 강의를 무한 중첩 댓글 구현하기까지 수강했습니다! 테스트를 위해 여러가지 사항들을 직접 체크하고있는데 Github로 로그인한 사용자의 정보들(avatar_url, name)들은 기본적으로 사용하지 않고 랜덤한 닉네임과 기본 아바타 이미지가 나오는게 정상 동작일까요? 제가 이해한 흐름은 다음과 같습니다. 1. Github(OAuth) 로그인 2. Supabase Authentication > Users에 사용자 생성 (profile 테이블에는 아직 생성 되지 않음) 3. SessionProvider에서 useProfileData 호출 export default function SessionProvider({ children }: { children: ReactNode }) { const session = useSession(); const setSession = useSetSession(); const isSessionLoaded = useIsSessionLoaded(); const { data: profile, isLoading: isProfileLoading } = useProfileData( session?.user.id, ); useEffect(() => { supabase.auth.onAuthStateChange((event, session) => { setSession(session); }); }, []); if (!isSessionLoaded) return <GlobalLoader />; if (isProfileLoading) return <GlobalLoader />; return children; } 4. fetchProfile(userId) 실행 export async function fetchProfile(userId: string) { const { data, error } = await supabase .from("profile") .select("*") .eq("id", userId) .single(); if (error) throw error; return data; } Supabase Table Editor > profile 에는 아무런 결과가 저장되어 있지 않기 때문에 PostgrestError: PGRST116 에러 발생 useProfileData catch 블록 실행 → createProfile 호출 랜덤한 닉네임 + avatar_url이 기본으로 저장 만약 제가 이해한 흐름이 맞다면 어떤 방법을 써야할까요? 제일 먼저 드는 생각은 createProfile에 session을 매개변수로 받아서 session.user.user_metadata.full_name 과 avatar_url 을 insert에 넣는걸 생각했습니다. createProfile export async function createProfile(userId: string, session?: Session) { const { data, error } = await supabase .from("profile") .insert({ id: userId, // ↓ 여기 수정 했어용 nickname: session?.user.user_metadata?.full_name || getRandomNickname(), avatar_url: session?.user.user_metadata?.avatar_url || null, }) .select() .single(); if (error) throw error; return data; } use-profile-data.ts export function useProfileData(userId?: string) { const session = useSession(); const isMine = userId === session?.user.id; return useQuery({ queryKey: QUERY_KEYS.profile.byId(userId!), queryFn: async () => { try { const profile = await fetchProfile(userId!); return profile; } catch (error) { if (isMine && (error as PostgrestError).code === "PGRST116") { return await createProfile(userId!, session!); // 여기 session 추가 했어용 } throw error; } }, enabled: !!userId, }); } 이렇게 코드를 수정하고 profile table을 삭제한 후 다시 Github로 로그인 하면 사용자의 프로필 이미지와 이름이 받아와졌습니다. 더 효율적이거나 더 좋은 방법이 있을까요? 혹은 제가 잘못 알고 있는게 있을까요?

  • react
  • typescript
  • react-query
  • supabase
  • zustand
jjk5050123 댓글 2 좋아요 0 조회수 96

포트폴리오 웹사이트에대해 질문드립니다.

해결됨

포트폴리오 어나더레벨 | 합격하는 이력서 작성법

큰돌님 안녕하세요. 알고리즘강의부터 유튜브까지 잘 시청하고있습니다. 프론트엔드를 목표로 준비를 하고있는데 대부분 포트폴리오 페이지를 하나씩 구축을 하고 이력서와 같이 첨부하더라구요.. 과거에 리액트 + GSAP로 인터렉션 위주로 만들어놓은게 있지만 손볼것도 많고 요즘은 NextJS가 추세라하여 새로 만들어야할것같은데 이부분이 프론트 지원시 거이 필수적인지 궁금합니다.

  • HTML/CSS
  • javascript
  • python
  • java
  • 포트폴리오
AMSTD - 댓글 2 좋아요 0 조회수 132

lovable 슈퍼베이스 연결

해결됨

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

결제하고 러너블에서 슈퍼베이스 연동을 할려했는데 connect supabase 이 버튼을 눌렀는데 어딜봐도 슈퍼베이스란건 안적혀있는데 어떻게 연동하나요?

  • flutter
  • next.js
  • cursor
  • supabase
  • 바이브코딩
지호 댓글 2 좋아요 0 조회수 260

6.2 회원가입 구현 18:06 AuthResponse 관련 문의

해결됨

한 입 크기로 잘라먹는 React.js 실전 프로젝트 - SNS 편

안녕하세요, 강의 잘 듣고 있습니다! 6.2강 회원가입 구현 강의 18:06경에 설명해주시는 AuthResponse 타입의 정의?가 변경된 것인지, 제 코드 에디터에는 아래와 같이 표시됩니다. 첫 번째 객체 부분 {data: T; error: null}은 이해가 가는데요, 두 번째 객체 부분은 강의상 화면과 차이가 좀 있어서, 추가로 설명해주실 수 있으면 감사하겠습니다.

  • react
  • typescript
  • react-query
  • supabase
  • zustand
Haemin Park 댓글 2 좋아요 0 조회수 115

트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

이번 강의에서 영한님이 기본적으로 트랜잭션을 시작할 때 커넥션을 가져온다고 말씀해 주셨습니다. 주문 api 관련 내용에서는 바로 리포지토리를 참조하여 @Transactional 없이 사용했는데요 그럼 이런 경우는 커넥션을 어느 타이밍에 가져오나요?

  • java
  • spring
  • spring-boot
  • jpa
조태준 댓글 2 좋아요 0 조회수 129

포스트 리스트를 불러오는 hook에 대하여 질문드립니다!

해결됨

한 입 크기로 잘라먹는 React.js 실전 프로젝트 - SNS 편

안녕하세요! 타입 스크립트부터 현재 강의까지 너무 유용하게 잘 듣고 있는 수강생입니다! 9-1 강의를 수강하다가 문득 궁금함이 생겨서 질문 남겨 봅니다. A 유저와 B 유저가 있다고 가정했을 때 A 유저가 프로필 상세 화면을 보고 있는 상태에서 B 유저가 새로운 포스트를 올렸는데, 이후에 A 유저가 메인 리스트 화면으로 이동하면 B 유저가 올린 새로운 포스트가 로드되지 않는 것으로 보입니다! (새로 고침하면 당연히 정상적으로 보이고요) 제가 코드 작성을 하면서 놓친 부분이 있어 이러한 현상이 발생하는 것인지, 아니면 이후 강의에서 해당 부분이 수정되는 것인지 여쭤보고 싶습니다. 늘 좋은 강의 감사합니다! 🙂 좋은 하루 보내세요~!

  • react
  • typescript
  • react-query
  • supabase
  • zustand
백지수 댓글 2 좋아요 0 조회수 66

Future4-이유 질문

미해결

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

1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요. Future를 거치는 SumTaskMainV2에서 future2.get()이 future1.get() 실행 후 task1의 call() 완료를 기다리지 않고 바로 실행되는 것을 콘솔 로그로 확인 가능했는데요. 그렇다면 Future를 거치지 않고 결과를 반환한다 가정할 때, task2가 task1 완료를 기다린 후 수행된다고 나와있는데, "Future는 한 스레드 작업의 future1.get() 실행 후, 다른 스레드의 작업 future2.get()은 future1의 call() 완료까지 기다리지 않는 기능이 있다" 이렇게 이해해도 될까요?

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
sjahn 댓글 1 좋아요 0 조회수 84

투두 리스트 ui 작업 중에 material-tailwind가 리액트와 호환 문제가 있는지 리액트 19에서 18로 낮춰도 인풋과 아이콘 버튼 컴포넌트가 제대로 표시되지 않아요 ㅜㅜ

미해결

[풀스택 완성] Supabase로 웹사이트 3개 클론하기 (Next.js 14)

✅ 모든 질문들은 슬랙 채널에서 답변드리고 있습니다. 💡 ”로펀의 인프런 상담소” 슬랙 채널 가입하기 💡 평일중에는 퇴근 이후(저녁 7시)에 답변을 받아보실 수 있고, 주말중에는 상시 답변드리고 있습니다. 투두 리스트 ui 작업 중에 material-tailwind가 리액트와 호환 문제가 있는지 리액트 19에서 18로 낮춰도 인풋과 아이콘 버튼 컴포넌트가 제대로 표시되지 않아요 ㅜㅜ

  • firebase
  • next.js
  • tailwindcss
  • react-query
  • supabase
이재웅 댓글 1 좋아요 0 조회수 104

성능 개선에 대한 부분을 작성할 때 궁금한 점이 있습니다.

미해결

포트폴리오 어나더레벨 | 합격하는 이력서 작성법

안녕하세요 큰돌님! 항상 유튜브 잘 보고 있습니다. 저는 백엔드 개발자로 취업을 준비하고 있고, 현재 이력서와 포트폴리오를 만들기 위해 강의도 듣고 제 경험을 정리하고 있습니다. 본 강의와 큰돌님의 유튜브에서 항상 성능 개선을 수치적으로 표현 하라고 말씀하시는 것을 많이 들었습니다. 여기서 성능 개선에 있어서 제가 프로젝트를 할 때, 제 지식의 부족함으로 인해 성능이 안좋았던걸 개선한거에 대해서는 어떻게 적으면 좋을지 궁금합니다. 실제로, 웹에서 SSH 접속을 위한 프로젝트를 하면서 초기 SSH 접속을 할 때, sleep(500), 쉘에서 실행할 명령어를 송수신 하는 while문에서 sleep(10)을 설정 했었습니다. Java의 InputStream으로 입력값을 받도록 하였는데 개발 당시에는 안정적인 송수신을 위해서 sleep을 추가했는데, 리팩토링을 하는 과정에서 InputStream이 Blocking I/O의 특성으로 인해 불필요하다는 것을 알게 되었습니다. 이런 부분도 성능 개선 작업으로 적어도 되는지 궁금하고, 특히 면접에서 제 부족함?을 직접적으로 표현하지 않고 어떻게 말해야할지도 궁금합니다. 질문이 최대한 간략하게 적으려고 하다보니 두서없네요 ㅠㅠ. 감사합니다!

  • HTML/CSS
  • javascript
  • python
  • java
  • 포트폴리오
akdlzhf2008 댓글 1 좋아요 0 조회수 119

CommentItem에 props를 전달하지만 받지 않는데 TypeScript 에러가 안 나는 이유가 궁금합니다

해결됨

한 입 크기로 잘라먹는 React.js 실전 프로젝트 - SNS 편

(10.3) 댓글 조회 기능 구현하기 8:50 CommentItem에서 props를 작성하기전 <CommentItem key={comment.id} {...comment} /> 에 {...commnet}를 넣어도 TypeScript에서 에러가 나지 않던데 이유가 궁금합니다. // comment-list.tsx {comments.map((comment) => ( <CommentItem key={comment.id} {...comment} /> ))} // comment-item.tsx export default function CommentItem() { // props를 안 받음 return <div>하드코딩된 내용</div> }

  • react
  • typescript
  • react-query
  • supabase
  • zustand
호기쿤 댓글 1 좋아요 0 조회수 62

병렬 중첩

미해결

죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.

형 병렬 중첩 시키는 예제 코드있잖아. Worker Step Multithreading Implementation @Bean public Step managerStep(Step workerStep) { return new StepBuilder("managerStep", jobRepository) .partitioner("workerStep", dailyTimeRangePartitioner) .step(workerStep) .taskExecutor(partitionTaskExecutor()) .gridSize(4) .build(); } @Bean public Step workerStep(SynchronizedItemReader<TestLog> redisLogReader, ItemProcessor<TestLog, TestLog> logProcessor, MongoItemWriter<TestLog> mongoLogWriter) { return new StepBuilder("workerStep", jobRepository) .<TestLog, TestLog>chunk(500, transactionManager) .reader(redisLogReader) .processor(logProcessor) .writer(mongoLogWriter) .taskExecutor(workerTaskExecutor()) .build(); } @Bean @StepScope public SynchronizedItemReader<TestLog> redisLogReader(@Value("#{stepExecutionContext['startDateTime']}") LocalDateTime startDateTime) { log.info("{} read {}", Thread.currentThread().getName(), startDateTime.format(DateTimeFormatter.ofPattern("yyyyMMddHH"))); RedisItemReader<String, TestLog> itemReader = new RedisItemReaderBuilder<String, TestLog>() .redisTemplate(redisTemplate()) .scanOptions(ScanOptions.scanOptions() .match("logs:" + startDateTime.format(DateTimeFormatter.ofPattern("yyyyMMddHH")) + ":*") .count(10000) .build()) .build(); return new SynchronizedItemReader<>(itemReader); } @Bean public TaskExecutor workerTaskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(5); executor.setMaxPoolSize(5); executor.setWaitForTasksToCompleteOnShutdown(true); executor.setAwaitTerminationSeconds(10); executor.setThreadNamePrefix("Worker-Thread-"); executor.setAllowCoreThreadTimeOut(true); executor.setKeepAliveSeconds(30); return executor; } 이렇게 했는데 2025-12-17T13:34:07.885+09:00 ERROR 1568 --- [ main] o.s.batch.core.step.AbstractStep : Encountered an error executing step workerStep in job testLogJob java.lang.NullPointerException: Cannot invoke "org.springframework.data.redis.core.Cursor.hasNext()" because "this.cursor" is null at org.springframework.batch.item.redis.RedisItemReader.read(RedisItemReader.java:62) ~[spring-batch-infrastructure-5.2.4.jar:5.2.4] 이런 오류가 나. 그리고 ItemReader쪽에 log.info("{} read {}", Thread.currentThread().getName(), startDateTime.format(DateTimeFormatter.ofPattern("yyyyMMddHH"))); 로그를 찍었는데 Worker-Thread-5 read 2025121712 Worker-Thread-1 read 2025121706 Worker-Thread-2 read 2025121700 Worker-Thread-3 read 2025121718 이런식으로 찍히고 있어. 하나의 파티션을 여러 스레드가 읽어야 하는데 workerTaskExecutor가 서로 다른 파티션을 읽고 있어. 내가 뭐 놓친게 있는걸까?

  • java
  • spring
  • spring-boot
  • spring-batch
  • backend
ABBCD 댓글 3 좋아요 1 조회수 130

article_like_count api test

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

동시성 이슈가 안터질 수도 있나요?

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
댓글 2 좋아요 0 조회수 102

수업을 잘 듣고 있습니다.

미해결

토비의 스프링 6 - 이해와 원리

혹시 지금 강의하시는 내용 중애 notion의 내용을 받아 볼 수는 없을까 해서요.

  • java
  • spring
임정훈 댓글 2 좋아요 0 조회수 129

이벤트 페이로드 객체의 생성 방식이 팩토리 메서드 패턴이 아닌 빌더 패턴인 이유가 궁금합니다!.

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

안녕하세요, 강사님 덕분에 많은 인사이트를 얻으며 성장중인 수강생입니다ㅎㅎ 다름이 아니라 이벤트 페이로드 타입의 생성 방식이 팩토리 메서드 패턴이 아닌 빌더 패턴인 이유가 궁금합니다! 빌더 패턴의 장점은 생성자 오버로딩이 많을 때, 간편하게 사용할 수 있다는 장점이 있지만 필수인 필드에 null 이 들어갈 수 있다는 단점이 있다고 생각합니다. 그래서, 저는 빌더 패턴을 해당 객체의 필드 중 null 이 들어갈 수 있는 필드가 많을 때 사용하는 걸 선호하다 보니, 이벤트 페이로드 타입을 생성 할 때 일부 필드에 null 이 들어가는 걸까? 란 궁금증으로 질문이 생기게 되었습니다. 빌더 패턴에 대한 강사님의 의견이 궁금하며 이벤트에 기존에 사용하신 팩토리 메서드 대신 빌더 패턴을 사용하신 계기가 궁금합니다! 감사합니다 :)

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
종혁 댓글 2 좋아요 0 조회수 116

실행이 안되네요

미해결

실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)

Execution failed for task ':compileKotlin'. > Error while evaluating property 'filteredArgumentsMap' of task ':compileKotlin' > Could not resolve all files for configuration ':compileClasspath'. > Could not find org.jetbrains.kotlin:stdlib-jdk8:1.6.21. Required by: project : Possible solution: - Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html 위와 같은 에러가 뜨는데 아래 잘 바꿨거든요? plugins { id 'org.springframework.boot' version '2.7.6' id 'io.spring.dependency-management' version '1.0.12.RELEASE' id 'java' id 'org.jetbrains.kotlin.jvm' version '1.6.21' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.jetbrains.kotlin:stdlib-jdk8' runtimeOnly 'com.h2database:h2' testImplementation 'org.springframework.boot:spring-boot-starter-test' } tasks.named('test') { useJUnitPlatform() } compileKotlin{ kotlinOptions{ jvmTarget="11" } } compileTestKotlin{ kotlinOptions{ jvmTarget="11" } } 왜안될까요

  • java
  • spring
  • kotlin
  • spring-boot
  • 리팩터링
김성관 댓글 2 좋아요 0 조회수 107

pdf 표현 질문드립니다.

미해결

실전! 스프링 데이터 JPA

pdf 6페이지에 org.springframework.data.repository.Repository 를 구현한 클래스는 스캔 대상 이라고 나와있는데요 이 표현에 대해 궁금합니다. 저는 JpaRepository 뿐만 아니라 Repository 인터페이스를 상속한 인터페이스는 스캔 대상이 되어 구현체가 생성되는 것으로 강의를 이해했는데요. Repository 를 구현한 클래스 가 스캔 대상이라고 하니 정말 Repository나 JpaRepository를 구현한 클래스가 스캔 대상이 되는 제가 이해하지 못한 부분이 있는 것인지 단순 표현이 잘못된 것인지 궁금합니다. 저는 상속한 클래스가 스캔 대상 일거라고 생각을 했습니다..

  • java
  • spring
  • spring-boot
  • jpa
yoon6669 댓글 1 좋아요 0 조회수 88

195개 실제 기출 문제 분석은 어디있을까요?

미해결

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

2026 최신 코딩테스트 자바, 195개 실제 기출 문제 분석 제목을 보고 이거다 싶어서 구매했어요. 강의의 제목과 강의에 대한 설명들을 볼때 195개에 대해 기출문제에 대해서 분석해주는 것처럼 보입니다. 실제로 본문 노션화면에서도 195개에 대해서 분석 한 것을 보여주는 것처럼 보여요. 초장에는 개념설명이기에 후에 195개에대해서 분석해주시는줄알았어요. 허나 자료에도, 강의에도 실제 기출 195개에 대한 분석 정보는 전혀 찾아볼수없습니다. 확인할 곳 이 있으면 알려주시면 좋겠고, 만약 아니라면 제목과 본문에서 해당 정보는 오해해 소지가 있어보입니다. 실제 기출 195개에 대한 분석이 없다면 환불요청하고싶어요.

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

프론트 영역 보는법

미해결

실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)

안녕하세요 이거 프론트 부분은 다 해서 주시는데 프론트 영역은 어떻게 보는지 알 수 있을까요?

  • java
  • spring
  • kotlin
  • spring-boot
  • 리팩터링
김성관 댓글 2 좋아요 0 조회수 92

좌표 정렬 문제 이 코드가 왜 틀린지 모르겠습니다 ㅠㅠ

미해결

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

package C06_07; import java.util.*; public class Main { public int[][] solution(int n, int[][] arr){ Arrays.sort(arr, new Comparator<int[]>(){ public int compare(int[] s1, int[] s2){ if (s1[0] == s2[0]){ return s1[1] - s2[1]; } else return s1[0] - s2[0]; } }); return arr; } public static void main(String[] args){ Main T = new Main(); Scanner scan = new Scanner(System.in); int n = scan.nextInt(); int[][] arr = new int[n][2]; for (int i = 0; i < n; i++){ for (int j = 0; j < 2; j++){ arr[i][j] = scan.nextInt(); } } for (int[] x : T.solution(n, arr)){ for (int y : x) System.out.print(y + " "); System.out.println(); } } } 이렇게 진행을 하였는데 계속 오답이 나옵니다 왜 틀린 걸까요..? 테스트 케이스도 맞는데 왜 틀린지 모르겠습니다 ㅠㅠ

  • java
  • 코딩-테스트
whitecy01 댓글 2 좋아요 0 조회수 113

[33. 좋아요 수 구현] 에서 테스트 하는 화면 동시성 문제

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

학습 관련 질문을 최대한 상세히 남겨주세요! 고민 과정도 같이 나열해주셔도 좋습니다. 먼저 유사한 질문이 있었는지 검색해보세요. 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. [33. 좋아요 수 구현] 에서 테스트 하는 화면에서요. 해당 방법대로 실행을 하면 동시성 문제가 발생합니다. Record has changed since last read in table 'article_like_count' 저는 MariaDB를 사용하고 있는데요. MySQL도 마찬가지로 기본 잠금 수준이 Repeatable Read 라고 알고 있습니다. 해당 기본 수준으로 실행하면 동시성 문제로 영상과 다른 결과를 보이게 됩니다. 따라서 잠금 수준을 Read Commited 나 Read Uncommited 로 변경하면 제대로 실행이 됩니다. 이렇게 하는 것이 정답인지 아니면 다른 원인이 있는건지 알려주세요.

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
주주파파 댓글 2 좋아요 0 조회수 109

인기 태그

인프런 TOP Writers

주간 인기글