묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 캐시 전략
섹션3에 22번째 강의에서 에러발생합니다..
환경은 windows 11 64비트이구요,자바 21, redis는 물론 docker 8.2.1 실행 중이엇구요 하지만SplitShardedBloomFilterRedisHandlerTest 클래스에 mightContain 테스트 함수 실행 하면 첨부한 이미지 처럼 에러가 출력 됩니다. 아래는 docker 버전 정보입니다.
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
애그리거트 루트의 하위 도메인들의 depth가 깊어질 때 문의
안녕하세요 . 강의에서 애그리거트 루트가 하위 도메인을 일관성을 유지하기 위해member.updateInfo() 로 MemberDetail updateinfo() 를 호출하는것을 보았는데요 만약 Profille에 여러 속성(프로필주소, 프로필이미지를 불러올 수 있는 주소,정보 등이 존재)이 있어 값 타입이 아닌 Entity로 존재해야 할 경우엔 member.updateInfo() -> memberDetail.updateInfo() -> profile.updateInfo() 로 depth가 내려갈 것 같은데요. 뭔가 잘못된 방법 같아서요..혹시 이런 경우에는 어떻게 도메인을 설계해야 좋을지 궁금합니다...!!
-
해결됨실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편)
검색어 애널라이저 질문
안녕하세요.강의를 다시 듣는 중에 궁금 사항이 생겨 질문을 남깁니다. 색인 시에는 스탠다드 애널라이저를 이용하여 색인을 하고 검색시에는 스탠드다 애널라이저가 아닌 다른 애널라이저로 이용하는 경우도 있을까요?검색 애널라이저도 따로 설정하지 않으면 스탠다드 애널라이저인가요? 좋은 강의 만들어주셔 감사합니다.
-
미해결실전 jOOQ! Type Safe SQL with Java
안녕하세요 FetchGroups에서 Multiset방식 사용하면 어떤가 해서 물어봅니다
안녕하세요 공부하다가 보니FetchGroups방식으로 했을때 Map으로 반환되고 DTO로 변환해야하는 오버헤드가 발생하는데요Multiset방식으로 하면 1:N 관계에서 바로 DTO로 반환 할 수 있는데요코드 보기가 조금은 더 복잡해 보이지만 WHERE절이 있을때 현재 테이블 데이터와 인덱스 상으로는 성능적으로 더 괜찮은거 같아서 multiset방식은 강의에 없어서 어떤지 궁금해서 여쭤봅니다 public List<ActorFilmography> findActorFilmographyWithMultiset(ActorFilmographySearchOption searchOption) { final JFilmActor FILM_ACTOR = JFilmActor.FILM_ACTOR; final JFilm FILM = JFilm.FILM; return dslContext.select( ACTOR, DSL.multiset( DSL.select(FILM.fields()) .from(FILM) .join(FILM_ACTOR) .on(FILM.FILM_ID.eq(FILM_ACTOR.FILM_ID)) .where( FILM_ACTOR.ACTOR_ID.eq(ACTOR.ACTOR_ID), containsIfNotBlank(FILM.TITLE, searchOption.getFilmTitle()) ) ).convertFrom(r -> r.into(Film.class)) ) .from(ACTOR) .where( containsIfNotBlank(ACTOR.FIRST_NAME.concat(" ").concat(ACTOR.LAST_NAME), searchOption.getActorName()) ) .fetch(record -> new ActorFilmography( record.value1().into(Actor.class), record.value2() )); }WHERE 조건 포함 시 성능 비교 fetchGroups 방식 (cost=405, rows=609) Film 필터링 먼저 → FilmActor 조인 → Actor 필터링 1. film 테이블 스캔 (1000 rows) └─ LIKE '%COMMANDMENTS EXPRESS%' → 111 rows 2. film_actor 인덱스 조회 (idx_fk_film_id) → 609 rows 3. actor PRIMARY KEY 조회 → 609 rows └─ LIKE '%LOLLOBRIGIDA%' → 1 row (최종) 특징: - Film 조건이 선택적이면 먼저 필터링하여 조인 범위 축소 - 하지만 Actor 필터링은 마지막에 수행 (비효율) - 609개 row가 네트워크 전송 → 애플리케이션에서 1개로 그룹핑 --- multiset 방식 (cost=20.2 + 13.3 × filtered_actors) Actor 필터링 먼저 → 각 Actor의 Film 서브쿼리 1. actor 테이블 스캔 (200 rows) └─ LIKE '%LOLLOBRIGIDA%' → 1 row (필터링 후) 2. 필터링된 1개 actor에 대해 서브쿼리 실행: - film_actor PRIMARY KEY 조회 (27.3 rows 추정) - film PRIMARY KEY 조회 (27.3번) - LIKE '%COMMANDMENTS EXPRESS%' → 1개 매칭 특징: - Actor 조건을 먼저 적용하여 서브쿼리 실행 횟수 최소화 - 필터링된 1개 Actor만 네트워크 전송 (JSON 포함) - Film 필터링은 각 actor 서브쿼리 내부에서 수행 --- 실제 Total Cost 계산 fetchGroups Total: 405 네트워크 전송: 609 rows (Actor + Film 중복 포함) 애플리케이션 처리: Map 생성 + Stream 변환 multiset Total: 20.2 + (13.3 × 1) = 33.5 네트워크 전송: 1 row (Actor + JSON array) 애플리케이션 처리: JSON 역직렬화 결론: WHERE 조건이 있으면 multiset이 압도적으로 유리 (405 vs 33.5)FetchGroups는 Actor를 나중에 필터링하고 multiset은 actor를 먼저 필터링해서 1개에 대한 film을 여러개 가져와서 현재 데이터에서는 더 유리한데 일반적인 사용법이 궁금합니다
-
미해결실전! 스프링 데이터 JPA
스캔대상 질문드립니다.
안녕하세요. 다른질문에도 동일하게 있는데 답변이 조금 모호한거같아서 다시 질문 드립니다.강의 자료의 해당 강의 부분을 보면org.springframework.data.repository.Repository 를 구현한 클래스는 스캔 대상라고 되어있는데, 제가 이해한 바로는 이 부분이org.springframework.data.jpa.repository.JpaRepository 를 상속받은 인터페이스는 스캔 대상이렇게 수정되어야 할 것 같은데 맞을까요..??
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
[typo] 3장. 작전1 명령어 문의
킬구형 잘 지내고 있는가?날이 차가워졌다가 말다가 뒤죽박죽 3장 작전1의 JpaCursorItemReader 를 활용한 postBlockBatchJob 에 문제가 있어 보인다. 킬구형이 해킹을 잘한다지만, 우리는 못한다!!!명령어에 jobParameters 가 제외 되었는데 이런 좋은 해킹 공유 해주면 좋겟다! postBlockBatchJob 은 startDateTime / endDateTime 를 필요로 하는 명령어로 보인다.아래와 같이 구동해야 정상 작동이 되는걸로 보인다 ./gradlew bootRun --args='--spring.batch.job.name=postBlockBatchJob startDateTime=2025-11-16T00:00:00,java.time.LocalDateTime endDateTime=2025-11-20T00:00:00,java.time.LocalDateTime'
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
2강 작전1. csv/fixedLength 윈도우 실행 관련 유의사항 제보
현재 윈도우 환경에서 학습 중이어서 형님께서 싫어하실 수 있겠지만, 꽤나 흥미로운 것을 발견해서 형님께(강의내용에 도움이 되실 수도 있을까 하여) 제보드립니다!참고로 저의 경우 IntelliJ의 powershell에서 echo를 하고 csv/txt내용수정은 IntelliJ에서 직접 하였습니다. 1) csv 실행시 오류최초 실행시 파싱불가 오류가 발생하였는데, csv파일에서 문제점은 없을 것으로 판단하여 프로젝트의 인코딩을 utf-8에서 EUC-KR로 변경해주었습니다. 이러면 정상 작동하였습니다.2) fixedLength 실행시 오류역시 최초 실행시 파싱불가 오류가 발생하였습니다.로그를 살펴보았을때 인코딩이 잘못되었을 것으로 판단하여 프로젝트의 인코딩 설정과 해당 txt파일의 인코딩 설정을 모두 utf-8로 바꿔주었습니다(utf-16/utf-16LE/utf-16BE 모두 오류 발생, 특히 저 인코딩 문제는 utf-8에서만 유일하게 발생하지 않아서 utf-8 인코딩만 가능한 것으로 보임).이래도 파싱문제가 발생하였는데,.columns(new Range[]{ new Range(1, 8), // errorId: ERR001 + 2 new Range(9, 29), // errorDateTime: 19 + 2 new Range(30, 38), // severity: CRITICAL/FATAL + padding new Range(39, 44), // processId: 1234 + 2 new Range(45, 66) // errorMessage: msg + \n }) severity 부분을 30 ~ 39 가 아닌 30 ~ 38로 바꿔주었고마지막 errorMessage 부분을 46 ~ 66이 아닌 45 ~ 66으로 바꿔주었습니다(21자리 -> 22자리)echo로 공백을 입력해주었지만 실제 파일을 보았을때는 공백이 먹히지 않았던 것 같습니다. 그래서 아래와 같이 공백대신 문자열 1개를 그냥 입력해주었습니다. echo를 통한 개행이 먹히지 않아 위와 같이 intellij로 txt파일을 변경해주었습니다.마지막 문자는 DETECT + 공백 + 개행 -> DETECTS + 개행으로 공백을 제거해주었습니다. 이렇게 했을때 최종적으로 빌드성공하였습니다.저 Range범위, 특히 severity 범위를 왜 저렇게 구성해야 하는지, 이게 윈도우 실행 환경만 이런건지, 제 환경에서만 이런 문제가 발생하는건지..아직도 모르겠지만.. 형님께 제보를 해드리면 좋을 것 같아서 남겨봅니다!
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
형 JobLauncherController 구성 질문
킬구형 여기부분에서 사실상 JobLauncherController 에서 applicationContext는 실제로 사용되지않는데 이전 강의에서 job이 bean으로 등록된다는걸 우리가 실제로 확인해보라고 넣은 큰 그림인거야 후훗? 😏
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
companion object
안녕하세요 강사님 그 정적 팩토리 매서드는 강의에서 data class dto 측에 써 주셨는데 현업에서는 주로 dto에 쓰는 게 컨벤션인 가요?
-
해결됨누구보다 빠르게 배우는 Springboot + Flutter RestAPI 게시판 만들기
device선택시
디바이스 선택시 Chrome(web)과 저의 실물 핸드폰 연결해서 했더니 안드로이드 스튜디오 코드는 잘 돌아갑니다.하지만 BoardViewModel.dart 코드에서 설정한 url그대로 따라 쳤는데swagger ui에서계속 화면처럼 response body가 비어있습니다.. 계속나와서 혹시 전체 소스코드 공유 안될까요??
-
해결됨제미니의 개발실무 - 커머스 백엔드 기본편
PointBalanceEntity에서 낙관적 락
안녕하세요! 강의를 듣다가 궁금한 것이 생겨서 질문 남깁니다.PointBalanceEntity에 낙관적 락을 추가해서 유저의 어뷰징을 방지한다고 하셨는데, 비관적 락이 아니라 낙관적 락을 사용하는 이유가 있을까요?포인트 적립이나 사용에 있어서는 충돌 가능성이 많지 않아서 낙관적 락만으로 해결 가능한 것인지, 아니면 비관적 락보다 성능이 더 좋아서 그런 것인지 궁금합니다.물론 말씀하신대로 상황마다 모두 다르겠지만, 대체로 어느 정도 규모가 있는 서비스에서도 낙관적 락만으로 해결이 되는 것인지도 궁금합니다.
-
해결됨제미니의 개발실무 - 커머스 백엔드 기본편
테스트 코드
안녕하세요 좋은 강의 잘 들었습니다~!강의를 모두 듣고 제공해주신 프로젝트를 쭉 확인하고 궁금한 점이 생겨서 문의를 남겨봅니다저는 실무에서 도메인 모델과 엔티티 모델을 구분하지 않고도메인 모델에 JPA관련 어노테이션을 모두 허용한 상태로 개발해왔습니다물론 구분해서 개발해본적도 있었지만컬럼 변경 등 다양한 변경사항에 대응할 때마다 도메인 모델과 엔티티모델을 둘 다 확인하고 변경해야하는 번거러움?이 생겼던거 같아서 클래스가 좀 지저분해지더라도 도메인 모델 하나로 개발하고 테스트 코드를 작성해왔었습니다이번 강의에서 사용된 프로젝트의 경우모듈과 패키지가 나눠져있어서 도메인 모델과 엔티티 모델이 분리되어있는듯 보이지만 제가 사용했던 구조와는 다른점이 있었습니다..!도메인 모델은 강의에서 말씀하신 개념과 격벽그리고 행동에 대해 적절하게 표현하기위한 객체이지만 핵심 비즈니스 로직을 모두 포함하고 있는게 아니라 대부분 조회된 데이터를 개념에 맞게 변경하는 DTO? 역할을 하는것 같고 상태변경에 대한 로직은 엔티티에 구현하고 service 레이어에서 호출하는 방식으로 보여집니다그렇지만 처음 보는 코드가 잘 읽힐정도로 충분히 설득력있는 구조라고 생각이 듭니다..다만 테스트 코드가 있어야만 그 설득력이 완벽해질것 같다는 생각이 들었습니다그래서 해당 프로젝트 구조를 더 이해하고 학습하기위해 테스트 코드를 작성해보려고 합니다만약 저라면 ~Entity에 작성되어있는 상태변경에 대한 테스트 코드와 ~Service, ~Handler, ~Manager 등에 작성된 로직에 대한 테스크 코드를 작성할 것 같은데강사님은 이러한 구조에서 테스트 코드를 어디까지 작성하시는지 또는 어떻게 접근하시는지 궁금합니다~!
-
해결됨누구보다 빠르게 배우는 Springboot + Flutter RestAPI 게시판 만들기
노션에 cors 문서가 안보입니다!
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
레디스 설명시작 부분 인코딩깨짐 문제
오타라기 보다는 인코딩이 깨져 보여서 신경이 쓰여서3장. 작전2: NoSQL 읽고 쓰기 (무법지대 NoSQL, 새로운 처형 방식의 시작 ☠) 에서 중간 레디스 설명 시작 부분이야
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
ExitCode 질문
킬구형 5장. 작전2: Run Squad 장악 작전 공부중인데, Process finished with exit code 0이라는 문구 자체가 나오질 않아. 혹시나 싶어서 새 프로젝트 만들어서 시도해봐도 마찬가지고,, 윈도우 11, java 17에 org.springframework.boot:spring-boot-starter-batch:3.5.7 환경에서 개발중인데 혹시 버전이나 OS 문제일까?? 아니면 뭔가 설정을 빼먹은건지 모르겠네.. 혹시 몰라서 application.yaml 설정도 첨부해spring: application.name: demo output.ansi.enabled: always datasource: url: jdbc:h2:mem:test;DB_CLOSE_DELAY=-1 driver-class-name: org.h2.Driver username: sa password:
-
해결됨스프링 부트 - 핵심 원리와 활용
@Validated를 적용해도 빈 검증이 안되는 경우에 대한 조치 공유..
[요약]Spring Boot 3.4 이상을 사용하실 경우 MyDataSourcePropertiesV3의 필드 중 Etc 타입 필드에 @Valid를 적용해야 Etc 클래스 내부에 적용한 유효성 검증 어노테이션이 정상적으로 동작됩니다...package hello.datasource; import ... @Getter @ConfigurationProperties("my.datasource") @Validated public class MyDataSourcePropertiesV3 { @NotEmpty private String url; @NotEmpty private String username; @NotEmpty private String password; @Valid // 적용 필요 private Etc etc; public MyDataSourcePropertiesV3(String url, String username, String password, Etc etc) { this.url = url; this.username = username; this.password = password; this.etc = etc; } @Getter public static class Etc { @Min(1) @Max(999) final private int maxConnection; @DurationMin(seconds = 1) @DurationMax(seconds = 60) private Duration timeout; private List<String> options; // 생성자 주입 public Etc(int maxConnection, Duration timeout, List<String> options) { this.maxConnection = maxConnection; this.timeout = timeout; this.options = options; } } } =======================================================================================스프링 부트 3.4 이전 버전에서는 @ConfigurationProperties가 적용된 클래스에 @Validated만 적용해도 해당 클래스의 필드와 중첩 필드(필드의 타입으로 정의된 클래스 안의 필드)에 대해서도 자동으로 유효성 검증 어노테이션이 동작했다고 합니다.즉, @ConfigurationProperties가 적용된 MyDataSourcePropertiesV3 클래스에 @Validated를 적용하면 해당 클래스의 필드인 url, username, password, etc 뿐만 아니라 etc 안의 필드인 maxConnection, timeout, options의 유효성 검증 어노테이션이 모두 동작했다고 합니다. 그러나 스프링 부트 3.4 이후 버전에서는 @ConfigurationProperties가 적용된 클래스에 @Validated만 적용할 경우 해당 클래스의 필드에 적용된 유효성 검증 어노테이션만 동작하며 중첩 필드에 대하여 유효성 검증 어노테이션이 동작하도록 하기 위해서는 중첩 필드에 @Valid를 명시적으로 적용해야한다고 합니다. https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.4-Release-Notes#bean-validation-of-configuration-properties
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
전체 사용자 조회시 오류
안녕하세요. 11:18분쯤 전체 사용자 조회할 때 강의에서 오류가 나지 않아서 여쭈어봅니다.. apigateway 에서는 yml파일을 바라보는 파일이 ecommerce 이고, user-service에서는 user-service yml파일을 바라보고 있는데 두 개의 secret key 값이 다른데 오류가 안나는 게 정상인가요..? 코드 바뀐 부분을 영상에서 말씀을 안해주셔서 매번 이 강의 깃허브랑, yml 파일들이 들어가있는 깃허브를 확인하면서 진행하는데 깃허브 업데이트가 안된건지 .. 궁금합니다.. 제가 임의로 ecommerce secret key값을 application.yml 파일과 동일하게 하니 오류는 해결되었는데.. 강사님 영상 보면서 할 때 오류가 나지 않아야 한다면 제가 잘못 한건지 궁금해요.. https://github.com/joneconsulting/new-toy-msa/blob/ch10-1/apigateway-service/src/main/resources/bootstrap.ymlhttps://github.com/joneconsulting/spring-cloud-config/blob/master/ecommerce.yml
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
게시글 생성 로직에서 오류 발생시 redis 게시글 수 되돌리기
게시글 생성 로직에서 만약 오류 발생시에 db는 롤백이 되는데 만약 redis에 저장된 게시글수가 이미 증가됐다면 감소를 시켜야 하는데 어떻게 처리하는게 좋을까요
-
해결됨[JSP부터 스프링부트까지]포기없는 SpringBoot로 가는길
강의오류문의
8. DB에 요청하여 데이터 update와 delete하기 이강좌가 런닝타임이 1시간이 넘는다라 표기됬음에도16분정도 시청하면 화면이 검게 변하면서 재생이 검은화면만 계속나오는데 강좌오류인가요? 아니면 표기상 미스가 난건가요??? 내용상 뒷부분이 끊겼는지 궁금해지네요
-
미해결스프링 부트와 리액트로 구현하는 보안 JWT 로그인
강의 자료를 제공해주실 수는 없을까요?
동영상 화면만 보면서 강의 자료를 확인하기에는 제가 원하는 부분을 실시간으로 확인하기가 어려운 점도 있고, 이후 복습하기도 어렵습니다. 강의 자료를 제공해주신다면 학습 하는 데에 시간을 많이 아낄 수 있을 것 같습니다.