서브 태스크
미해결
비전공자도 이해할 수 있는 DB 설계 입문/실전
안녕하세요 수업을 듣다가 궁금한게 생겨서 질문드립니다~ 서브 태스크 설계는 대댓글과 같은 계층형 구조로 가져가면 될까요? 무한대댓글(네이버 카페 대댓글 구조)일 때 보통 db 설계를 어떻게 가져가나요?찾아보니 인접리스트랑, 클로저테이블 등 db 패턴이 있다는데 어떤 형태로 가져가는지 궁금합니다!
- mysql
- dbms/rdbms
- database
- dba
172만명의 커뮤니티!! 함께 토론해봐요.
미해결
비전공자도 이해할 수 있는 DB 설계 입문/실전
안녕하세요 수업을 듣다가 궁금한게 생겨서 질문드립니다~ 서브 태스크 설계는 대댓글과 같은 계층형 구조로 가져가면 될까요? 무한대댓글(네이버 카페 대댓글 구조)일 때 보통 db 설계를 어떻게 가져가나요?찾아보니 인접리스트랑, 클로저테이블 등 db 패턴이 있다는데 어떤 형태로 가져가는지 궁금합니다!
해결됨
김영한의 실전 자바 - 고급 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() 같은 다른 메서드랑은 관련 없다고 생각했습니다. 뭔가 흐름을 잘못 이해하고 있는 걸까요?
미해결
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일땐 주소창의 쿼리가 안생기더라고요 . 뭐가다른건지 모르겠네요ㅠ
미해결
자바 ORM 표준 JPA 프로그래밍 - 기본편
쿼리문이 다음과 같이 날라가는데도 h2데이터 베이스에 변경사항이 반영되지 않습니다 ㅠㅠ 어떤 문제가 있는 걸까요
해결됨
한 입 크기로 잘라먹는 Next.js
안녕하세요. 책 데이터를 불러오지 못해서 문의 드립니다. 스웨거에서도 아무 데이터를 못 불러오는데 혹시 어떤 문제일까요? npx prisma db push 도 잘 완료 하였고 백엔드 서버도 start 해 놓은 상태입니다.
미해결
김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
src 폴더 내 array 등 많은 것으로 영상에서는 보여지는데 저는 Main 파일 밖에 없습니다. 다운로드 파일이 잘못된걸까요? ㅠㅠ [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.
해결됨
비전공자도 이해할 수 있는 DB 설계 입문/실전
강의를 보다가 궁금증이 생겨서 질문합니다. 만약 로그인 안 한 사용자(회원X)도 볼 수 있는 게시글이라고 할 때, 조회수를 어떻게 해야하는 건가요? 로그인 한 사람(회원O)만 게시글을 볼 경우 중간테이블을 만들어 이미 봤다면 조회수를 안 올리기 위해 만든 다는 것까지는 이해했습니다. 제가 생각한 방식은 게시글에 컬럼에 로그인 안 한 사용자의 조회수 넣기(그냥 수로 관리) 로그인한 사용자의 경우는 중간테이블로 조회수 관리 데이터를 따로 관리해서 이 둘을 합산해서 총 조회수로 만든다 인데 제가 너무 복잡하게 생각한 건지, 다른 좋은 방법이 있는지 궁금합니다
미해결
김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] ExecutorService.submit 시점에 디버깅을 걸어서 확인해보니 BlockingQueue 필드인 workQueue 내부에 task가 들어가지 않고 workers라는 HashSet에 들어가지는 것 같습니다 혹시 제가 어디서 놓친건지 모르겠어서 여쭤봅니다 이거 때문에 계속 헷갈려요..ㅜ
미해결
김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
강사님께서 말씀하신데로 설치하고 뉴 프로젝트를 눌렀는데, 강의에 나오는 화면과 다릅니다... 너무 어이없지만 여기서부터 막혀서 저도 당황스럽습니다... 빨리 공부하고 싶은데... 이게 대체 무슨 상황인지... 빠른 답변 부탁드립니다.
미해결
김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션
NormalCloseServer 할때 close()가 여러번 호출돼도 예방하는 코드가 있다고 했습니다. 그러면 V6SessionV6에서 closeAll() 하기전에 closed를 확인 안해도 되지 않나요?
해결됨
한 입 크기로 잘라먹는 Next.js
강사님, 안녕하세요. 강의를 들으면서 살짝 혼란스러운 부분이 있습니다. 사실 Next.js 도 바탕은 React 인데요. React 에서 제일 많이 언급되고 중요시되는 부분은 상태(state)관리라고 생각이 되는데 Next.js 로 SSR 위주의 페이지를 작성하게 되면 결국 상태관리는 최소화하게 되는 것인데 이게 React 의 컨셉과 맞는 것인지 살짝 이해가 되지 않습니다. (강의에서도 state 는 거의 언급이 되지 않고요) 그렇다고 상태관리를 최대한 활용하는 CSR 위주의 개발을 하게 되면 Next.js 의 장점을 거의 얻지 못하게 될 것 같기도 하고요. 저는 Next.js 가 제공하는 프레임워크 측면의 혜택을 얻고자 Next.js 로 어플리케이션 구축을 해보고 싶은데 해당 어플리케이션이 CSR 의 비중이 적지 않을 것 같아서 좀 망설여지는 부분이 있습니다. 현대 애플리케이션들은 사용자들과의 상호작용이 적을 수가 없을텐데 대다수의 앱들이 Next.js 의 SSR 위주의 개발로 충분히 커버가 가능한 것일까요?
미해결
김영한의 실전 자바 - 중급 1편
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요 ~! 강의 자료에서 처럼 이런 자료들을 draw.io에서 만든다는 정보는 찾았는데요 ! 그 내부에서 어떤 템플릿을 사용하시는지 궁금합니다..! 몇 시간 동안 여러가지 클릭 해봤는데 못 찾아서요 ㅠㅠ 크래파스로 그은듯한 네모와 점선으로 연결된 화살표, dot 네모박스가 궁금합니다 !
미해결
자바 ORM 표준 JPA 프로그래밍 - 기본편
지금 현재 2가지 문제가 있는데 해결할 수있을까요? 해결방법을 알고 싶습니다 ㅠㅠ
해결됨
(2026 최신!) 일주일만에 합격하는 정보처리기사 실기
myCar.model[i] = '\0'; 은 세줄 위의 for에 영향을 받는 것 인가요?? 바로 위 } 에서 for문이 종료됐다고 생각했는데 myCar.model[i] = '\0'; 가 [i]에는 어떤 숫자를 넣어야할지 이해가 되지 않습니다
미해결
재고시스템으로 알아보는 동시성이슈 해결방법
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 어디를 더 수정해야 하는지 모르겠습니다..
미해결
김영한의 실전 자바 - 중급 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()을 하면 나오는데 이경우는 마지막 전에 입력한것이 나옵니다 이유가뭘까요??
미해결
김영한의 실전 자바 - 중급 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이 출력되는 이유가 궁금합니다 스택구조는 마지막에 입력한것이 나오게 되어있는데 그 전에 입력한것이 왜 나오는 이유가 궁금합니다
해결됨
따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(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 부분이 인식이 안되는것 같아서 이것 때문인지... 구글링을 해봐도 해결 방법을 모르겠습니다!
미해결
Next + React Query로 SNS 서비스 만들기
Next에서 자체적으로 제공하는 에러 바운더리인 error.js 와 서스펜스인 loading.js는 '서버 컴포넌트'의 에러와 로딩만 처리하는 것인가요? 예를 들어 서버 컴포넌트인 page.tsx의 하위 클라이언트 컴포넌트에서 에러가 발생했을 때는 error.js에서 캐치가 안 되는 것인가요...?
미해결
토비의 스프링 6 - 이해와 원리
안녕하세요. 우선 토비님의 강의 너무 잘 듣고 있습니다. 강의 제작해주셔서 무한 감사드려요. Transaction manager 추상화 부분 강의를 들으면서 NoSQL의 트랜잭션을 지원하는 어댑터는 없는건가 궁금해서 질문드립니다. 감사합니다.