묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
13분쯤 테스트하다가 안 된다면?
저도 13분쯤에 create 테스트를 하다가 안 되어서 삽질했는데, 드디어 됐습니다.원인은createdAt, updatedAt에 값을 설정하지 않고 넣으려다 보니, null로 들어가서 에러가 발생했던 것이었습니다.그리고 mysql에 접속했을 때는 use article; 로 DB에 접근해야 합니다. 저는 use database;로 접근하고 있었네요. 이 과정에서 GPT의 도움을 많이 받았습니다. 13분쯤 진행다가 나오던 그 500 에러 로그는 애플리케이션을 확인해 봐야 하고요. 테스트 코드의 create 메서드에는 IDE의 설명도 같이 참고했습니다.왜 오류가 떴는지 알려주더군요.
-
해결됨은행 서버 프로젝트 실습을 통해 배우는 코틀린 마스터 클래스
JDK 선택할 때 궁금점!!
음 강의 내용은 Oracle OpenJDK 17 버전을 사용하셨는데 특별한 이유가 있으신건지 아니면 다른 회사의 동일한 버전 SDK를 사용해도 되는건지 예를 들면 Azul zulu 에서 나온 sdk 라던가.. 자바 계열 언어를 다룰 때 어떤 회사(?)의 sdk를 선택해야하는건지 항상 막막하네요.. 혹시 이런 부분에 대해 공부하셨던게 있으실지 궁금합니다. 아니면 선택할 때 어떤 부분들을 고려해서 하는지?
-
해결됨은행 서버 프로젝트 실습을 통해 배우는 코틀린 마스터 클래스
혹시 어플리케이션을 실행할 수 있게 readme 같은건 따로 없나요?
음.. 어플리케이션을 실행해보고 코드들을 뜯어보고 싶은데 실행 방법에 대한 readme 같은 건 안보여서요! 혹시 docker-compose 실행 후에 앱 키면 될까요?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
27강(댓글 무한 depth - CUD API 구현 & 테스트 데이터 삽입 Comment Response 관련 질문)
학습 관련 질문을 최대한 상세히 남겨주세요!고민 과정도 같이 나열해주셔도 좋습니다.먼저 유사한 질문이 있었는지 검색해보세요.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 선생님! 강의 정말 잘 수강하고 있습니다. 선생님 덕분에 기본기가 탄탄해지는 것 같아서 감사드립니다. 27강(댓글 무한 depth - CUD API 구현 & 테스트 데이터 삽입 Comment Response 관련 질문) - 24분 가량에서 Comment V2 생성을 위한 정적 팩토리 메소드의 경우 CommentResponse 책임으로 넣으셨는데, 굳이 책임을 CommentResponseV2로 넣을 정도로 큰 부분이 아니기에 하나로 넣으신건지, 아니면 프로젝트 규모적으로 보았을때 굳이 V2 Response를 생성할 정도의 규모가 아니기에 따로 만드시지 않고 하나의 Response 객체로 사용하신 것인지 궁금합니다.나중에 프로젝트 아키텍칭을 할 때 해당 내용을 기억하기위해 질문드리고자 합니다.감사합니다.
-
해결됨백엔드 6주 실전 미션과 1:1 피드백으로 완성하는 합격 포트폴리오
“외부 API” 호출이 실패한 경우 “내 서비스” DB 데이터의 정합성은 어떻게 되나요?
안녕하세요 딩코딩코님! 수업 감사히 듣고있습니다!아래 코드에서 트랜잭션 범위를 최소화하기 위해 1. 기존 서비스로 이벤트 참가 처리 메서드에만 @Transactional이 붙여져 있습니다.이미 커밋이 된 상태이기 때문에, 2. 외부 API 호출이 실패해서 RuntimeException 예외를 던져도 “내 서비스”의 DB에는 “참가자 수 증가”와 “참가자 정보 저장”이 된 상태일 것으로 생각되는데,이 경우, 아래 두가지 옵션 중 선택하는 것이 좋은 방법인지트랜잭션 범위를 2. 까지 늘린다.외부 API 호출 실패 시 “참가자 수 감소”, “참가자 정보 삭제” 로직을 추가한다.아니면, 더 좋은 옵션이 있는지 궁금하여 질문드리게 됐습니다!public class ImprovedEventJoinWithExternalApiUpdateFacade { private static final String TEST_PHONE_NUMBER = "01012341234"; private final EventExternalUpdateService eventJoinService; private final ExternalEventApi externalEventApi; private final ApplicationEventPublisher eventPublisher; public void joinEvent(Long eventId, Long memberId) { // 1. 기존 서비스로 이벤트 참가 처리 EventWithLockParticipant participant = eventJoinService.joinEventWithTransaction(eventId, memberId); // 2. 외부 API 호출 ExternalEventResponse response = externalEventApi.registerParticipant( eventId, memberId, participant.getEvent().getName() ); if (!response.isSuccess()) { throw new RuntimeException("외부 API 호출 실패: " + response.getErrorMessage()); } // 3. 외부 API 응답으로 참가자 정보 업데이트 eventJoinService.updateExternalId(participant, response.getExternalId()); // 4. 이벤트 발행 (트랜잭션 커밋 후 실행됨) eventPublisher.publishEvent(new EventJoinCompletedEvent( eventId, participant.getEvent().getName(), TEST_PHONE_NUMBER )); } }
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
컨슈머 이벤트 중복 처리
안녕하세요! 자주 질문드리는데 정성껏 답변해주셔서 감사합니다! 동일한 이벤트가 중복 전송될 가능성이 있기 때문에 article-read 서비스에 이벤트 id를 통한 중복 처리 로직을 추가 하려고합니다.article-read 는 redis를 사용하고 있기 때문에 redis에 이벤트 id를 저장해 해결하려고했습니다. 예를 들어 article-read가 이벤트를 받았을때redis 에서 이벤트 id 확인동일한 이벤트 id가 저장돼 있으면 추가 처리 안하고 message ack redis 에서 이벤트 id 확인동일한 이벤트 저장된게 없으면 서비스 로직 수행서비스 로직 결과 redis 업데이트처리 완료한 이벤트 id redis 저장 이런식으로 진행하려 했으나 만약 어떠한 문제로 인해서비스 로직 결과 redis 업데이트 ( 성공 )처리 완료한 이벤트 id redis 저장 ( 실패 )하게되면 이벤트 처리는 성공했지만 처리된 이벤트 저장에는 실패해 추후에 중복 처리가 발생할 가능성이 생길 것 같습니다. 이러한 문제 해결을 위해서비스 로직 결과 redis 업데이트처리 완료한 이벤트 id redis 저장두 작업을 하나의 트랜잭션으로 묶어 처리하려고했지만 rdb 와 동작이 다르기 때문에 (롤백 기능 제공 안함 등) 적절한 방법인지 판단이 안서는 상태네요 혹시 article-read에 이벤트 중복 처리를 한다고 하면 어떻게 구현이 가능할지 여쭤보고싶습니다
-
해결됨백엔드 6주 실전 미션과 1:1 피드백으로 완성하는 합격 포트폴리오
4-9 낙관적 락, 비관적 락
해당 강의 수강 중 Facade 패턴에 대해 알게 되었습니다 그런데 테스트 코드에만 Facade가 적용되어 있고 Controller에는 바로 서비스 코드를 호출하게 되어 있는데요. 학습용 예시 코드여서 이런 것인지 다른 의도가 있는것인지 궁금합니다!
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
messagerelayconfig클래스에서
bootstrapServers의 value값은 어디에 가져오는건가요?yml이나 properties파일은 없는 거 같은데..
-
해결됨대기업 근무하며 경험한 Redis를 야무지게 사용하는 방법 [이론편]
SSD가 메모리인가요?
Redis란 무엇인가 강의 3:33초 쯤 Redis가 SSD 같은 메모리를 사용한다고 하셨는데 SSD가 메모리인가요?
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
UNDO LOG와 롤백에 관해 질문드립니다.
1. 현재 학습 진도4-5 수강중 트랜잭션 내 isolation level에 따른 데이터 consistency 보장을 위해, WAL(Write-Ahead Logging)시 내부적으로 사용하는 UNDO LOG와 REDO LOG를 활용한다. 2. 어려움을 겪는 부분그러면 트랜잭션 내에서 rollback을 수행하면, UNDO LOG를 기반으로 디스크 내용을 트랜잭션 수행 이전 상태로 되돌린다고 이해했습니다. 맞게 이해한걸까요?만약 이게 맞다면, WAL로 인해 트랜잭션 내 작업들은 커밋되기 전에 디스크에 반영되지 않으므로, rollback된다면 UNDO LOG를 활용하지 않더라도 디스크 내 데이터가 이전 내용임이 보장되지 않나요?롤백 시 UNDO LOG가 어떤 부분에서 활용되어야 하는지 이해하지 못했습니다.
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
이력서 첨삭
안녕하세요 딩코님 제가 완강을 하여 이력서를 작성해봤는데보완·추가 할만한 부분을 알려주실수 있을까요https://earthy-chalk-721.notion.site/Lee-Jeongwon-1aa176858bf380cca9cce9625a5ad1e4?pvs=73강의중 살짝 봤는데 포공 졸업하셨나요,,, 역시 너무 잘배웠습니다
-
해결됨대기업 근무하며 경험한 Redis를 야무지게 사용하는 방법 [이론편]
레디스 활용에 대해서 질문드립니다!
안녕하세요! 알고 있는 Redis 지식을 복습하고, 또 어떤 새로운 이론이 있나 학습할 겸 강의 수강하고, 완강까지 했습니다. 강의를 들으며 궁금했던 점이 있습니다. 보통 redis-cli 환경에서 명령어를 치는 일이 많이 있는지 궁금합니다.Springboot 백엔드 개발 중 Redis를 도입해서 사용한다고 하면, 애플리케이션 단에서만 활용하고, cli환경에서 사용하는 일도 많이 있을까요!?
-
해결됨백엔드 6주 실전 미션과 1:1 피드백으로 완성하는 합격 포트폴리오
오타 발견 제보
3주차 수업 자료(notion) category 안에 Training 이 없습니다. 글 내용 흐름에 따라 Training 대신 Fiction 으로 수정하면 될 것 같습니다 🙂 아래 GROUP BY 를 통해서도 없다는 것을 다시 한 번 확인할 수 있습니다. GROUP BY 조회 결과
-
미해결실습으로 배우는 선착순 이벤트 시스템
흐름정리 제가 이해한게 맞나요?
쿠폰 100개를 발급해야하고 이 개수는 100을 넘어가면 안됨-> java synchronized락의 경우 쿠폰 발급을 담당하는 서버가 여러개라면 db에 쿠폰 저장(개수 업데이트) 요청이 동시에 올수 있으므로 race condition 발생-> redis의 경우 여러 서버가 쿠폰 발급 요청을 보내도 싱글 스레드이므로 쿠폰 발급 수를 정확히 100개로 맞출 수 있음. 하지만 예제의 경우 threadpool을 사용하여 각 스레드별로 쿠폰 발급이 가능하면 바로 db에 쿠폰 저장하는 로직이라서 db 부하가 심함-> kafka를 도입하여 스레드들이 쿠폰 발급 메세지만 카프카로 보내고 카프카 컨슈머가 이 메세지를 처리하여 db에 쿠폰을 저장함. 컨슈머 그룹에 속한 컨슈머는 현재 하나이므로 메세지 1개씩을 처리함 따라서 db에 부하가 심하지 않음.
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
조회수 정보를 어디서 저장할지 고민입니다.
안녕하세요. 강의 너무 잘 듣고 제 프로젝트에 필요한 부분들로 리팩토링 하면서 MSA를 처음 공부하려 했습니다!먼저 제 프로젝트는 거의 똑같은 구조로 게시글이 있습니다. 2가지의 질문이 있습니다. (1) 정보를 취합하기 위해 동기로 API호출을 한다는 것은 장애 전파가 된다고 이해하고 있습니다. 그렇다면 저희 예시에서도 Article-read에서 조회수는 api호출을 통해 받기로 했습니다. 그렇다면 어느정도의 장애 전파는 허용한다고 받아들여집니다. 실제 서비스에서도 여러 정보를 취합해서 줘야하는 경우가 많을텐데 API를 통해 정보를 가져오는것이 절대 안되나요? 아니면 종종 허용하기도 하나요? (2) CQRS의 Query(질의)부분은 데이터 수정이 없어야 한다 이해했습니다. 그런데 데이터를 수정해도 되나요?예를 들어 제가 게시글 상세 조회를 게시글 모듈에서 분리하려고 합니다. 그런데 게시글 상세 조회를 하게되면 조회수가 올라갑니다. 따라서 게시글 상세조회 발생 -> 조회수 증가 이벤트 발생 ->조회수 증가 이런 식으로 구상을 했습니다. 이러한 질의 부분 모듈에서 데이터를 수정하게 만드는 이벤트가 발생해도 괜찮을지 여쭤봅니다!!
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
hot key 문제를 방지하기 위해 적용한 DCL의 재시도 횟수와 랜덤 지터에 대한 질문입니다
1. 현재 학습 진도6챕터를 모두 끝낸 후 해당 내용을 직접 프로젝트에 적용하고 있습니다. hot key 문제를 해결하기 위해 DCL을 적용하여 중복 DB 접근을 방지할 수 있습니다. 2. 어려움을 겪는 부분현재 프로젝트는 외부 API인 LLM을 통해 경제 요약 리포트를 만들어주는 서비스입니다.이때 리포트 생성 시 60s~120s가 소요되어 만들어진 리포트들을 캐싱해놓고 사용하려 합니다.레디스 리모트 캐시를 적용하려 하는데, hot key 문제를 방지하기 위해 락을 획득한 후에도 반드시 캐시를 한 번 더 확인하는 방식을 적용 즉 DCL 을 적용하려 하는데, 이때 락을 획득하지 못한 애들은 일정 시간후에 다시 락 획득을 시도해야 합니다. 그런데 지금 디비에 접근하고 LLM을 통해 리포트를 생성하는 task가 넉넉하게 1-2분정도 걸리는데, 이 때문에 락 획득 재시도 간격을 너무 길게 잡아버리면 ux가 저하되고 그렇다고 너무 짧게 잡으면 요청 실패가 빈번하게 발생하게 됩니다. 그렇다고 또 시도횟수를 늘리면 또 서비스에 부하가 발생할 수 있을 것 같고 또 시도횟수를 짧게 하면 데이터를 받아오지 못하는 상황이 빈번하게 발생하여 고민중입니다. 3. 시도해보신 내용현재는 재시도 횟수 1000번에 랜덤 지터 200~300ms로 잡았는데 혹시 이런 경우에는 어떻게 해결하면 좋을지 인사이트 부탁드립니다.https://github.com/Dockerel/DataStreams-BE/pull/2/files#diff-8865d84ecad53d37da0cb105068fad66b3f780ff3a9d11b61df86287646e51c3작성한 코드 깃허브 링크를 첨부해드립니다. 감사합니다.
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
Intellij Profiler 실행 시에 Redis 연결 문제
Intellij Profiler로 서버 실행 시 Redis 연결 문제로 서버 실행이 안되서 이 부분을 localhost로 바꾸고 실행시키니 잘 실행되었습니다.
-
해결됨백엔드 6주 실전 미션과 1:1 피드백으로 완성하는 합격 포트폴리오
gitbub action로 push후 수업진행이 멈췄습니다
깃액션으로 배포자동화 작업후 퍼블릭ip:8080/api/chapter2/boards에 접속해도 똑같이 여전히 거부가 되고있고 이전까지 진행과정에서 빌드실패라던지 연결실패같은 오류메시지도 뜬적이없어 어느부분이 잘못된건지 찾기가 쉽지않습니다 ec2와 rds도 잘만들어졌고 dbeaver에 aws rds주소로 연결도 잘된상태에 use portfolio까지는 실행이 되는데 테이블이 생성되있질 않아 mock데이터 삽입도 진행되질않습니다
-
해결됨6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법
main.tf EC2 인스턴스.타입 수정 필요
terraform apply 명령어로 실행 중 오류가 발생했는데 t2.micro 로는 인스턴스 생성이 안되어서 찾아보니 t3.micro 가 가능해서 변경하여 생성하였습니다.
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
카운팅 조회 시 질문
안녕하세요 질문있습니다.만약 게시글 전체 조회할 때 게시글 마다 좋아요 수도 함께 기재하려고 하면 게시글 조회 할 때 마다 articleId에 맞는 좋아요 수 정보도 함께 필요하잖아요?현재 게시글 서버와 좋아요 서버가 다른 환경을 고려할 때 그러면 게시글 조회할 때 마다 좋아요 서버로의 api요청이 불가피할 거 같은데 이 경우 조회 성능이 당연히 안좋게 나올 수 밖에 없다고 생각합니다. 비정규화로 좋아요수를 게시글 테이블에 붙여서 단일 서버로의 요청을 만들어줄려고 해도 말씀하신 한계 때문에 안될 거 같구요.만약 게시글 전체 조회 시에 게시글과 게시글의 좋아요수가 반드시 제공되어야 한다면 제가 생각한 성능 저하 포인트가 타당한가요? 만약 타당하다면 어떻게 개선할 수 있을까요? 인기게시글만 따로 추려서 레디스로 메모리를 활용해야할까요?