묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
아래와 같이 풀었습니다! 리뷰 부탁드립니다...!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.아래와 같이 풀었는데 이런식으로 풀어도 될까요...? 정답이긴하더라구요import java.util.*; public class Main{ public static void main(String[] args){ Main T = new Main(); Scanner in = new Scanner(System.in); String word = in.next(); String target = in.next(); System.out.println(T.solution(word, target));; } public String solution(String word, String target){ String answer = ""; char[] charArray = word.toCharArray(); List<Integer> targetAtList = new ArrayList<>(); for(int i = 0; i < charArray.length; i++){ if(Character.toString(charArray[i]).equals(target)){ targetAtList.add(i); } } for(int i = 0; i < charArray.length; i++){ List<Integer> valueList = new ArrayList<>(); for(int j : targetAtList){ valueList.add(Math.abs(i-j)); } int min = Collections.min(valueList); answer += Integer.toString(min); if(i != charArray.length-1) answer += " "; } return answer; } }
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강의 관련질
안녕하세요 현재 Java 기본문법을 완료하고 Spring 강의를 들어보려고 합니다.관계형 데이터베이스 기초도 사전 지식에 필요하다는데 해당 지식은 아직 접한게 없어 어떤 강의를 봐야하는지 감이 잡히지 않는데 ..어떤 강의를 봐야할까요..?SQL강의를 보면 될까요?혹시 관계형 데이터베이스 기초 강의를 안봐도 자바 기본문법알면 Spring 강의를 따라갈수 있을까요
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
중간테이블관련 질문
@ManyToMany에 대해 학습하는 중 궁금증이 생겨질문드립니다.ManyToMany의 경우 내부적으로 중간테이블이 생성되기에 개발자가 선제적으로 중간테이블을 생성하여 관리하는것이 편하고, 나아가 해당 중간테이블에 어떠한 비즈니스 로직에 의해 컬럼을 추가하면 하나의 엔티티로 승격된다고 이해하였습니다.ManyToMany가 아닌 다른 OneToOne과 같은 관계에서 두개의 테이블이 동시에 조회해야하는 경우가 잦을때어떠한 비즈니스 로직으로 공통되는 필드가 많을때이러한 경우에 다대다 관계가 아니더라도 추가적인 중간 테이블 생성이 지향 되는지 질문합니다. 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
cascade 사용에 대한 질문이 있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네[질문 내용]현재 비즈니스상 Delivery 를 사용하는 곳이 Order 한 곳이라 cascade 를 사용하였는데, 추후에 기능확장으로 인해 다른 곳엔티티에서도 Delivery 를 관리하게 되는 경우 기존의 cascade 를 제거하고 orderService 의 order 비즈니스 로직을 변경해야하는 것일까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
fetch join alias
fetch join 시 alias를 사용해서 필터링하는게 왜 안되는걸까요?이거에 대한 답변으로 디비상태와 객체상태의 일관성이 깨지게 됨을 보통 얘기하시는것같아요alias를 사용해서 필터링해버리면 실제 디비에 있는 데이터보다 적은 개수가 나오게 되니까요.근데 어차피 그 필터링된 결과만을 결과로 리턴해주어야한다면사용해도 괜찮을 것 같은데디비상태와 객체상태의 일관성이 깨지는게 왜 문제가될까요?그래서 생각을 해봤는데 크게 다음인것같아요- 유지관리어려울 수 있음- 캐싱문제근데 저 두 문제가 정말 큰 문제가 되는지를 잘 모르겠어요...;유지관리 어려울수야 있겠지만 그렇게 까지 어려울지도 잘 모르겠고, 캐싱문제(쿼리결과캐싱)도 저 코드에 의해 영향이 얼마나 많이 갈지..도 잘 모르겠어요저 유지관리/캐싱 문제가 아니라.. 2차캐시때문인가요?예를들어서team과 member가 일대다 연관이고team을 select해온다는 sql이 있다고 가정1. fetch join + on 절 : 디비에 있는 일부 데이터 불러옴2. fetch join 만있어서 디비에있는 모든 데이터 불러옴하나의 트랜잭션에서 1호출 뒤에 2를 호출하면디비에 쿼리를 날리긴하지만 이미 team_id에 해당하는 객체가 영속성 컨텍스트에있어서 가져온거버림그래서 추후에 문제가생길 수 있음--- 인건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
member테이블은 생성됐는데 데이터가 안 들어옵니다...
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.강사님 말씀대로 @Rollback(false)을 했음에도 불구하고 H2 데이터베이스에 member테이블은 생겼지만 데이터(행)는 생기지 않았습니다... 애초에 콘솔창에 Rollback 되었다는 구문도 뜨지 않고요... 어떻게 해야 할까요? <실행후 콘솔창> <실행 후 H2>
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
초기 jpa-basic <dependencies> 오류 문의드립니다.
프로젝트 생성화면영상에서 설명된 version 1.0.0을 어디서 선택하는지 모르겠음 초기 xml (수정전)코드 추가버전 V_1 <dependencies></dependencies> 만 복붙새로고침시 오류메세지 발생* 8번째줄인 <version>1.0.0</version>으로 바꿔도 마찬가지임 코드 추가버전 V_2 전체복붙동일한 오류 발생 Maven 번들3로 변경해도 오류는 그대로임컴퓨터에 설치된 H2 -> v.1.4.193참고로 H2에서<dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>1.4.199</version></dependency> 버전을 최신으로 등록해봤을땐 H2는 오류메세지가 안뜨긴 함 (이것저것 시도하다가 발견) 안녕하세요. JPA 강의를 수강하려고 자바8버전으로 프로젝트를 생성했으나 위와 같은 오류가 발생하고 있습니다.커뮤니티에 올라온 기존 답변내용대로 시도해봤으나 오류로 인해 강의진행이 어렵습니다.빠른 확인을 부탁드립니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
질문있습니다!!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. try{ Child child1 = new Child(); Child child2 = new Child(); child1.setName("자식1"); child2.setName("자식2"); Parent parent = new Parent(); parent.setName("아빠"); parent.addChild(child1); parent.addChild(child2); em.persist(parent); em.flush(); em.clear(); System.out.println("parent = " + parent.getName()); tx.commit(); }catch (Exception e){ tx.rollback(); }finally { em.close(); } (영속성전이를 설정해둔 상태입니다em.flush()하는 순간 insert쿼리가 3번나가고 clear()에서 영속성 컨텍스트를 초기화 하니까아래 parent를 println으로 찍을 때 select쿼리가 나가야 할 것 같은데 따로 안나가고 그대로 아빠라는게 찍히는데 왜 이런걸까요? 이건 그냥 영속성컨텍스트와 무관한 객체의 값을 찍은걸까요?
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
Mac brew로 java 설치시 오류
안녕하세요 이번에 mac을 초기화하면서 다시 재설치를 하고있는데요brew tap adoptopenjdk/openjdk 를 진행 뒤brew search idk 를 했을때이러한 오류가 나오면서 설치 가능한 jdk파일은 나옵니다.설치 시에 해당 위험 오류와 함께 설치가 안되는데 이유가 있을까요 ?Warning: Calling the appcast stanza is deprecated! Use the livecheck stanza instead.Please report this issue to the adoptopenjdk/openjdk tap (not Homebrew/brew or Homebrew/homebrew-core), or even better, submit a PR to fix it:/opt/homebrew/Library/Taps/adoptopenjdk/homebrew-openjdk/Casks/adoptopenjdk-jre.rb:9 +추가brew untap adoptopenjdk/openjdk한 뒤에 brew search idk 를 했을 경우 이렇게 나와서우선 Formulae 에있는 openjdk 와 openjdk@11 를 다운받았구요..Azul 사이트에서 java11 arm64bit jdk를 설치해서자바는 잡아논 상태입니다.궁금한 점은brew untap adoptopenjdk/openjdk 했을때의 차이와Adoptopenjdk차이가 궁금합니다. Azul에서 다운받은 java도 괜찮은건지요현재 Mac m2 Air 사용중입니다.Ventura 13.5.1 이용중입니당
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
스트림 .toList와 .collect의 차이
안녕하세요, 우선 좋은 강의 정말 감사드립니다! 나도코딩님 유튜브로 파이썬 강의 듣다가개발자에 꿈이 생겨 현재 부트캠프에서 백엔드를 배우고 있습니다.강의를 듣던 중 궁금한 점이 생겨 여쭤보려고 합니다.스트림 챕터에서 리스트로 저장할 때 .collect를 사용해서 만들 수 있다고 하셨는데혼자 해보다가 collect가 생각이 나지 않아 collect를 사용하지 않고 바로 뒤에 .toList를 붙였는데도정상 작동 하는 것 같습니다.collect를 썼을 때와 안 썼을 때의 차이가 있을까요?또, list.stream().forEach(System.out::println) 를 스트림으로 안바꾸고 list.forEach(System.out::println)로도 사용할 수 있는 이유가 있을까요??//강의 내용 List<String> langListStartsWithC = langList.stream() .filter(x -> x.contains("c")) .map(String::toUpperCase) .collect(Collectors.toList()); langListStartsWithC.stream().forEach(System.out::println); //혼자 해본 코드 List<String> c = Arrays.stream(langs) .filter(x -> x.contains("c")) .map(String::toUpperCase).toList(); c.forEach(System.out::println); List<String> list = langList.stream() .filter(x -> x.contains("c")) .map(String::toUpperCase).toList(); list.stream().forEach(System.out::println); // list.forEach(System.out::println) 작동
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
서버 재실행시 db데이터 리셋에 대해 궁금한점이있습니다.
웹 계층 개발챕터 강의를 진행하고 있는 수강생입니다.문득 궁금한점이 생겨 질문 남기게되었습니다.코드를 작성하고 서버를 재실행하면 기존에 db에 넣어둔 데이터가 다 날아가고 없어지는게 서비스로직에 달려있는 @Transactional 어노테이션 때문인가요?테스트코드에서의 @Trasactional 어노테이션의 경우 테스트데이터의 경우 테스트만 진행하고 테스트된 데이터는 db에 반영을 하지 않기위해서(Rollback) 사용한다고 알고있습니다.그래서 원래 코드에서도 반영이 되지않는 이유가 서비스로직에 포함된 트랜잭션 어노테이션 때문인지 궁금하여 질문드립니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
회원 가입 model.addAttribute
junit5 사용해서 회원 가입 작성하는데 코드 똑같이 작성했는데 오류가 나고 실행이 되지 않습니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
MyBatis 강의 올려주셔서 너무 감사드립니다ㅠㅠ (질문x)
안녕하세요 공부하는 개발자 최태현님!너무너무 오랜만에 돌아와서 글 남겨보네요 ㅎㅎ질문은 아니고 감사의 인사 드리고자 찾아왔어요 🌟올해 초 쯔음 문의 드렸던 MyBatis 였는데, 이렇게 잊지 않으시고 강의에 업데이트 해주셨네요 ㅠㅠㅠ.. 역시 최고 👍👍바쁘실텐데 좋은 내용 준비해주셔서 이번에도 많은 도움 되었어요!!코린이 응애 시절, 태현님의 이 강의를 시작으로 개발 흐름을 이해하기 시작하며 재미붙이던때가 어제같은데,,, 지금은 어느덧 서비스 개발팀에 와서 인턴 생활 중이네요 :)강의로 다시 뵐 수 있어 영광이었고, 항상 행복하시길 바라겠습니다 감사합니다 :)
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테스트용 데이터 추가하기 질문
테스트용 데이터를 추가하기 위해 아래와 같은코드를 만들었습니다.@Component @RequiredArgsConstructor public class TestDataInit { private final ItemService itemService; private final ItemRepository itemRepository; /** * 테스트용 데이터 추가 */ @PostConstruct public void init() { itemService.saveItem(new Book("김영한","츨핀시한빛")); itemService.saveItem(new Book("호날두","출판사멩구")); //오류 발생// itemRepository.save(new Book("a","출판사a")); itemRepository.save(new Book("b","출판사b")); } }한번은 itemService를 이용하여 값을 넣었고 다른 한번은 itemRepository를 이용하여 값을 넣었습니다.제 단순한 생각으로는 '어차피 itemService는 itemRepository에 바로 위임을하니 바로 itemRepository로 저장하자' 여서 실행했더니localhost에서 연결을 거부했습니다. 오류가 나왔습니다.<질문>왜 itemRepository로 저장하면 안되고 itemService로만 저장해야 데이터가 추가되는 지 궁금합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Unable to load class 'org.slf4j.LoggerFactory'.
이렇게 뜹니다.. 구글로 찾아봤는데도 어떻게 해야 할지 모르겠네요..스프링 입문 강의에도 동일 질문이 하나 있는데 답변대로 해봐도 전혀 해결이 되지 않았습니다.어떻게 해야 저 오류를 해결할 수 있을까요..?
-
미해결실습으로 배우는 선착순 이벤트 시스템
redis incr 로 동시성 제어
안녕하세요. 궁금한 점이 있어서 질문드립니다. 강의에서는 redis로 동시성 제어를 하고 있는데, 만약에 여기서 쿠폰발급로직이 추가 되어 발급과 취소가 동시에 일어난다면 문제가 되지 않나요??
-
미해결스프링 기반 REST API 개발
강의 자료가 404입니다 확인 부탁 드려요!
강의 자료가 404입니다 확인 부탁 드려요!
-
미해결실전! Querydsl
from절(QTeam.team)과 QMember.member차치
강의 7분16초에서List<Tuple> result = queryFactory .select(QTeam.team.name, QMember.member.age.avg()).from(QMember.member).join(QMember.member.team, QTeam.team).groupBy(QTeam.team.name).fetch();위 코드로 하면 성공하지만List<Tuple> result = queryFactory .select(QTeam.team.name, QMember.member.age.avg()).from(QTeam.team).join(QMember.member.team, QTeam.team).groupBy(QTeam.team.name).fetch();이렇게 코드를 작성하면 맨아래와 같은 에러가 발생합니다.하지만 제가 H2에서 위 코드를 SQL로 바꾸면 아래와 같이 된다고 생각해서select t.NAME, AVG(m.AGE) from Team t join Member m on m.TEAM_ID=t.ID group by t.NAME;이렇게 적어서 실행해보니원하는 결과대로 잘 나오긴하는데 왜 Querydsl에서는 이러한 에러가 발생하는지 궁금합니다.========================================org.hibernate.hql.internal.ast.InvalidPathException: Invalid path: 'member1.team' at org.hibernate.hql.internal.ast.util.LiteralProcessor.lookupConstant(LiteralProcessor.java:111) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final] at org.hibernate.hql.internal.ast.tree.DotNode.resolve(DotNode.java:218) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final] at org.hibernate.hql.internal.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:114) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final] at org.hibernate.hql.internal.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:109) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final] at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromJoinElement(HqlSqlWalker.java:411) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final] at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.joinElement(HqlSqlBaseWalker.java:4007) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final] at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3793) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final] at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3671) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final] at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:746) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final] at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:602) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final] at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:339) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final] at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:287) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final] at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:276) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final] at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:192) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final] at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:144) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final] at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:113) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final] at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:73) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final] at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:162) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final] at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:636) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final] at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:748) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final] at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:114) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:311) ~[spring-orm-5.3.22.jar:5.3.22] at com.sun.proxy.$Proxy113.createQuery(Unknown Source) ~[na:na] at com.querydsl.jpa.impl.AbstractJPAQuery.createQuery(AbstractJPAQuery.java:132) ~[querydsl-jpa-5.0.0.jar:na] at com.querydsl.jpa.impl.AbstractJPAQuery.createQuery(AbstractJPAQuery.java:125) ~[querydsl-jpa-5.0.0.jar:na] at com.querydsl.jpa.impl.AbstractJPAQuery.fetch(AbstractJPAQuery.java:242) ~[querydsl-jpa-5.0.0.jar:na] at study.querydsl.QuerydslbasicTest.group(QuerydslbasicTest.java:215) ~[classes/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725) ~[junit-platform-commons-1.8.2.jar:1.8.2] at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) ~[junit-jupiter-engine-5.8.2.jar:5.8.2] at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) ~[junit-jupiter-engine-5.8.2.jar:5.8.2] at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) ~[junit-jupiter-engine-5.8.2.jar:5.8.2] at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) ~[junit-jupiter-engine-5.8.2.jar:5.8.2] at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) ~[junit-jupiter-engine-5.8.2.jar:5.8.2] at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) ~[junit-jupiter-engine-5.8.2.jar:5.8.2] at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) ~[junit-jupiter-engine-5.8.2.jar:5.8.2] at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) ~[junit-jupiter-engine-5.8.2.jar:5.8.2] at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) ~[junit-jupiter-engine-5.8.2.jar:5.8.2] at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) ~[junit-jupiter-engine-5.8.2.jar:5.8.2] at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) ~[junit-jupiter-engine-5.8.2.jar:5.8.2] at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) ~[junit-jupiter-engine-5.8.2.jar:5.8.2] at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) ~[junit-jupiter-engine-5.8.2.jar:5.8.2] at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:214) ~[junit-jupiter-engine-5.8.2.jar:5.8.2] at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.8.2.jar:1.8.2] at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:210) ~[junit-jupiter-engine-5.8.2.jar:5.8.2] at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:135) ~[junit-jupiter-engine-5.8.2.jar:5.8.2] at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:66) ~[junit-jupiter-engine-5.8.2.jar:5.8.2] at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) ~[junit-platform-engine-1.8.2.jar:1.8.2] at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.8.2.jar:1.8.2] at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) ~[junit-platform-engine-1.8.2.jar:1.8.2] at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.8.2.jar:1.8.2] at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) ~[junit-platform-engine-1.8.2.jar:1.8.2] at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.8.2.jar:1.8.2] at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) ~[junit-platform-engine-1.8.2.jar:1.8.2] at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.8.2.jar:1.8.2] at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na] at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.8.2.jar:1.8.2] at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) ~[junit-platform-engine-1.8.2.jar:1.8.2] at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.8.2.jar:1.8.2] at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) ~[junit-platform-engine-1.8.2.jar:1.8.2] at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.8.2.jar:1.8.2] at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) ~[junit-platform-engine-1.8.2.jar:1.8.2] at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.8.2.jar:1.8.2] at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) ~[junit-platform-engine-1.8.2.jar:1.8.2] at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.8.2.jar:1.8.2] at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) ~[na:na]
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
static과 테스트케이스
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 [질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]MemoryMemberRepositor클래스의 store 변수에 static이 없다면 @AfterEach가 없더라도 이전 데이터로 인한 오류(강의 11:50)가 발생하지 않았습니다. static은 클래스의 변수로 모든 인스턴스들이 공유하게 되어 static store는 @AfterEach가 없다면 오류가 발생하게 된다는 점을 이해했습니다.하지만 static이 없더라도 MemoryMemberRepositoryTest에서 MemoryMemberRepository 인스턴스를 생성했기 떄문에 인스턴스 고유의 store 변수를 가지게 되므로 각 테스트에서 서로 공유되어야 하지 않나요?디버깅을 통해 확인해본 결과 findAll()이후 findByName() 시에 store는 비어있는데 이유가 무엇인가요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
사용자 이름 수정에서 막힙니다
강의 코드를 그대로 따라가고 있지는 않고 기존에 알고 있던 내용이랑 합쳐서 코드를 작성하고 있습니다.Controller@PutMapping("/user") public void updateUserName(@RequestBody UpdateUserDto updateDto) { userService.updateUserName(updateDto.getId(), updateDto.getName()); }Dtopublic class UpdateUserDto { private long id; private String name; public long getId() { return id; } public String getName() { return name; }Repository@Override public void updateUserName(long id, String name) { String sql = "update user set name = ? where id = ?"; jdbcTemplate.update(sql, name, id); }Service@Override public void updateUserName(long id, String name) { userRepository.updateUserName(id, name); } 수정을 눌렀을 때 name은 정상적으로 값이 넘어오는데 id가 계속 0으로 넘어옵니다,,등록 시에는 DB에 id가 정상적으로 입력되고 있는데 뭐가 문제일까요?