묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Practical Testing: 실용적인 테스트 가이드
쿠키/세션은 어떻게 테스트하는지 문의드립니다!
배경회원가입을 할 때, 이메일로 인증한 회원만 회원가입이 진행되도록 하는 구현중에 있습니다.그래서, 이메일로 인증한 회원에 한해서 MAIL_VERIFIED_MEMBER 세션을 만들어서 반환하고, 회원가입할 때 MAIL_VERIFIED_MEMBER 세션이 있는지 확인하고자 합니다. 그래서, 이메일로 인증한 회원에 MAIL_VERIFIED_MEMBER 세션이 잘 들어가는지 Controller 테스트를 진행하고자 하는데, 어려움을 겪어서 질문드립니다. 이메일로 인증한 회원에 MAIL_VERIFIED_MEMBER 세션을 넣어주는 API이며, 이 api 를 테스트 하고자 합니다.@PostMapping("/email/authenticate") public ApiResponse<Void> authenticateEmail(@RequestBody @Valid EmailAuthenticationRequest request, HttpServletRequest servletRequest) { // 메일 인증한 회원에게 세션을 추가한다 if (mailService.isValidMail(request.toServiceRequest())) { HttpSession session = servletRequest.getSession(); session.setAttribute(MAIL_VERIFIED_MEMBER, true); return ApiResponse.ok(); } return ApiResponse.status(HttpStatus.BAD_REQUEST); } 테스트 코드를 아래 사진처럼 짜보았습니다.그러자, Response should contain header 'Set-Cookie' 라는 오류와 함께 테스트가 실패하게 됩니다.Postman 으로 api 를 호출하면 Set-Cookie 헤더에 JSESSIONID 값이 잘 들어 오는 것을 확인하였습니다.그러나, 테스트로 진행하면 JSESSIONID 도 무작위 값이 아닌 1, 2 로 들어오게 되어 'api 호출 후 세션이 생성되어 쿠키에 들어갔는지' 테스트하는데 어려움을 겪어 질문 드립니다...ㅠㅠ api 호출 후, 응답에 세션과 쿠키가 잘 생성 되었는지를 테스트하려면 어떻게 해야할까요..? andDo(print()) 에서 MockHttpServletRequest 의 Session Attrs 에는 세션 값이 왜 들어가 있을까요.. 해당 api 를 호출하면 세션이 아직 생성이 안되었을 것이라 생각했기 때문입니다..해당 테스트를 실행할 때의 andDo(print()) 의 결과는 다음과 같습니다. MockHttpServletRequest: HTTP Method = POST Request URI = /member/email/authenticate Parameters = {} Headers = [Content-Type:"application/json;charset=UTF-8", Content-Length:"48"] Body = {"email":"123@naver.com","authCode":"312nj5acz"} Session Attrs = {verified_member=true} MockHttpServletResponse: Status = 200 Error message = null Headers = [Content-Type:"application/json"] Content type = application/json Body = {"code":"0200","status":"OK","message":"OK","data":null} Forwarded URL = null Redirected URL = null Cookies = [] 질문이 길어 죄송합니다..그리고, 좋은 테스트 강의를 지식 공유 해주셔서 감사드립니다!!
-
해결됨입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
그 admin 뷰 페이지 할 때 / 빼고하니 오류가 납니다.
link href="https://fonts.gstatic.com" rel="preconnect"> <link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i,700,700i|Nunito:300,300i,400,400i,600,600i,700,700i|Poppins:300,300i,400,400i,500,500i,600,600i,700,700i" rel="stylesheet"> <!-- Vendor CSS Files --> <link href="assets/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet" th:href="@{/assets/vendor/bootstrap/css/bootstrap.min.css}"> <link href="assets/vendor/bootstrap-icons/bootstrap-icons.css" rel="stylesheet" th:href="@{/assets/vendor/bootstrap-icons/bootstrap-icons.css}"> <link href="assets/vendor/boxicons/css/boxicons.min.css" rel="stylesheet" th:href="@{/assets/vendor/boxicons/css/boxicons.min.css}"> <link href="assets/vendor/quill/quill.snow.css" rel="stylesheet" th:href="@{/assets/vendor/quill/quill.snow.css}"> <link href="assets/vendor/quill/quill.bubble.css" rel="stylesheet" th:href="@{/assets/vendor/quill/quill.bubble.css}"> <link href="assets/vendor/remixicon/remixicon.css" rel="stylesheet" th:href="@{/assets/vendor/remixicon/remixicon.css}"> <link href="assets/vendor/simple-datatables/style.css" rel="stylesheet" th:href="@{/assets/vendor/simple-datatables/style.css}"> 그래서 이렇게하면 뷰페이지의 창깨짐 오류는 사라지는데..docker로 넘어갈 때는 어떻게하죠?? 3. Thymeleaf 경로 확인th:href="@{/admin/assets/vendor/quill/quill.bubble.css}"와 같이 경로를 설정한 경우, 해당 경로가 올바른지 확인하세요. Spring은 경로 앞에 /가 붙어야 정적 리소스를 찾을 수 있습니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
H2 DB 연결 오류 : MemberRepositoryTest 실행 시
[질문 내용]MemberRepositoryTest 실행 시 자꾸만 오류가 나네요....... 어찌 해야할지 ㅠ 오류 :java.lang.NullPointerException: Cannot invoke "org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(java.sql.SQLException, String)" because the return value of "org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.sqlExceptionHelper()" is null at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.delegateWork(JdbcIsolationDelegate.java:116) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final]JdbcIsolationDelegate.java:116 at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.getJdbcEnvironmentUsingJdbcMetadata(JdbcEnvironmentInitiator.java:290) ~[hibernate-core-6.5.2.Final.jar:6.5.2.Final] jpashop/src/main/resources/application.yml spring: datasource: url: jdbc:h2:tcp://localhost/~/jpashop;MVCC=true username: sa password: driver-class-name: org.h2.Driver jpa: database-platform: org.hibernate.dialect.H2Dialect hibernate: ddl-auto: create #Application 실행 시점에 Entity 삭제 & 재생성 properties: hibernate: show_sql: true #생성한 SQL 이 다 보임 :) System out 을 통해 출력. format_sql: true logging: level: org.hibernate.SQL: debug #sql 을 전부 DEBUG 모드로 남긴다는 뜻. Logger 를 통해. server: port: 8092 MemberRepository.javapackage jpabook.jpashop; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.springframework.stereotype.Repository; @Repository //DAO 랑 그냥 똑같은거 public class MemberRepository { @PersistenceContext private EntityManager em; //starter-jpa-start 에 포함! // EntityManagerFactory ENTITY_MANAGER_FACTORY = Persistence.createEntityManagerFactory("JPA_DEMO");// // EntityManager em = ENTITY_MANAGER_FACTORY.createEntityManager(); public Long save(Member member) { // System.out.println("em:: "+em.toString()); System.out.println("save"); em.persist(member); //영속성. 영원히 저장한다 (=DB SAVE) return member.getId(); } //커맨드와 쿼리를 분리하는 정책 설계때문에 Id 만 리턴한다구 함 public Member find(Long id) { System.out.println("find"); return em.find(Member.class, id); } } MemberRepositoryTest.javapackage jpabook.jpashop; import org.assertj.core.api.Assertions; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.annotation.Transactional; // import org.junit.Before; @RunWith(SpringRunner.class) @SpringBootTest public class MemberRepositoryTest { @Autowired MemberRepository memberRepository; @Test @Transactional public void test() throws Exception{ //given Member member = new Member(); member.setUsername("memberA"); System.out.println(member.toString()); //when Long saveId = memberRepository.save(member); Member findMember = memberRepository.find(saveId); //then System.out.println("Then"); Assertions.assertThat(findMember.getId()).isEqualTo(findMember.getId()); } }
-
해결됨코드로 배우는 React 19 with 스프링부트 API서버
로그인 성공과 실패 처리 강의중 에러 발생하여 문의드립니다.
안녕하세요.user(1~9)@aaa.com 계정 생성 후 postman 으로 /api/member/login 호출하여 로그인 성공 후, ApiLoginSuccessHandler 으로 빠지는 부분을 확인 하려는 참입니다. 그런데 postman 으로 호출시 loadUserByUsername 에서 return 이후 successHandler 가는 도중 실패가 뜹니다. Failed to process authentication requestorg.springframework.security.authentication.BadCredentialsException: 자격 증명에 실패하였습니다. DB에 있는 패스워드와 1111을 매칭해봐도 true 로 반환됩니다. 어떤부분이 문제 일까요...?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
docker container -> 쿠버네티스 로만 클라우드 환경 구성할 수 있는 것으로 파악하고 있는데요, 수업볼때 2023년 버전만 봐도 될까요?
docker container -> 쿠버네티스 로만 클라우드 환경 구성할 수 있는 것으로 파악하고 있는데요, 수업볼때 2023년 버전만 봐도 될까요?아니면 과거 버전도 모두 봐야지만 2023년 버전을 이해할 수 있나요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
1차캐시 삭제시점이 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]-영상강의: 플러시 4분30초 부분<1차 시도>: 원하던 결과값을 얻을 수 있었습니다.(선 위로 콘솔찍힘)<2차 시도>-id: 150L은 이미 2번 find 검사 진행한 상태: flush()를 하지 않아도 결과 콘솔에는 선 위로 find결과가 출력됨. 질문: 1차 캐시 생명주기= 1번의 비즈니스 로직 이라고 설명해주셨는데(영상에서) 1번의 main문 실행이 1번의 로직이 인줄 알았어요. 정확히 1번의 비즈니스 로직이 어떤걸까요? (+ 위 사진 상황에서 캐시가 제거되는 시점을 어떻게 만들면 나타날까요?)
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
주키퍼 서버 시작 시 포트 중복 오류가 뜹니다
어제 주키퍼 서버, 카프카 서버, 카프카 커넥트까지 정상적으로 동작했고 DB에서 데이터 등록 시 토픽 생성이 안되어 모두 삭제하고 재설치, 그리고 강사님이 올려주신 파일로도 해봤는데 주키퍼 서버 기동하면 포트 중복 오류가 뜹니다. 사용중인 포트도 없고 기본 포트번호를 바꿔봐도 똑같은 오류가 나오고 있습니다..[2024-09-01 22:44:51,121] INFO Server environment:java.io.tmpdir=C:\Users\PC\AppData\Local\Temp\ (org.apache.zookeeper.server.ZooKeeperServer) [2024-09-01 22:44:51,122] INFO Server environment:java.compiler=<NA> (org.apache.zookeeper.server.ZooKeeperServer) [2024-09-01 22:44:51,122] INFO Server environment:os.name=Windows 10 (org.apache.zookeeper.server.ZooKeeperServer) [2024-09-01 22:44:51,123] INFO Server environment:os.arch=amd64 (org.apache.zookeeper.server.ZooKeeperServer) [2024-09-01 22:44:51,127] INFO Server environment:os.version=10.0 (org.apache.zookeeper.server.ZooKeeperServer) [2024-09-01 22:44:51,128] INFO Server environment:user.name=PC (org.apache.zookeeper.server.ZooKeeperServer) [2024-09-01 22:44:51,128] INFO Server environment:user.home=C:\Users\PC (org.apache.zookeeper.server.ZooKeeperServer) [2024-09-01 22:44:51,129] INFO Server environment:user.dir=C:\Work\kafka_2.12-3.4.0 (org.apache.zookeeper.server.ZooKeeperServer) [2024-09-01 22:44:51,130] INFO Server environment:os.memory.free=494MB (org.apache.zookeeper.server.ZooKeeperServer) [2024-09-01 22:44:51,131] INFO Server environment:os.memory.max=512MB (org.apache.zookeeper.server.ZooKeeperServer) [2024-09-01 22:44:51,131] INFO Server environment:os.memory.total=512MB (org.apache.zookeeper.server.ZooKeeperServer) [2024-09-01 22:44:51,132] INFO zookeeper.enableEagerACLCheck = false (org.apache.zookeeper.server.ZooKeeperServer) [2024-09-01 22:44:51,132] INFO zookeeper.digest.enabled = true (org.apache.zookeeper.server.ZooKeeperServer) [2024-09-01 22:44:51,133] INFO zookeeper.closeSessionTxn.enabled = true (org.apache.zookeeper.server.ZooKeeperServer) [2024-09-01 22:44:51,134] INFO zookeeper.flushDelay=0 (org.apache.zookeeper.server.ZooKeeperServer) [2024-09-01 22:44:51,135] INFO zookeeper.maxWriteQueuePollTime=0 (org.apache.zookeeper.server.ZooKeeperServer) [2024-09-01 22:44:51,135] INFO zookeeper.maxBatchSize=1000 (org.apache.zookeeper.server.ZooKeeperServer) [2024-09-01 22:44:51,136] INFO zookeeper.intBufferStartingSizeBytes = 1024 (org.apache.zookeeper.server.ZooKeeperServer) [2024-09-01 22:44:51,138] INFO Weighed connection throttling is disabled (org.apache.zookeeper.server.BlueThrottle) [2024-09-01 22:44:51,140] INFO minSessionTimeout set to 6000 (org.apache.zookeeper.server.ZooKeeperServer) [2024-09-01 22:44:51,140] INFO maxSessionTimeout set to 60000 (org.apache.zookeeper.server.ZooKeeperServer) [2024-09-01 22:44:51,143] INFO Response cache size is initialized with value 400. (org.apache.zookeeper.server.ResponseCache) [2024-09-01 22:44:51,143] INFO Response cache size is initialized with value 400. (org.apache.zookeeper.server.ResponseCache) [2024-09-01 22:44:51,145] INFO zookeeper.pathStats.slotCapacity = 60 (org.apache.zookeeper.server.util.RequestPathMetricsCollector) [2024-09-01 22:44:51,145] INFO zookeeper.pathStats.slotDuration = 15 (org.apache.zookeeper.server.util.RequestPathMetricsCollector) [2024-09-01 22:44:51,146] INFO zookeeper.pathStats.maxDepth = 6 (org.apache.zookeeper.server.util.RequestPathMetricsCollector) [2024-09-01 22:44:51,147] INFO zookeeper.pathStats.initialDelay = 5 (org.apache.zookeeper.server.util.RequestPathMetricsCollector) [2024-09-01 22:44:51,147] INFO zookeeper.pathStats.delay = 5 (org.apache.zookeeper.server.util.RequestPathMetricsCollector) [2024-09-01 22:44:51,148] INFO zookeeper.pathStats.enabled = false (org.apache.zookeeper.server.util.RequestPathMetricsCollector) [2024-09-01 22:44:51,151] INFO The max bytes for all large requests are set to 104857600 (org.apache.zookeeper.server.ZooKeeperServer) [2024-09-01 22:44:51,152] INFO The large request threshold is set to -1 (org.apache.zookeeper.server.ZooKeeperServer) [2024-09-01 22:44:51,153] INFO Created server with tickTime 3000 minSessionTimeout 6000 maxSessionTimeout 60000 clientPortListenBacklog -1 datadir \tmp\zookeeper\version-2 snapdir \tmp\zookeeper\version-2 (org.apache.zookeeper.server.ZooKeeperServer) [2024-09-01 22:44:51,197] INFO Using org.apache.zookeeper.server.NIOServerCnxnFactory as server connection factory (org.apache.zookeeper.server.ServerCnxnFactory) [2024-09-01 22:44:51,199] WARN maxCnxns is not configured, using default value 0. (org.apache.zookeeper.server.ServerCnxnFactory) [2024-09-01 22:44:51,201] INFO Configuring NIO connection handler with 10s sessionless connection timeout, 2 selector thread(s), 24 worker threads, and 64 kB direct buffers. (org.apache.zookeeper.server.NIOServerCnxnFactory) [2024-09-01 22:44:51,208] INFO binding to port 0.0.0.0/0.0.0.0:2181 (org.apache.zookeeper.server.NIOServerCnxnFactory) [2024-09-01 22:44:51,210] ERROR Unexpected exception, exiting abnormally (org.apache.zookeeper.server.ZooKeeperServerMain) java.net.BindException: Address already in use: bind at java.base/sun.nio.ch.Net.bind0(Native Method) at java.base/sun.nio.ch.Net.bind(Net.java:555) at java.base/sun.nio.ch.ServerSocketChannelImpl.netBind(ServerSocketChannelImpl.java:337) at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:294) at java.base/sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:89) at java.base/sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:81) at org.apache.zookeeper.server.NIOServerCnxnFactory.configure(NIOServerCnxnFactory.java:676) at org.apache.zookeeper.server.ZooKeeperServerMain.runFromConfig(ZooKeeperServerMain.java:158) at org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:112) at org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:67) at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:140) at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:90) [2024-09-01 22:44:51,214] INFO ZooKeeper audit is disabled. (org.apache.zookeeper.audit.ZKAuditProvider) [2024-09-01 22:44:51,218] ERROR Exiting JVM with code 1 (org.apache.zookeeper.util.ServiceUtils)
-
해결됨실전! Querydsl
fetch join 할 때 별칭
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]fetch join을 할 때 별칭을 사용하는 것을 지양하라고 알고 있는데, @Test public void fetchJoinUse() throws Exception { em.flush(); em.clear(); Member findMember = queryFactory .selectFrom(member) .join(member.team, team).fetchJoin() .where(member.username.eq("member1")) .fetchOne(); }.join에서 2번째 인자로 team을 주면 별칭을 주는 것 아닌가요?? QueryDsl에서는 상관이 없는 걸까요?
-
미해결실전! Querydsl
Test에서 QHello import 안되시는 분들 보시라고 올려요
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 질문은 아닌데 제 경우 좀 헤맸어서 도움됐으면 하는 마음에서 올립니다.settings or properties -> build tools -> gradle 에서 설정한 Build and RunGradle에서 Intellij로 변경한 부분 Gradle로 바꾸면 build -> generated -> sources -> ... -> main -> ... -> QHello여기서 main 폴더가 root 폴더가 되면서 import 가능한 상태로 변합니다 참고하세요~
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
질문있습니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]컨트롤러에서 모델에 addAttribute안해도 이미 모델에 들어가있는 경우가 있던데 이런것들고 명시적으로 model 에 넣어서 보내주는게 좋을까요? 아니면 코드 깔끔하게 그냥 없애는게 좋을까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티를 반환받을때 어디서 response용 dto로 바꿔주는게 좋나요?
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]파라미터를 받을 때는 컨트롤러에서 메서드 실행될때 이미 dto로 받는건 알겠는데 dto를 저장하기 전에 엔티티로 바꾸는건 어디서 보통 하는건가요? 컨트롤러인가요 서비스인가요? 그리고 리포지토리에서 받아온 엔티티는 어디서 response용 dto로 바꿔주는 건가요? service에서 처리하고 컨트롤러로 보내는 건가요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
세팅부터 안되고있네요.....
9월 01, 2024 7:00:54 오전 org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator getJdbcEnvironmentUsingJdbcMetadataWARN: HHH000342: Could not obtain connection to query metadatajava.lang.IllegalStateException: Cannot get a connection as the driver manager is not properly initialized at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.getConnection(DriverManagerConnectionProviderImpl.java:259) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:428) at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.delegateWork(JdbcIsolationDelegate.java:61) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.getJdbcEnvironmentUsingJdbcMetadata(JdbcEnvironmentInitiator.java:276) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:107) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:68) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:130) at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:238) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:215) at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:52) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:136) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:247) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:215) at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.convertSqlException(BasicConnectionCreator.java:132) at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:43) at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:61) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.addConnections(DriverManagerConnectionProviderImpl.java:499) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.<init>(DriverManagerConnectionProviderImpl.java:372) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections$Builder.build(DriverManagerConnectionProviderImpl.java:550) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildPool(DriverManagerConnectionProviderImpl.java:102) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:82) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:136) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:247) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:215) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.java:395) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.getJdbcEnvironmentUsingJdbcMetadata(JdbcEnvironmentInitiator.java:262) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:107) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:68) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:130) at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:238) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:215) at org.hibernate.boot.model.relational.Database.<init>(Database.java:45) at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:223) at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:191) at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:170) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1432) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1503) at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:55) at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:80) at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:55) at hellojpa.JpaMain.main(JpaMain.java:9)9월 01, 2024 7:00:54 오전 org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl constructDialectWARN: HHH90000025: H2Dialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)9월 01, 2024 7:00:54 오전 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptionsWARN: SQL Error: 90048, SQLState: 900489월 01, 2024 7:00:54 오전 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptionsERROR: Unsupported database file version or invalid file header in file "C:/Users/user/test.mv.db" [90048-224]Exception in thread "main" org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] due to: Error calling Driver#connect [Unsupported database file version or invalid file header in file "C:/Users/user/test.mv.db" [90048-224]] [null] at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:276) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:238) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:215) at org.hibernate.boot.model.relational.Database.<init>(Database.java:45) at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:223) at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:191) at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:170) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1432) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1503) at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:55) at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:80) at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:55) at hellojpa.JpaMain.main(JpaMain.java:9)Caused by: org.hibernate.exception.JDBCConnectionException: Error calling Driver#connect [Unsupported database file version or invalid file header in file "C:/Users/user/test.mv.db" [90048-224]] [null] at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:51) at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:58) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:108) at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.convertSqlException(BasicConnectionCreator.java:134) at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:43) at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:61) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.addConnections(DriverManagerConnectionProviderImpl.java:499) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections.<init>(DriverManagerConnectionProviderImpl.java:372) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections$Builder.build(DriverManagerConnectionProviderImpl.java:550) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildPool(DriverManagerConnectionProviderImpl.java:102) at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:82) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:136) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:247) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:215) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.java:395) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.getJdbcEnvironmentUsingJdbcMetadata(JdbcEnvironmentInitiator.java:262)이런식으로 오류가뜨는데 뭐가 문제인지 모르겟네요. 세팅부터 문제가 생겼는데 해결이안돼 공부를 할수가 없어 너무 답답합니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
컨트롤 안에 DTO
소스코드를 보면 request라 response dto를 따로 격리시키는게 아니라 컨트롤러 소스코드 내에 정의하셨는데 이건 분리하는 게 맞지 않나요...? 혹시 컨트롤러 안에 정의한 이유가 있을까요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
Deadlock 발생 관련 질문이 있습니다!!
[질문 내용]안녕하세요. 강의와 조금 다른 주제일 수 있으나 도움을 얻을 수 있지 않을까 하여 질문 남깁니다!!토이 프로젝트 진행중 사용자의 최근 접속시간을 주기적으로 업데이트 시킬 필요가 있어 Spring Security 인가 필터에서 현재 로그인한 유저의 최근 접속시간을 업데이트하는 쿼리를 날리도록 작성했습니다. 이 때 Deadlock이 발생하였습니다. 현재까지 제가 찾아본 바로는 DispatcherServelt 전에는 톰캣 스레드가 락을 점유하고 이후에는 IO 스레드가 락을 점유하여 그렇다는 정보를 찾을 수 있었는데요. 정확히 이해가 안가 여기에 여쭤봅니다 ㅠㅠ. 데드락이 발생하는 원인에 어떤것이 있을까요? 참고로 인가 필터에서는 jpa 리포지토리를 의존성 주입받아 사용해서 쿼리를 날렸습니다. (현재는 이 방법 자체가 데르락을 떠나 비효율적이라 판단하여 AOP로 해결한 상태입니다. 사실 이것도 효율적인 방법인지는 잘 모르겠습니다...)
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
spring cloud gateway 에서 eureka의 용도
강사님 강의 잘듣고 있습니다.한가지 궁금점은 유레카 서버를 별도로 올리지 않아도 api-gate-way에서 first-service, secound-service라우팅 및 필터가 가능한데 이떄 유레카의 용도가 무엇인기 궁금합니다. 유레카 서버로 부터 연결된 유레카 클라이언트 정보를 얻는다고 했는데... 유레카 서버를 off해도 routing은 정상적으로 이루어지더라구요 .. 제가 뭔가 잘못 이해하고 있는 부분이 있을까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
로그
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]쿼리 파라미터를 로그로 남기면 어떤 점이 좋은 건가요??
-
해결됨Practical Testing: 실용적인 테스트 가이드
통합테스트/인수테스트/E2E 테스트의 차이점이 무엇일까요?
안녕하세요! 강사님. 저번에 상세하게 답변해주셔서 너무 감사했습니다! 말씀해주신 인수 테스트에 대해서 알아보고, RestAssured를 사용해서 테스트 적용해보았고, 테스트 무사히 성공 했습니다. 감사합니다! 다만, 적용해보면서 또 여러가지 궁금점이 생겼어요. 질문은 총 5가지 입니다!1. RestAssured를 사용해서 API 테스트를 할 때 DB까지 테스트 하는 테스트를 보통 통합테스트라고 하는건가요? 그렇다면 E2E 테스트는 실무에서 보통 어떻게 수행하는지 궁금합니다. 2.통합 테스트라고 하면 모듈간의 통합을 검증하기 위함이라고 하던데, 개발 환경에서 실행되는 테스트일까요? 아니면 실제 운영환경과 동일한 환경에서 테스트를 수행해야 되는걸까요? 3. 인수테스트도 통합테스트에 속하는 개념인걸까요? 4. 통합테스트(인수테스트)에서 실패 케이스도 작성해야 하는 걸까요? 5. 다들 RestAssured, MockMvc를 사용해서 인수테스트를 하던데, 그럼 통합테스트는 어떤걸 사용하는지 궁금합니다. (찾아보니 @SpringBootTest가 통합 테스트는 아니라고 해서요!)
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
엔티티 클래스 만들기 챕터에서 테이블 왜 두개 만들어진 건가요?
엔티티 클래스 만들기 챕터에서 테이블 왜 두개 만들어진 건가요? 엔티티 클래스 만들기 챕터 8분 36초에서 테이블이 왜 두개 만들어 졌나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
h2 database 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]계속 이런 오류가 떠요... 어떻게 해결할 수 있을까요 콘솔을 사용해서 jpashop.mv.db 파일을 만들면 IO Exception: null [90028-199]이런 오류가 발생합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
통신해서 받는 것과 만들어서 사용하는 것
안녕하세요.변경감지 기능을 사용하기 위해서 데이터 베이스 통신해서 데이터를 가져와서 쓰는 것과 기존에 set으로 BookForm 객체 만드는 것에 대해서 여쭤보고 싶은게 있습니다. 데이터베이스 통신이 한 번 더 일어나는데 위험성이 증가하거나 하진 않나요..? 옛날에 사수한테 웬만하면 데이터베이스 통신하는 일을 줄이라고 했던 일이 기억나서 여쭤봅니다