묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
안녕하세요 무한스크롤 강의듣다가 질문이 있습니다.
학습 관련 질문을 최대한 상세히 남겨주세요!고민 과정도 같이 나열해주셔도 좋습니다.먼저 유사한 질문이 있었는지 검색해보세요.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 무한스크롤을 공부하면서 쿼리플랜을 자세히 살펴보았습니다. rows라는게 예상 스캔 행 수 라고 찾게 되었는데요, offset을 사용하지않고 마지막 last_article_id로 limit 30개 해서 30개만 스캔하면 될줄 알았는데, 저는 6백만개가 나오고 강사님은 5522497개 (무한 스크롤 설계 - 6:31초)가 나오는걸 알게 되었어요. 이게 시간은 빠르긴한데 뭔가 스캔하는게 많아서 이상하다 싶었어요.. 그래서 인덱스를 지우고, (article_id desc, board_id)로 위치도 바꾸거나, use index로 인덱스를 강제하게 해봤는데 결과가 똑같더라구요.. 이 row를 줄이기 위한 방법이 있는지 궁금합니다. cladue에서는 최악의 경우의 row를 보여준다고 하면서도, 또다른 답변으로는 쿼리 수정으로 최적화해야한다 나뉘더라구요. 최악의 경우라 해도 왜 6백만개나 scan하는지.. 그냥 속도빠르니깐 넘어가도 상관없는지 의심이 들어서 더 찾아볼수있는 방법이나 조언 부탁드립니다. 감사합니다. 강의 거의 완강햇다가 한번 더 다시 듣고있습니다.
-
해결됨AI 다루는 백엔드 설계 기본 - SpringBoot SNS 편
.claude 폴더 규칙 생성 방법
강의를 들으면서 강의에서 제공해주신 GitHub 프로젝트 코드를 참고하여 개인적으로도 별도의 프로젝트 파일을 만들어 수강하고 있습니다. 현재는 강의 코드가 제공되고 있어 .claude 폴더를 다운로드한 뒤 제가 만든 프로젝트에 추가하면 되지만, 추후 개인 프로젝트에서 AI를 활용해 개발한다고 가정하면 .claude 폴더를 프로젝트 특성에 맞게 커스텀해야 할 것 같다고 생각합니다.그래서 아래 두 가지가 궁금합니다.현재 제공해주신 .claude 폴더는 어느 정도 범용적으로 사용할 수 있는 구조인지 궁금합니다. 다른 프로젝트에서도 그대로 붙여넣어 사용해도 되는지, 아니면 프로젝트마다 반드시 수정해야 하는 핵심 포인트가 있는지 알고 싶습니다.처음 새 프로젝트를 만들면 .claude 폴더가 없는 상태인데, 프로젝트 기획과 규칙(코딩 컨벤션, 아키텍처, 역할 분리, 문서화 규칙 등)이 이미 정해져 있는 경우 .claude 폴더를 어떤 순서와 기준으로 새롭게 생성하는지 시작하는 방법이 궁금합니다.
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
조회수 조회 로직 질문
안녕하세요! 수강자 쵸잉입니다 강의듣다가 질문사항이 생겨 남깁니다.ArticleViewCountRepository 에서 read 메서드 보면현재 코드에서 조회수 조회를 할때 레디스에서만 가져오는데 이전 강의에서 레디스는 휘발메모리기 때문에 백업용 rdb 를 주기적으로 업데이트 시켰는데 그럼 레디스에서 값이 없을경우 백업용 rdb 도 한번 조회해봐야되지 않나 싶어서 질문드립니다!
-
미해결6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
강의와 성능수치 비교
1. 현재 학습 진도2-9부하테스트 2. 어려움을 겪는 부분강의와 성능차이가 너무 많이나는데 이유가 궁금합니다. 3. 시도해보신 내용 해당 이미지는 제가 수행한 테스트인데, 로컬에서 진행한 동일 코드 인데도 성능차이가 너무 많이 나는데 뭐가 문제인걸까요?추가적으로 성능개선코드를 적용전인 결과인점 참고부탁드립니다.
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
비로그인 유저도 어뷰징 방지 정책
안녕하세요 강의 잘보고있어서 감사의 말씀 전하며 질문이 있어 글 남깁니다. 만약 비로그인도 어뷰징 방지 정책을 적용 한다했을때 실무에선 어떻게 처리하나요?IP나 쿠키, User-Agent 등을 활용한다고 하셨는데,IP 주소로 처리하기에는 공유망이나 VPN 같은 다양한 접근 방식도 있을 것 같고 User-Agent 나 브라우저쿠기같은경우는 브라우저에서 조작이 가능하기도하고 Pomsman 같은걸로 요청해서 User-Agent 값을 임의로 설정하는등과 같은 방법으로 집계될수도 있을것같은데 1. 그냥 일반적인 조회수만 집계만 하면되는 서비스에선 어떤식으로 처리하는지 궁금하고 만약 정말 빡세게 어뷰징을 처리한다고했을때 서버쪽에서 고유키값을 만들어서 로그인안한유저면 그 키값을 httponly 쿠키로 설정해서 고유키값이 있을때만 조회수가 집계되는 방법도 있을것 같은데 이런방식은 어떤지도 또 다른 괜찮은 방법이 있는지 궁금합니다.
-
해결됨AI 다루는 백엔드 설계 기본 - SpringBoot SNS 편
강의를 어떻게 보면 좋을 까요?
일단 ai 에이전시를 써서 대충 틀을 만들고 살을 붙혀라라는 느낌으로 듣고 있습니다. 결과 값이 다 다르니 강의와 비슷하긴 하나 같은 느낌으로 구현을 못하는데. 전체적으로 강의를 한 번 쭉 완강하고 흐름을 익힌 이후에 구현을 해보라는 건가요? 아니면 주신 깃헙 링크 보고 따라 해보면 될까요?
-
해결됨AI 다루는 백엔드 설계 기본 - SpringBoot SNS 편
SKILLS.md나 agents 작성 문의
SKILLS.md 혹은 agents 작성은 반드시 영어로 작성해야 하는 것일까요? 영어로 작성하는 이유가 따로 있을까요?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
CommentServiceTest의 테스트 로직 질문
@Test @DisplayName("하위 댓글이 삭제되고, 삭제되지 않은 부모면, 하위 댓글만 삭제한다.") void deleteShouldDeleteChildrenOnlyIfNotDeletedParent() { // given Long articleId = 1L; Long commentId = 2L; Long parentCommentId = 1L; Comment comment = createComment(articleId, commentId, parentCommentId); given(comment.isRoot()).willReturn(false); Comment parentComment = mock(Comment.class); given(parentComment.getDeleted()).willReturn(false); given(commentRepository.findById(commentId)) .willReturn(Optional.of(comment)); given(commentRepository.countBy(articleId, commentId, 2L)).willReturn(1L); // 이 부분 given(commentRepository.findById(parentCommentId)) .willReturn(Optional.of(parentComment)); // ...위 테스트에서given(commentRepository.countBy(articleId, commentId, 2L)).willReturn(1L);이 부분 때문에 질문을 드렸습니다. commentRepository.countBy() 에서 commentId = 2L을 부모로 갖는 comment는 아무도 없으므로, 0L을 반환하는 것이 옳다고 이해했는데, 강의에선 1L을 반환하셨습니다!(물론 서비스 계층의 메서드에서 hasChildren()의 판정 로직상 0L과 1L 은 동일한 결과를 반환하므로 테스트 결과에는 영향을 주지 않는 것 같습니다.)카운트 쿼리의 동작 부분을 제가 잘못 이해한 것인지 질문드립니다.
-
해결됨[개념 & 이론] 대기업 근무하며 경험한 Redis를 야무지게 사용하기
비트맵 자료구조 관련 질문
비트맵 자료 구조 강의를 수강하고, 해당 자료구조가 활용되는 상황에 대해 이해하지 못한 부분이 있어 질문 드립니다.강의에서 말씀하신 비트맵을 사용하지 않았을 때 유저마다 고유한 키 값으로 string set으로 저장한다는 의미가 무엇인가요? 유저의 고유 키마다 쿠폰에 대한 set이 있고, 어떤 쿠폰이 발급됐는지 저장하는 구조인가요?강의에서의 상황은 유저가 해당 쿠폰을 발급 받았는지를 식별하기 위한 상황인가요? 해당 정보를 DB가 아닌 레디스에 저장할 이유가 무엇인가요? 아니면 둘 다 저장하는 방식인가요?만약 해당 쿠폰을 발급할 수 있는 기간이 일주일이면 일주일 동안 레디스에 해당 정보가 만료되지 않고 유지되어야 할까요?해당 상황은 쿠폰 번호가 유저마다 다른가요, 다 같은 쿠폰 번호인가요? 만약 다른 쿠폰 번호라면 db에 따로 저장이 되어야 할까요?감사합니다.
-
해결됨AI 다루는 백엔드 설계 기본 - SpringBoot SNS 편
CSRF 관련 궁금한게 있어요
현재 백엔드 프로젝트에서스프링 시큐리티 프레임워크 도움을 받기 위해CSRF 설정은 끄고 <form> 전송과 세션 방식으로 로그인 하고 있잖아요. (저는 그렇게 보였는데 아니면 제가 잘못 이해한거구요..) 그런데 요즘은SSR 방식이 아닌 현재 프로젝트처럼프론트 따로 서버 따로 해서서버는 REST API 만 개발하고 JWT 방식을 쓰잖아요 JWT 도 보안에 한계가 있는데아무튼 이걸 떠나서현재 CSRF 설정을 끄고 <form> 전송으로 로그인하는게보안상 많이 위험한 건 아닌가요? 제가 애초에 잘못 이해하고 있어서질문 자체가 잘못되었을 수 있지만관련해서 답변 부탁드립니다
-
미해결15일간의 빅데이터 파일럿 프로젝트
환경 세팅 후 클라우데라매니저 삭제시
안녕하세요, 빅디님! 강의 듣다가 궁금한점이 생겼는데요,처음에 클라우데라 매니저로 하둡환경을 구성한 후에 클라우데라 매니저만 삭제하면 주키퍼, 얀, 스파크 등 설치/설정한 아키텍처가 함께 삭제되나요? 서비스를 각각 설치하고 구성하려니 많이 번거로워서 처음에만 클라우데라 매니저를 이용하고 무료사용기간 만료되면 삭제 후에 각 서비스를 따로 관리할수있을까 해서요 ㅎㅎ
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
13강 강의 뒷부분의 과제 안내부분은 어디있나요?
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요? 13강 Redis 캐싱 시 발생하는 대표 문제 사례와 해결책3 2. 어려움을 겪는 부분어느 부분에서 막히셨나요?이력서에 써갈수 있는 이력 제시한다음에 다음강의에 실제 할수있는 과제가 있다고 써져있는데요. 왜 다음에 바로 강의 마무리가 되나요?? 뒷부분이 없어요
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
무한 스크롤 방식에서 페이지 번호 방식 쿼리의 문제점 의문
안녕하세요, 무한 스크롤 방식에서 페이지 번호 방식 쿼리의 문제점을 설명한 부분에 질문이 있습니다. 페이지 방식을 무한 스크롤 방식에 적용 시 문제점으로 아래 2가지를 제시하셨는데요,1) 페이지가 추가된 경우, 데이터 중복 조회 문제2) 페이지가 삭제된 경우, 데이터 누락 문제 궁금한 점은, 이러한 문제는 무한 스크롤에서 사용했을 때 뿐 아니라, 페이지 번호 방식을 사용할 때도 마찬가지로 문제가 있는 것 아닌가 싶다는 것입니다.페이지 번호 방식 자체의 한계라고 생각하는데, 페이지 번호 방식에서는 발생하지 않는 문제인가요?
-
해결됨AI 다루는 백엔드 설계 기본 - SpringBoot SNS 편
안녕하세요 강사님 데이터베이스 선택 질문있습니다!!
강사님 강의 재밌게 너무 잘 보고있습니다!!!클로드 코드에 대해서도 사용해보니까.. 재밌어요 PostgreSQL을 왜 선택하고 특징, 장점까지 잘 보았습니다.하지만 MySQL에 유리한 프로젝트는 무엇인지 궁금합니다.PostgreSQL선택한 이유중에 부분 인덱스 지원해주고 JSON을 효율적으로 저장할 수 있는 타입인 JSONB도 지원해주고 커뮤니티도 풍부하고 READ COMMITTED - 높은 읽기 성능을 제공해주는것으로 MySQL보다 전부 뛰어나다고 생각이듭니다. MySQL과 차이점은 MySQL은 Reapeatable Read로 정합성을 챙기고 MVCC덕분에 높은 읽기 성능을 가지고 있는걸로 알고있습니다. 그 외에 MySQL의 장점과 유리한 프로젝트들 예시를 좀 조언을 얻고싶습니다
-
해결됨AI 다루는 백엔드 설계 기본 - SpringBoot SNS 편
안녕하세요 질문있습니다.
여기서부터는 클로드 코드랑 관계가 없는건가요 ?클로드 코드로 유저도메인 다 생성하고 유저 도메인이 바뀐것같아서요
-
해결됨AI 다루는 백엔드 설계 기본 - SpringBoot SNS 편
강의를 듣던 중 궁금한 점 있어요
수업 챕터14. 세션 로그인 ▶︎ 구현과 동작에서 6분 35초쯤에 Docker 에서 Redis Container 로 진입하시고/data # redis-cli 명령을 작성하실 때, 원래는 이런 명령어를 사용하시면 안된다고 하시는데그럼 원래는 무슨 명령어를 사용하는지 궁금하네요
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
이벤트 참가자 수 증가 후, save 메서드 호출 코드 질문
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요? 4-8강 2. 어려움을 겪는 부분어느 부분에서 막히셨나요?chapter4/_2_event_with_participant 폴더의 EventJoinService 객체의 메서드 코드에 대한 질문입니다.코드의 어떤 로직이 이해가 안 되시나요?@Transactional public void joinEvent(Long eventId, Long memberId) { Event event = eventRepository.findById(eventId) .orElseThrow(() -> new EntityNotFoundException("이벤트를 찾을 수 없습니다.")); Member member = memberRepository.findById(memberId) .orElseThrow(() -> new EntityNotFoundException("회원을 찾을 수 없습니다.")); // save()를 호출하지 않아도 Dirty Checking에 의해 Update 쿼리가 나가지 않나요? event.increaseParticipants(); eventRepository.save(event); EventParticipant participant = EventParticipant.builder() .event(event) .member(member) .build(); participantRepository.save(participant); } } 코드 블럭의 주석 란에 질문을 적어놓았습니다. 저 상황에서 save() 를 호출하는 이유가 궁금합니다.JPA 엔티티의 상태 변경분에 대한 쿼리는 트랜잭션 커밋 후, 자동으로 나가는 것으로 알고 있습니다. 혹시, 제가 잘못 알고 있는건지 궁금합니다.
-
해결됨AI 다루는 백엔드 설계 기본 - SpringBoot SNS 편
클로드 대신 제미나이 사용해도
클로드 대신 제미나이 사용해도 수업따라가는데는 문제가 없나요?
-
해결됨AI 다루는 백엔드 설계 기본 - SpringBoot SNS 편
claude 동작 결과값이 다를 경우 어떻게 해나가야 될지 모르겠습니다.
git에 있는 .claude를 프로젝트 파일세 추가하고,'User 도메인을 만들고 회원가입, 조회 등 관련 API를 만들어줘. '라고 동일하게 터미널에 입력시 얼추 강의와 비슷하게는 만들어지는데 (여러번 돌려봤는데) 예를들면 dto에 record가 생성은 되는데 네이밍이 아예 다르다거나, 네이밍은 그럴 수 있는데 내용이 아예 달라서(예: Annotation이 전혀 없이 아래와 같이 생성 되거나 다른 파일의 내용이 다르거나 하는 경우, Service에 애노테이션이 아예 없거나, Controller에도 메서드가 반절도 안만들어졌다거나, resources>http>user.sh파일 내용에 내용이 반절이상 없다거나.. 등package com.apiece.springboot_sns_sample.controller.dto; import com.apiece.springboot_sns_sample.domain.user.User; public record UserRegisterRequest(String email, String password, String username) { public User toEntity(String encodedPassword) { return User.builder().email(email).password(encodedPassword).username(username).build(); } } 이럴 경우 어떻게 강의를 수강해 나가면 좋을지 궁금합니다.
-
해결됨AI 다루는 백엔드 설계 기본 - SpringBoot SNS 편
hooks가 동작하기 위한 내용이 없는 것 같아서 추가가 필요하지 않을까 싶습니다.
Claude Code활용(Skills, Hooks)에서 hook과 관련된 설정(예: spotless)내용은 깃 주소에 올려진 프로젝트의 build.gradle.kts에 반영이 되어 있지 않은 것 같아요. hooks경로에 lint.sh는 생성이 되어 있는데 말이죠. settings.loca.json 파일도 없어요. 강의에 관련 설명만 존재하기 떄문에 git에 올려진 프로젝트에 업데이트를 해주시면 어떨까 싶습니다.