실습코드다운로드
미해결
초보자를 위한 ChatGPT API 활용법 - API 기본 문법부터 12가지 프로그램 제작 배포까지
어디서 받나요?
- python
- 챗봇
- streamlit
- openai
- chatgpt
173만명의 커뮤니티!! 함께 토론해봐요.
미해결
초보자를 위한 ChatGPT API 활용법 - API 기본 문법부터 12가지 프로그램 제작 배포까지
어디서 받나요?
해결됨
38군데 합격 비법, 2026 코딩테스트 필수 알고리즘
1. 현재 학습 진도 3-5 스택부분 수강 2. 어려움을 겪는 부분 백준 탑 문제를 강사님께서 구현해주신 코드로 풀어보고 있는데 강사님 코드를 사용하면 시간초과가 나는 것 같습니다. 3. 시도해보신 내용 N = int(input()) tops = list(map(int, input().split())) def top_stack(N): result = [0] * N while tops: cur_top = tops.pop() for i in range(len(tops) - 1, -1, -1): if cur_top <= tops[i]: result[len(tops)] = i + 1 break print(' '.join(map(str,result))) top_stack(N) 강사님께서 구현해주신 코드에 입력값을 사용자가 지정하게만 바꿔서 백준문제를 풀어보려고 했는데, 시간초과가 납니다. 제가 혹시 코드에 실수한 부분이 있는지 궁금합니다.
미해결
파이썬으로 쉽게 배우는 gRPC!
python -m grpc_tools.protoc -I=. --python_out=. --grpc_python_out=. {protoname}.proto 강의에 명령어 띄어쓰기 잘 안보여서 기록해줌
해결됨
스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
학습 관련 질문을 최대한 상세히 남겨주세요! 고민 과정도 같이 나열해주셔도 좋습니다. 먼저 유사한 질문이 있었는지 검색해보세요. 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 댓글 수 구현 강의를 해보다가 동시성 문제를 해결해보고 싶어서 비관적 락 for update를 사용하는 방법으로 한번 코드를 짜보고 테스트를 해보고 있습니다. 코드는 아래처럼 짜보았습니다 @Table(name = "article_comment_count") @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @ToString public class ArticleCommentCount { @Id private Long articleId; private Long commentCount; public static ArticleCommentCount init(Long articleId, Long commentCount) { ArticleCommentCount articleCommentCount = new ArticleCommentCount(); articleCommentCount.articleId = articleId; articleCommentCount.commentCount = commentCount; return articleCommentCount; } public void increase() { this.commentCount++; } public void decrease() { this.commentCount--; } } public interface ArticleCommentCountRepository extends JpaRepository<ArticleCommentCount, Long> { @Lock(LockModeType.PESSIMISTIC_WRITE) Optional<ArticleCommentCount> findLockedByArticleId(Long articleId); } @Service @RequiredArgsConstructor public class CommentService { private final CommentRepository commentRepository; private final Snowflake snowflake = new Snowflake(); private final ArticleCommentCountRepository articleCommentCountRepository; @Transactional public CommentResponse create(CommentCreateRequest request) { Comment parent = findParent(request); Comment comment = commentRepository.save( Comment.create( snowflake.nextId(), request.getContent(), parent == null ? null : parent.getCommentId(), request.getArticleId(), request.getWriterId() ) ); ArticleCommentCount articleCommentCount = articleCommentCountRepository.findLockedByArticleId(request.getArticleId()) .orElseGet(() -> { ArticleCommentCount newCount = ArticleCommentCount.init(request.getArticleId(), 0L); articleCommentCountRepository.save(newCount); return newCount; }); articleCommentCount.increase(); articleCommentCountRepository.save(articleCommentCount); return CommentResponse.from(comment); } private Comment findParent(CommentCreateRequest request) { Long parentCommentId = request.getParentCommentId(); if (parentCommentId == null) { return null; } return commentRepository.findById(parentCommentId) .filter(not(Comment::getDeleted)) .filter(Comment::isRoot) .orElseThrow(); } public CommentResponse read(Long commentId) { return CommentResponse.from(commentRepository.findById(commentId).orElseThrow()); } @Transactional public void delete(Long commentId) { commentRepository.findById(commentId) .filter(not(Comment::getDeleted)) .ifPresent(comment -> { if (hasChildren(comment)) { comment.delete(); } else { delete(comment); } }); } private boolean hasChildren(Comment comment) { return commentRepository.countBy(comment.getArticleId(), comment.getCommentId(), 2L) == 2; } private void delete(Comment comment) { commentRepository.delete(comment); articleCommentCountRepository.findLockedByArticleId(comment.getArticleId()) .ifPresent(articleCommentCount -> { articleCommentCount.decrease(); articleCommentCountRepository.save(articleCommentCount); }); if(!comment.isRoot()) { commentRepository.findById(comment.getParentCommentId()) .filter(Comment::getDeleted) .filter(not(this::hasChildren)) .ifPresent(this::delete); } } public CommentPageResponse readAll(Long articleId, Long page, Long pageSize) { return CommentPageResponse.of( commentRepository.findAll(articleId, (page - 1) * pageSize, pageSize).stream() .map(CommentResponse::from) .toList(), commentRepository.count(articleId, PageLimitCalculator.calculatePageLimit(page, pageSize, 10L)) ); } // 무한 스크롤 public List<CommentResponse> readAll(Long articleId, Long lastParentCommentId, Long lastCommentId, Long limit) { List<Comment> comments = lastParentCommentId == null || lastCommentId == null ? commentRepository.findAllInfiniteScroll(articleId, limit) : commentRepository.findAllInfiniteScroll(articleId, lastParentCommentId, lastCommentId, limit); return comments.stream() .map(CommentResponse::from) .toList(); } public Long count(Long boardId) { return articleCommentCountRepository.findById(boardId) .map(ArticleCommentCount::getCommentCount) .orElse(0L); } } @Test void concurrencyCountTest() throws InterruptedException { Long articleId = 24L; int threadCount = 10; ExecutorService executorService = Executors.newFixedThreadPool(threadCount); CountDownLatch latch = new CountDownLatch(threadCount); for(int i = 0; i < threadCount; i++) { final Long writerId = (long) (1000 + i); executorService.execute(() -> { try { createComment(new CommentCreateRequest(articleId, "concurrency test", null, writerId)); } catch (Exception e) { System.err.println("Exception in thread: " + Thread.currentThread().getName() + " -> " + e.getMessage()); } finally { latch.countDown(); } }); } latch.await(); Long commentCount = restClient.get() .uri("/v1/comments/articles/{articleId}/count", articleId) .retrieve() .body(Long.class); System.out.println("최종 commentCount = " + commentCount); assertThat(commentCount).isEqualTo(threadCount); } 그런데 이렇게 했을때 맨 처음 실행을 하면 1개의 데이터만 삽입되고 나머지 9개는 소실이됩니다 그리고 한번더 실행하면 11개의 데이터가 저장되는데 맨처음 저장된 1개의 데이터 + 10개의 스레드가 저장한 10개의 데이터가 되어 11개가 됩니다. 여기서 문제가 article_comment_count 테이블에 데이터가 아예 없을때 10개의 스레드가 동시에 insert문을 날리려고해서 Duplicate entry '24' for key 'article_comment_count.PRIMARY' 이런 문제가 나오지 않나 생각이 듭니다만.. create 메서드에 @Transactional(isolation = Isolation.READ _COMMITTED)로 격리 수준을 높여봤지만 여전히 문제가 해결되지 않습니다. 혹시 제가 잘못 이해한 부분이 있을까요? 그리고 동시성 문제를 해결하려면 어떻게 해야할까요? gpt에 물어보거나 구글링해서 찾아봐도 해결이 되지 않아서 질문드립니다!
미해결
카프카 완벽 가이드 - 코어편
안녕하세요 개발자님 KafkaTimeoutError: Failed to update 입니다. window에서 리눅스로 옴겼더니 왜 그런걸까요? 설정 부분 추가 및 변경 해야 하는 부분이 어디 일까요? client에서 설정을 수정 해야 하나여ㅛ, kafka server.properties 에서 어디를 수정 해야 하나요?
해결됨
(2026 최신!) 일주일만에 합격하는 정보처리기사 실기
capitalize()는 문자열의 첫 글자를 대문자로 변환한다고 되어있는데, 예시 결과값이 왜 'Hello, world!'인가요? s는 애초에 첫 글자가 대문자니깐 s값 그대로 'Hello, World!'이 맞지 않나요?
미해결
프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
강의자료 아래 메일로 부탁드려요 yungki.lee@gmail.com 감사합니다.
해결됨
스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
안녕하세요. 쿠케님 강의 너무나 잘 보고 있습니다. 쿠케님 질의응답 게시글 정독하고 있는데 1:1 멘토링 부럽지 않을만큼의 고퀄리티 답변 언제나 감사드립니다. (갬동갬동) 현재 회사에서 조회수를 RDB에만 저장하고 있습니다. 이를 강의 내용처럼 'Redis 이전 & MySql 백업'을 적용 하고 싶은데 아래 흐름대로 적용 하면 될까요? 1⃣ (개발) redis 저장 및 조회, mysql 백업 코드 작성 2⃣ (개발) 기존 MySQL 데이터를 Redis에 저장하는 마이그레이션 코드 작성 => 이렇게 일회성 마이그레이션 같은 경우 테스트 코드로 한번만 돌리는데 쿠케님은 어떤 방식으로 하시나요? 3⃣ (배포 전) 1번 코드 배포 직전에 2번 로직 실행 4⃣ (배포) 1번 코드 배포 위 방식에서 발생할 수 있는 문제점 1. 3번(마이그레이션)과 4번(배포) 사이에 조회수가 누락될 가능성 - 마이그레이션 실행 후 MySQL에는 새로운 조회수가 계속 업데이트 되지만, Redis는 아직 트래픽을 받지 않음. - 즉, 마이그레이션 실행 이후 MySQL에 새로 기록된 조회수는 Redis에 반영되지 않음 → 데이터 불일치 발생 가능. 2. 처음 Redis로 전환할 때, Redis에 캐싱되지 않은 일부 조회수가 MySQL에 계속 쿼리될 가능성이 있음. - 처음 Redis로 전환할 때, Redis에 캐싱되지 않은 일부 조회수가 MySQL에 계속 쿼리될 가능성이 있음. - 특정 조회수가 빠르게 증가하면 Hot Key 이슈 발생 가능. 조회수 누락을 최소화 하는 방법 1⃣ (개발) redis 저장 및 조회, mysql 백업 코드 작성 2⃣ (개발) 기존 MySQL 데이터를 Redis에 저장하는 마이그레이션 코드 작성 및 실행 3⃣ (1번 코드 배포 전) 더블 라이트(Double Write) 모드 개발하여 운영에 적용 4⃣ (배포) 기존 MySQL 기반 조회수 코드 제거, Redis 기반으로 전환 5⃣ (배포 후) MySQL 백업 로직 실행 및 기존 MySQL 조회 로직 완전히 제거 제가 혹여나 놓친게 있거나 더 좋은 방법이 있으면 천천히 답변 부탁드립니닷! 출처: 내 뇌 + GPT 센세
미해결
실리콘밸리 데이터 리더가 알려주는 Airflow 기초
명령어: docker compose -f docker-compose.yaml up 에러 메세지: ERROR! Maximum number of retries (20) reached. 사용 환경 windows 11 Home 어떤 부분 때문에 계속 오류가 발생하는걸까요?
해결됨
커머스 서비스로 배우는 NestJS 실전 개발 (w. Prisma, Docker, Redis, Kafka)
안녕하세요 좋은 강의 감사합니다! 혹시 강의 코드를 확인할 수 있는 깃허브 URL을 따로 제공받을 수 있는지 궁금합니다!!
해결됨
(2026 최신!) 일주일만에 합격하는 정보처리기사 실기
n이 0일때 if(n==0)를 타고 return 값이 0에서 끝나는거 아닌가요? return값으로 0이 아닌return res가 출력이되는지 궁금합니다
해결됨
(2026 최신!) 일주일만에 합격하는 정보처리기사 실기
24년 1회 C언어 19분 38초 시저암호 문제 정답: Nd sc 1 <--이라고 적혀있는데? 변환된 문자열: Nd sc 1 <--이게 정답 아닌가요?
해결됨
코딩테스트 [ ALL IN ONE ]
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 코테 적용 문제들은 교재에 따로 없이 강의 아래의 리트코드 주소를 통해서 확인하고 푸는 거 맞나요?? 영어로 되어있어서 질문 올려봅니다.
해결됨
(2026 최신!) 일주일만에 합격하는 정보처리기사 실기
0:10 강사님~ 혹시 연산자 우선순위 표 자료를 학습자료로 올려주실 수 있으신가요? 시간날때마다 보고 어느 정도 외우려고 하는데, 영상화면이 캡처가 되지 않아서 보기가 어렵습니다 ㅠ
해결됨
(2026 최신!) 일주일만에 합격하는 정보처리기사 실기
안녕하세요. 제가 예제 볼 때 온라인 컴파일러 사이트로 직접 작성해보면서 공부를 하는 중인데요 파이썬 if문 lst 예제를 그대로 사이트에 입력하면 ========================= lst = [1, 2, 3] if lst: print("리스트는 비어있지 않습니다.") else: print("비어있지 않습니다.") ===================== else가 예제처럼 if와 같은 열에 있지 않게 되고, 에러가 뜨더라구요. 저기서 else문 지우면 "리스트는 비어있지 않습니다." 정상으로 출력 되구요. 혹시 문법은 문제 없는데 파이썬이 버전마다 다른지 궁금합니다 https://www.tutorialspoint.com/online-programming-compilers.htm 사이트는 여기 이용 중입니다!
미해결
모두의 한국어 텍스트 분석과 자연어처리 with 파이썬
프로젝트에서 감성 분석과 주제 찾는 작업이 필요합니다. 주제 찾기는 강의를 통해 배울수 있을거 같은데요 감성 분석은 어떤것을 공부하면 좋을까요?
미해결
프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
seizeejday@naver.com 감사합니다 : )
해결됨
(2026 최신!) 일주일만에 합격하는 정보처리기사 실기
int, Integer를 같다고 판단한다 했는데, 범위를 넘어선 정수도 동일한가요? 예를 들어서, int num1 = 128; Integer num2 = 128; 이라면 num1 == num2 : true 인가요?
해결됨
실전! FastAPI 입문
안녕하세요! Nest에서 Fast API로 컨버젼중입니다. Nest는 Many to Many, Many to One 등등 이러한 연관관계를 설정해서 테이블을 생성합니다. Fast API에서는 아래 코드처럼 단순히 join만 걸어두고 사용하면 되는 걸까요?? class User(Base): __tablename__ = "user" id = Column(Integer, primary_key=True, index=True) username = Column(String(256), nullable=False) password = Column(String(256), nullable=False) todos = relationship("ToDo", lazy="joined")
미해결
Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
FeignErrorDecoder 에 대해서 order_is_empty를 수정한뒤에 127.0.0.1:8000/actuator/busrefresh 를 호출하면 Keys refreshed [ spring.cloud .bootstrap.enabled, order_service.exception.order_is_empty] 로그는 정상적으로 뜨며 디버깅 모드로 코드를 추가해서 실행한결과 List<ResponseOrder> orders= orderServiceClient.getOrders(userId); 코드전에 env.getProperty("order_service.exception.order_is_empty") 를 확인해본 결과는 정상적으로 리프레시되지만 이후에 오류를 터트리고 FeignErrorDecoder 처리 로직에서 switch(response.status()){ case 400: break; case 404: if(methodKey.contains("getOrders")){ return new ResponseStatusException(HttpStatus.valueOf(response.status()),env.getProperty("order_service.exception.order_is_empty")); } break; default: return new Exception(response.reason()); } getProperty("order_service.exception.order_is_empty") 이부분이 새로운 환경 변수가 ErrorDecoder 에서는 반영 안되는것같아서 해결이 안되서 질문남깁니다 ! UserServiceImpl 에서는 정상적으로 바뀐값이 나오는거보면 ErrorDecoder 문제 같은데 정확히 모르겠습니다 @RefreshScope 이것도 해결책은 아닌것같아요 답변 부탁드립니다 !