- 학습 관련 질문을 남겨주세요. 구체적으로 적을수록 좋아요! - 마크다운과 단축키를 활용하면 글을 더 편하게 작성할 수 있어요. - 커뮤니티 질문 & 답변에 비슷한 내용이 있었는지 먼저 검색해보세요. - 서로 예의를 지키며 존중하는 분위기를 함께 만들어가요. - 잠깐! 인프런 서비스 관련 문의는 1:1 문의하기를 이용해 주세요 변경된 Claude 설정법 영상 [변경된 Claude 설정법 영상]만 하면 되는건가요? 아니면 claude_desktop_config.json에 "mcpServers": { "jetbrains": { "command": "npx", "args": ["-y", "@jetbrains/mcp-proxy"] } } ... 이거 복사 붙여넣기하는건 꼭 하고 진행해야 하는건가요? 근데 저게 뭘하는건지 궁금하긴하네요
코드리뷰 실습 부분에서 아래 두가지와 관련된 질문 들이 있습니다! agents commands 질문 두 가지는 실제로 클로드 코드에서 제공해주는 각각 다른 기능인건가요? 아니면 똑같은 기능이지만 추상적인 의미만 부여한 건가요? agents.md 파일 코드리뷰에이전트 이외에도 테스트코드작성전용에이전트, 쿼리작성에이전트와 같이 하나의 페르소나를 부여한 별도로 하나의 기능을 가진 객체로 생각해도 될까요? commands 기능은 꼭 agents 파일을 바인딩 할 때만 사용하는 기능인가요? 위 기능의 차이점이 단순히 agents.md를 실행하려면 자연어로 명령하고 commands기능은 /xx로 명령하는 차이만 있는건가요?
학습 관련 질문을 최대한 상세히 남겨주세요! 고민 과정도 같이 나열해주셔도 좋습니다. 먼저 유사한 질문이 있었는지 검색해보세요. 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 좋아요에 대한 정합성을 (article_id, user_id) 유니크 인덱스로 보장하는 것은 DB의 역할이라고 생각합니다. 그렇다면, 다수의 동시 요청이나 사용자의 반복 클릭(예: 좋아요 버튼을 연속으로 누르는 경우) 상황에서 불필요한 DB 부하와 예외 발생을 줄이기 위해 애플리케이션 단에서는 어떤 방식으로 이를 보완하고 처리하는 것이 적절한가요? 좋아요에 대한 정합성을 (article_id, user_id) 유니크 인덱스로 보장하는 것은 DB의 역할이라고 생각합니다. 다만, 다수의 동시 요청이나 사용자의 반복 클릭(예: 좋아요 버튼을 연속으로 누르는 경우) 상황에서는 애플리케이션 단의 단순한 선행 검증만으로는 이를 제어하기 어렵다고 느꼈습니다. 예를 들어, 아래와 같은 코드에서는 다음과 같은 경쟁 상태(race condition)가 발생할 수 있습니다. T1: exists → false T2: exists → false T1: insert T2: insert ❌ (유니크 제약 위반) if (!likeRepository.exists(postId, userId)) { likeRepository.save(...); } 이처럼 애플리케이션 레벨의 exists → insert 패턴이 동시성 문제를 해결하지 못하는 상황에서 DB 예외에만 의존하지 않고 불필요한 중복 요청과 예외 발생을 줄이기 위해 애플리케이션 단에서는 어떤 방식으로 이를 보완하는 것이 바람직하다고 보시는지 궁금합니다.
[질문 내용] 여기에 질문 내용을 남겨주세요. 행위가 없고, 아예 수정 불가한 읽기 전용 객체 타입인 경우, 별도의 MyDataSource 클래스를 Config 클래스에서 별도로 만들고 그것을 빈으로 등록하는 것보다 아예 MyDataSourceProperties 자체를 클라이언트 코드에서 사용하는 것이 좋을 것 같은데, 혹시 별로일까요?
안녕하세요.. 열심히 강의를 듣고 싶지만 프로젝트가 그레이들 인식을 하지 못해서 코드조차 제대로 못보고 있습니다ㅠ 지금까지 해본 것 intellij cache invalidate .idea 파일 삭제 후 그레이들 재빌드 gradle.properties jdk 21 버전으로 되어 있어서 프로젝트 구조 및 세팅 모두 jdk 21로 동일하게 맞춤 세팅에서 gradle default로 되어 있는거 intellij로 옵션도 변경 시도 인텔리제이 업그레이드 (2023년 버전 -> 2025년) ./gradlew build clean 명령어는 정상적으로 되는 것을 확인 마음 잡고 오랜만에 공부하려 했는데 시작조차 안돼서 답답하네요 흑흑 ,,, 어떻게 하면 좋을까요?
api gateway 에서 jwt 검증을 해서 분기를 시키는데, 세션-쿠키 방식일때도 api-gateway에서 처리 하나요 ? 만약 세션-쿠키 방식일 때,user-service 에서 인증 처리한다고 하면, order 서비스에서 인증이 필요한 경우, user-service로 http 통신으로 인증을 확인하나요 ?
킬구형 ㅎㅇ 요즘에 배치 다시 학습하면서 좀 고민인 부분이 있음. 현재 회사에서 배치 Job이 좀 많이 늘어나면서 코드 관리가 너무 어렵더라고. Spring MVC에서는 Controller-Service-Repository 같은 레이어드 아키텍처나 클린 아키텍처처럼 널리 쓰이는 구조가 있는데, 배치 쪽은 이런 패키지 구조나 설계 방식에 대한 레퍼런스가 상대적으로 적은 것 같아서. 최근에 클린 아키텍처를 배우면서 배치에도 이런 구조를 적용할 수 있는지 궁금해졌거든. 지금 나는 대략 이런 식으로 구성하고 있어: batch/ ├── order/ │ ├── confirm/ │ │ ├── OrderConfirmJobConfig.java │ │ ├── OrderConfirmReader.java │ │ ├── OrderConfirmProcessor.java │ │ ├── OrderConfirmWriter.java │ │ └── OrderConfirmJobListener.java ├── payment/ │ ├── settle/ │ └── cancel/ ├── support/ ├── domain/ ├── application/ └── infrastructure/ 하나의 Job을 하나의 큰 애그리게이트처럼 보고 있어서, 관련 클래스를 패키지별로 분리하기보다 한 폴더 안에서 로우 레벨로 관리하는 게 더 편하더라고. 근데 Job이 계속 많아질수록 이게 맞는 건지, 더 나은 방법이 있는 건지 잘 모르겠어서. 혹시 형은 실무에서 Job이 많아졌을 때 패키지 구조나 코드 구성을 어떻게 가져가? 객체 간 위계나 import 의존성 방향 같은 것도 신경 써서 설계하는지도 궁금해. 물론 사람마다 차이가 있겠지만 시간 괜찮으면 경험 공유해주면 도움이 많이 될 것 같아!
'섹션 3. 데이터를 저장하기, MySQL로 시작하기' - '17. MySQL 데이터베이스 설정하기 (Docker)' 질문입니다. 제가 기존에 만들어둔 도커 컨테이너도 3306 포트를 쓰고 있어서 포트 문제 때문에 기존 컨테이너를 삭제하고 진행했습니다. 여러 컨테이너를 만들려면 어떻게 해야되나요? 안쓰는 포트 아무대나 만들면 되나요? 예를 들어 지금 3306 포트를 쓰고 있으니까 다음에 만들 컨테이너는 3307을 쓰면 되는건가요? docker run --name mysql-twitter \ -e MYSQL_ROOT_PASSWORD=root123 \ -e MYSQL_DATABASE=twitterdb \ -e MYSQL_USER=dev \ -e MYSQL_PASSWORD=dev123 \ -p 3306:3306 \ -d \ mysql:9.3 3306 포트 말고 다른 포트를 사용할 경우 위 명령어에서 -p 3306:3306 는 어떤 식으로 바꾸면 되나요?
http://localhost:8080/actuator 경로로 메트릭을 확인했을때 프로메테우스가 보이지가 않습니다. build.gradle에 코드 추가한 후 다시 빌드 했고 인텔리제이 외부라이브러리 안에 프로메테우스가 있는 것도 확인을 했습니다. 엑츄에이터 메트릭 노출도 모두 노출하도록 application.yaml에 코드도 잘 작성되어 있습니다. 무엇을 더 확인해야 할 지 모르겠습니다;; 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.
강의에서는 비관적 락과 낙관적 락을 다루셨는데, 일반적으로 대규모 서비스가 아닌이상 좋아요 자체가 순식간에 많은 트래픽이 몰릴것같지않아 낙관락으로 처리하는 것이 더 효율적일것같다고 생각이듭니다. 그래도 극단적인 상황을 대비해서, 뒤에서 나오는 조회수 처리처럼 레디스로 좋아요 수를 증가시키고 스케줄링같은걸로 RDB에 백업하는 방식은 어떤가요? 동시성처리에서 비관적 락으로만 처리해야 하는 상황이 있을까요? 레디스의 분산 락을 사용하는 것이 성능 측면에서 비관락보다 유리할 때도 있을 것 같은데, 실제로 비관락을 반드시 써야 하는 예시나 사례가 궁금합니다. RDB 트랜잭션( @Transactional ) 내부에서 레디스를 함께 업데이트하는 경우, RDB에서 장애가 발생해서 롤백이됬는데 Redis 만 데이터가 업데이트 되는 경우도 발생할수도 있을것같은데. 이런 경우를 어떻게 처리하는지, 2PC를 적용하는지 아니면 다른 방법이 있는지도 궁금합니다.
'섹션 2. 데이터 주고받기, Spring Boot API 서버 만들기' - '10. Postman으로 API 테스트하기' 질문 입니다. 오타로 @PostMapping과 @GetMapping의 URL이 불일치해서 포스트맨에서 제대로된 값이 안나왔더라고요. 이럴 경우 오류도 안떠서 해결하기가 힘든데, URL 오타를 방지하는 방법이 있을까요?
안녕하세요. 최근 객체 간 의존 방향 고민에 많은 시간을 쏟고 있어 질문드립니다. 핵심 질문 도메인/서비스 간 의존 방향을 결정할 때 어떤 기준을 적용하면 좋을까요? "누가 누구를 알아야 하는가"에 대한 판단 기준이나 원칙이 있을까요? 저는 덜 중요한 개념의 변경이 중요한 개념에 영향을 주면 안된다고 생각하고 있었습니다. 그래서 중요한 개념이 덜 중요한 개념을 모르도록 코드를 짜려고 노력하는데요. 막상 개발할 때는 이게 잘 안되어서 고민에 시간을 많이 사용하거나, 타협하곤 합니다. 이런 상황이 이번 강의를 보면서도 나타나 질문글을 작성하게 되었습니다. 구체적인 상황 그런데 강의에서 download 메서드를 CouponService로 이동하는 과정을 보고 다음과 같은 의문이 들었습니다: 변경 후 구조: CouponService → OwnedCoupon, OwnedCouponRepository 의존 OwnedCoupon → Coupon, CouponRepository 의존 우려 사항: Coupon과 OwnedCoupon이 서로를 알게 되는 것이 순환 참조나 강결합을 유발하지 않을까? OwnedCoupon에 필드 추가 시, 기존에는 OwnedCouponService만 수정하면 됐지만 이제는 CouponService도 함께 수정해야 함 논리적으로는 CouponService에 download 기능이 있는 것이 맞아 보이지만, Coupon과 OwnedCoupon이 서로 알게 되는 것이 괜찮은 설계인가? 이런 고민에 시간을 많이 쓰다 보니 개발 시간이 부족하다고 느껴집니다. 마감을 위해 구현 후 리팩토링하는 방식으로 진행하고 있지만, 리팩토링을 못할 때도 많고 마음의 짐으로 남는 것 같습니다. 조언 부탁드립니다. 감사합니다.
좋은강의 너무 감사드리며 많이 배워가는것같습니다. 강의를 들으면서 질문이 있어 드립니다. 포트 번호로 분리된 MSA 서버를 프론트엔드에서 쉽게 사용하도록 통합하는 방법이 궁금합니다. 일단 단순히 생각했었을때 ngnix 로 리버스프록시 적용해서 /article 이면 localhost:9000 이런식으로 리버스프록시로 구성해도 될것같은데 현업에서 nginx 를 이용해서 구성을 하는지 또다른 많이 쓰는 방법이 있는지 궁금합니다. CQRS 환경에서 서버끼리 http 통신 article-read 에서 cqrs 를 적용하여 각 서비스에서 필요한 정보를 http 통신으로 가져오는데 클라이언트와 서버가 아닌 서버와 서버끼리면 굳이 웹과관련된 정보가 전송되는 http가 비효율적(?)이지 않나? 라고 생각을했는데 데이터 통신을 할때 카프카로 필요한 데이터만 통신하는것은 어떤가요? 실제 msa 환경에서 서버끼리 통신할때 어떤방식으로 사용하는지도 궁금합니다.
학습 관련 질문을 최대한 상세히 남겨주세요! 고민 과정도 같이 나열해주셔도 좋습니다. 먼저 유사한 질문이 있었는지 검색해보세요. 인프런 서비스 운영 관련 문의는 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하는지.. 그냥 속도빠르니깐 넘어가도 상관없는지 의심이 들어서 더 찾아볼수있는 방법이나 조언 부탁드립니다. 감사합니다. 강의 거의 완강햇다가 한번 더 다시 듣고있습니다.