묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨350개의 개인 앱을 만들어 월급의 7배 수익을 달성한 방법
google ads 관리자 계정에 기존 계정 연걸
아직 수업을 다 들은게 아니라 모르는 거일수도 있지만 궁금한게 생겨 문의드립니다.광고 손쉽게 만들기 - level1~5 강의에서 google ads 관리자 계정을 만들고 기존 계정을 연결하는걸 설명해주셨는데 이 때 기존계정 여러개를 하나의 관리자 계정에 연결하는 걸로 말씀하시더라구요. 기존계정이 여러개인 이유가 무엇인지 궁금합니다. 아 52번 강의에 답변 될 내용이 있네요. 질문은 삭제가 안되서 그대로 둡니다.
-
미해결스프링 부트 - 핵심 원리와 활용
build.gradle bom link 변경
[질문 내용]기존 링크 https://github.com/spring-projects/spring-boot/blob/main/spring-boot-project/spring-boot-dependencies/build.gradle변경된 링크https://github.com/spring-projects/spring-boot/blob/main/platform/spring-boot-dependencies/build.gradle다음 링크로 변경이 필요할 거 같습니다.
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
mmcv
https://github.com/chulminkw/DLCV_New/blob/main/faster_rcnn/runpod/mm_faster_rcnn_train_kitti.ipynb 안녕하세요 수업이 매우 유익하여 잘 듣고 있습니다. kitty데이터를 이용하여 mmcv를 연습하는 깃허브 코드에서는 mmcv 설치코드가 따로 되어있지 않습니다. 캐글 코드에 있는 mmcv설치 코드를 붙여넣어봤지만 오류가 나서 여쭤봅니다 . ㅠㅠ
-
미해결
강의 자료 요청드립니다!
그로스 마케팅 실무에서 어떻게 접근하고 해석하는지 궁금했는데 정말 도움이 많이 되고 있습니다.감사합니다! 수강평 작성했습니다! 강의 자료는 아래 이메일로 부탁드립니다.claireyy012@gmail.com
-
해결됨쉽게 설명하는 AWS 기초 강의
Ec2 부하
이번 Autoscale Scaling 정책 강의에서 인스턴스가 늘어나서 부하가 50%가 되었고 이후 부하가 한 자리 수로 줄어든 이유는 script에서 timeout을 300으로 했기 때문인가요?
-
해결됨GPT API를 활용한 Youtube 영상 요약 AI 만들기
강의자료 확인 불가
강의 자료 링크 접속하면 "페이지 찾지 못함사용 권한이 없거나 삭제 또는 이동되었을 수 있습니다. 링크를 확인하고 다시 시도하세요." 라고 나옵니다
-
해결됨블렌더 3D 아이소메트릭 방 만들기
메트리스 Extrude 불가....
4:56초 침대 메트리스를 만드는 부분에서 침대에서 메트리스 분리후 (P누르고 선택 분리후 E (Extrude) ) 안되는데 혹시 제가 뭘잘못했을까요?G이동은 가능합니다 분리는 된거같아요S 사이즈 조절도 가능합니다
-
해결됨제미니의 개발실무 - 커머스 백엔드 기본편
어드민(Back-office)에서 예약 변경 시, '할인 조건 재검증(쿠폰 회수)' vs '기존 혜택 유지' 중 어떤 정책이 일반적인가요?
안녕하세요실무에서 '관리자(Admin) 예약 변경 기능' 정책을 두고 기획팀과 이견이 있어, 실무에서는 어떤 방식이 범용적인지 여쭙고 싶습니다.[시스템 상황]유저가 예약할 때 다양한 할인(이벤트, 타임세일, 쿠폰, 기업지원 등)이 적용되며, 이 정보는 예약 시점에 스냅샷(Snapshot)으로 저장됩니다.현재 어드민(상담원/운영팀)이 유저의 예약 시간/날짜를 변경하는 기능을 개발 중입니다.[이슈 사항]기획상으로는 어드민에서 시간을 변경할 때도 모든 할인 조건을 '실시간'으로 재검증하라고 합니다.문제는 재검증 과정에서 '쿠폰 박탈' 같은 상황이 발생한다는 점입니다.예시 상황:유저가 5만원짜리 예약에 5만원 이상 결제 시 사용 가능한 10% 쿠폰을 씀.어드민이 사정상(또는 유저 요청으로) 가격이 저렴한 타임이나 옵션으로 변경함 -> 결제액이 4만원이 됨.기획 요구사항: "최소 결제 금액(5만원) 조건을 불만족하게 되었으니, 자동으로 쿠폰 적용을 해제(원복)하고 금액을 재계산한다."[제(개발자) 의견 및 고민]저는 위 기획이 어드민 기능의 목적과 UX(고객 경험)에 맞지 않는다고 생각합니다.고객 경험 훼손: 유저는 단지 시간을 바꿨을 뿐인데, 시스템이 엄격하게 검증해서 "조건 미달이니 쿠폰 뺏어가겠습니다"라고 하면 컴플레인 요지가 다분합니다. (유저 입장에선 혜택 유지를 원하니까요.)데이터 복잡도: 이미 스냅샷으로 저장된 할인 정보를, 수정 시점에 다시 현재 기준의 마스터 데이터(쿠폰 유효기간, 최소금액 등)와 대조해서 '줬다 뺏는' 로직을 짜는 건 구현 복잡도 대비 실익이 너무 적습니다.관리자의 재량: 어드민에서의 변경은 보통 '강제성(Override)'을 띠는 경우가 많은데, 시스템이 칼같이 혜택을 잘라버리는 게 맞나 싶습니다.[질문]보통 예약 도메인에서 관리자(Admin)가 개입하여 예약을 변경할 때도, 이렇게 엄격하게 유저의 할인 자격(최소금액, 유효기간 등)을 재검증하여 박탈시키는 게 맞나요?아니면 어드민 권한 변경인 경우 "기존 스냅샷(혜택)을 최대한 유지"해주거나, 가격 변동이 불가피하면 "취소 후 재예약"을 하는 프로세스가 더 일반적인가요?개발자로서 이 복잡한 '조건부 쿠폰 회수' 로직을 방어하고 싶은데, 설득력 있는 논리가 필요합니다. 조언 부탁드립니다!
-
미해결실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
멜론 사이트 수집부터 안됩니다
위와 같이 입력했는데 soup 출력값이 전혀 안나와서 len 으로 확인해보니 0로 나오네요. 혹시나 해서 언론사 사이트 주소로 바꿔봤는데 html 정보 정상적으로 받아오는건 확인 했어요 강의 시점이랑 멜론 사이트가 뭐가 바뀐건지앞 강의에서 네이버 부터 막혀서 해결되기전에 먼저 보려고 했는데 또 바로 막히네요...
-
미해결실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
강의 시점이랑 현재랑 네이버 사이트 변화가 많은거 같아서 질문드립니다.
네이버 뷰탭 실습부터 막혔는데요 지금은 뷰탭이 없어서 블로그 탭으로 대체해서 보고 있습니다.네이버 사이트가 전체적으로 강의 시점이랑 html 구조가 많이 다른것 같아요그리고 어떤 선택자를 선택해도 결과 출력이 되지 않길래 html를 출력해봤는데 검색 결과 자체가 안나오는 것 같더라구요 이 결과는 User Agent 를 지정하지 않았을 때 결과구요 위와 같이 User Agent를 적용하면 결과가 400 Bad Request로 떠요 url 프린트 해서 나오는 링크로는 검색결과로 제대로 접속되고 있어요왜 이런건지 알 수가 없어서 질문드립니다.시작부터 막히니 막막하네요 ㅠㅠ
-
미해결옆집 개발자와 같이 진짜 이해하며 만들어보는 첫 Spring Boot 프로젝트
프로젝트생성이안되여..진도못나가는중..
머가문제인지도 모르겠어요....
-
미해결HTML+CSS+JS 포트폴리오 실전 퍼블리싱(시즌2)
87.JavaScript & jQuery - 유효성 체크 애니메이션 로그인폼(3)
안녕하세요.87.JavaScript & jQuery - 유효성 체크 애니메이션 로그인폼(3)강의에 다른 강의가 올라와 있는 것 같은데 좀 바꿔 주실 수 있으신가요?감사합니다.
-
미해결AI 시대에 살아남기: Supabase로 백엔드 뚝딱!
비개발자이고, 바이브코딩을 하는 40대중반 직장인입니다.
작년 12월 러바블을 시작으로 커서, 안티그래피 그리고 클로드코드 등을 활용하여 바이브코딩을 해왔습니다. 그러면서 백엔드의 중요성을 몸소 느끼게 되었죠. 아주 간단한 건 버셀과 수파베이스를 어찌저찌 ai에게 물어보면서 연동을 했지만, 전문적인 지식이 필요함을 느끼게 되었습니다. 그러던 중 기적처럼 어제 이 강의가 개설된 것을 알게 되었죠. 너무 감사합니다. 한번 열심히 배워보겠습니다. 비개발자 출신이기에 다소 어려울 수도 있겠지만 뭐 하다보면 되겠죠 .ㅎ
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
Sql강의
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.궁금한게 있는데요 선생님 강의중에서 데이터베이스 시리즈 꼭 자바를 알아야만 들을 수 있는건가요?백엔드가 파이썬으로 공부중인데 자바를 또 배워야할까요?
-
해결됨[개념 & 이론] 대기업 근무하며 경험한 Redis를 야무지게 사용하기
비트맵 자료구조 관련 질문
비트맵 자료 구조 강의를 수강하고, 해당 자료구조가 활용되는 상황에 대해 이해하지 못한 부분이 있어 질문 드립니다.강의에서 말씀하신 비트맵을 사용하지 않았을 때 유저마다 고유한 키 값으로 string set으로 저장한다는 의미가 무엇인가요? 유저의 고유 키마다 쿠폰에 대한 set이 있고, 어떤 쿠폰이 발급됐는지 저장하는 구조인가요?강의에서의 상황은 유저가 해당 쿠폰을 발급 받았는지를 식별하기 위한 상황인가요? 해당 정보를 DB가 아닌 레디스에 저장할 이유가 무엇인가요? 아니면 둘 다 저장하는 방식인가요?만약 해당 쿠폰을 발급할 수 있는 기간이 일주일이면 일주일 동안 레디스에 해당 정보가 만료되지 않고 유지되어야 할까요?해당 상황은 쿠폰 번호가 유저마다 다른가요, 다 같은 쿠폰 번호인가요? 만약 다른 쿠폰 번호라면 db에 따로 저장이 되어야 할까요?감사합니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
섹션 19 질문드립니다
섹션 19 부분은 예전에 강의하셨을 때 쓰신 스프링부트 2점대 버전을 3점대 버전으로 업그레이드하는 강의인가요? 최신 강의 기준 업데이트 하신 3점대 버전으로 강의를 듣고 있는데 섹션 19에서 강의가 정확히 어떤 강의인지 궁금합니다. 만약 2점대 버전을 3점대 버전으로 업그레이드 하는 강의라면, 섹션 19에서 분산 트레이싱, swagger, kubernates 부분만 들어도 되는걸까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
pdf 오타 문의
중요한 것은 아닐 수도 있고, 영상에서도 해당 내용은 설명은 하시지 않고 넘어가셔서 정확하지 않을 순 있습니다. 그래서 문의드립니다.6. 로그인 처리1 - 쿠키, 세션 PDF5페이지도메인이 가장 중요하다. 도메인 = 화면, UI, 기술 인프라 등등의 영역은 제외한 시스템이 구현해야 하는 핵심 비즈니스 업무 영역을 말함'영역은 제외한 시스템이' 에서 영역'은'이 맞는 표현인가요 영역'을'이 맞는 표현인가요?'영역은' 이라고하면 제외한 시스템이 구현한다는 뜻으로 이해가 되는데 제외한 시스템이 무엇을 말하는지 잘모르겠고..'영역을'이라고 한다면 영역을 제외하고 시스템이 구현한다는 뜻으로 내용이 자연스레 이해가 되는데 영상에서 이 부분을 딱히 설명을 하시지 않으셔서 잘모르기에 문의드립니다.
-
해결됨원클릭으로 AI가 생성해주는 Youtube 쇼츠 만들기 자동화(with n8n)
TTS 생성 요청 후 결과조회에서 오류가 납니다
똑같이 하는데도 uri 칸에 "response_url" 끌어다놓기 해서 실행하면 결과가 저렇게 나옵니다 아무리 해도 안돼네요 방법이 없을까요?
-
해결됨원클릭으로 AI가 생성해주는 Youtube 쇼츠 만들기 자동화(with n8n)
falai 질문
fal ai가 각각의 ai들을 한 사이트로 사용할 수 있게 중개 해주는 사이트 같은데 각각의 ai에서 api키를 발급 받아 사용하면 더 저렴한가요? 아님 가격이 같나요??
-
미해결[스프링 배치 입문] 예제로 배우는 핵심 Spring Batch
배치 실행시 파라미터 (파일 이름)받기 및 (csv) 검증 5.0버전 공유
6분대 까지의 기록 입니다.5.0 버전에 맞게 ValidatedPramJobConig 구현 내용입니다 참고하세용package com.example.SpringBatchTutorial.job.ValidatedParam; import lombok.RequiredArgsConstructor; import org.jspecify.annotations.Nullable; import org.springframework.batch.core.configuration.annotation.JobScope; import org.springframework.batch.core.configuration.annotation.StepScope; import org.springframework.batch.core.job.Job; import org.springframework.batch.core.job.builder.JobBuilder; import org.springframework.batch.core.job.parameters.CompositeJobParametersValidator; import org.springframework.batch.core.job.parameters.RunIdIncrementer; import org.springframework.batch.core.repository.JobRepository; import org.springframework.batch.core.scope.context.ChunkContext; import org.springframework.batch.core.step.Step; import org.springframework.batch.core.step.StepContribution; import org.springframework.batch.core.step.builder.StepBuilder; import org.springframework.batch.core.step.tasklet.Tasklet; import org.springframework.batch.infrastructure.repeat.RepeatStatus; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.PlatformTransactionManager; import java.util.Arrays; /** * desc: 파일 이름 파라미터 전달 그리고 검증 * run: --spring.batch.job.name=validateParamJob -fileName=test.csv */ @Configuration @RequiredArgsConstructor public class ValidatedParamJobConfig { /* * [Spring Batch 5.0 변경점] * JobBuilderFactory, StepBuilderFactory가 Deprecated(삭제)되었습니다. * 대신 JobRepository와 PlatformTransactionManager를 직접 주입받아 사용합니다. */ private final JobRepository jobRepository; private final PlatformTransactionManager platformTransactionManager; @Bean public Job validateParamJob() { /* * [변경] new JobBuilder("Job이름", jobRepository) 형태로 생성합니다. */ return new JobBuilder("validateParamJob", jobRepository) .incrementer(new RunIdIncrementer()) // 실행할 때마다 JobParameter에 run.id를 증가시켜 재실행 가능하게 함 .validator(new FileParamValidator()) // 검증 로직이 필요하면 여기에 validator를 추가합니다. .start(validateParamJobStep()) // 첫 번째 Step 시작 .build(); } private CompositeJobParametersValidator multipleValidator(){ CompositeJobParametersValidator validator = new CompositeJobParametersValidator(); validator.setValidators(Arrays.asList(new FileParamValidator())); // 여러개의 검증 클래스를 변수로 할당가능 return validator; } @Bean @JobScope // Job 실행 시점에 Bean이 생성되도록 설정 public Step validateParamJobStep() { /* * [변경] new StepBuilder("Step이름", jobRepository) 형태로 생성합니다. */ return new StepBuilder("validateParamStep", jobRepository) /* * [변경] tasklet이나 chunk를 설정할 때 TransactionManager를 반드시 인자로 넘겨야 합니다. */ .tasklet(validateParamTasklet(), platformTransactionManager) .build(); } @Bean @StepScope // Step 실행 시점에 Bean이 생성되도록 설정 public Tasklet validateParamTasklet() { return (contribution, chunkContext) -> { // 비즈니스 로직 영역 System.out.println("validateParamTasklet 호출됐나요~"); // Tasklet 종료 상태 반환 return RepeatStatus.FINISHED; }; } } /* [Spring Boot 2.x ~ Batch 4.x 버전 기록용] 당시 특징: JobBuilderFactory와 StepBuilderFactory를 사용하여 간편하게 생성. 현재(5.0+)는 삭제된 방식임. @Configuration @RequiredArgsConstructor public class ValidatedParamJobConfig { [과거 방식의 핵심] 이 당시에는 @EnableBatchProcessing이 선언되어 있으면 스프링이 자동으로 JobBuilderFactory, StepBuilderFactory를 빈으로 등록해줬음. -> 개발자가 JobRepository나 TransactionManager를 신경 쓸 필요 없이 Factory만 주입받으면 됐음. [코드가 왜 방식을 바꾼이유에 대한 고찰] 과거에는 Factory 방식이 유행했다면 요즘은 Builder 방식으로 전환하려는것 같음. 추가로 PlatformTransactionManager 을 과거에는 써서 DB에 접근을 하였는데 이 방식이 DB를 하나를 바라보게끔 되어있었다고함 그래서 Step 마다 트랜잭션을 사용하려면 설정이 까다로웠다고(Bean을 재정의 하거나 Factory를 커스텀) 현재는 Step을 만들때 트랜잭션을 인자로 직접 넘겨주기에 Step A는 metaTransactionManager Step B 는 serviceTransactionManager 로 설정하는것으로 쉬워졌다고함 https://github.com/spring-projects/spring-batch/wiki/Spring-Batch-5.0-Migration-Guide 공식 깃헛 사이트에서 Transaction manager bean exposure/configuration 을 컨트롤 F 해서 보면 상세히 나와있음 아래 슬로건을 미는 느낌인거같음 개발자가 코드를 짤 때 귀찮더라도, '누가(Repository)', '어떻게(TransactionManager)' 일하는지 명시적으로 적어라. 그래야 나중에 사고가 덜 난다 5.0있는데 왜 2.x ~ 4.x 를 기록함 이라할수있는데 프로젝트를 뛰다보면 3.0버전대가 너무 많음 5.0으로 신규로 구현할 수도 있으니 과거와 현재 방식을 기록하는거에 초점 두는게 좋다생각함 private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; @Bean public Job validateParamJob() { [Job 생성] factory.get("이름")을 호출하면 내부적으로 JobRepository가 자동 주입된 빌더가 반환됨. -> 5.0부터는 new JobBuilder("이름", jobRepository)로 직접 주입해야 함. return jobBuilderFactory.get("validateParamJob") .incrementer(new RunIdIncrementer()) //.validator(new FileParamValidator()) // 여기서 정의해줘도 되지만 재활용성을 위해 별도의 클래스로 제작 job.ValidatedParam.FileParamValidator .validator(multipleValidator) .start(validateParamJobStep()) .build(); } private CompositeJobParametersValidator multipleValidator(){ CompositeJobParametersValidator validator = new CompositeJobParametersValidator(); validator.setValidators(Arrays.asList(new FileParamValidator())); return validator; } @JobScope @Bean public Step validateParamJobStep() { [Step 생성] factory.get("이름") 사용. 특징: .tasklet() 설정 시 TransactionManager를 넣지 않아도 Factory가 내부적으로 가지고 있는 기본 TransactionManager를 사용함. -> 이 '암시적(Implicit) 구성'이 편하긴 했으나, 명확성이 떨어져 5.0에서 제거됨. return stepBuilderFactory.get("validateParamStep") .tasklet(validateParamTasklet()) 트랜잭션 매니저 생략 가능했음 .build(); } @StepScope @Bean public Tasklet validateParamTasklet(@Value("#{jobParameters['fileName']} String fileName) { //System.out.println(fileName); // 여기서 파일명을 받아 작업할 수 있지만 // Tasklet 까지 오기 전 Job이 실행할 때 검증할 수 있도록 Validator 를 제공을 함 위쪽의 validateParamJob 메서드로 이동 [Tasklet 구현] 익명 클래스 방식으로 구현. 단순 출력 후 FINISHED를 반환하여 스텝을 종료함. return (contribution, chunkContext) -> { System.out.println("validateParamTasklet"); return RepeatStatus.FINISHED; }; } } */ job.ValidatedParam.Validtor 시작package com.example.SpringBatchTutorial.job.ValidatedParam.Validator; import org.springframework.batch.core.job.parameters.InvalidJobParametersException; import org.springframework.batch.core.job.parameters.JobParameters; import org.springframework.batch.core.job.parameters.JobParametersValidator; import org.springframework.util.StringUtils; public class FileParamValidator implements JobParametersValidator { // thorws 저거밖에 못찾겠어서 저걸로 했는데 문제없이 됐습니다. @Override public void validate(JobParameters parameters) throws InvalidJobParametersException { String fileName = parameters.getString("fileName"); if (!StringUtils.endsWithIgnoreCase(fileName,"csv")){ throw new InvalidJobParametersException("This is CSV"); } } }job.ValidatedParam.Validtor 끝