묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
이력서 작성 시 궁금한 점
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요? 3챕터 인덱스 파트 수강 중 질문 1. "기존 API 응답 시간에서 **를 개선하여 **ms까지 빨라졌다." 이런 식으로 문구를 작성하라고 하셨는데, 기존 API 시간이 너무 크면 어떻게 해야할까요? API 성능 측정을 하려면 데이터를 넣어야하니까 각 테이블마다 백만 건을 넣어놓고 테스트를 했는데, 개선 전 응답 시간이 너무 오래 걸려서 그걸 그대로 써도 될지 모르겠어요. 강의 중 index파트에서 통계 테이블을 만들어서 @scheduled로 개선하는 부분을 제 프로젝트에 적용했는데, 데이터를 넣을 때 다른 API 성능을 측정하면서 각 테이블 당 백만개, 1:N관계일 때는 1개당 10개씩으로 해서 총 천만개 넣어놓은 상태입니다. 데이터가 너무 많아서 통계 테이블 만들기 전인 상태에서 COUNT 쿼리를 할 때 JOIN하는 테이블은 3개로 각 백만개, 이백만개, 천만개 데이터가 들어가있어서 약 20-30초 가량 쿼리가 실행이 됩니다. 근데 이력서에 "23초 걸리는 통계 데이터 조회 API를 통계 테이블을 만들고 @scheduled를 활용해 5분마다 갱신하고, 갱신된 데이터를 가져오도록 개선하여 **ms로 개선되었다." 라는 문구를 쓰려니까 23초라는 수치가 "인위적으로 드라마틱한 개선을 위하여 만들어낸 수치 아닌가?" 라는 의문이 들 수 있을 것 같아서 어떻게 하면 좋을까요? 물론!! 23초가 나온 근거라고 해야할지... 그 퍼포먼스 테스트 결과는 있고, 일부러 조작하지 않고 데이터가 많아서 그렇다! 라고 설명은 할 수 있겠지만, 이력서에 들어가는 수치를 보면 위에서 얘기한 것 같은 의심이 먼저 들 것 같아서 질문 드립니다. ㅠㅠㅠㅠ
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
bootRun 실행 문제
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요? -> 2-4 설정 부분 듣고 있습니다! 2. 어려움을 겪는 부분어느 부분에서 막히셨나요?-> Caused by: com.mysql.cj.exceptions.WrongArgumentException: !AuthenticationProvider.BadAuthenticationPlugin!bootRun 실행 중 계속해서 !AuthenticationProvider.BadAuthenticationPlugin! 예외가 발생하면서 실패가 뜹니다. 인터넷 검색했더니 MySQL 사용자 인증 plugin을 mysql_native_password 로 변경하는 방법이 있어서 변경해보았지만 계속해서 해결하지 못해서 문의 드립니다.
-
미해결레디스의 모든 것 (feat. Node.js)
맥 환경에서 redisJson 사용하는 방법이 궁금합니다
현재 로컬에서 redis 설치해서 학습 진행 중입니다!맥 환경에서 도커 없이 로컬에 설치된 redis에 redisJson 붙여서 사용하는 방법이 궁금합니다!
-
미해결레디스의 모든 것 (feat. Node.js)
redis insight 관련 질문입니다
redis insight 를 현업에서 모니터링 툴로 많이 사용을 하는 지 궁금합니다!
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
동적쿼리를 이용한 List로 가져올 때의 캐쉬??
제가 강의에서 이해한 바로는 example/1 과 같은 단일 리턴값에는 캐쉬를 적용해서 db의 부하를 줄일 수 있다고 생각했습니다.하지만, search?title=딩코&tag=백엔드…” 와 같은 복합 검색 조건을 기반으로, 백만 건 이상의 데이터 중에서 동적 쿼리를 사용해 10개씩 페이지네이션하여 가져오고 있습니다. 이 경우에는 쿼리마다 값이 달라지니 미리 레디스에 값을 반영할 수도 없는 상황입니다. 그리고 DB에서는 10개의 값을 리턴시키는데, 이런 상황에서는 캐시를 사용할 수 없는 건가요? 반드시 인덱스를 통해서만 성능을 확보해야 하나요?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
조회수 redis 장애시 fallback 관련해서 질문!
강사님 안녕하세요.조회수 데이터를 Mysql로 백업한 데이터는 redis 장애시를 대비한 걸로 이해했습니다.(장애시 일부 데이터는 유실되지만, 가용성은 챙김)그렇다면 조회수 조회시 ArticleViewService의 count메서드에서 try-catch로 묶어서 catch문에 mysql에서 조회수를 조회하는 코드를 추가하면 되는걸까요? 혹여나 강의 내용을 놓친거라면 죄송합니닷..!
-
미해결15일간의 빅데이터 파일럿 프로젝트
환경세팅 질문있습니다.
java와 이클립스 대신 인텔리제이25버전과와 자바21버전 설치해도 되나요?오라클에서 뒤져봤는데 17버전을 도저히 못찾겠어서요. 혹시 17버전 링크라도 알려주실 수 있나요? 그리고 벌쳐박스도 7..1로 설치해도 되나요? 혹시 구버전도 링크 알려주실수있나요?
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
프로메테우스에서 쿼리 카운터 검색이 안됨
강의를 보고 제 프로젝트에도 적용할려고 그대로 따라 쳤음미다...로컬에서는 이렇게 프로메테우스에서 검색이 됩니다. 그대로 ec2서버에서도 적용할려고 했는데이렇게 검색이 되지 않습니다... 설정 차이라고는 로컬에서의 prometheus.yml ec2에서의 prometheus.yml(빨간줄은 무시)프로메테우스랑 ec2서버랑 연결은 잘되는 거 같아요. executor_thread 같은 쓰레드들은 잘 가져옵니다. 하지만 제가 원하는 쿼리 집계 함수들은 로컬에서는 잘되고 ec2서버에서는 가져올 수가 없는데 뭐가 문제일까요...?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
프론트엔드 코드
안녕하세요 선생님 강의 정말 잘들었습니다.제가 이 강의를 듣고 게시판을 직접 만드는 것이 목표였는데, 프론트 코드를 만드는데 어려움을 겪고 있습니다.혹시 뼈대만이라도 프론트엔드 코드를 제공해 주실 수 있을까요 ? 무리한 부탁인 것을 알고 있지만, 간절하여 질문글로 남깁니다
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
comment_v2에서 unique index 를 추가하지 않고 table 생성 시 path에 unique 제약을 걸어도 효과가 같을까요?
안녕하세요 쿠케님. 우선 좋은 강의 감사합니다.다름이 아니라 댓글 무한 depth - 테이블&구현 설계에서 unique index를 작성하는 부분이 나오는데 unique index 대신 index로 구현하고 table 생성 시 path에 unique 제약을 걸어도 효과가 같을지 궁금합니다.
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
hot article 로직 변경
안녕하세요 선생님 !선생님 코드로 구현을 완료하고 제가 커스텀 해보고 있는 중에 고민이 있어 질문글 남깁니다.추천 수가 특정 개수 이상일때 hot article이 되고, 매일 갱신하는 것이 아닌, 한번 hot article이 되면 계속해서 hot article 게시판에 게시하고 싶습니다.이럴 때 hot article을 데이터베이스에 저장하는 것이 좋을까요 아니면 redis에 저장하는 것이 좋을까요 ?선생님의 의견이 궁금하여 질문 남깁니다.
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
MSA -> 모놀리식 패턴으로 수정
안녕하세요 선생님현재 애플리케이션을 MSA에서 모놀리식으로 바꾸고 있습니다.MSA 에서는 hot-article 애플리케이션에서는각각의 서비스들과 통신하지 않고 데이터를 저장하기 위해ArticleCommentCountRepository, ArticleViewCountRepository,ArticleLikeCountRepository 를 따로 만든 것으로 이해했습니다 .모놀리식에서는 이 3개의 Count Repository를 따로 만들지 않고 각각의 서비스에 있는 Count Repository 에서 가져오는 것이 더 좋을까요, 아니면아니면 MSA hot-article 패키지에 따로 count repository를 만드는 것이 좋을까요 ..선생님의 의견이 궁금합니다 .
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
RedisTemplate<String, String>
RedisTemplate<String, String> 빈으로 등록하지 않고 생성자 주입으로 사용하던데 빈으로 등록하지 않아도 스프링 내에서 자동으로 빈 등록해주나요?
-
미해결개발자라면 알아야 할 redis 기본
redis 개발 환경 수정 시 질문 입니다.
안녕하세요. 일반적은 DB는 운영되고 있는 것은 개발로 구성할 때 운영에 사용되는 테이블을 백업 받아 개발로 이동시켜 테이블들을 구성합니다. redis도 위와 같은 작업을 해야 되는 건가요?
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
노션에 오타가 있서요
첫번째로딩:5두번째로딩:5이 맞는 거 같아요5주차15) 대표적인 문제 사례 1, 2 해결 방법 에 있습니다
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
@Async 여부의 차이가 궁금합니다.
@Async @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) public void handleEventJoinCompleted(EventJoinCompletedEvent event) { try { kakaoTalkMessageApi.sendEventJoinMessage( event.getPhoneNumber(), event.getEventName() ); } catch (Exception e) { log.error("알림 발송 실패. eventId={}, eventName={}", event.getEventId(), event.getEventName(), e); } }이 로직은 비동기적으로 이벤트를 처리하는 알림서비스 로직입니다. @TransactionalEventListner(Aftercommit)를 사용하면 메인 로직이 commit 된 이후에 해당 이벤트가 실행하는 걸로 알고있는데@Asnyc를 붙히지 않았더라도 메인 로직에서 끝마치고 해당 이벤트를 실행하니깐 똑같은 결과가 나오지 않나요?차이가 궁금합니다!
-
해결됨대기업 근무하며 경험한 Redis를 야무지게 사용하는 방법 [이론편]
강의 내용 관련 이해가 잘 되지 않아 질문 남겨봅니다.
main 은 id를 가지고 있고, 이를 복제한 replica 들은 main 의 아이디로 그룹화되어 있음 그런데, main 이 어떠한 일로 인해(삭제 등) 새롭게 만들어지면 새로운 id 를 가지게 됨 이때 구 id 를 가지고 그룹화되어 있는 replica 들은 현재의 main 과 id 가 다르니 전체 동기화가 일어남 그러면, [구 id 를 가지고 그룹화되어 있는 replica 들] 은 계속 구버전 id 를 가지게 되는건가요?아니면, 동기화 후 새로운 id 로 다시 그룹화가 되는 걸까요?추가로, 강의 초반에 위 내용 관련해서 '카프카와 비슷하다'라는 설명이 나왔는데,카프카에 대해 잘 모르는 입장에서는 조금 혼란스러울 수 있을 것 같습니다.가능하시다면 추후 강의를 개선하실 계획이 있으실 경우이 부분을 조금 더 자세히 설명해주시면 좋을 것 같습니다.
-
해결됨대기업 근무하며 경험한 Redis를 야무지게 사용하는 방법 [이론편]
Cache-Aside 패턴에서 Cache Miss 시
안녕하세요 강사님!Look-Aside 패턴과 Thundering Herd 관련 강의(3:37~) 내용을 듣다가 궁금한 점이 있어 질문드립니다. 캐시-어사이드 패턴에서 캐시 미스가 발생했을 때, 강의 중 보여주신 그림에서는 ‘캐시가 직접 DB를 조회하고 데이터를 업데이트한 뒤 서버에 응답까지 전달하는 구조’처럼 표현해주셔서 다소 혼란스럽습니다. 제가 알고 있기로는 캐시-어사이드 패턴은 캐시 미스 발생 시 애플리케이션(서버)이 직접 DB를 조회하고, 조회한 데이터를 캐시에 갱신(PUT)한 뒤 클라이언트에 응답하는 방식으로 동작하는 것으로 알고 있습니다. 만약 MSA 환경에서 캐시 서버가 별도로 구성되어 있고, 데이터를 API 통신 형태로 제공하는 구조라면 그림으로 그리시면서 설명해주신 부분이 어느 정도 이해가 되지만, 해당 파트가 MSA 를 전제하고 설명하는 맥락은 아닌 것 같아서요. 혹시 이 부분에 대해 제가 잘못 이해한 부분이 있다면 피드백 주시면 감사하겠습니다!
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
MSA 에서 Monolithic Architecture로 마이그레이션
안녕하세요 강사님 ! 강의 잘듣고 있습니다.강의를 거의 다들었는데, Monolithic Architecture로 마이그레이션 해보고 싶다는 생각이 들어 해보려고 합니다.각각의 모듈을 하나의 어플리케이션의 패키지로 만들기만 하면 될까요 ? 어느 부분을 신경쓰면 좋을지 간단하게라도 조언해주시면 정말 감사드리겠습니다 .!!이 강의를 듣기를 진심으로 잘했다는 생각이 듭니다. 좋은 강의 해주셔서 감사드리고 다음 강의도 기대하겠습니다 !!
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
[2주차] 곁다리 질문
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요?2주차 성능 테스트 챕터까지 수강했습니다. 제목처럼 강의 주요 내용은 아니지만 궁금한 점이 생겨 글 작성하였습니다.질문에 악의가 없는데, 쓰다보니 공격적인 말투로 느껴지네요... 죄송합니다. 공격이 아니고 제가 공부한 부분과 달라서 어떤 게 맞는지를 여쭙고자 작성한 질문입니다. 작성해주신 포트폴리오 코드를 보면, A Service에서 A Repository, B Repository, C Repository 등을 주입받아 사용하셨는데 이게 올바른 구조인가요?? 상황: 현재 저는 계층형 폴더 구조(Controller, Service, Repository 등)가 아닌 도메인형 폴더 구조(User, Post, Tag 등)를 가져가고 있습니다. 계층형과 도메인형 모두 자신의 도메인이 아닌 다른 도메인의 다른 레이어 파일을 주입받기 보다는 Service는 Service끼리 주입을 받는 게 결합도를 낮추고 리팩토링하기 편한 방향이라고 생각했습니다. 이러다보니 Controller에서 호출하는 함수는 DTO로 통신을 하고, Service끼리 사용하는 함수는 Entity로 통신을 하게 되었습니다. 주석으로 "Interal method"라고 명시를 하였지만, 응답 형식만 다를 뿐 같은 일을 하는 함수도 많아져서 이게 맞는건가 싶은 고민이 있었습니다. 애초에 Repository를 쓰는 것도 여러 파일에서 쉽게 불러쓰기 위해서라는 말도 봤던 것 같아서 뭐가 맞는지 정답이 궁금합니다. TPS 기준이 궁금합니다. 현재 쿠폰 시스템 비슷한 프로젝트를 하고 있는데, "우리 서비스의 TPS가 몇이다"라고 할 때는 가장 주요한 로직 기준으로 측정한 결과일까요? 아니면 모든 API 중 가장 낮은 TPS가 기준이 될까요? 또한 TPS 300이 되기 위해서, 400이 되기 위해서 이런 식으로 말씀해주셨는데, Insert 또는 Update 작업이 포함된 경우 어느정도 TPS가 나오면 적지 않은 수준일까요? 감사합니다.