묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨Vue.js 끝장내기 - 실무에 필요한 모든 것
json 도 eslint autofix 가 되나요?
json 도 eslint autofix 가 되나요? { "language": "json", "autoFix": true } 이런식으로 세팅해봤는데 안되네요
-
미해결스프링 배치
Repositoryitemreader로 조회한 데이터 dirty check 여부 질문
안녕하세요~ 강사님 강의를 보고 스프링 배치 입문해서 열심히 이론부터 실습까지 잘 배우고 있습니다.몇 가지 궁금한 점이 있어서 이렇게 질문을 드리게 되었습니다.1.ItemReader 중에 Repositoryitemreader라는 구현체가 있어서 이게 Spring Data JPA를 지원해 줘서 사용해 보았는데요. 이해가 가지 않는 부분이 있어서 질문드리고자 합니다. @Bean(name = STEP_NAME) @JobScope public Step step1(@Value("#{jobParameters[chunkSize]}") Long chunkSize) { return stepBuilderFactory.get(STEP_NAME) .<HistoryEntity, HistoryEntity>chunk(chunkSize.intValue()) .reader(itemReader(null)) .processor(itemProcessor()) .writer(itemWriter()) .build(); } @Bean(name = JOB_NAME + "_reader") @StepScope public RepositoryItemReader<HistoryEntity> itemReader(@Value("#{jobParameters[chunkSize]}") Long chunkSize) { LocalDateTime now = LocalDateTime.now(); return new RepositoryItemReaderBuilder<HistoryEntity>() .name(JOB_NAME + "_reader") .repository(HistoryPagingCrudRepository) .methodName("findByLeaveDtLessThanEqual") .pageSize(chunkSize.intValue()) .arguments(List.of(now)) .sorts(Collections.singletonMap("leaveDt", Sort.Direction.DESC)) .build(); }위와 같은 step과 특정 날짜의 데이터를 조회하는 ItemReader를 구현한 후 아래 ItemWriter 에서 @Bean(name = JOB_NAME + "_writer") @StepScope public ItemWriter<HistoryEntity> itemWriter() { return item -> { item.forEach(historyEntity -> { // Id 값을 null로 만드는 메소드 historyEntity.updateRemoveId(); } ); }; }Entity의 값을 변경하게 되면 당연히 하나의 chunk 단위에서는 하나의 트랜잭션 이기 때문에 JPA의 dirty check로 인한 Id 값을 지우는 update 쿼리가 나갈거라고 생각했는데 그렇지 않더라고요.다만, @Bean(name = JOB_NAME + "_writer") @StepScope public ItemWriter<HistoryEntity> itemWriter() { return item -> { item.forEach(historyEntity -> { // Id 값을 null로 만드는 메소드 historyEntity.updateRemoveId(); historyPagingCrudRepository.save(historyEntity) } ); }; }위 코드 historyPagingCrudRepository.save(historyEntity) 를 추가하면 merge가 진행되면서 update 쿼리가 실행되긴 하지만 select 쿼리가 한 번 더 실행돼서 비효율적인거 같다는 생각이 들었습니다.질문을 정리하자면 ItemReader에서 조회한 Entity가 ItemWriter에서도 영속 상태이기 때문에 Dirty Checking 대상이라고 생각했는데 그렇지 않은 이유가 무엇인가요??혹시 ItemReader 로 데이터 조회 후 ChunkProvider를 통해 Chunk<I> 를 itemProcessor 또는 ItemWriter로 전달하는 과정에서 준영속 상태가 되는것일까요?? 2.jpaPagingItemReader 으로 데이터 조회 후, ItemWriter 에서 jpaPagingItemReader 의 where 절에 해당하는 컬럼의 값을 수정했을 때 offset(page)로 인해 일부 데이터가 읽히지 않는 문제가 있는것으로 알고있습니다. 이 경우 getPage() 메소드를 override 해서 항상 offset을 0으로 고정시키는 방법으로 해결이 가능한데 Repositoryitemreader 구현체 사용 시 어떤식으로 해결이 가능할까요??
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
테스트 코드 작성시
회원가입 기능을 구현할 때 컨트롤러에는 다음과 같은 코드가@PostMapping("/signup") public void signup(@RequestBody @Valid MemberSignup memberSignup) { memberService.signup(memberSignup); }서비스에는 다음과 같은 코드가@Transactional public void signup(MemberSignup memberSignup) { if (validateDuplication(memberSignup)) { throw new NameDuplicateException(); } Member member = new Member(memberSignup); memberRepository.save(member); }있다고 할 때 컨트롤러 테스트에서는 @Valid로 인한 실패와 회원 가입 성공 정도만 보여주고 중복 검증은 서비스 테스트에서 하면 되나요?아니면 컨트롤러에서도 모두 테스트하는 것이 좋은 방법인가요?단위 테스트를 만드는 것이 좋다고 들었는데 테스트 코드가 너무 무거워 지는 것 같아서 질문드립니다.감사합니다!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
프로퍼티 관련 질문입니다
프로퍼티를 사용하는 것과 사용하지 않는 것의 차이점은 조건을 설정할 수 있다와 설정할수 없다 이외에 차이점이 있나요? 그러한 차이점이 없다면 성능상 비효율적인 프로퍼티인 public int Hp { get; set; };대신 public int hp; 로 구현하는게 더 효과적일거라고 생각했는데 이때에도 프로퍼티를 사용할만한 이유가 있을까요?
-
해결됨[코드캠프] 훈훈한 Javascript
return에 대해 질문있습니다!
안녕하세요?return에 대해 질문 있습니다!위는 선생님께서 작성하신 코드인데 마지막에setClearInterval(); return;이 부분을 아래와 같이 써도 되나요?return setClearInterval();
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1012번 질문 있습니다!
#include<bits/stdc++.h> using namespace std; int a[51][51], visited[51][51], t, m, n, k, x, y; const int dy[] = {-1, 0, 1, 0}; const int dx[] = {0, 1, 0, -1}; void dfs(int y, int x) { visited[y][x] = 1; for(int i=0; i<4; i++) { int ny = y + dy[i]; int nx = x + dx[i]; if(ny<0 || ny>=n || nx<0 || ny>=m) continue; if(!a[ny][nx]) continue; if(visited[ny][nx]) continue; dfs(ny, nx); } return; } int main() { cin >> t; while(t--) { fill(&a[0][0], &a[0][0] + 51 * 51, 0); fill(&visited[0][0], &visited[0][0] + 51 * 51, 0); int cnt = 0; cin >> m >> n >> k; for(int i=0; i<k; i++) { cin >> x >> y; a[y][x] = 1; } for(int i=0; i<n; i++) { for(int j=0; j<m; j++) { if(a[i][j] == 1 && visited[i][j] == 0) { dfs(i,j);cnt++; } } } cout << cnt << '\n'; } return 0; } if(!a[ny][nx]) continue; if(visited[ny][nx]) continue;이렇게 했을 때 주어진 테스트 케이스는 정답이 나오거든요? 백준 사이트에선 오답이 나오더라구요 선생님이 올려주신 코드랑 차이점이 뭔지 궁금합니다.
-
해결됨스프링 핵심 원리 - 기본편
Provider
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요. 계속 고민하다가 너무 헷갈려서 질문남깁니다.MyLogger로 인해 Spring app을 작동 error가 난 것을 ObjectProvider를 이용하여 해결한다고 했습니다. 그래서 교안에선 objectProvider.getObject()를 호출하는 시점까지 request scope 빈의 생성을 지연하여 문제를 해결했다고 했습니다.원래 제가 알기론 spring container가 생성될때 1) 빈 생성과 2) 의존관계 주입 2가지를 수행해야되는데 ObjectProvider로 인해 getObject() 호출될때 까지 1) 빈 생성 2)의존관계주입을 대기를 한다는 뜻인가요?여기서 또 드는 의문이 ObjectProvider가 DL의 역할을 하는 것으로 알고 있어서 빈을 일단은 container에 찾아서 줘야 한다고 추론했습니다. 그러니깐 교안에서 말한 빈 생성 지연한다는 부분이 이해가 가질 않았습니다.그래서 현재 1.과 2.의 개념적인 부분에서 혼돈이 와서 어떤 개념을 놓쳤는지 알고 싶습니다. 감사합니다.
-
미해결홍정모의 따라하며 배우는 C언어
처리되지 않은 예외가 throw됨: 쓰기 액세스 위반입니다.
섹션 4.4의 예제를 그대로 따라해보았더니#include<stdio.h> int main() { char* str5 = (char*)malloc(sizeof(char) * 100); str5[0] = 'H'; str5[1] = 'E'; str5[2] = 'L'; str5[3] = 'L'; str5[4] = 'O'; str5[5] = '\0'; printf("%zu %zu\n", sizeof(str5), strlen(str5)); return 0; }str5[i]로 배열을 선언하는 부분에서 오류가 납니다. 어떻게 해결해야할까요?
-
미해결AWS(Amazon Web Service) 입문자를 위한 강의
강의 업데이트 질문
안녕하세요! 방금 강의 구매한 학생입니다.강의 업데이트 관련하여 질문드립니다!Q. 현재 강의 업데이트 어디까지 되어있는지 궁금합니다!Q. 업데이트 되지 않은 강의도 전부 업데이트 예정이신지 궁금합니다!
-
해결됨따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(NextJS)(Pages Router)
BaseEntity는 왜 ./Entity에서 import 해오나요?
안녕하세요, 강사님!Entity 생성 시, BaseEntity를 Entity.ts에서 import하시는데 그 이유가 궁금합니다.typeorm에서 바로 import해도 될 것 같은데, Entity.ts에서 import해오는 이유가 뭔지 잘 모르겠어서요!
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
강의자료 요청드립니다.
강의 자료가 비어있어 요청드립니다.gmldnjs0673@naver.com
-
미해결홍정모의 따라하며 배우는 C++
정리
제가 이해한게 맞을까요?
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
뷰 배포도 강의계획 있으신가용??
뷰 배포도 강의계획 있으신가용??
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
시작시간을 기준으로 해도 답이 나오는데 괜찮나요?
전 문제와 비슷하게 시작시간을 내림차순으로 정렬하고,아래와 같이 로직을 짰는데 정답 처리가 되었습니다.제가 푼 방법이 문제를 이해한 것이 맞을까요?import java.util.*; import java.io.*; class Conf implements Comparable<Conf> { int st; int et; public Conf(int st, int et) { this.st = st; this.et = et; } @Override public int compareTo(Conf o) { return o.st - this.st; } } class Main { public static int solution(int n, ArrayList<Conf> list) { int answer = 0; int min = Integer.MAX_VALUE; //st Collections.sort(list); for (Conf conf : list) { if (conf.et <= min) { min = conf.st; answer++; } } return answer; } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer stz = null; int n = Integer.parseInt(br.readLine()); ArrayList<Conf> list = new ArrayList<>(); for (int i = 0; i < n; i++) { stz = new StringTokenizer(br.readLine()); int st = Integer.parseInt(stz.nextToken()); int et = Integer.parseInt(stz.nextToken()); list.add(new Conf(st, et)); } System.out.println(solution(n, list)); } }
-
미해결핸즈온 리액트 네이티브
네비게이션 스크린에 하단 탭바도 같이 사용하려면
안녕하세요. 이번 강의에서 하단 탭바 홈을 클릭해서 홈스크린으로 가면 하단 탭바는 보이지 않는데요. 하단탭바 내의 페이지에서 탭바를 사용하면서 화면 페이지를 전환 하려면 어떻게 해야 하나요?
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
시퀄라이즈 컬럼 추가
시퀄라이즈에서 테이블 컬럼에 새로운 값을 추가하고 싶은데 어떻게 db에 반영을 할 수 있는지 궁금합니다
-
미해결생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
SocialLoginApiServiceFactory 클래스
안녕하세요 강사님!! 강의 정말 잘 듣고있습니다, 강의를 다 들은 후 전체적으로 흐름을 따라가면서 확인을 해보고 있는데요, SocialLoginApiServiceFactory 클래스에서 이해가 잘 가지 않는 부분이 있어 질의드리고자 합니다.먼저 SocialLoginApiServiceFactory에서는socialLoginApiServices 이라는 map 자료구조에 키 값으로 빈 이름이, value 값에는 SocialLoginApiService를 구현한 impl(ex, KakaoLoginApiServiceImpl) 클래스가 들어가는 것으로 이해했습니다. 현재는 map에 value가 KakaoLoginApiServiceImpl 1개만 저장이 되어있고, 만약 네이버나 구글 등 다른 impl을 구현하면 갯수가 늘어나는 것으로 이해했는데 제가 이해한게 맞을까요??만약 제가 이해한 것이 맞다면, socialLoginApiServices에 key와 value가 어떤 방식으로 저장되는지 궁금합니다. 상속관계의 Bean에 대해서 Springboot에서 알아서 세팅을 해주는 것인가요?? 관련 코드 첨부하겠습니다 @Service public class SocialLoginApiServiceFactory { private static Map<String, SocialLoginApiService> socialLoginApiServices; // map에는 SocialLoginApiService 구현체가 각각 들어갈 것임 public SocialLoginApiServiceFactory(Map<String, SocialLoginApiService> socialLoginApiServices) { this.socialLoginApiServices = socialLoginApiServices; } public static SocialLoginApiService getSocialLoginApiService(MemberType memberType) { String socialLoginApiServiceBeanName = ""; if(MemberType.KAKAO.equals(memberType)) { //멤버 타입이 카카오면 socialLoginApiServiceBeanName = "kakaoLoginApiServiceImpl"; //빈 이름에 카카오 서비스 구현체 저장 } return socialLoginApiServices.get(socialLoginApiServiceBeanName); // 빈 이름을 키 값으로 활용하여 구현체(KakaoLoginApiServiceImpl) 반환 } }
-
미해결홍정모의 따라하며 배우는 C++
안녕하세요. getter함수에 대해 질문이 있습니다.
교수님께서는 const int& getDay(){return m_day;} 로 멤버변수인 m_day를 리턴하셨는데, main함수에서 출력할 때는 그냥void getDay(){cout<<day<<endl;}로 public함수를 만들고, 메인에서 today.getDay();로 해줘도 되지 않나요?가령, getDate()같이 멤버변수들을 모두 출력한다고 하였을 때는cout<<month<<" "<<day<<" '<<year<<endl;로 하는 것이 편리하지 않나요??
-
미해결언리얼 엔진4 입문 (C++ 기반)
캐릭터 Blueprint 받아오기 실패
23:00 과정 진행 중static ConstructorHelpers::FClassFinder<ACharacter> BP_Char(TEXT("/Script/Engine.Blueprint'/Game/BluePrints/BP_MyCharacter.BP_MyCharacter_C'"));if (BP_Char.Succeeded()){DefaultPawnClass = BP_Char.Class;}이 부분에서 실패해서 캐릭터가 뜨지 않습니다.블루프린트 클릭 후 ctrl + c로 경로 복사 붙혀넣기까지 했는데 안되네요.그리고 해당 강의를 UE 5.1로 진행 중인데 문제 될게 있을까요
-
미해결홍정모의 따라하며 배우는 C언어
리터럴 상수
수학에서의 상수와 달리 프로그래밍에서의 상수는 '값을 한번 저장하면 변경할수 없는 정장 공간' 이라고 정의 되어 상수라는 이름 대신 리터럴이라는 이름이 대신 쓰이는 것으로 알고있는데 맞나요?