묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
Mybatis에서 Connection의 생명주기 및 Pooling Proxy객체
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]제목과 같습니다.Mybatis에서의 Connection 생명주기와커넥션풀을 연동했을때의 Connection 생명주기가 궁금합니다.Mybatis에서 커넥션풀을 적용한다고 가정합니다.만약 하나의 기능 즉, 하나의 쓰레드 단위로 쿼리를 호출하는 매퍼 메소드를 4번 호출한다면 이때 커넥션은 Mapper를 통해 호출하는 DAO 메소드 단위로 Pool에서 4번 꺼내는것인지?만약 그렇다면, 4번 꺼내는 객체들이 앞서 배운 내용처럼 처음 Pool에서 꺼내서 사용하고 반환한 동일한 Connection 객체를 다시 꺼내어 재사용 하는건지 궁금합니다!또한 Transcation Rollback 되는것도 동일한 Connection, 동일한 Session에 의한것과 연관성이 있는건지도 궁금합니다.제가 이해한 부분은 아래와 같습니다.커넥션풀을 사용하면 커넥션풀에 각각 다른 커넥션이 생성됨(10개)하나의 커넥션당 하나의 세션이 생성되며, 커넥션의 생명주기에 종속되어 있다.세션은 트랜잭션을 시작하고 커밋을 관리한다.커넥션 풀을 사용하면 하나의 스레드내에 각각의 쿼리에 대한 작업 단위가 동일한 커넥션을 반환받는다.커넥션이 동일하다면 세션도 동일하므로 하나의 트랜잭션으로 관리된다?이게 맞을까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
시스템 os locale 과 intellij default locale이 다릅니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]intellij 에서 로케일 티폴트를 찍으면 en-us라고 나오는데시스템 os locale은 한국입니다.locale.korea 라고 했을 때 messages_kr 파일이 없어 messages.properties(디폴트)를 먼저 찾아 테스트가 동작한다는 설명은 이해했습니다. (locale null 대신 locale.korea로 테스트성공) 하지만 null값으로 주게 되면 시스템 os 를 먼저 찾고(저의 경우 kr) -> messages_kr이 없으니 그대로 messages.properties를 찾을 줄 알았으나 messages_en.properties를 계속해서 참조했습니다. (아래) default값을 찍어보니 맨 위 사진처럼 intellij에서 디폴트값을 us로 인식하고 있었습니다. 혹시 어떻게 해결해야 할까요?
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
커넥션 생성
초기에 트랜잭션이 시작되면 커넥션은 누가 얻어오는건가요?Repository에서DataSourceUtils.getConnection(dataSource); 실행되고 doGetConnection 메서드에서ConnectionHolder conHolder = (ConnectionHolder) TransactionSynchronizationManager.getResource(dataSource); Connection con = fetchConnection(dataSource);이렇게 얻어오는거같은데 트랜잭션 동기화매니저가 커넥션을 얻어오고 이 커넥션을 트랜잭션 매니저가 사용하는건가요??
-
미해결토비의 스프링 부트 - 이해와 원리
http api test
http -v 명령어가 작동이 안되는데 혹시 제가 잘못하고 있는 것이 있을까요..?
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
SQLExceptionTranslator DI 관련 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]1-1. 선생님 방식 코드 (MemberRepositoryV4_2)private final DataSource dataSource; private final SQLExceptionTranslator exTranslator; @Autowired public MemberRepositoryV4_2(DataSource dataSource){ this.dataSource = dataSource; this.exTranslator = new SQLErrorCodeSQLExceptionTranslator(dataSource); } 1-2. 선생님 방식 코드 (MemberServiceV4Test)@TestConfiguration static class TestConfig{ @Bean public MemberRepository memberRepository(){ return new MemberRepositoryV4_2(dataSource) } } 2-1.제가 생각한 방식 코드 (MemberRepositoryV4_2)private final DataSource dataSource; private final SQLExceptionTranslator exTranslator; @Autowired public MemberRepositoryV4_2(DataSource dataSource, SQLExceptionTranslator exTranslator) { this.dataSource = dataSource; this.exTranslator = exTranslator; } 2-2.제가 생각한 방식 코드(MemberServiceV4Test)@TestConfiguration static class TestConfig{ @Bean public SQLExceptionTranslator sqlExceptionTranslator(){ return new SQLErrorCodeSQLExceptionTranslator(dataSource); } @Bean public MemberRepository memberRepository(){ return new MemberRepositoryV4_2(dataSource , sqlExceptionTranslator()); } }안녕하세요 "스프링 예외 추상화 적용" 관련 강의보다 궁금한 점이 생겨 질문드립니다. 지금까지 코드 설계 시에 수동 빈 등록을 하는 경우 해당 영역은 설정 영역으로 간주되어, @Configuration을 사용하는 설정 영역 / 애플리케이션 영역 으로 나누어서 설계하는 것이 객체지향적인 관점에서 훨씬 좋은 코드라고 이해하고 설계해왔습니다. 즉 TestConfig와 같이 수동 빈 등록을 해주는 설정 영역 코드가 테스트 상황이 아닌 실제 상황이라고 가정하였을 때, 저는 2-2. 제가 구현한 코드 처럼 SQLErrorCodeSQLExceptionTranslator을 설정 영역(TestConfig)에서 수동 빈 등록을 해주고 2-1.제가 구현한 코드 처럼 리포지토리(MemberRepositoryV4_2) 에서 해당 객체를 생성자의 파라메터로 DI 받는 형태로 구현하였습니다. 하지만 1-1. 선생님 코드에선 SQLErrorCodeSQLExceptionTranslator 객체를 직접 리포지토리에서 생성하여 변수에 주입하고 1-2. 선생님 코드 처럼 설정 영역에선 파라메터의 변경 없이 그저 구현체만 MemberRepositoryV4_1 에서 MemberRepositoryV4_2로 갈아끼우는 것을 확인할 수 있었습니다. [핵심 질문]선생님께서 1-1 및 1-2 와 같이 코드를 구현하신 이유가 1-2의 설정 영역 코드(TestConfig)에서 서비스에선 MemberRepository라는 인터페이스를 구현하니, 파라메터의 변경 없이 그냥 구현체를 MemberRepositoryV4_1 => MemberRepositoryV4_2 로 갈아끼울 수 있다는 것을 보여주시기 위해 하신 건지 아니면 SQLErrorCodeSQLExceptionTranslator 객체의 의존관계 주입은 선생님 방식대로 하는 게 맞는 건지 궁금해서 여쭤봅니다 !
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
주문 조회V3 에서 쿼리가 4개 나온다고 하는데, 2개만 나옵니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. @GetMapping("/api/v3/orders") public List<OrderDto> orderV3() { List<Order> orders = orderRepository.findAllWithItem(); for (Order order: orders) { System.out.println("order ref = " + order + " id = " + order.getId()); } List<OrderDto> result = orders.stream() .map(o -> new OrderDto(o)) .collect(Collectors.toList()); return result; } ... public List<Order> findAllWithItem() { return entityManager.createQuery( "select o from Order o" + " join fetch o.member m" + " join fetch o.delivery d" + " join fetch o.orderItems oi" + " join fetch oi.item i", Order.class) .getResultList(); }이렇게 한 다음 v3 에게 요청을 넣었습니다.그 결과selecto1_0.order_id,d1_0.delivery_id,d1_0.city,d1_0.street,d1_0.zipcode,d1_0.status,m1_0.member_id,m1_0.city,m1_0.street,m1_0.zipcode,m1_0.username,o1_0.order_date,oi1_0.order_id,oi1_0.order_item_id,oi1_0.count,i1_0.item_id,i1_0.dtype,i1_0.name,i1_0.price,i1_0.stock_quantity,i1_0.artist,i1_0.etc,i1_0.author,i1_0.isbn,i1_0.actor,i1_0.director,oi1_0.order_price,o1_0.statusfromorders o1_0joinmember m1_0on m1_0.member_id=o1_0.member_idjoindelivery d1_0on d1_0.delivery_id=o1_0.delivery_idjoinorder_item oi1_0on o1_0.order_id=oi1_0.order_idjoinitem i1_0on i1_0.item_id=oi1_0.item_idorder ref = jpabook.jpashop.domain.Order@801a84d id = 1order ref = jpabook.jpashop.domain.Order@7be83ead id = 2 다음과 같은 SQL 쿼리를 보냈구요.그런데 4개가 아니라 2개라서 문의를 드립니다. 그런데 H2 DB에서 해당 쿼리를 입력하면 4개가 잘나옵니다.또한 포스트맨으로 받은 요청도 2개가 출력됩니다.[ { "orderId": 1, "name": "userA", "orderDate": "2024-03-18T23:29:35.545094", "orderStatus": "ORDER", "address": { "city": "서울", "street": "1", "zipcode": "11111" }, "orderItems": [ { "itemName": "JPA1 Book", "orderPrice": 10000, "count": 1 }, { "itemName": "JPA2 Book", "orderPrice": 20000, "count": 2 } ] }, { "orderId": 2, "name": "userB", "orderDate": "2024-03-18T23:29:35.555094", "orderStatus": "ORDER", "address": { "city": "부산", "street": "2", "zipcode": "22222" }, "orderItems": [ { "itemName": "Spring1 Book", "orderPrice": 20000, "count": 3 }, { "itemName": "Spring2 Book", "orderPrice": 40000, "count": 2 } ] } ]어떠한 것이 잘못되었는지 궁금합니다.
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
HTML코드 및 강의 중간자료들
우선 강의중에 보여주셨던 HTML코드들에 대해서 행방을 알수가 없고 키를 강의마다 알려주신다는데 언제 알려주시는지 모르겠습니다.그래서 완성되어있던 파일에 있는 HTML파일들을 끌어다가 다시 완성시켰는데 코드자체에 CSS,Js가 적용되지 않고 에러가 뜨기도 합니다.Caused by: org.attoparser.ParseException: Exception evaluating SpringEL expression: "!hasNotification" (template: "fragments.html" - line 129, col 24) 혹시 최신화된 코드나 강의 진행도에 따른 코드 접근 방법이 있을까요...? 물론 제가 옛날 강의를 듣는것이다 보니 감수해야 하는 부분이겠지만 하나하나 알아가다보니 강의를 듣는 시간도 늘어지고 지치기 시작하는거 같습니다 시간이 지나면서 바뀌는 부분에 대해서 조금이라도 안내를 해주시거나, 주의할 부분이라던가 아니면 참고할만한 내용들을 추가해주시면 감사하겠습니다.
-
미해결
./gradlew build FAIL
프로젝트 생성 프로젝트 Structure 빌드 command 입력시 오류내용 PS C:\Users\82107\spring\demo> ./gradlew build FAILURE: Build failed with an exception. * What went wrong: A problem occurred configuring root project 'demo'. > Could not resolve all files for configuration ':classpath'. > Could not resolve org.springframework.boot:spring-boot-gradle-plugin:3.2.3. Required by: project : > org.springframework.boot:org.springframework.boot.gradle.plugin:3.2.3 > No matching variant of org.springframework.boot:spring-boot-gradle-plugin:3.2.3 was found. The consumer was configured to find a library for use during runtime, compatible with Java 8, packaged as a jar, and its dependencies declared externally, as well as attribute 'org.gradle.plugin.api-version' with value '8.6' but: - Variant 'apiElements' capability org.springframework.boot:spring-boot-gradle-plugin:3.2.3 declares a library, packaged as a jar, and its dependencies declared externally: - Incompatible because this component declares a component for use during compile-time, compatible with Java 17 and the consumer needed a component for use during runtime, compatible with Java 8 - Other compatible attribute: - Doesn't say anything about org.gradle.plugin.api-version (required '8.6') - Variant 'javadocElements' capability org.springframework.boot:spring-boot-gradle-plugin:3.2.3 declares a component for use during runtime, and its dependencies declared externally: - Incompatible because this component declares documentation and the consumer needed a library - Other compatible attributes: - Doesn't say anything about its target Java version (required compatibility with Java 8) - Doesn't say anything about its elements (required them packaged as a jar) - Doesn't say anything about org.gradle.plugin.api-version (required '8.6') - Variant 'mavenOptionalApiElements' capability org.springframework.boot:spring-boot-gradle-plugin-maven-optional:3.2.3 declares a library, packaged as a jar, and its dependencies declared externally: - Incompatible because this component declares a component for use during compile-time, compatible with Java 17 and the consumer needed a component for use during runtime, compatible with Java 8 - Other compatible attribute: - Doesn't say anything about org.gradle.plugin.api-version (required '8.6') - Variant 'mavenOptionalRuntimeElements' capability org.springframework.boot:spring-boot-gradle-plugin-maven-optional:3.2.3 declares a library for use during runtime, packaged as a jar, and its dependencies declared externally: - Incompatible because this component declares a component, compatible with Java 17 and the consumer needed a component, compatible with Java 8 - Other compatible attribute: - Doesn't say anything about org.gradle.plugin.api-version (required '8.6') - Variant 'runtimeElements' capability org.springframework.boot:spring-boot-gradle-plugin:3.2.3 declares a library for use during runtime, packaged as a jar, and its dependencies declared externally: - Incompatible because this component declares a component, compatible with Java 17 and the consumer needed a component, compatible with Java 8 - Other compatible attribute: - Doesn't say anything about org.gradle.plugin.api-version (required '8.6') - Variant 'sourcesElements' capability org.springframework.boot:spring-boot-gradle-plugin:3.2.3 declares a component for use during runtime, and its dependencies declared externally: - Incompatible because this component declares documentation and the consumer needed a library - Other compatible attributes: - Doesn't say anything about its target Java version (required compatibility with Java 8) - Doesn't say anything about its elements (required them packaged as a jar) - Doesn't say anything about org.gradle.plugin.api-version (required '8.6') * Try: > Review the variant matching algorithm at https://docs.gradle.org/8.6/userguide/variant_attributes.html#sec:abm_algorithm. > No matching variant errors are explained in more detail at https://docs.gradle.org/8.6/userguide/variant_model.html#sub:variant-no-match. > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org. BUILD FAILED in 2s 비슷한 질문들을 확인하였는데, 버전 문제인 것 같긴한데, 현재 JDK18버전을 사용하고 있어서 그런것인가요?17버전으로 바꾸면 되나요? 만약에 그렇다고 한다면, 설정부분에서 어디어디를 바꿔주어야하나요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
공통처리 기능이 어느것을 말하는 건가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]영한님꼐서 말씀햏주신 한계에 공통처리가 있다고 하셨는데 지금까지 한 코드에서 공통처리가 무엇이며 공통처리라는것이 무엇을 말씀해주시는건지 잘 모르겠습니다.RequestDispatcher dispatcher = request.getRequestDispaTcher(view path)이 코드 부분이 공통처리 인가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
스프링 프로젝트 첫 실행부터 계속 오류가 나요 ㅠㅠ 제발 도와주세요
안녕하세요 제목 그대로 start.spring.io에서 강의 내용 따라 그대로 스프링 프로젝트를 생성하고 실행하여 첫 빌드를 하는데 계속 오류가 납니다.. 이틀 동안 너무 스트레스 받다가 도저히 혼자 해결이 안 되어 질문드려요. 제발 도와주십쇼 ㅠㅠ1번 오류 세부 내용Download https://services.gradle.org/distributions/gradle-8.6-bin.zip, took 23 s 799 ms Starting Gradle Daemon... Gradle Daemon started in 1 s 867 ms FAILURE: Build failed with an exception. * What went wrong: Multiple build operations failed. Could not move temporary workspace (C:\Users\tjmg7\.gradle\caches\transforms-4\0a561266a2b57efc5da5664bb0d7e3fc-9b249c29-1a91-4470-b675-465ff91418e8) to immutable location (C:\Users\tjmg7\.gradle\caches\transforms-4\0a561266a2b57efc5da5664bb0d7e3fc) Could not move temporary workspace (C:\Users\tjmg7\.gradle\caches\transforms-4\7b013786ef742a9c8c87e3aaf3d90280-d74ea8fc-73d7-4578-9c43-b8cd0558405c) to immutable location (C:\Users\tjmg7\.gradle\caches\transforms-4\7b013786ef742a9c8c87e3aaf3d90280) Could not move temporary workspace (C:\Users\tjmg7\.gradle\caches\transforms-4\1cb4a041ffa70c8710c09b3490f08d27-e5e2c8d8-9b10-4d94-aa86-5ed8eafd0641) to immutable location (C:\Users\tjmg7\.gradle\caches\transforms-4\1cb4a041ffa70c8710c09b3490f08d27) Could not move temporary workspace (C:\Users\tjmg7\.gradle\caches\transforms-4\09e5b33217636222c215e9ce4b40ac0d-888af752-9ab7-43e9-bc4d-c9089f87eee4) to immutable location (C:\Users\tjmg7\.gradle\caches\transforms-4\09e5b33217636222c215e9ce4b40ac0d) > Could not move temporary workspace (C:\Users\tjmg7\.gradle\caches\transforms-4\0a561266a2b57efc5da5664bb0d7e3fc-9b249c29-1a91-4470-b675-465ff91418e8) to immutable location (C:\Users\tjmg7\.gradle\caches\transforms-4\0a561266a2b57efc5da5664bb0d7e3fc) > Could not move temporary workspace (C:\Users\tjmg7\.gradle\caches\transforms-4\7b013786ef742a9c8c87e3aaf3d90280-d74ea8fc-73d7-4578-9c43-b8cd0558405c) to immutable location (C:\Users\tjmg7\.gradle\caches\transforms-4\7b013786ef742a9c8c87e3aaf3d90280) > Could not move temporary workspace (C:\Users\tjmg7\.gradle\caches\transforms-4\1cb4a041ffa70c8710c09b3490f08d27-e5e2c8d8-9b10-4d94-aa86-5ed8eafd0641) to immutable location (C:\Users\tjmg7\.gradle\caches\transforms-4\1cb4a041ffa70c8710c09b3490f08d27) > Could not move temporary workspace (C:\Users\tjmg7\.gradle\caches\transforms-4\09e5b33217636222c215e9ce4b40ac0d-888af752-9ab7-43e9-bc4d-c9089f87eee4) to immutable location (C:\Users\tjmg7\.gradle\caches\transforms-4\09e5b33217636222c215e9ce4b40ac0d) * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org. CONFIGURE FAILED in 14s 2번 오류 세부 내용C:\Users\tjmg7\.gradle\caches\transforms-4\0a561266a2b57efc5da5664bb0d7e3fc-9b249c29-1a91-4470-b675-465ff91418e8 -> C:\Users\tjmg7\.gradle\caches\transforms-4\0a561266a2b57efc5da5664bb0d7e3fc 3번 오류 세부 내용Multiple build operations failed. Could not move temporary workspace (C:\Users\tjmg7\.gradle\caches\transforms-4\0a561266a2b57efc5da5664bb0d7e3fc-9b249c29-1a91-4470-b675-465ff91418e8) to immutable location (C:\Users\tjmg7\.gradle\caches\transforms-4\0a561266a2b57efc5da5664bb0d7e3fc) Could not move temporary workspace (C:\Users\tjmg7\.gradle\caches\transforms-4\7b013786ef742a9c8c87e3aaf3d90280-d74ea8fc-73d7-4578-9c43-b8cd0558405c) to immutable location (C:\Users\tjmg7\.gradle\caches\transforms-4\7b013786ef742a9c8c87e3aaf3d90280) Could not move temporary workspace (C:\Users\tjmg7\.gradle\caches\transforms-4\1cb4a041ffa70c8710c09b3490f08d27-e5e2c8d8-9b10-4d94-aa86-5ed8eafd0641) to immutable location (C:\Users\tjmg7\.gradle\caches\transforms-4\1cb4a041ffa70c8710c09b3490f08d27) Could not move temporary workspace (C:\Users\tjmg7\.gradle\caches\transforms-4\09e5b33217636222c215e9ce4b40ac0d-888af752-9ab7-43e9-bc4d-c9089f87eee4) to immutable location (C:\Users\tjmg7\.gradle\caches\transforms-4\09e5b33217636222c215e9ce4b40ac0d) > Could not move temporary workspace (C:\Users\tjmg7\.gradle\caches\transforms-4\0a561266a2b57efc5da5664bb0d7e3fc-9b249c29-1a91-4470-b675-465ff91418e8) to immutable location (C:\Users\tjmg7\.gradle\caches\transforms-4\0a561266a2b57efc5da5664bb0d7e3fc) > Could not move temporary workspace (C:\Users\tjmg7\.gradle\caches\transforms-4\7b013786ef742a9c8c87e3aaf3d90280-d74ea8fc-73d7-4578-9c43-b8cd0558405c) to immutable location (C:\Users\tjmg7\.gradle\caches\transforms-4\7b013786ef742a9c8c87e3aaf3d90280) > Could not move temporary workspace (C:\Users\tjmg7\.gradle\caches\transforms-4\1cb4a041ffa70c8710c09b3490f08d27-e5e2c8d8-9b10-4d94-aa86-5ed8eafd0641) to immutable location (C:\Users\tjmg7\.gradle\caches\transforms-4\1cb4a041ffa70c8710c09b3490f08d27) > Could not move temporary workspace (C:\Users\tjmg7\.gradle\caches\transforms-4\09e5b33217636222c215e9ce4b40ac0d-888af752-9ab7-43e9-bc4d-c9089f87eee4) to immutable location (C:\Users\tjmg7\.gradle\caches\transforms-4\09e5b33217636222c215e9ce4b40ac0d) * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org. 세팅 상태start.spring.io에서 자바 17 버전으로 프로젝트 생성했었고요. 그에 맞춰서 인텔리제이 설정도 다 했습니다. 지금 정말 이해가 되지 않는 건 제 데스크톱과 노트북의 환경 세팅을 완전 똑같이 해놨는데 데스크톱에서는 프로젝트 실행이 잘 되는데 노트북에서만 이 에러가 발생한다는 겁니다.. ㅠㅠ 제 데스크톱과 노트북의 환경 차이는 아무리 생각해봐도 데스크톱은 윈도우 10이고 노트북은 윈도우 11이라는 것밖에 생각이 나질 않습니다. .gradle 안에 캐시 폴더 지웠다가 프로젝트 다시 실행도 해봤고요...gradle 폴더 자체를 지웠다가 다시 실행도 해봤습니다.인텔리제이도 여러 번 지웠다가 재설치하고 실행해봤고요. 해결 방법 좀 간곡히 부탁드립니다.. 스프링 공부하고 싶습니다 ㅠㅠ
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
약간 이해가 더딘가 싶어서 고민이 있습니다..
[질문 내용]이해가 애매하게 되는 느낌이에요. 이럴때 어떤 선택이 더 나을까요?그냥 계속 mvc 2편 으로 넘어가서 쭉쭉 로드맵 다 보고 다시 보기1편을 한번더 보고 2편으로 넘어가기둘중에 어떤게 더 맞는 선택일까요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
mvc회원 저장이 이루어 지지 않고 404 에러페이지로 연결됩니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]MvcMemberSaveServlet입니다.package hello.servlet.web.servletmvc; import hello.servlet.domain.member.Member; import hello.servlet.domain.member.MemberRepository; import jakarta.servlet.RequestDispatcher; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(name = "mvcMemberSaveServlet", urlPatterns = "/servlet-mvc/members/save") public class MvcMemberSaveServlet extends HttpServlet { // 싱글톤으로 설정하여 인스턴스를 가져와야함 private MemberRepository memberRepository = MemberRepository.getInstance(); @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 브라우저에서 넘어온 값 변수로 설정하기 String username = request.getParameter("username"); int age = Integer.parseInt(request.getParameter("age")); // 파라미터 읽어온 값은 스트링이기 때문에 int형으로 변환을 해주어야 한다. // 자바 코드로 작성한 멤버 객체를 브라우저에서 넘어온 값으로 생성, 저장 Member member = new Member(username, age); memberRepository.save(member); // Model에 데이터를 보관해야 한다. request.setAttribute("member", member); // request객체 내부에 저장소에 저장하는 기능임 String viewPath = "WEB-INF/views/save-result.jsp"; RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath); dispatcher.forward(request, response); } }save-result.jsp입니다.<li>태그가 인식이 이상하게 되는거 같습니다. 중간에 줄바꿈이 안되요<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> 성공 <ul> <li>id= ${member.id}</li><li>username=${member.username}</li> <li>age=${member.age}</li> </ul> <a href="/index.html">메인</a> </body> </html>new-form.jsp입니다.<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="save" method="post"> username: <input type="text" name="username" /> age: <input type="text" name="age" /> <button type="submit">전송</button> </form> </body> </html>어느 부분에서 틀린건지 찾아봐도 모르겠습니다 .ㅠ
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
HttpSession 질문있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]HttpSession 1. getSession / setAttribute다른 질문들의 답변을 보니 세션 저장소가 Map<JSESSIONID, Map<String, Object>>형태로 저장되어 있다고 하셨는데getSession이 request에 담겨 있는 cookie(JSESSIONID)값으로 세션 저장소에서 Map<String, Object>을 반환하고 이 것을 세션이라고 하는건가요?그리고 getSession(true)일 때 세션이 없으면 세션을 생성하는데, 세션을 생성할 때 JSESSIONID를 만들어서 response에 cookie로 보내고, 세션 저장소에 만들어진 JSESSIONID를 key, 빈 Map을 value로 저장하고, 비어 있는 Map<String, Object>을 반환하나요?그리고 setAttribute로 Map<String, Object>에 값을 저장하는건가요? 2. getAttributegetAttribute할 때는 request에 있는 JSESSIONID로 세션 저장소에서 Map<String, Object>을 찾고, LOGIN_MEMBER값으로 실제 Object(Member)를 찾는 걸까요? 3.마지막으로 세션 저장소가 Map<JSESSIONID, Map<String, Object>> 형식인데 JSESSIONID가 각 member별로 생성되니까, value가 Map<String, Object> 형식이지만 이 맵에는 실제로는 한 쌍의 key, value만 저장되는건가요?
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
분산 DB 에서 비관적 락을 통한 동시성 제어
안녕하세요. 분산락을 언제 쓰는게 좋을지 고민하다가 몇 가지 궁금증이 생겨 질문드립니다.분산 DB 환경이 무엇을 의미하는지?흔히 분산 DB 환경에서 낙관적, 비관적 락으로 동시성 문제를 해결하기 힘들다고 얘기하더라고요. 여기서 말하는 분산 DB 라는 것이 샤딩에 의해 여러 DB 서버가 있는 것인지, 동일한 데이터를 저장하는 DB 서버가 여러 대 있는 환경을 의미하는 것인지 모르겠습니다.예를 들어, Ticket 이란 데이터를 저장하는데 동일한 ticket 데이터가 DB server 1, DB server 2 에 저장되어 있는 환경일까요??만약 분산 DB 가 샤딩인 경우 비관적 락으로도 동시성 이슈를 해결할 수 있을 것 같은데 맞을까요?아래 그림처럼 ticketId = 1 인 티켓을 예매하기 위한 요청이 동시에 올 경우 입니다. 처음 x-lock 을 잡은 요청이 끝나야 뒤늦게 온 요청이 해당 티켓의 잔여 수량을 확인하고 예매 하기 때문에 샤딩으로 인한 분산 DB 에서는 비관적 락으로 동시성 이슈를 해결할 수 있을 것 같습니다.동일한 Ticket 데이터가 여러 DB 서버에 중복되어 저장된 분산 DB 환경에서는 분산락을 사용해야 될 것 같습니다.그러나, 샤딩은 동일한 Ticket 데이터에 접근하기 위해서는 동일한 서버로 접근하기 때문에 비관적 락으로도 충분히 해결 가능할 것 같아서 질문 드립니다!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
값을 안넘겨주면 똑같이 저도 에러가 나긴 하는데 왜 콘솔창에는 warn이 안뜰까요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]강의에서는 warn이 뜨고 name이 없다라는 콘솔문구가 뜨는데 저는 창을 들어가보면 에러는 똑같이 나는데 warn이 안뜨네여..
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@ScriptAssert에서 javascript
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]현재 jdk17 이상부터는 @ScriptAssert에서 자바스크립트를 지원하지 않아서 오류가 뜨는데 17버전 이상부터는 @ScriptAssert를 어떻게 사용하나요??
-
미해결
스프링 websocket handler presend 질문 있습니다.
public Message<?> preSend(Message<?> message, MessageChannel channel) { log.info("presend 실행은 되는지"); StompHeaderAccessor accessor = StompHeaderAccessor.wrap(message); log.info("테스트{}",accessor.getCommand()); // // 메시지의 구독 명령이 CONNECT인 경우에만 실행 if (StompCommand.CONNECT.equals(accessor.getCommand())) { StompHeaderAccessor headerAccessor = StompHeaderAccessor.wrap(message); log.info("구독 명령이 떨어졌어{}",headerAccessor.getNativeHeader("test")); } return message; }위 코드처럼 실행했을 시 accessor.getCommand()가 connect거나 disconnect면 log.info("presend 실행은 되는지"); StompHeaderAccessor accessor = StompHeaderAccessor.wrap(message); log.info("테스트{}",accessor.getCommand());이것이 2번 씩 출력되는데 원래 이런건지 아니면 제가 코딩을 잘못했는지 질문있습니다.
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
h2 데이터베이스는 preparestatement를 구현하고 있는 것일까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.JDBC 개발에 있어 제일 핵심이 되는 내용은 JDBC는 인터페이스이고 각각의 데이터베이스는 이 JDBC인터페이스를 구현하여 제공하고 있기에, 개발자들은 JDBC를 통해 다양한 데이터베이스를 용이하게 사용할 수 있는 점인 것 같습니다. preparedStatement는 JDBC 의 3가지 기능인1. Connection 획득SQL 전달결과 조회 중 두 번째 SQL 전달과 관련된 기능이라 생각되는데요. 그런 prepareStatement는 Connection 인터페이스 안에 있는 메서드였고, Statement를 상속하고 있는 또 다른 인터페이스인 PreparedStatement 타입인 것을 알게 되었습니다. 1) 그렇다면 Preparedstatement 또한 JDBC의 일부분이고, h2데이터베이스는 이 PreparedStatement에서 지정해놓은 메서드들을 구현하고 있다고 생각해도 되는지 궁금합니다. 2) Connection 인터페이스든 Statement 인터페이스이든 package를 보면 java.sql 에 속해 있는데, java.sql 패키지 자체가 jdbc라고 생각해도 되는지 궁금합니다.
-
미해결스프링 프레임워크 입문자를 위한 따라하기
따라하고 있는데, Spring MVC Project가 보이지 않아요..
똑같이 따라 했는데, Spring MVC Project가 보이지 않아요.. 다른것도 다 안보이고, Simple Project만 보여요 ㅠㅠ
-
미해결실전! 스프링 데이터 JPA
Merge 관련해서 질문드립니다.
안녕하세요 영한님, 정말 좋은강의 잘 듣고있습니다. Merge관련해서 질문이 하나있는데요..! 아래 두 method 모두 시작할때 persistence context가 비어있고 찾는 entity가 db에 있다고 가정할때 비슷한 (혹은 같은) flow로 진행될까요? 여기서 method parameter, Entity e,는 업데이트될 (id가 set되어있고 field가 업데이트 되어있는)객체입니다. @Transactional public void updateEntity(Entity e){ Entity foundEntity = em.find(Entity.class, e.getid()); foundEntity.setFieldOne("New Data"); }@Transactional public void updateEntity(Entity e){ em.merge(e); }Merge를 꼭 써야하는건 아니지만, 그냥 동작 메커니즘이 궁금해서 질문드립니다. Merge를 쓰는게 Update전에 항상 Select query로 db에서 객체를 조회하기때문에 쓰기를 지양하라고 하시는건가요, 아니면 merge를 쓸때 또 다른 downside가 있나요?