inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

클라이언트 컴포넌트로의 전환

해결됨

한 입 크기로 잘라먹는 Next.js

강사님 안녕하세요. 학습을 거의 끝낸 상태라 거의 마지막 질문이 될 것 같기도 한데요^^ 클라이언트 컴포넌트는 서버 컴포넌트를 Import 할 수 없기 떄문에 Next 는 서버 컴포넌트를 클라이언트 컴포넌트로 동작시킨다고 배웠습니다. 그런데 만약 이러한 서버 컴포넌트에 async 방식의 api 코드가 포함되어 있는 경우에는 이런 코드가 클라이언트 방식으로 동작하면 문제가 발생할 것 같은데요. 결국, 이런 상황에서는 서버 컴포넌트를 그대로 두어서는 안되고 강의에서 설명하신 합성 방식으로 변경을 하거나 아니면 해당 서버 컴포넌트의 API 로직을 react-query 나 useEffect 훅을 이용해서 실행될 수 있는 클라이언트 컴포넌트로 리팩토링을 해야만 되는거 같은데 제가 올바로 이해한 게 맞을까요?

  • react
  • typescript
  • next.js
아리마 댓글 2 좋아요 0 조회수 359

리퀘스트 메모이제이션이 동작을 안하는것 같습니다.

미해결

한 입 크기로 잘라먹는 Next.js

/app/(with-searchbar)/page.tsx /app/layout.tsx 터미널 첨부한 사진과 같이 수업내용에 따라 코드를 작성하였고, 선생님의 화면과는 다르게 저렇게 같은 GET 호출이 두번이 나오네요... 옵션을 따로 추가하는것으로 바뀌었을까요?? npm run dev를 껐다가 다시 실행해도 마찬가지의 결과가 나옵니다!

  • react
  • typescript
  • next.js
wjswlgh96 댓글 4 좋아요 8 조회수 826

SessionManagerV6 에서 synchronized 부분이 이해가 잘 안갑니다.

해결됨

김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] package network.tcp.v6; import network.tcp.v5.SessionV5; import java.util.ArrayList; import java.util.List; public class SessionManagerV6 { private List<SessionV6> sessions = new ArrayList<>(); public synchronized void add(SessionV6 session) { sessions.add(session); } public synchronized void remove(SessionV6 session) { sessions.remove(session); } public synchronized void closeAll() { for (SessionV6 session : sessions) { session.close(); } sessions.clear(); } } 여기서 closeAll() 에서 스레드가 작업중일때 다른스레드가 remove() 를 호출할 수 없다는 부분이 잘 이해가 안 갑니다. synchronized 는 메서드 단위로 적용이 된다고 알고 있어서 closeAll() 에 스레드가 작업중이더라도 remove() 같은 다른 메서드랑은 관련 없다고 생각했습니다. 뭔가 흐름을 잘못 이해하고 있는 걸까요?

  • java
  • 네트워크
  • 객체지향
물병97 댓글 1 좋아요 0 조회수 305

searchParams 질문있습니다.

미해결

Next + React Query로 SNS 서비스 만들기

const onClickHot = () => { setCurrent('hot'); router.replace(`/search?q=${searchParams.get('q')}`) } 이 코드가 있으면 q=null일때 주소가 http://localhost:3000/search?q=null 이렇게 이동되는데 제로초님은 아무런 검색어가 없는데 어떻게 null로 안나오죠? null체크를해서 주소를 2개 분기해도 될거같긴한데 제로초님은 q가 null일땐 주소창의 쿼리가 안생기더라고요 . 뭐가다른건지 모르겠네요ㅠ

  • react
  • next.js
  • react-query
  • next-auth
  • msw
ChangJun.dev 댓글 2 좋아요 1 조회수 221

h2데이터베이스에 변경사항이 반영이 안됩니다.

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

쿼리문이 다음과 같이 날라가는데도 h2데이터 베이스에 변경사항이 반영되지 않습니다 ㅠㅠ 어떤 문제가 있는 걸까요

  • java
  • jpa
주현 댓글 2 좋아요 0 조회수 208

백엔드서버에서 요청은 정상적이나 데이터를 못가져오는 현상

해결됨

한 입 크기로 잘라먹는 Next.js

안녕하세요. 책 데이터를 불러오지 못해서 문의 드립니다. 스웨거에서도 아무 데이터를 못 불러오는데 혹시 어떤 문제일까요? npx prisma db push 도 잘 완료 하였고 백엔드 서버도 start 해 놓은 상태입니다.

  • react
  • typescript
  • next.js
univsai_edu 댓글 2 좋아요 1 조회수 444

다운로드소스코드 실행 후 창이 다릅니다.

미해결

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

src 폴더 내 array 등 많은 것으로 영상에서는 보여지는데 저는 Main 파일 밖에 없습니다. 다운로드 파일이 잘못된걸까요? ㅠㅠ [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.

  • java
  • 객체지향
상호 댓글 2 좋아요 0 조회수 183

BlockingQueue에 Task 가 없어요

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] ExecutorService.submit 시점에 디버깅을 걸어서 확인해보니 BlockingQueue 필드인 workQueue 내부에 task가 들어가지 않고 workers라는 HashSet에 들어가지는 것 같습니다 혹시 제가 어디서 놓친건지 모르겠어서 여쭤봅니다 이거 때문에 계속 헷갈려요..ㅜ

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

인텔리제이 설치한 후 이상합니다.

미해결

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

강사님께서 말씀하신데로 설치하고 뉴 프로젝트를 눌렀는데, 강의에 나오는 화면과 다릅니다... 너무 어이없지만 여기서부터 막혀서 저도 당황스럽습니다... 빨리 공부하고 싶은데... 이게 대체 무슨 상황인지... 빠른 답변 부탁드립니다.

  • java
  • 객체지향
hyosu92 댓글 2 좋아요 0 조회수 114

closed 사용하는 이유

미해결

김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션

NormalCloseServer 할때 close()가 여러번 호출돼도 예방하는 코드가 있다고 했습니다. 그러면 V6SessionV6에서 closeAll() 하기전에 closed를 확인 안해도 되지 않나요?

  • java
  • 네트워크
  • 객체지향
tjrans303 댓글 2 좋아요 0 조회수 213

Next.js vs React.js

해결됨

한 입 크기로 잘라먹는 Next.js

강사님, 안녕하세요. 강의를 들으면서 살짝 혼란스러운 부분이 있습니다. 사실 Next.js 도 바탕은 React 인데요. React 에서 제일 많이 언급되고 중요시되는 부분은 상태(state)관리라고 생각이 되는데 Next.js 로 SSR 위주의 페이지를 작성하게 되면 결국 상태관리는 최소화하게 되는 것인데 이게 React 의 컨셉과 맞는 것인지 살짝 이해가 되지 않습니다. (강의에서도 state 는 거의 언급이 되지 않고요) 그렇다고 상태관리를 최대한 활용하는 CSR 위주의 개발을 하게 되면 Next.js 의 장점을 거의 얻지 못하게 될 것 같기도 하고요. 저는 Next.js 가 제공하는 프레임워크 측면의 혜택을 얻고자 Next.js 로 어플리케이션 구축을 해보고 싶은데 해당 어플리케이션이 CSR 의 비중이 적지 않을 것 같아서 좀 망설여지는 부분이 있습니다. 현대 애플리케이션들은 사용자들과의 상호작용이 적을 수가 없을텐데 대다수의 앱들이 Next.js 의 SSR 위주의 개발로 충분히 커버가 가능한 것일까요?

  • react
  • typescript
  • next.js
아리마 댓글 2 좋아요 0 조회수 601

강의 자료 그림

미해결

김영한의 실전 자바 - 중급 1편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요 ~! 강의 자료에서 처럼 이런 자료들을 draw.io에서 만든다는 정보는 찾았는데요 ! 그 내부에서 어떤 템플릿을 사용하시는지 궁금합니다..! 몇 시간 동안 여러가지 클릭 해봤는데 못 찾아서요 ㅠㅠ 크래파스로 그은듯한 네모와 점선으로 연결된 화살표, dot 네모박스가 궁금합니다 !

  • java
  • 객체지향
강리눅스 댓글 1 좋아요 0 조회수 146

h2 데이터 베이스 버전 오류

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

지금 현재 2가지 문제가 있는데 해결할 수있을까요? 해결방법을 알고 싶습니다 ㅠㅠ

  • java
  • jpa
주현 댓글 2 좋아요 0 조회수 289

구조체 강의 4:31 질문있습니다

해결됨

(2026 최신!) 일주일만에 합격하는 정보처리기사 실기

myCar.model[i] = '\0'; 은 세줄 위의 for에 영향을 받는 것 인가요?? 바로 위 } 에서 for문이 종료됐다고 생각했는데 myCar.model[i] = '\0'; 가 [i]에는 어떤 숫자를 넣어야할지 이해가 되지 않습니다

  • python
  • java
  • c
  • 정보처리기사
kku1804 댓글 2 좋아요 1 조회수 174

LettureLockStockFacadeTest에서 오류가 발생합니다.

미해결

재고시스템으로 알아보는 동시성이슈 해결방법

package com.example.stock.repository; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import java.time.Duration; @Component public class RedisLockRepository { private RedisTemplate<String, String> redisTemplate; public RedisLockRepository(RedisTemplate<String, String> redisTemplate) { this.redisTemplate = redisTemplate; } public Boolean lock(Long key) { return redisTemplate .opsForValue() .setIfAbsent(generateKey(key), "lock", Duration.ofMillis(3_000)); } public void unlock(Long key) { redisTemplate.delete(generateKey(key)); } private String generateKey(Long key) { return key.toString(); } } package com.example.stock.facade; import com.example.stock.repository.RedisLockRepository; import com.example.stock.service.StockService; import org.springframework.stereotype.Component; @Component public class LettuceLockStockFacade { private final RedisLockRepository redisLockRepository; private final StockService stockService; public LettuceLockStockFacade(RedisLockRepository redisLockRepository, StockService stockService) { this.redisLockRepository = redisLockRepository; this.stockService = stockService; } public void decrease(Long key, Long quantity) throws InterruptedException { while(!redisLockRepository.lock(key)){ Thread.sleep(100); } try{ stockService.decrease(key, quantity); }finally { redisLockRepository.unlock(key); } } } package com.example.stock.facade; import com.example.stock.domain.Stock; import com.example.stock.repository.StockRepository; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import static org.junit.jupiter.api.Assertions.*; @SpringBootTest class LettuceLockStockFacadeTest { @Autowired private LettuceLockStockFacade lettuceLockStockFacade; @Autowired private StockRepository stockRepository; @BeforeEach public void before(){ stockRepository.saveAndFlush(new Stock(1L, 100L)); } @AfterEach public void after(){ stockRepository.deleteAll(); } @Test public void 동시에_100개의_요청() throws InterruptedException { int threadCount = 100; ExecutorService executorService = Executors.newFixedThreadPool(32); CountDownLatch latch = new CountDownLatch(threadCount); for(int i = 0; i < threadCount; i++){ executorService.submit(() -> { try{ lettuceLockStockFacade.decrease(1L, 1L); } catch (InterruptedException e) { throw new RuntimeException(e); } finally { latch.countDown(); } }); } latch.await(); Stock stock = stockRepository.findById(1L).orElseThrow(); assertEquals(0, stock.getQuantity()); } } 이렇게 코딩했고 dockre에 redis를 설치하고 window Shell에서 데이터가 남아 있을까봐 1번 key 값을 삭제해서 돌렸는데도 오류가 발생했습니다. 또한 레디스가 실행이 되지 않은 채 했을까봐 ping을 입력했는데 pong이라는 응답을 받았습니다. Hibernate: drop table if exists stock 2024-11-03T22:08:40.414+09:00 DEBUG 17108 --- [ Test worker] org.hibernate.SQL : create table stock (id bigint not null auto_increment, product_id bigint, quantity bigint, version bigint, primary key (id)) engine=InnoDB Hibernate: create table stock (id bigint not null auto_increment, product_id bigint, quantity bigint, version bigint, primary key (id)) engine=InnoDB 2024-11-03T22:08:40.439+09:00 INFO 17108 --- [ Test worker] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' 2024-11-03T22:08:41.136+09:00 INFO 17108 --- [ Test worker] o.s.d.j.r.query.QueryEnhancerFactory : Hibernate is in classpath; If applicable, HQL parser will be used. 2024-11-03T22:08:42.092+09:00 WARN 17108 --- [ Test worker] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning 2024-11-03T22:08:42.990+09:00 INFO 17108 --- [ Test worker] c.e.s.facade.LettuceLockStockFacadeTest : Started LettuceLockStockFacadeTest in 6.21 seconds (process running for 7.345) 2024-11-03T22:08:43.504+09:00 DEBUG 17108 --- [ Test worker] org.hibernate.SQL : insert into stock (product_id,quantity,version) values (?,?,?) Hibernate: insert into stock (product_id,quantity,version) values (?,?,?) 2024-11-03T22:08:44.203+09:00 DEBUG 17108 --- [ Test worker] org.hibernate.SQL : select s1_0.id,s1_0.product_id,s1_0.quantity,s1_0.version from stock s1_0 where s1_0.id=? Hibernate: select s1_0.id,s1_0.product_id,s1_0.quantity,s1_0.version from stock s1_0 where s1_0.id=? 2024-11-03T22:08:44.245+09:00 DEBUG 17108 --- [ Test worker] org.hibernate.SQL : select s1_0.id,s1_0.product_id,s1_0.quantity,s1_0.version from stock s1_0 Hibernate: select s1_0.id,s1_0.product_id,s1_0.quantity,s1_0.version from stock s1_0 2024-11-03T22:08:44.252+09:00 DEBUG 17108 --- [ Test worker] org.hibernate.SQL : delete from stock where id=? and version=? Hibernate: delete from stock where id=? and version=? Expected :0 Actual :100 <Click to see difference> org.opentest4j.AssertionFailedError: expected: <0> but was: <100> at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151) at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132) at org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197) at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:182) at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:177) at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:639) at com.example.stock.facade.LettuceLockStockFacadeTest.동시에_100개의_요청(LettuceLockStockFacadeTest.java:55) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended 어디를 더 수정해야 하는지 모르겠습니다..

  • java
  • spring
  • 동시성
소리쨩 댓글 2 좋아요 1 조회수 298

stack구조관련질문

미해결

김영한의 실전 자바 - 중급 2편

package collection.deque.test.stack; import java.util.ArrayDeque; import java.util.Deque; public class BrowserHistory { private Deque<String> history = new ArrayDeque<>(); private String currentPage = null; public void visitPage(String s) { if(currentPage != null){ history.push(currentPage); } currentPage = s; System.out.println("방문 : "+s); } @Override public String toString() { return "BrowserHistory{" + "stack=" + history + '}'; } public String goBack() { if(!history.isEmpty()){ currentPage = history.pop(); System.out.println("뒤로가기 : "+currentPage); return currentPage; } return null; } public void pop(){ System.out.println(history.pop()); } } 문제와풀이3 -stack시간 수업에관한 질문입니다 stack구조의 경우 마지막에 넣은 입력이 pop()을 하면 나오는데 이경우는 마지막 전에 입력한것이 나옵니다 이유가뭘까요??

  • java
  • 객체지향
  • 코딩-테스트
  • 알고리즘
DG Y 댓글 2 좋아요 0 조회수 80

컬렉션프레임워크 Stack 관련질문

미해결

김영한의 실전 자바 - 중급 2편

package collection.deque.test.stack; import java.util.ArrayDeque; import java.util.Deque; public class BrowserHistory { private Deque<String> history = new ArrayDeque<>(); private String currentPage = null; public void visitPage(String s) { if(currentPage != null){ history.push(currentPage); } currentPage = s; System.out.println("방문 : "+s); } @Override public String toString() { return "BrowserHistory{" + "stack=" + history + '}'; } public String goBack() { if(!history.isEmpty()){ currentPage = history.pop(); System.out.println("뒤로가기 : "+currentPage); return currentPage; } return null; } } ////////////////////// package collection.deque.test.stack; public class BrowserHistoryTest { public static void main(String[] args) { BrowserHistory browser = new BrowserHistory(); // 사용자가 웹페이지를 방문하는 시나리오 browser.visitPage("youtube.com"); browser.visitPage("google.com"); browser.visitPage("facebook.com"); // 뒤로 가기 기능을 사용하는 시나리오 String currentPage1 = browser.goBack(); System.out.println("currentPage1 = " + currentPage1); String currentPage2 = browser.goBack(); System.out.println("currentPage2 = " + currentPage2); System.out.println(browser); } } 위의 goBack 메서드 실행코드가 Pop()인데 currentPage1 에서 facebook이 출력이되지않고 google이 출력되는 이유가 궁금합니다 스택구조는 마지막에 입력한것이 나오게 되어있는데 그 전에 입력한것이 왜 나오는 이유가 궁금합니다

  • java
  • 객체지향
  • 코딩-테스트
DG Y 댓글 1 좋아요 0 조회수 56

docker compose up 오류

해결됨

따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(NextJS)(Pages Router)

postgres 강의 중 docker compose up을 실행하면 아래와 같이 오류가 뜹니다. version: "3" services: db: image: postgres: latest container_name: postgres restart: always ports: - "5432:5432" environment: POSTGRES_USER: "${DB_USER_ID}" POSTGRES_PASSWORD: "${DB_USER_PASSWORD}" volumes: - ./data:/var/lib/postgresql/data yml 파일은 수업 그대로 위/아래와 같이 작성했는데 4번쨰 줄 postgres 부분이 인식이 안되는것 같아서 이것 때문인지... 구글링을 해봐도 해결 방법을 모르겠습니다!

  • react
  • node.js
  • postgresql
  • docker
  • typescript
  • 클론코딩
  • next.js
마곡동김두팔 댓글 1 좋아요 0 조회수 235

error.js 와 loading.js 에 대한 질문이 있습니다.

미해결

Next + React Query로 SNS 서비스 만들기

Next에서 자체적으로 제공하는 에러 바운더리인 error.js 와 서스펜스인 loading.js는 '서버 컴포넌트'의 에러와 로딩만 처리하는 것인가요? 예를 들어 서버 컴포넌트인 page.tsx의 하위 클라이언트 컴포넌트에서 에러가 발생했을 때는 error.js에서 캐치가 안 되는 것인가요...?

  • react
  • next.js
  • react-query
  • next-auth
  • msw
kraf 댓글 2 좋아요 0 조회수 111

NoSQL의 PlatformTransactionManager adapter 는 없는건가요?

미해결

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

안녕하세요. 우선 토비님의 강의 너무 잘 듣고 있습니다. 강의 제작해주셔서 무한 감사드려요. Transaction manager 추상화 부분 강의를 들으면서 NoSQL의 트랜잭션을 지원하는 어댑터는 없는건가 궁금해서 질문드립니다. 감사합니다.

  • java
  • spring
gslee100 댓글 2 좋아요 0 조회수 245

인기 태그

인프런 TOP Writers

주간 인기글