묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
섹션1 | 2장 이미지(Flexible.png) 내 오타 제보
킬구형 강의 특별해서 좋아~ 즐길 수 있을거 같아! 이런 강의 의도를 더 믿음있게 하기 위해서 오타 제보~ 섹션 1. SYSTEM INIT: 스프링 배치 종결의 서막 2. 배치 처리, 시스템 종결의 서막💀 Flexible.png 이미지 내 오타 ItemReader interface 를 상속하는 RedisItemWriter 는 없다. RedisItemReader 가 존재한다
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
순수한 서비스 계층에 대한 의문???
서비스 계층을 순수한 비즈니스 로직만 남도록 하고,특정 기술에 의존하지 않도록 하는 과정을 배우면서많은 영감을 얻었습니다!그런데, @Transactional은 과연 순수한가 하는 의구심이 듭니다.내부 코드에서는 깔끔하게 지웠지만,순수한 자바 환경에서는 여전히 특정 예외상황에서 불완전하게 동작하고,어노테이션을 통해 프록시 기술에 의존하게 되는데요. 테스트 시에도 순수한 자바테스트가 아니라 스프링 컨테이너에서 관리되도록 해야하니 순수하지 않다고 느껴집니다.이런건 트랜잭션을 순수한 자바코드만으로 깔끔하게 구현하기 어렵기때문에 현실적으로 타협한건가요?여전히 찝찝한 마음이 남아있습니다 ㅠㅠ
-
해결됨카카오 면접관(개발자)이 알려주는 MSA 관점에서의 분산 트랜잭션 패턴
입금 성공 후 계좌 잔고 증가 로직 구현 방법 문의
강의를 보고 궁금한 점이 생겨서 질문드립니다.강의에서 구현된 송금 프로세스를 분석해보니,출금은 정상적으로 잔고가 차감되지만 입금 시 받는 계좌의 잔고를 증가시키는 로직이 없는 것 같습니다.예를 들어:- Choreography 방식: handleDepositSuccess() 메서드에서 SagaState만 COMPLETED로 업데이트- Orchestration 방식: Transaction Service에서 deposit 기록만 생성현재와 같이 데이터베이스가 서비스별로 분리된 상황에서,입금 성공 후 받는 계좌의 잔고를 증가시키는 로직을 어떻게 구현해야 하는지 궁금합니다.제가 생각한 방법은:1. Orchestration 방식: Transaction Service의 REST 응답이 성공하면,Account Service에서 받는 계좌의 잔고를 증가시킴2. Choreography 방식: Transaction Service에서 deposit.success 이벤트를 발행하면,Account Service에서 이벤트를 consume하여 받는 계좌의 잔고를 증가시킴이 두 가지 방식으로 접근하는 것이 맞는지,아니면 다른 권장 방법이 있는지 알려주시면 감사하겠습니다.
-
해결됨카카오 면접관(개발자)이 알려주는 MSA 관점에서의 분산 트랜잭션 패턴
코레오그래피 방식으로 SAGA 패턴을 구성할때 메시지 설계는 어떤식으로 해야하는지 궁금합니다
안녕하세요 강의를 보면서 SAGA 패턴에 대해 공부하면서 궁금한 부분이 생겼습니다코레오그래피 방식으로 주문 비지니스를 구성한다고 할때 메시지 브로커를 통해서 자신의 역할만 수행한다고 하셨는데 그러면 각 서비스가 어떻게 메시지를 설계해야하는지 궁금합니다주문서비스가 주문 요청을 받으면 재고 서비스에 주문한 상품에 대한 재고 감소를 진행하고 마지막으로 결제서비스가 결제를 진행할때 결제에 대한 금액을 결제서비스가 재고 서비스의 API를 통해 상품의 가격을 조회후 결제를 진행하는것인지 아니면 재고 서비스가 재고 감소를 실행하면서 상품의 가격 정보도 같이 재고 감소 성공 메시지에 추가하여 결제서비스가 이 메시지 정보를 통해 결제를 진행하는것인지 궁금합니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
name을 통한 비교와 객체를 통한 비교
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]회원 서비스 테스트 강의 5:27에 member와 findMember의 getName을 통해서 맞는지 확인을 했는데 왜 객체가 아닌 이름을 통해 비교를 하는건가요?
-
미해결스프링 핵심 원리 - 기본편
@Scope의 proxyMode를 사용할때 단위 테스트 방법
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]지금까지 강의를 들으며 선생님께서 말씀하신 좋은 테스트는 "종속되지 않고 순수한 자바 코드로 사용된게 좋은 코드다"라고 말씀주셨는데요, 그런 관점에서는 @Scope(proxyMode ...)로 사용되는 코드는 '테스트 관점'에서 볼때는 ObjectProvider을 사용한 코드보다 좋지 않다고 볼 수도 있을까요?아니면 "웹"의 관점인 만큼 좋은 단위테스트를 짤 수 있는 방법이 잇을까요?이번 강의에서는 단위테스트를 해보지 않아 아쉬움에 남깁니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
프로퍼티 접근법을 사용하지 않은 이유??
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]파일 업로드/다운로드 강의 내용 중,스프링EL 표현식으로 Item의 필드에 접근할때getter를 직접 호출하셨는데요,${item.attachFile.uploadFileName}로 프로퍼티 접근법을 쓰지 않은 특별한 이유가 있을까요?직접 해보니 둘 다 동작되는것은 확인했는데혹시 getter 메서드를 써야하는 특이사항이 있는건지 궁금해서 질문드립니다!
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
3_4test, 4test 자동 리소스 안됨
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]테스트를 돌리는 과정 속에서 자꾸 h2 디비로 접속하지 못하고 새로운 메모리 테이블로 접근하는 거 같습니다. 3_3테스트까지는 문제없이 작동이 되는데 자동 리소스 등록을 하는 부분부터 문제가 생겨요. 다운 받은 예제를 돌릴 때는 또 제대로 실행이 되는데 이거 왜 이러는 걸까요
-
해결됨토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
페이징 처리를 해야한다면 어떻게 해야할까요?
Pageable 인터페이스와 @PageableDefault 를 컨트롤러부터 사용하면 편하게 작업할 수 있을 것이라고 생각하고 있습니다.그런데 spring-data에서 제공하는 것들이라 컨트롤러나 애플리케이션(서비스)에서 사용하면 안 될 것 같아서 새롭게 객체를 정의해서 사용해야 하는 것인가라는 생각이 드는데요. 한편으로는 유틸느낌으로 사용해도 되지 않을까라는 생각이 들기도 합니다. 실제로 @PageableDefault 이것은 org.springframework.data.web 패키지에 들어있어서 web계층을 대상으로 만들어진 것 같구요어떤식으로 풀어나가야 할까요? 추가적으로 Http interface를 사용하기 위해 @HttpExchange을 사용할 경우 required패키지 인터페이스에 바로 붙여서 사용해도 무방한걸까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
memberRepository.save() 메서드 질문있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.public Member save(Member member){ member.id(++sequence); log.info("save: member={} ", member); store.put(member.getId(), member); return member; }이부분에서 id만 설정해주는데name,loginId, password 값이 정상적으로 세팅되는게 맞는건가요?저는 build 패턴을 이용해서 공부를 하고있는데id말고도 다른 필드도 세팅을 해줘야하는게 맞지 않나 싶어서요.id만 세팅하니까 save할 때 나머지 필드에는 null이 들어갑니다.public Member save(Member member){ member = Member.builder() .id(++sequence) .loginId(member.getLoginId()) .password(member.getPassword()) .name(member.getName()) .build(); log.info("save: member={} ", member); store.put(member.getId(), member); return member;
-
미해결스프링 부트 - 핵심 원리와 활용
springboot에서 actuator없이 micrometer를 사용할수 있나요?
springboot에서 actuator 강의 다음에 마이크로미터 강의가 나왔는데 actuator 없이 micrometer를 사용할수 있나요?
-
해결됨실무 환경 그대로 주문게시판 만들기 웹개발 기초 마스터
컴포넌트 id 명명법이 궁금합니다.
컴포넌트 edt 강의에서 id를 edt_ordNo로 주셨는데내부적으로는 edt_ordno 로 되는걸로 알고있어요 (nexacro 17)현업에서 17과 N 둘 다 다룰텐데명명법이 너무 헷갈립니다. 이벤트 핸들러도 어떻게 이름을 지정해야할까요
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
킬구형 혼자 삽질하면서 배치 운영하는데 궁금한 부분이 있어
안녕 킬구형 나는 오랜만에 배치 복습하려고 형 강의 구매했어!일단 그냥 책 보면서 실무에서 배치를 운영을 하려니깐 고민이 있어.형 생각이 궁금해서 질문을 남겨 1. Jenkins , Spring Batch형 일단 나는 Batch를 실무에서 Jenkins 스케줄러 + Batch 이렇게 사용하고 있어. 그런데 배치 인프라에 대해서 요즘 고민이 생기는 거 같아. 나는 job enabled를 false로 설정하면서 운영하고 있는데 만약에 배치가 N개로 운영되고 있다고 가정하면 port 충돌에 대해서 고민이야 물론 parameter로 port를 넘겨줄 수 있어서 현재는 스크립트로 남는 포트를 parameter로 넘겨주면서 사용하고 있어. 간편성을 생각한다면 그냥 enabled를 true로 하고 api 형식으로 그냥 호출만 해주면 이런 복잡한 과정 없이 사용할 수 있을 거 같은데 어떻게 생각해. 2. CI/CD하나의 jar에서 여러 개의 배치가 돌아가는데 이때 CI/CD 과정에서 문제가 생길 수 있을 거 같다. 현재는 ln 심볼릭 링크로 해결을 하고 있는데 이게 적절한 방식인지? 아니면 다른 방식이 있는지 궁금해 3. JobParametersIncrementer형 Spring Batch에서 JobParametersIncrementer(RunIdIncrementer 등) 관련해서 궁금한 점이 있어 만약 업무적으로 특별한 파라미터(날짜, 키 등)가 없는 반복 배치라면이 때는 run.id와 같은 증분기 기반의 값으로 JobInstance의 고유성을 관리 하지만 업무적으로 중요한 파라미터(날짜, 키 값 등)가 있다면 이 경우에는 run.id 대신 해당 파라미터를 JobInstance의 기준으로 써야 멱등성 및 실패/재실행 제어가 더 적합하다고 생각해. 실제로 파라미터가 없는 경우에는 run.id로 멱등성을 보장하고, 파라미터가 있는 경우에는 run.id 증분기를 쓰면 오히려 동일 파라미터로 재실행/복구 등 업무상 중요 컨트롤이 어렵지 않나요? 이런 경우 run.id 증분기를 같이 쓰는 게 맞는지, 아니면 아예 쓰지 않는 게 맞는지 설계 원칙이 궁금해요.https://github.com/spring-projects/spring-batch/issues/4910https://github.com/spring-projects/spring-batch/wiki/Spring-Batch-6.0-Migration-Guide
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
AOP 적용 가능한가요?
킬구형 공부중에 문득 궁금해진건데 혹시 스프링배치도 AOP를 적극적으로 활용해?스프링배치도 기본 구조는 스프링이랑 같아서 AOP를 쓸 수는 있을 것 같은데 실제로 활용을 하는지 궁금하네쉽게 쓰기에는 @Transaction 어노테이션도 뭔가 활용성이 있을 것 같고.. API 리퀘스트 실패 시 자동으로 재처리 하는 AOP 기능을 만들어보기도 했는데 FaultTolerance 관련으로 비슷하게 활용할 수도 있을 것 같고..아무튼 스프링배치에서 AOP를 적극적으로 활용하는지 궁금해
-
미해결프로덕션 레벨 실시간 채팅 서버 구축: 분산 처리부터 성능 최적화까지 (Kotlin & Spring)
빌드 파일
빌드 파일을 파일 마다 각각 만드는데 그렇게 하는 이유는 무엇인가요???
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
1장에 들어가기 전에 배치 프로젝트(디렉토리) 구성 방법에 대한 질문
☠ 질문 가이드 ☠ " 시스템 종결자의 지령이다. 질문하기 전에 이 규칙들을 숙지하도록. " 1. 코드 실행에 문제가 있다고?전체 코드를 보여줘라. 단편적인 에러 메시지만으로는 아무것도 알 수 없다.실행 환경도 알려달라. JDK 버전, 스프링 버전 등을 함께. 2. 오타를 발견했나?즉시 제보하도록. 자네같은 날카로운 눈을 가진 동료가 필요하다. 3. 질문은 자유롭게"이런 걸 물어봐도 될까요?" 같은 소심한 멘트는 불필요하다. 궁금한 건 바로 물어봐라. 배치 시스템에 소심한 건 없다. 4. 검색은 기본비슷한 질문이 있는지 먼저 확인하도록.하지만 이해가 안 된다면? 주저하지 말고 추가 질문해라.GPT가 거짓말친다고? 나에게로 오라. 💀 5. 서로 존중하라여기는 모두가 시스템을 지배하고자 하는 동료들이다.서로를 이해하고 돕는 문화를 만들어가자. ⛔ 인프런 서비스 자체에 대한 문의는 1:1 문의하기로.💀그쪽 서버는 막강한 CTO가 있어 건드리지 않는 게 좋을 거다 💀- KILL-9 올림 P.S.존댓말로 질문하면 rm -rf를 시전한다. 편하게 물어보도록.강의에서 놓친 부분이나 더 보충하면 좋을 내용도 자유롭게 제보하라. 너희의 피드백이 이 강의를 더 강력하게 만든다. 🔥 시스템을 함께 진화시켜 나가자.🔥 킬구형님 안녕하세요!(그래도 선생님이신데 반말하기엔 좀 그런것 같아서 존댓말로 하겠습니다..!)먼저 좋은 강의 감사드립니다.사실 구매한지는 좀 되었는데, 지난 1주일동안 Batch와 스케쥴러의 차이점, 왜 이런 어노테이션을 사용하는지부터, 왜 이런 환경설정을 해야하는지, Framework와 Boot의 동작차이점은 무엇인지 세세하게 먼저 이해하는데 집중하다보니 힘이 많이 들었는데 0장 만으로도 상당히 많은 기본기가 쌓인 것을 느낄 수 있었습니다(무엇을 모르고있었고 무엇을 알아야하는지 등).배치가 막연하게 느껴졌는데, 아직 극초반이지만 자신감이 생기고 있습니다. 감사드립니다!1장에 들어가기전에 앞서, 조금이라도 더 실무에 가까운, 가깝지 않더라도 유지보수가 간편하고 알아보기 쉽게 체계를 구성해보고자, 형님께서는 실무적으로 배치 프로젝트를 어떻게 구성하시는지 질문드리고자 합니다.각파일들의 디렉토리 위치가 없는데 임의적으로 해야하나요? - 인프런 | 커뮤니티 질문&답변위 질문에서 형님께서는 상관이 없다고는 하셨는데, 그래도 실무에서는 어떻게 구성하시는지 궁금해서 질문드리게 되었습니다!그리고 0장에서도 간단한 1개의 Job도 5개의 Step으로 이루어져 있는데, 위 질문의 AI답변처럼 1개의 Config 책임으로 두기보다는, Job - Step으로 책임을 분리하여 두는 것이 편할 것 같은데, 이게 실무에서도 실제로 이런 방향으로 관리가 이루어지는지 궁금합니다! 답변내용 참고하면서 본격적으로 1장부터 프로젝트를 구성해보고자 합니다. 감사합니다!
-
미해결나도! 스프링으로 인공지능을 할 수 있다(인프1탄)
동영상 속도 조절 가능한가요? 속도 빠른데 조정 버튼이 없어요.하는
동영상 속도 조절 가능한가요? 너무 빠른데 조정 버튼이 없어요.
-
미해결Cursor AI로 만드는 생산성 2배 Java Spring 개발
[강의자료 관련 문의]
안녕하세요.학습 관련 강의자료를 받아볼 수 있을지 문의드립니다.
-
미해결토비의 스프링 부트 - 이해와 원리
11강에서 cmd에서 spring shell에 $ init 하면 Fail 메세지
안녕하세요. 정말정말 왕초보인 수강생입니다. 강의 대로 진행중인데 어찌해야 할지 몰라 문의드립니다.11강 프로젝트 생성의 3:54에서 부터(cmd -> spring shell -> $ init) 저는 아래와 같이 에러메세지가 뜹니다.이걸 어떻게 해결해야 할지 감 못 잡고 있습니다. ㅜㅜ--Using service at https://start.spring.ioFailed to retrieve metadata from service at 'https://start.spring.io' (PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target)-- (현재 설치환경)스프링 부트 2.7.18버전을 설치했고 IntelliJjava는 21버전 설치spring initializr에서 스프링부트 3.5.6 버전으로 템플릿 받아둔 상태입니다.환경변수 JAVA_HOME, SpringBoot_Home 셋팅해두었습니다.
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
리스너의 실무 로직
킬구형 1장 - 작전3에서 아래와 같이 얘기한 부분에 대해 궁금한게 있어. '리스너는 감시와 통제만 담당한다. 실제 시스템 제거 로직(비즈니스 로직)은 분리하라. 리스너가 너무 많은 일을 하면 유지보수가 어려워지고 시스템 동작을 파악하기 힘들어진다' 청크 기반 배치 잡이라고 하고 A라는 테이블에서 데이터를 읽어와서 B라는 테이블에 데이터를 삽입하는데 B 테이블에 데이터가 없다면 삽입, 있다면 수정하는 로직이 있어. 이 과정들이 모두 끝나고 마지막으로 B 테이블에 수정 날짜 컬럼이 잡 시작 시간보다 이르다면 A 테이블에 데이터가 없으므로 B 테이블에서 이러한 데이터들을 삭제하려는 로직을 넣는다고 했을 때 아래 궁금증들이 있어.1. 위 얘기를 토대로 생각해보면 삭제 로직은 청크 기반 스텝 이후 태스크릿과 같은 다음 스텝으로 넣는게 좋은 것 같은데, 실무에서는 해당 잡 전용 리스너를 하나 추가로 만들어서 afterJob 메서드에 배치 상태가 COMPLETED인 경우에 삭제 로직을 실행하도록 하는 방식은 지양하는 편인거야? 전용 리스너를 만들어서 사용하는 경우도 있어?만약 리스너에 삭제 로직을 넣는다고 했을 때 리스너에서 데이터 삭제 과정 중 오류가 발생한 경우에는 잡이 실패 상태로 종료되는거지?2번과 같은 맥락인데 리스너에 삭제 로직을 넣는 경우 트랜잭션이 필요할텐데 리스너는 트랜잭션 범위가 어떻게 돼? 스텝에서는 청크 범위, 태스크릿의 반복 범위라고 본 걸로 기억하는데 리스너는 트랜잭션 설정 자체가 안되는건지 리스너 범위 내부에서만 설정되는건지 궁금해.