inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

봤어요 초기화

해결됨

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

실기 재도전하려고 하는데 진도율 초기화 어떻게 하나요?

  • python
  • java
  • c
  • 정보처리기사
주말초딩 댓글 1 좋아요 0 조회수 281

실무 개발 환경

미해결

비전공자도 이해할 수 있는 쿠버네티스 입문/실전

안녕하세요. 재밌고 좋은 강의를 해주셔서 감사합니다. 아직 70%정도 보고 있지만 궁금하게 있습니다. 현재 백엔드 개발자로 근무하고 있는데 저희 환경은 aws의 ec2에 직접 올려 백엔드 서버(spring-boot)를 운영하고 있습니다. 점차 쿠버네티스 환경으로 변경하려고 인프라담당자들과 백엔드 개발자들이 스터디 및 환경 구축하고 있는데요. 만약 실무에서 쿠버네티스 환경으로 바뀐다면 개발자들의 로컬 개발 환경은 어떻게 하시는지 궁금합니다. 대부분 자바, 스프링 환경이면 인텔리제이등으로 개발 후 테스트를 해볼텐데 컨테이너에서 다른 개발자들과 다 같은 환경에서 테스트를 해보고 빌드해보고 해야 하지 않는가 싶어서요. 실무에선 어떤식으로 개발자들이 개발하는지 개발, 테스트 , 운영 배포 까지 플로우가 어떻게 되는지 궁금합니다.

  • docker
  • kubernetes
  • msa
  • infrastructure
  • container
  • 백엔드
  • spring-boot
jhahn 댓글 1 좋아요 0 조회수 225

클래스 로더가 메소드 영역에 저장하는 것은 바이트코드인가요?

미해결

더 자바, 코드를 조작하는 다양한 방법

안녕하세요! 수업 잘 듣고 있습니다! 클래스 로더 수업 중에 로딩 과정에서 클래스 로더가 .class 파일을 읽고 그 내용에 따라 적절한 바이너리 데이터를 만들고 "메소드" 영역에 저장. 이라는 말이 있는데 바이트 코드가 메소드에 저장되는거 아닌가요? 인터프리터를 거쳐야 바이너리 데이터가 되는거 아닌가요?

  • java
  • spring
  • jpa
바나나 댓글 1 좋아요 1 조회수 106

교육자료 혹시 공유가 가능하실까요

미해결

비전공자도 이해할 수 있는 쿠버네티스 입문/실전

안녕하세요. 교육 잘 받았습니다. 제가 받았던 교육자료 문서로 받아 볼 수 있을까요? 아니면 온라인으로 찾아볼 수 있는지 확인 부탁드립니다.

  • docker
  • kubernetes
  • msa
  • infrastructure
  • container
jongkipark 댓글 3 좋아요 0 조회수 197

OCP원리 질문

미해결

김영한의 실전 자바 - 기본편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 12. 다형성과 설계 강의 자료에서 OCP원리를 보면 코드 수정은 닫혀 있다는 의미에서 "새로운 차를 추가하게 되면 기능이 추가되기 때문에 기존 코드의 수정은 불가피하다. 당연히 어딘가의 코드는 수정해야 한다."라고 되어 있습니다. 기존 코드의 수정이 불가피하다고 하는데 왜 코드 수정은 닫혀 있다고 표현하는 건가요?

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

#define SQUARE(x)((x) * (x))에 대한 예시는 없을까요?

해결됨

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

#define SQUARE(x)((x) * (x))에 대한 예시는 없을까요? SQUARE(x)에 ((x) * (x))를 정의하는건지 SQUARE에 (x)((x) * (x))를 정의하는건지 모르겠어요

  • python
  • java
  • c
  • 정보처리기사
피로한 염소 댓글 2 좋아요 0 조회수 90

AWS 배포 시 docker-compose.yml 관리 방법 질문입니다.

미해결

비전공자도 이해할 수 있는 Docker 입문/실전

현재 강의에서는 aws 인스턴스 에서 직접 compose.yml을 작성하는데 제가 현재 spring boot 프로젝트 루트 경로에 compose.yml을 구현해뒀어도 프로젝트 빌드시에는 yml이 포함되지 않아서 강의와 같이 인스턴스가 직접 생성해줘야하는 지 궁금합니다. 그리고 나중에 ci/cd를 하게 되면 github Actions같은 CI/CD 도구를 이용해야 yml파일이나 .env이런 파일을 직접 인스턴스에 구현하지 않아도 되는 것이 맞는 지 궁금합니다.

  • docker
  • docker-compose
  • docker-volume
  • docker-image
  • container
  • ecr
나예야 댓글 2 좋아요 0 조회수 301

접근제어자, 클래스 질문

미해결

김영한의 실전 자바 - 기본편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. class의 접근제어자를 private으로 설정시 외부 호출을 막는 것은 이해를 합니다. class의 volume 변수에 대해 실제 수정 해야 상황일 경우 (volume 200이 가능하게 되었을 때) privat로 설정된 volume 변수 수정 권한을 setting하는 것은 어떤 조직 구성과 방법으로 하는지 실제 경험을 사례로 설명을 요망합니다.

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

RunWith

미해결

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

프로젝트 생성부분의 마지막 강의 수강중이고, 위와 같이 코드를 작성했을 때 다음과 같은 오류가 납니다 https://drive.google.com/file/d/1g1uPQj8hZvNmWr3u9NBwMTuI_NOZWSKC/view?usp=sharing 프로젝트 파일도 같이 첨부합니다

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
heoyejin9178 댓글 2 좋아요 0 조회수 333

sudo가 안먹혀요

미해결

비전공자도 이해할 수 있는 Docker 입문/실전

3강 진행 중에 sudo lsof -i:3306 명령어를 사용했는데 ""Sudo가 이 컴퓨터에서 사용하지 않도록 설정되어 있습니다. 사용하도록 설정하려면 으로 이동하세요. Developer Settings page 설정 앱의"" 이렇게 나와서 시작을 못하고 있습니다. 그리고 다른 질문인데 현재 프로젝트를 하고 있는데 db를 mysql을 사용하고 있는 상황이라 만약 실습을 위해서 포트를 끄면 프로젝트할때 영향이 가는지도 궁금합니다.

  • docker
  • docker-compose
  • docker-volume
  • docker-image
  • container
  • ecr
skhu202114111 댓글 2 좋아요 0 조회수 1253

안녕하세요.

해결됨

떠먹여주는 객체지향 디자인 패턴 - by 얄코

"구독자들에게 메시지를 보내는 발행 메소드는 발행자 인터페이스를 적용한 클래스로부터 호출 받습니다." 라고 설명해주셨는데요 코드상에서는 Broker 클래스가 따로 Publisher 인터페이스를 적용하지 않은 상태인 것 같아서요. 궁금하여 질문 남깁니다.

  • java
  • 객체지향
  • 디자인-패턴
his130 댓글 1 좋아요 0 조회수 146

.ifPresent 사용법

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 멤버 삭제 기능을 만들려고 하는데 이렇게 하는게 맞을까요? 한개의 멤버만 받아서 삭제하고 싶은데 어떻게 처리해야 할까요? public boolean deleteProduct(String productName){ List<Product> result = em.createQuery("select p from Product p where p.productName = :productName", Product.class) .setParameter("productName", productName) .getResultList(); return true; } getResultList 로 하니까 여러개 나올거 같은데 한개만 삭제하려면 어떻게 해야 하나요? 그리고 em.remove하면 되나요?

  • java
  • spring
  • mvc
  • spring-boot
Myungsik Ji 댓글 1 좋아요 0 조회수 115

ReentrantLock과 비관적락

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 실무에서 DB 관련 데이터에 대해 동시성 이유가 있으면 비관적락을 쓰는것으로 알고 있습니다. JPA의 비관적락은 DB 계층에서 동기화 기술이고 ReentrantLock은 어플리케이션 계층의 동기화 라는데... 실무에서 ReentrantLock은 언제 사용이 되나요?? ReentrantLock을 사용하면 DB 접근 동기화가 되지 않나요?? 둘의 명확한 차이점이 궁금합니다.

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
큐펀치 댓글 1 좋아요 0 조회수 146

이름에 유니크 제약 조건을 거는 것

미해결

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

[질문 내용] 강의에서 회원의 이름으로 중복된 계정을 검증하고, DB에서 회원의 이름을 Unique 제약 조건으로 잡는 게 좋다고 하셨는데 이건 이 예제에서의 가정인 거고, 현업에선 이름만으로 중복 계정을 검증하거나, 이름에 유니크 제약 조건을 거는 경우는 거의 없다고 봐도 되나요?

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

파이썬처럼 int a 선언 없이 a=10으로 해놓고 그때그때 int(a)처럼 쓰면 안되나요?

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.

  • java
  • 객체지향
안병욱 댓글 1 좋아요 0 조회수 152

질문이있습니다.

해결됨

떠먹여주는 객체지향 디자인 패턴 - by 얄코

현재 예시 코드에서는 state 상태에 따라서 생성자를 매번 호출하는데 이거는 메모리 오버플로우 가능성이 있는 코드라고 볼 수 있을까요?

  • java
  • 객체지향
  • 디자인-패턴
his130 댓글 1 좋아요 0 조회수 131

DIP 질문

해결됨

떠먹여주는 객체지향 디자인 패턴 - by 얄코

DIP 예제 코드에서 질문이 있습니다. Switchable 이라는 interface를 객체로 Switch가 갖게되는데요. 구조가 이렇게 바뀌어도 Fan의 turnOn 함수에 예를 들어 매개변수가 들어가게 되면 (Overloading) Switch 클래스에도 영향이 가지 않나요? switch class의 tunrOn함수의 device.turnOn() 함수도 바뀌어야 하니까요..?

  • java
  • 객체지향
  • 디자인-패턴
his130 댓글 2 좋아요 0 조회수 158

ai툴 유료버전사용?

해결됨

[말 한마디로 뚝딱!] AI와 함께 나만의 수익화 웹사이트를 만드는 법

혹시 커서와 챗지피티 전부 유료버전 끊어서 사용하고 계신가요?

  • HTML/CSS
  • java
  • mysql
  • php
wsim 댓글 1 좋아요 1 조회수 157

wait notify 락 획득 관련 질문

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 1. notify 로부터 깨어난 스레드와 synchronized 메서드를 호출한 스레드 중 누가 락을 획득한다에 대한 우선권이 있나요? 만약 모든 스레드가 wait 을 하고 있는 상태라면 누군가가 notify를 호출해줘야만 하는 건가요

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

댓글 수 구현에서 동시성 문제 해결 질문드립니다

해결됨

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

학습 관련 질문을 최대한 상세히 남겨주세요! 고민 과정도 같이 나열해주셔도 좋습니다. 먼저 유사한 질문이 있었는지 검색해보세요. 인프런 서비스 운영 관련 문의는 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에 물어보거나 구글링해서 찾아봐도 해결이 되지 않아서 질문드립니다!

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
김규혁 댓글 2 좋아요 0 조회수 234

인기 태그

인프런 TOP Writers

주간 인기글