묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
[33. 좋아요 수 구현] 에서 테스트 하는 화면 동시성 문제
학습 관련 질문을 최대한 상세히 남겨주세요!고민 과정도 같이 나열해주셔도 좋습니다.먼저 유사한 질문이 있었는지 검색해보세요.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. [33. 좋아요 수 구현] 에서 테스트 하는 화면에서요.해당 방법대로 실행을 하면 동시성 문제가 발생합니다.Record has changed since last read in table 'article_like_count'저는 MariaDB를 사용하고 있는데요. MySQL도 마찬가지로 기본 잠금 수준이 Repeatable Read 라고 알고 있습니다.해당 기본 수준으로 실행하면 동시성 문제로 영상과 다른 결과를 보이게 됩니다.따라서 잠금 수준을 Read Commited 나 Read Uncommited 로 변경하면 제대로 실행이 됩니다.이렇게 하는 것이 정답인지 아니면 다른 원인이 있는건지 알려주세요.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
깃허브 질
지금 깃허브도 만들었고 PS D:\programming\java_kotlin\Java_Spring_Library_Application\library-app\library-app> git push --set-upstream origin masterremote: Invalid username or token. Password authentication is not supported for Git operations.fatal: Authentication failed for 'https://github.com/ej123123123/library-app.git/'이렇게 뜨면서 깃허브 push가 안되는데 왜그럴까요
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
여기까지 다 끝냈다고 하셨는데
제가 잘못구현한건지 같은 책 이름으로여러개의 책 이름이 들어가는 거 같은데이건 상관없나요?책등록은 여러개 되는데 그에 따라서 대출은 하나밖에 안되는데예를 들면 클린코드를 3개 등록할 수 있는데, 3개 등록해도 대출은 1개밖에 안돼요
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
형 코드에 public static class 이게 뭐야 ?
형 코드 보고 있는데 아래와 같이 public static class로 되어 있어. 이게 무슨 의미야 ? 따로 static 메소드는 없는거 같은데
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
findByPath에서 articleId로도 검색을 해야 할 것 같아요.
학습 관련 질문을 최대한 상세히 남겨주세요!고민 과정도 같이 나열해주셔도 좋습니다.먼저 유사한 질문이 있었는지 검색해보세요.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.@Query("select c from CommentV2 c where c.commentPath.path = :path") Optional<CommentV2> findByPath(@Param("path") String path);위와 같은 방식으로 조회를 하면 인덱스 서치가 되지 않는 것 아닌가요?아래와 같은 방법으로 해야 할 것 같은데..@Query("select c from CommentV2 c where c.articleId = :articleId and c.commentPath.path = :path") Optional<CommentV2> findByPath( @Param("articleId") Long articleId, @Param("path") String path);답변 부탁 드립니다.
-
미해결스프링부트를 이용한 웹 프로그래밍: 웹사이트 이렇게 만드는 거예요!
일정 등록 및 조회 부분 강의 질문입니다.
1.일정 관련 js파일이planner.js와 planner_fetch.js 파일로 나눠져 있는데planner.js에서 planner_fetch.js에 있는 함수들을 사용하고planner_fetch.js에서는 planner에 있는 함수, 변수들을 사용하던데각각 별도의 js 파일들인데 어떻게 서로 변수나 함수들을 가져다 사용할 수 있는지 궁금합니다. planner_fetch.js의 fetchGetPlan 함수에서 fetch url이 /planner/plan/3 형식이 아니라 /planner/plan?no=3 형식이던데 이렇게 사용한 이유가 있을까요??
-
미해결The 10x AI-Native Developer: 회사에서 AI로 압도적 성과를 내는 법
1-7 강의 PreToolUse부분 관련 질문입니다
{ "hooks": { "SessionStart": [ { "hooks": [ { "type": "command", "command": "npm install && echo '✅ 의존성 설치 완료'", "timeout": 300 } ] } ], "PreToolUse": [ { "matcher": "Edit|Write|Create", "hooks": [ { "type": "command", "command": "bash .claude/hooks/security-check.sh" } ] } ], "PostToolUse": [] } }실습을 따라하는 중에 src/config.ts 파일을 만들고, const MY_API_KEY = "password-12345ABCDEFG"; 라는 내용을 넣어줘.라는 요청을 진행하면 강의처럼 차단이 되는것이 아닌 src 폴더에 config.ts가 생성되어 집니다 어느 부분이 잘못된걸까요?
-
미해결제미니의 개발실무 - 커머스 백엔드 기본편
표현 계층에서의 접근 지점이 다양해지는것과 이를 해결하기 위한 파사드의 도입에 대해 제미니님의 생각이 궁금합니다.
안녕하세요 제미니님, 유튜브부터 계속 꾸준히 보다가 강의 릴리즈 하신 후 바로 구매하여 듣고 있는 사람입니다. 먼저, 생각할 거리를 많이 주는 좋은 강의 감사드립니다. 다름이 아니라, 일단은 ProductSerivce 안에서 Product라는 개념만을 명확히 다루고자 하였기에 Controller에 타 개념의 Service들도 혼재되는? 그런 상황이라고 이해했습니다. 물론 다 선택의 영역이겠지만, 개발자분들 중에선 Presentation 영역(Controller)을 최대한 가볍게 가지고 가시려는 분들도 많은것 같습니다.그래서 대신에 여러 서비스들이 혼재되는 상황을 Facade 등을 도입해서 여러 개념의 서비스들에 대한 presentation 계층에서의 접근을 일원화하고 각 서비스단에서의 복잡성은 해결하고자 하는 케이스도 실무에서 종종 접했는데요. 이에 대해서는 제미니님께서 어떻게 생각하시는지 궁금합니다.
-
미해결제미니의 개발실무 - 커머스 백엔드 기본편
제품상세 코드 느끼기
안녕하세요 제미니님 유투브때부터 잘 보고 있습니다! 그 25분쯤에 controller에 여러 service들을 주입받아서 사용하시는 부분에 대한 질문이 있습니다.1. 그럼 격벽으로 넘어도 되는 개념 사이에서는 a service에서 b finder or b appender 를 호출해도 괜찮은건지..?2. 격벽으로 넘어서 안돼는 개념 사이에서는 강의에 나온것처럼 여러 service를 controller에서 받아서 response를 만들어야 하는건지.....?또 그렇게 되면 controller에서 여러 service를 알아야하니까 그건 또 문제가 없는지.. 궁금합니다!!제미니님은 주로 어떻게 하시나요!?감사합니다
-
미해결Next.js 15 with Spring Boot
todoPagingCP.tsx에서
todoPagingCP.tsx에서 Link로 페이지 동적으로 만들었는데 페이지 클릭때마다 const res = await fetch( `http://localhost:8080/api/todos/list?page=${page}` );todo/list/page에 있는 이코드가 실행이 되는건가요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
왜안될까요
-
미해결제미니의 개발실무 - 커머스 백엔드 기본편
격벽의 순환 참조(?)
안녕하세요. 지난번에도 질문 남겼었는데 또 찾아뵙게 되었습니다. user 의 경우 많은 개념들이 참조하게 될 것 같습니다.회원탈퇴라는 기능이 제공될 때, 회원이 탈퇴되면 관련된 개념들을 삭제해야된다고 할 경우 이를 어떻게 해결하는 것이 좋을까요?user 쪽에서 관련 개념들을 찾아서 삭제하기에는 개념 격벽간의 순환 참조(?)가 발생하게 될 것 같습니다.카프카나 메시지 큐 등을 이용해서 처리할 수 있을 것 같은데 현재 이를 처리할 수 있는 별도의 인프라는 없다고 가정해보고 싶습니다.그렇다면 어플리케이션 이벤트(ApplicationEventPublisher)를 사용하는 것이 방법이 생각납니다.하지만 이벤트를 사용하게 되면 어플리케이션의 로직 흐름을 보기가 조금 어려우지는 것 같다는 생각도 들어서 괜찮은 방법인지 고민이 됩니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
MySQL 창이안ㄴ뜹니다
연결했는데왜 화면처럼 창이안뜨죠sql 입력하는창이안떠요
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
포스트맨
포스트맨 깔았는데왜 이거 실행하면 안켜질까요..?
-
미해결실전! 스프링 데이터 JPA
로그가 남지 않는 문제.
강의 막바지에 쿼리 로그를 한눈에 볼 수 있게하기 위한 라이브러리를 추가하고 실행하시는데요.저는 pdf 내용대로 implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'위 라이브러리를 추가하고 실행해보아도 쿼리 실행 로그가 보이지 않아요ㅠ
-
미해결스프링 부트 웹 개발 입문 - 따라하며 배우기
자바 8버전이 선택지에 없는데 어떻게 하죠
첫 프로젝트 생성에서
-
미해결실전! 스프링 데이터 JPA
테스트 라이브러리가 강의는 junit4가 맞나요??
영상에서는 이제 junit5를 의존관계로 가져간다고 나와있고 build.gradle에 있는 exclude가 junit4버전에 대한걸 exclude한다고 하시는데요..그럼 강의가 junit5버전 쓰시는거 아닌가요? pdf는 강의 영상이 junit4 버전을 기준으로 하신다는데 이것 때문에 헷갈려요
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
ExitStatus
킬구형사용자 정의 ExitStatus를 애플리케이션 종료 코드로 활용하기. 이거 커스텀 ExitCodeGenerator까지 만들었으면 jar를 실행하고 나서 $LASTEXITCODE로 조회했을 때 코드 값이 바뀌어 있어야 하는거지?
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
Batch6: jobOperator.startNextInstance() throws UnexpectedJobExecutionException
KILL-9형 도와줘,,!!!spring boot 4.0.0, spring batch6, java24 사용중이야 아래 코드를 스케줄러를 통해 "deleteSuspendedJob"을 1분마다 동작하게 하고 싶었어. 그리고 실제로 동작하긴 해. 딱 1번만.... @Configuration class DeleteSuspendedScheduler( private val jdbcTemplate: JdbcTemplate, private val jobOperator: JobOperator, private val jobRepository: JobRepository, private val transactionManager: PlatformTransactionManager, ) { @Scheduled(cron = "0 */1 * * * *") //1분마다 실행되길 기대함 fun runDeleteSuspendedJob() { jobOperator.startNextInstance(deleteSuspendedJob()) } @Bean fun deleteSuspendedJob(): Job = JobBuilder("deleteSuspendedJob", jobRepository) .incrementer(RunIdIncrementer()) .start( deleteSuspendedStep()) .build() @Bean fun deleteSuspendedStep(): Step = StepBuilder("deleteSuspendedStep", jobRepository) .tasklet(DeleteSuspendedTasklet(jdbcTemplate), transactionManager) .build() }아래는 에러 로그야. 2025-12-11T19:37:31.332+09:00 INFO 39640 --- [ main] com.clip.BatchApplicationKt : Started BatchApplicationKt in 6.378 seconds (process running for 6.894) 2025-12-11T19:38:00.017+09:00 INFO 39640 --- [ scheduling-1] o.s.b.c.l.s.TaskExecutorJobOperator : Launching next instance of job: [deleteSuspendedJob] with parameters: [{JobParameter{name='run.id', value=1, type=class java.lang.Long, identifying=true}}] 2025-12-11T19:38:00.019+09:00 INFO 39640 --- [ scheduling-1] o.s.b.c.l.s.TaskExecutorJobLauncher : Job: [SimpleJob: [name=deleteSuspendedJob]] launched with the following parameters: [{JobParameter{name='run.id', value=1, type=class java.lang.Long, identifying=true}}] 2025-12-11T19:38:00.052+09:00 INFO 39640 --- [ scheduling-1] o.s.batch.core.job.SimpleStepHandler : Executing step: [deleteSuspendedStep] 2025-12-11T19:38:00.065+09:00 INFO 39640 --- [ scheduling-1] c.c.b.b.t.DeleteExpiredBlacklistTasklet : 0개의 기간 만료된 탈퇴 이력(재가입 방지용) 레코드가 삭제되었습니다. 2025-12-11T19:38:00.067+09:00 INFO 39640 --- [ scheduling-1] o.s.batch.core.step.AbstractStep : Step: [deleteSuspendedStep] executed in 14ms 2025-12-11T19:38:00.067+09:00 INFO 39640 --- [ scheduling-1] o.s.b.c.l.s.TaskExecutorJobLauncher : Job: [SimpleJob: [name=deleteSuspendedJob]] completed with the following parameters: [{JobParameter{name='run.id', value=1, type=class java.lang.Long, identifying=true}}] and the following status: [COMPLETED] in 15ms 2025-12-11T19:39:00.007+09:00 INFO 39640 --- [ scheduling-1] o.s.b.c.l.s.TaskExecutorJobOperator : Launching next instance of job: [deleteSuspendedJob] with parameters: [{JobParameter{name='run.id', value=2, type=class java.lang.Long, identifying=true}}] 2025-12-11T19:39:00.009+09:00 ERROR 39640 --- [ scheduling-1] o.s.s.s.TaskUtils$LoggingErrorHandler : Unexpected error occurred in scheduled task org.springframework.batch.core.job.UnexpectedJobExecutionException: Illegal state (only happens on a race condition): job instance already complete with name=deleteSuspendedJob and parameters={JobParameter{name='run.id', value=2, type=class java.lang.Long, identifying=true}} at org.springframework.batch.core.launch.support.SimpleJobOperator.startNextInstance(SimpleJobOperator.java:314) ~[spring-batch-core-6.0.0.jar:6.0.0] at org.springframework.batch.core.launch.support.TaskExecutorJobOperator.startNextInstance(TaskExecutorJobOperator.java:133) ~[spring-batch-core-6.0.0.jar:6.0.0] at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:565) ~[na:na] at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:359) ~[spring-aop-7.0.1.jar:7.0.1] at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) ~[spring-aop-7.0.1.jar:7.0.1] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:158) ~[spring-aop-7.0.1.jar:7.0.1] at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:370) ~[spring-tx-7.0.1.jar:7.0.1] Caused by: org.springframework.batch.core.launch.JobInstanceAlreadyCompleteException: A job instance already exists and is complete for identifying parameters={JobParameter{name='run.id', value=1, type=class java.lang.Long, identifying=true}}. If you want to run this job again, change the parameters. at org.springframework.batch.core.launch.support.TaskExecutorJobLauncher.createJobExecution(TaskExecutorJobLauncher.java:149) ~[spring-batch-core-6.0.0.jar:6.0.0] at org.springframework.batch.core.launch.support.TaskExecutorJobLauncher.run(TaskExecutorJobLauncher.java:108) ~[spring-batch-core-6.0.0.jar:6.0.0] at org.springframework.batch.core.launch.support.SimpleJobOperator.startNextInstance(SimpleJobOperator.java:294) ~[spring-batch-core-6.0.0.jar:6.0.0]원래 Kill9형 강의 보고 잡 런쳐로 정상동작 하도록 만들었던 걸, 이번에 배치6로 올리면서 JobLauncher가 JobOperator로 옮겨졌다는 문서를 보고 바꾼뒤로 퇴근을 못하고 있어,,역시 공식 문서보단 kill9 형 문서를 보고 했어야 했던걸까??오퍼레이터와 스케줄러를 통해 잡을 특정 주기마다 동작하는 방법(위 내 코드)이 뭐가 잘못된건지 알려주면 고맙겠어!!형 제발 도와줘!!!cf.https://github.com/spring-projects/spring-batch/issues/5115
-
미해결실전! 스프링 데이터 JPA
pdf 파일과 차이점이 있는 것같은데 문제 없나요?
위는 강의 pdf 파일에서 캡쳐한 build.gradle 설정 내용입니다.아래는 제가 프로젝트 생성후 캡쳐한 build.gradle의 의존성 사진입니다. pdf 설명대로 JUnit4를 추가했습니다.그런데 pdf 파일에testImplementation(‘org.springframework.boot:spring-boot-starter-test’) { exclude group: ‘org.junit.vintage’, module: ‘junit-vintage-engine’ }가 있던데 이것도 추가해줘야하는 부분인가요?없으면 추후 강의를 진행하는데 문제가 될까요?현재 pdf 파일에 있는 build.gradle 내용과 제가 방금 프로젝트 생성 후의 build.gradle 내용과 조금 다른 것 같아 질문드립니다