안녕하세요. 인덱스를 활용한 조회 성능 개선을 공부하던 중 궁금한 점이 생겨 질문드립니다. 현재 저는 OFFSET 기반 pagination을 사용하는 서비스 를 개발하고 있으며, 다음과 같은 환경에서 성능 테스트를 진행했습니다. 데이터: 약 1,000만 건 서버: EC2 t3.small DB: RDS t4g.micro k6 vus100 1. 문제 상황 초기에는 OFFSET 제한 없이 마지막 페이지까지 이동 가능하도록 구현했습니다. 하지만 데이터가 1,000만 건 수준으로 증가하자, 깊은 페이지로 갈수록 조회 속도가 급격히 느려지는 문제 를 확인했습니다. 2. 고민 및 제약 일반적으로 이 문제는 Keyset Pagination(커서 기반) 으로 해결하라고 많이 알려져 있습니다. 하지만 제 서비스는 👉 네비게이션 바를 통한 페이지 직접 이동 (ex. 1, 10, 100 페이지 클릭) 이 필요하기 때문에 Keyset 방식만으로는 요구사항을 만족시키기 어렵다고 판단했습니다. 3. 적용한 개선 방법 다음과 같은 방식으로 성능 개선을 진행했습니다. OFFSET 최대 범위를 제한 (최대 10,000 페이지 / OFFSET 100,000) 커버링 인덱스 적용 조회 방식 개선 먼저 ID만 조회 → 이후 필요한 10건만 상세 조회 전체 게시글 수(count)는 캐싱 처리 4. 성능 개선 결과 [Page 10] avg: 1.4s → 700ms p95: 4.5s → 1.8s [Page 100] avg: 17s → 1.18s p95: 24s → 3.3s [Page 1000] avg: 32.1s → 1.7s p95: 59s → 4.27s 5. 추가 제약사항 로그인 사용자와 비로그인 사용자의 조회 결과가 다름 (사용자별 구독 게시글이 포함됨) 따라서 캐시는 비로그인 사용자에만 적용 위 성능 수치는 로그인 사용자 기준 6. 현재 고민 위와 같이 개선했지만, 👉 여전히 성능이 충분하지 않다고 느끼고 있습니다. 특히 궁금한 점은 다음과 같습니다. 7. 질문 OFFSET 기반 pagination을 유지하면서 👉 추가로 성능을 개선할 수 있는 방법이 있을까요? 다음과 같은 방법들을 고려했는데, 방향성이 맞는지 궁금합니다. RDS를 2개를 사용하여 조회 성능 데이터를 각각 2개의 db가 처리하도록 한다? Keyset + OFFSET 혼합 방식 ( 일반적인 페이지 이동은 Keyset Pagination을 사용하고, 사용자가 특정 페이지를 직접 입력하거나 점프하는 경우에만 제한적으로 OFFSET 기반 조회를 사용하는 혼합 방식) RDS 스펙 업그레이드 또한 에펨코리아( https://www.fmkorea.com/ )와 같은 대형 커뮤니티는 제가 원하는 페이지 네이션 방식을 사용하면서 깊은페이지(최대 1만)도 지원하고 동시접속자 수십만 페이지 수천~수만 대량 데이터 환경에서도 빠른 조회 성능을 유지하는데 👉 이러한 서비스들은 어떤 방식으로 pagination 및 조회 성능을 처리하는지 궁금합니다.
신규 서비스 개발이 제 소재의 대부분인 경우, 어떤 관점으로 이 소재를 접근하는게 좋을까요? 아니면 굳이 "신규 개발" 이라는 주제에 몰입하기보단 일반적인 주제와 마찬가지로 접근하는게 좋을까요. "신규로 무언가를 만들었다" 라고 어필 포인트를 잡으려고 하니 한 일들에 대한 나열 하게 되고, 빼자니 아깝다는 생각이 들어서 집착하게 되는 것 같습니다.
안녕하세요, 강의 너무 잘 보고 있습니다! "OO OO을 가장 위로 올리세요" 챕터를 보다가 궁금증이 생겨 이렇게 질문 올립니다. 백엔드를 예시로 들면, 지원 대상 회사는 Spring + Java 를 다루는 개발자를 뽑고 있는데, 지금 일하고 있는 회사에서는 Node.js 를 쓰고 있는 상황입니다. 정확히는 원래 Spring + Java 기반으로 프로그램을 개발하다가, 새로운 프로젝트를 맡게 되면서 Node.js 를 쓰게된 상황인데요, 이 경우에는 대상 회사 맞춤형 이력서를 쓰기 위해 Node.js 프로젝트를 아래로 내리는게 더 좋을까요? 제 생각으로는 두 프로젝트 모두 강조할만한 요소가 있는 것 같아서 더 고민이 되네요..
올해 초에 50인 규모의 중소기업의 1,2차 면접을 봤었습니다. 당시 채용 플랫폼의 이력서 양식을 사용했고, 개인 포트폴리오 PDF 파일을 같이 첨부해서 지원했습니다. 1차 면접과 2차 면접을 볼 때, 면접관 분들께서 이력서 출력물만 보시면서 질문을 하셨었습니다. 보통 이런 경우는 포트폴리오가 서류 합격에 영향을 안줬다고 봐야되는 걸까요? 일이 바쁜 상황에서 포트폴리오까지 검토하기 어려웠던거라고 생각했는데, 제미니님의 의견이 궁금합니다.
안녕하세요 유튜브를 포함한 영상 잘 보고있습니다! 현재 신입으로 이력서를 작성해보고있는데 어필할게 크게 많지않다보니 프로젝트 하나 하나를 작성하면서 프로젝트에서 사용한 기술, 팀은 몇명으로 구성되어있는지, 배포된 링크가 있다면 또 첨부하기도 하고 그런식으로 작성을 해왔는데 이러한 방식이 말씀해주셨던 방식과는 다르게 조금 지저분해보일 수도 있겠다는 생각이 들었습니다. 프로젝트에서도 이전에 말씀해주셨던 기술 스택제거 외부링크 제거같은 내용도 제거하는 방식을 추천하시나요??
데이터 기반 근거로 디자인한 사례를 넣고 싶은데, 1) 데이터를 기반으로 문제점을 정의 2) 디자인 이후 데이터를 통해 개선됨을 입증 3) 1,2 둘 다 포함 무엇이 더 설득적인 포트폴리오를 만들 수 있을까요?! +문제점 정의 시 가설을 세우는 것이 좋은지, 그냥 리서치를 통해 도출된 문제점만 짚어줘도 되는지 궁금합니다.
아까 포폴 프로필 페이지에서 업무 경험 부분이 중요하다고 말씀주셨는데요. 만약 디자인쪽 경험이 없는 신입 준비자이고,다른 업무 경력만 있을때는 어떻게 하는게 좋을까요? 디자인 관련 프로젝트에서 기여한 부분/역량을 더 강조하는게 좋을지, 타 직무여도 업무 경험을 보여주는게 좋은지 궁금합니다.!
진행한 프로젝트가 3가지가 있는데요! 앞쪽에 배치하면 좋을 플젝이 지금 작성된 1,2,3 순일까요?! 😲 1. 타직군과 협업한 프로젝트 (출시) 2. 디자이너들끼리 진행한 프로젝트 (실제 앱 개선 플젝 - 문제정의 ~ ut부분 많이 다룬 플젝) 3. 개인 프로젝트 (실제 앱 개선 플젝 - 문제정의 ~ ut 까지 진행한 플젝)
1. 현재 학습 진도 몇 챕터/몇 강을 수강 중이신가요? 여기까지 이해하신 내용은 무엇인가요? 강사님 안녕하세요 :) 현재 4-9 낙관적 락, 비관적 락 강의를 수강하는 중이며, 단일 행에 대해 배타 락을 거는 방식을 학습한 후 관련 문의 드립니다. 2. 어려움을 겪는 부분 어느 부분에서 막히셨나요? 코드의 어떤 로직이 이해가 안 되시나요? 어떤 개념이 헷갈리시나요? 만약 비관적 락(PESSIMISTIC_WRITE) 방식으로 한 테이블의 여러 행에 락을 걸어야 한다면, 아래 두 방식 중 어느 방식이 적절한지 궁금합니다. N번의 DB 조회를 방지하기 위해 아래 1번 방식을 고려했으나, 관련 케이스가 많지 않아 제가 놓치는 부분이 있는지 여쭤보고 싶습니다. 더불어 실무에서는 어떤 방식으로 접근하시는지도 궁금합니다. :) 3. 시도해보신 내용 문제 해결을 위해 어떤 시도를 해보셨나요? 에러가 발생했다면 어떤 에러인가요? 현재 작성하신 코드를 공유해주세요 1. IN절 조회 후 락 걸기 @Lock(LockModeType.PESSIMISTIC_WRITE) @Query("select p from Product p where p.productNumber in :productNumbers") List<Product> findAllByProductNumberIn(@Param("productNumbers") List<String> productNumbers); 만약 1번 방식이 적절하다면, 데드락 방지를 위해 ORDER BY 정렬이 필수인지 궁금합니다. 2. 루프를 돌며 조회 후 락 걸기 for (String productNumber : productNumbers) { Product product = productRepository.findByProductNumberWithLock(productNumber) .orElseThrow( ··· ); ··· } @Lock(LockModeType.PESSIMISTIC_WRITE) @Query("SELECT p FROM Product p WHERE p.productNumber = :productNumber") Optional<Product> findByProductNumberWithLock(@Param("productNumber") String productNumber); 이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다!
안녕하세요! 개발자H님의 커리큘럼을 진행해보면서 이력서를 canva를 이용해서 이력서 업데이트중에... 궁금한점이 생겼습니다. overview 페이지 예시를 보니까 면접관에게 어필하고 싶은 프로젝트를 중점적으로 하면될까요? 저의 경우에는 회사프로젝트에서 경쟁력이 없어서 사이드프로젝트 개인1개, 팀3개 프로젝트를 했습니다. 사이드프로젝트를 강조하고싶긴한데... 사이드프로젝트만으로 overview를 나타내면 왜 이사람은 사이드프로젝트만 있지? 회사에서 뭐했지? 라는 의문이 들수있을거같긴한데... 이런 우려때문에 저의경우에는 타임라인순으로 overview 초안은 잡았습니다. overview에는 사이드프로젝트(개인1, 팀3) + 회사프로젝트 로 나타내는게 좋을까요?
안녕하세요. 경험 브레인 스토밍 실습을 듣고 실제로 작성하던 중 궁금한 점이 생겨 질문드립니다. 스타트업에 재직한 경험이 있고 스타트업 특성상 빠른 구현과 배포가 이루어져 1주에도 2-3개의 기능을 구현하고 배포했었습니다. 프론트 입장에서 경험을 정리하다보니 소규모 프로젝트에서는 액션에 단순히 어떤 기능을 추가함 이라고만 적게 되는데 프론트에서 유의미한 액션을 어떻게 작성할 수 있을지가 궁금합니다.
수업 예시에서는 외부 api가 실패할 경우 스케쥴러를 활용해서 후보정 로직을 통하여 결과적 일관성을 맞추고 있습니다. 만약에 자리를 지정하는 콘서트를 위와 같이 처리할 경우 (예약은 성공, 외부 api는 실패), 후보정 로직이 동작하기 전 다른 예약 시스템에서 해당 자리를 예약한 경우 더욱 큰 문제가 발생할 수 있을 것으로 보입니다. 이러한 경우 (좌석처럼 한정된 자원을 예약하는 경우), 외부 API 실패 시 후보정 로직을 통한 비동기 처리 대신 동기적으로 처리하는 것이 올바른 방식인 것 같은데, 강사님은 어떻게 생각하시는지 궁금합니다!
안녕하세요 백엔드 개발자를 희망하는 신입입니다. 이력서를 지원하는 과정에서 의문이 생겨 질문 드립니다. 신입이라 경력이 될만한 프로젝트는 없지만, 팀원을 구해서 프로젝트를 진행한 적이 있습니다. 이럴 경우 사람인이나 잡코리아 내 이력서 작성 시 어느 부분에 작성해야 할지 모르겠습니다. 자기소개서에 간단하게 작성하는 게 맞을까요? 아님, 경력기술서 칸에 작성을 해야할까요?
1. 현재 학습 진도 몇 챕터/몇 강을 수강 중이신가요? 4-10 2. 어려움을 겪는 부분 강의 끝 부분에서 네임드 락을 위한 커넥션과 일반 트랜잭션을 처리하는 커넥션을 분리시켜서 중요한 트랜잭션 처리에 영향을 주지 않는 방법을 말씀해주셨습니다. 제가 기술면접을 보면서 서킷 브레이커 라는 내용을 접하게 되었는데, 이 부분이 해당 내용과 연관이 있는건지 궁금합니다. 정확히는 외부 API의 호출 지연으로 인해 스레드 풀이 고갈되는 상황에서 어떻게 설계할 것인지에 대한 질문이었고, 이 과정에서 예시 키워드로 서킷 브레이커 Bulk Head가 있었습니다. 또한, 실제 실무 환경에서는 커넥션 풀을 분리하기 위해 어떤 방법들을 사용하는지 궁금합니다! Q&A로 설명이 어렵다면, 키워드라도 알고 싶습니다.