inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

실행 질문

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

.========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 4분쯤에 실행했을 때 오류가 납니다. JAVA 11버전이라 dependency 에 추가도 했습니다. 영속성 강의 까지는 연동이 잘 되다가 안되네요 데이터 베이스 스키마 자동생성 강의에서는 코드를 추가로 입력 안했는데 필요한가요?

  • java
  • JPA
댓글 1 좋아요 0 조회수 265

안녕하세요? no usages관련해서 질문드립니다

해결됨

나도코딩의 자바 기본편 - 풀코스 (20시간)

강의에서 볼 때 선생님 화면에는 no usages가 없는데 제 거에는 떠 가지고요 이게 뭔지, 없앨 수 있는지 궁금합니다 감사합니다.

  • java
  • oop
댓글 1 좋아요 0 조회수 400

문제가 발생 할 수 있는 이유가 이해가 되지 않습니다.

해결됨

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

private void validateDuplicateMember(Member member) { List<Member> findMembers = memberRepository.findByName(member.getName()); if (!findMembers.isEmpty()){ throw new IllegalStateException("이미 존재하는 회원 입니다."); } } 에서 memberA가 동시에 DB에 insert 될때 validateduplicate를 통과하면 동시에 memberA가 로직을 호출하게 되면 memberA라는이름으로 두명이 가입 됩니다. 그래서 memberA에 제약을 건다구 하셨는데 제약을 거는거 어떤건지 잘 모르겠습니다. 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.

  • JPA
  • spring-boot
  • spring
  • java
  • 웹앱
황상익 댓글 1 좋아요 0 조회수 2064

@GeneratedValue 전략 중 IDENTITY와 SEQUENCE 특징에 대해 질문 드립니다.

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

기본 키 매핑 강의를 수강하다 키 생성 전략과 관련해 궁금한 점이 있어 질문 드립니다. IDENTITY 전략을 사용할 경우 키 값이 DB에 삽입된 이후에 생성되기 때문에, 트랜잭션 커밋 시점이 아닌 em.persist()를 호출할 시점에 쿼리를 DB로 전송한다고 하셨는데요. 혹시 이 경우, 문제가 생겨 트랜잭션이 rollback 되는 경우 해당 insert문도 같이 rollback이 될까요? SEQUENCE 전략에서 auto-ddl 설정을 사용하지 않을 때에도 @SequenceGenerator 을 사용하여 기존에 사용 중인 DB 시퀀스와 매핑 시킬 수 있나요?? 어노테이션의 이름이 Generator라고 지정되어 있어 auto ddl을 사용하는 경우에만 해당 어노테이션이 유효한 건지에 대해 헷갈리더라구요.. 만약 기존에 DB에서 사용중이던 시퀀스와 매핑시키기 위해서는 @SequenceGenerator 의 SequenceName 속성만 잘 매칭시키면 성능 최적화 등의 전략을 사용할 수 있는 거겠죠..?? 또한 SEQUENCE 전략 사용 시 성능 상의 이슈를 해결하기 위해 allocation을 50과 같이 큰 값으로 할당하여 DB 상에서 한 번에 크게 올리고 메모리에서는 1씩 가져다가 사용하는 방식에 대해 설명 해주시면서 동시성 이슈가 없다고 설명해 주셨는데요! 여러 대의 was와 서로 다른 서버에서 기동되어 메모리가 공유되지 않는 상황에서도 동시성 보장이 가능한 것인가요??...

  • JPA
  • java
John 댓글 1 좋아요 3 조회수 5291

왜 addStock, removeStock 메서드를 사용하는 것이 왜 객체지향적인지

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

강의에서 setter 메소드로 재고 수량을 조절하는게 아니라 addStock 메서드, removeStock 메서드를 이용해 재고 수량을 조절하는 것이 객체지향적이라고 하셨는데 왜 이게 객체지향적인지, setter 메소드를 사용하는 것이 왜 객체지향과는 거리가 있는 것인지 자세하게 설명 부탁드립니다. 감사합니다

  • 웹앱
  • java
  • JPA
  • spring
  • spring-boot
kmj9247 댓글 1 좋아요 1 조회수 877

Entity 내의 로직들, 생성 함수에 대한 질문

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

안녕하세요! 간단한 질문이 있어서 살짝 남겨보게 되었습니다. 1. 지금까지 JPA 강의를 들으면서 - "Entity 에는 Setter 를 열어두지 말고, Getter 만 열어둔채, 초기값 Setting 에는 생성자를 사용하라. 그리고 변경에 대해서 setter 가 필요하다면 그 때 열어두고, 연관관계에 대해 수정시 setting 외의 로직을 수행해야 하기 때문에 change, modify 등의 수식어를 사용해서 함수를 만들어라 ". 정도로 이해하고 있었습니다. 이 관점에서 createOrder() 함수는 설명해주신대로 그냥 Order 을 생성해주는 함수고, 초기값을 setting 해주는 함수인데, 이게 생성자와 어떤 점에서 다른지 이해가 잘 되지 못했습니다. public Order(Member member, Delivery delivery, OrderItem ... orderItems){ this.member = member; this.delivery = delivery; ... OrderItem for 문 this.status = OrderStatus.ORDER; this.orderDate = LocalDateTime.now(); } 위처럼 그냥 생성만 해주는 함수와 어떤 차이가 있는지 이해를 못하였습니다 ㅠㅠ 2. 비즈니스 로직들을 Service 단에서 수행하지 않고, Entity Class에서 모두 짜는 이유가 잘 이해가 되지 않았습니다 ㅠ 애를 들면 cancel() 의 명령어 같은 경우, ~~ /orderItem/cancel/3 이런식으로 들어오게 된다면, Service Layer 에서 OrderItem 조회하고, Repository 를 호출하며 Order에 대한 \ 필요 로직 수행, Item에 대한 필요로직 수행을 하는것으로 생각을 했어서 그런 것 같습니다. 지금 현재 강의 부분과 같은 설계는 약간 영속성 컨텍스트를 계속 관리하면서 필요 SQL들이 자연스럽게 호출되게 하는 방식인 느낌인데 이런 방향이 맞을까요?

  • spring-boot
  • java
  • JPA
  • spring
  • 웹앱
강우석 댓글 1 좋아요 0 조회수 1517

k번째 큰 수 문제에서 부분 수열의 합 처럼 풀어도 되나요?

미해결

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

안녕하세요! 저는 이 문제에서 부분 수열의 합을 떠올려서 풀었는데요! 이렇게 풀면 3중 for문의 비해 효율성이 떨어지나요? 이렇게 풀어도 괜찮은지 질문 남김니다. package algorithmStudy; import java.util.*; public class Problem4_5 { static int n; static int k; static int[] arr; static Set<Integer> answerSet; public static void main(String[] args) { Scanner scan = new Scanner(System.in); n= scan.nextInt(); k= scan.nextInt(); arr= new int[n]; for(int i=0;i<n;i++){ arr[i] = scan.nextInt(); } solution(n,k,arr); } private static void solution(int n, int k, int[] arr) { answerSet = new HashSet<>(); DFS(0,0, 0); ArrayList<Integer>answer = new ArrayList<>(answerSet); // System.out.println(answer); if(answer.size()>k) { Collections.sort(answer,Comparator.reverseOrder()); System.out.println(answer.get(k-1)); }else System.out.println(-1); } private static void DFS(int i, int j, int sum) { if(j==3) { answerSet.add(sum); return; } if(i == n){ return; } DFS(i+1, j+1, sum+arr[i]); DFS(i+1, j, sum); } }

  • java
  • 코테 준비 같이 해요!
이효경 댓글 1 좋아요 1 조회수 534

@PersistenceContext 에 대하여

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

안녕하세요 강의 중 @PersistenceContext 에 대해 궁금한 점이 생겨서 질문을 남기게 되었습니다. JPA 기본편 강의도 완강 후에 듣고 있는 상태인데요, 제가 이해했었던 바는, 한 영속성 컨텍스트에는 한 EntityManagerFactory 가 할당되고, 그 영컨에서 진행하는 각각의 트랜젝션들을 처리하기 위해 EMF가 각각 EntityManager를 생성하여 트랜젝션마다 할당해서 처리할 수 있도록 도와준다고 이해하였습니다. 위에 이해한 바가 맞다면, 앱이 실행되면서 MemberRepository 가 싱글톤 컨테이너에 의해 관리되기 시작하면서, 이 때는 EntityManager 가 트랜젝션이 들어오지 않았기 때문에 할당받지 못한 상태여야 할 것 같습니다. 그리고 save, findOne, findAll 등의 트랜젝션을 수행하기 위한 함수들이 호출될 시 EntityManager 가 생성되고 할당받는 것이 맞을까요? 즉, 싱글톤 컨테이너 안에 있는 Repository 안에 있는 EntityManager em 은 트랜젝션이 수행되기 전에는 NULL이라고 보면 될까요? 제가 이해한 내용이 맞는지 궁금해서 문의글 남기게 되었습니다. 항상 도움주셔서 감사합니다 :]

  • spring-boot
  • java
  • 웹앱
  • spring
  • JPA
강우석 댓글 1 좋아요 2 조회수 2257

./gradlew clean build 오류

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. jpashop % ./gradlew clean build > Task :test JpashopApplicationTests > contextLoads() FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:98 Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1804 Caused by: org.hibernate.service.spi.ServiceException at AbstractServiceRegistryImpl.java:275 Caused by: org.hibernate.HibernateException at DialectFactoryImpl.java:100 MemberRepositoryTest > testMember FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:98 Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1804 Caused by: org.hibernate.service.spi.ServiceException at AbstractServiceRegistryImpl.java:275 Caused by: org.hibernate.HibernateException at DialectFactoryImpl.java:100 2 tests completed, 2 failed > Task :test FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':test'. > There were failing tests. See the report at: file:///Users/king/study/jpashop/build/reports/tests/test/index.html * 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 BUILD FAILED in 17s task.named 전부 주석처리 해보고 밑에 useJunutPlatform이부분도 주석처리 해보고 했는데도 오류 납니다 RunWith도 지워보고 해봣는데 안됩니다

  • 웹앱
  • spring-boot
  • JPA
  • java
  • spring
댓글 1 좋아요 0 조회수 1072

firebase 오류

미해결

따라하며 배우는 리액트, 파이어베이스 - 채팅 어플리케이션 만들기[2023.12 리뉴얼]

Firebase: Need to provide options, when not being deployed to hosting via source. (app/no-options). registerPage에서 넘어가지 않고 이런 오류가 계속 뜨는데 아무리 찾아봐도 안 나오네요,,

  • react
  • 웹앱
  • firebase
정혜진 댓글 1 좋아요 0 조회수 1035

toHaveTextContent 에서 에러가 자꾸 나는데 아무리 찾아도 잘 모르겠습니다.

해결됨

따라하며 배우는 리액트 테스트 [2023.11 업데이트]

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 선생님 안녕하세요! 강의 너무 잘 듣고 있습니다! 감사해요 오류를 잡으려고 노력해봤는데도 잘 안돼서 질문 남깁니다 calculate.test.js파일의 toHaveTextContent()부분에서 모두 오류가 나고 있습니다. 선생님이 주신 소스코드와 제 코드를 모두 비교해봤는데 다 똑같더라구요. 제가 인지하지 못한 오류가 있는지 한 번 봐주실 수 있으실까요? 부탁드립니다ㅜ 오류 부분 calculate.test.js import { render, screen } from "../../../test-utils"; import userEvent from "@testing-library/user-event"; import Type from "../Type"; import OrderPage from "../OrderPage"; test("update products total when products change", async () => { render(<Type orderType="products" />); const productsTotal = screen.getByText("상품 총 가격: ", { exact: false }); expect(productsTotal).toHaveTextContent("0"); // 아메리카 여행 상품 한개 올리기 const americaInput = await screen.findByRole("spinbutton", { name: "America", }); userEvent.clear(americaInput); userEvent.type(americaInput, "1"); // 이 상품을 하나 산다는 뜻 expect(americaInput).toHaveTextContent("1000"); }); - Type.js import React, { useContext, useEffect, useState } from "react"; import Products from "./Products"; import axios from "axios"; import ErrorBanner from "../../components/ErrorBanner"; import Options from "./Options"; import { OrderContext } from "../../contexts/OrderContext"; const Type = ({ orderType }) => { const [items, setItems] = useState([]); const [error, setError] = useState(false); const [orderDatas, updateItemCount] = useContext(OrderContext); // OrderContext.js의 return [{ ...orderCounts, totals }, updateItemCount]; 을 구조분해 useEffect(() => { loadItems(orderType); }, [orderType]); const loadItems = async (orderType) => { try { let response = await axios.get(`http://localhost:5000/${orderType}`); setItems(response.data); } catch (error) { setError(true); } }; if (error) { return <ErrorBanner message="에러가 발생했습니다" />; } const ItemComonents = orderType === "products" ? Products : Options; const optionItems = items.map((item) => ( <ItemComonents style={{ border: "2px solid red" }} key={item.name} name={item.name} imagePath={item.imagePath} updateItemCount={(itemName, newItemCount) => updateItemCount(itemName, newItemCount, orderType) } /> )); let orderTypeKorean = orderType === "products" ? "상품" : "옵션"; return ( <div> <h2>주문종류</h2> <p>하나의 가격</p> <p> {orderTypeKorean} 총 가격: {orderDatas.totals[orderType]} </p> <div style={{ display: "flex", flexDirection: orderType === "options" && "column", // }} > {optionItems} </div> </div> ); }; export default Type; orderContext.js import { createContext, useState, useMemo, useEffect } from "react"; export const OrderContext = createContext(); const pricePerItem = { products: 1000, options: 500, }; function calculateSubtotal(orderType, orderCounts) { let optionCount = 0; for (const count of orderCounts[orderType].values()) { optionCount += count; } return optionCount * pricePerItem[orderType]; } export function OrderContextProvider(props) { const [orderCounts, setOrderCounts] = useState({ products: new Map(), options: new Map(), }); const [totals, setTotals] = useState({ products: 0, options: 0, total: 0, }); useEffect(() => { const productsTotal = calculateSubtotal("products", orderCounts); const optionsTotal = calculateSubtotal("options", orderCounts); const total = productsTotal + optionsTotal; setTotals({ products: productsTotal, options: optionsTotal, total, }); }, [orderCounts]); const value = useMemo(() => { function updateItemCount(itemName, newItemCount, orderType) { const newOrderCounts = { ...orderCounts }; const orderCountsMap = orderCounts[orderType]; orderCountsMap.set(itemName, parseInt(newItemCount)); setOrderCounts(newOrderCounts); } return [{ ...orderCounts, totals }, updateItemCount]; }, [orderCounts, totals]); return <OrderContext.Provider value={value} {...props} />; }

  • React-Context
  • 웹앱
  • react
  • jest
sos 댓글 2 좋아요 0 조회수 663

형 변환 (전반전)중에서

미해결

나도코딩의 자바 기본편 - 풀코스 (20시간)

해당 강의 8:50 정도 부분에서 double convertedScoreDouble = score; 이 부분이 191 -> 191.0 으로 변환되었다고 해주셨는데 그 다음 줄에 sout(score) 를 입력하니 191 그대로 나옵니다. 제가 실수 한 부분이 무엇인가요??

  • oop
  • java
아론 댓글 2 좋아요 0 조회수 534

Where 다중 파라미터 사용, Null 처리관련 질문입니다.

미해결

실전! Querydsl

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요 :) 계묘년 새해 복 많이 받으시길 바랍니다. 강의 도중 allEq와 같은 메서드를 where()메서드에 넣게 되면 null 체크를 주의해야 한다고 하셔서 여러가지 Test를 돌려보았는데요 그 결과, return usernameEq(usernameCond).and(ageEq(ageCond));와 같이 체이닝을 하게되면 제일 첫 번째 메서드(여기서는 usernameEq(usernameCond))가 null일 경우 NullPointerException이 발생하는 것을 알았습니다. 이걸 어떤 방식으로 처리해야할까요? 맨앞에 있는 것이 null인지 체크하고 그것을 제외한 조건들만 return 하는 방법도 생각했으나, 이 역시도 조건이 여러개라면 다시 첫번째 조건이 null인지 체크해야한다는 맹점이 있어서, 코드가 길어질것 같다는 생각이 듭니다. 통상적으로 이런 경우 어떻게 대처하는 지 알려주시면 감사하겠습니다! 다시 한 번 새해복 많이 받으세요!

  • JPA
  • java
LYY 댓글 2 좋아요 0 조회수 3162

adb kill-server 후 adb start-server 해도 실행이 안되네요..

미해결

따라하며 배우는 리액트 네이티브 기초

안드로이드 에뮬레이터를 실행하려고하는데 에러가 나서 첨엔 adb 명령어도 안되서 brew install android-platform-tools 명령어로 설치한담에 위 제목같이 명령어 실행후 다시 해봤는데도 안되네요. 어떻게 해야 에뮬레이터가 실행 될까요? ㅠㅠ -> 아예 지우고 2강 전부터 다시 만들어서 실행하니 되는거같네요 ㅠㅠ

  • react-native
  • react
  • expo
BYOUNGGOOG KANG 댓글 5 좋아요 2 조회수 4101

태그에 빨간 줄이 쳐지는 이유

해결됨

[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스

그대로 따라한거 같은데 태그마다 빨간 줄이 있는 이유가 뭔지 모르겠어요 ㅜ 작동은 잘 됩니다! 항상 감사합니다

  • seo
  • graphql
  • react
  • nodejs
  • Next.js
lar888 댓글 2 좋아요 0 조회수 613

node version으로 인한 오류

해결됨

프론트엔드 개발자를 위한, 실전 웹 성능 최적화(feat. React) - Part. 1

안녕하세요, 강의를 시작할려고하는 학생입니다!! 현재 lecture-1 강의를 clone 받고 실행을 시킬려고 하는데 Error: error:0308010C:digital envelope routines::unsupported 해당 오류 코드를 뱉으면서 npm run start가 되지가 않습니다. 현재 mac, node v18.12.1을 사용하고 있는데 node 버전을 맞춰야 하는건가요?

  • node
  • react
  • devtools
민석 댓글 1 좋아요 4 조회수 1257

keycloack userinfo 403 forbidden error

미해결

스프링 시큐리티 OAuth2

https://www.inflearn.com/questions/693312/profile-email-%EA%B6%8C%ED%95%9C%ED%8E%98%EC%9D%B4%EC%A7%80%EA%B0%80-%EB%82%98%EC%98%A4%EC%A7%80-%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4 해당 페이지에 있는 해결 방법 그대로 consent required를 킨 후에 access token을 받아오는 것 까지는 잘 되는데, 마찬가지로 userinfo 요청시 http://localhost:8080/realms/oauth2/protocol/openid-connect/userinfo 에 Authorization에 Bearer Token타입 체크 후 Token값도 받아온 access_token값으로 잘 넣어줬는데도 403 forbidden 에러가 뜨네요 무엇이 잘못된걸까요 keycloack버전은 20.0.2입니다

  • spring
  • spring-boot
  • oauth
  • java
sangwoo0795 댓글 3 좋아요 1 조회수 3827

getByTestId

미해결

따라하며 배우는 리액트 A-Z[19버전 반영]

tdd 앱 개발 초입 강의에서 질문 있습니다. App.test.js에서는 screen.getByTestId("counter")를 했고, App.js 에서는 <h3> 내부에 data-testid="counter" 라고 되어 있는데요. 어떻게 App.js 내부의 <h3> 태그의 data-testid가 getByTestId로 불릴 수 있는지 궁금합니다..! 그리고 넘어간 정보가 왜 0이 아니라 TextContent가 맞는걸까요?

  • tdd
  • typescript
  • react
  • redux
  • Next.js
kwangjin12 댓글 1 좋아요 0 조회수 416

${member.id} ${member.name}의 member가 어떻게 domain.Member에서 오는지 궁금합니다.

해결됨

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] html코드 중 <tr th:each="member : ${members}">의 members는 controller 코드의 members로부터 오는 것으로 알고 있습니다. List<Member> members = memberService.findMembers(); model.addAttribute("members", members); return "members/memberList"; 그런데 members의 값이 memberService.findMembers(); 부터 오는 것이여서 MemoryMemberRepository.java의 findAll()를 찾아봤습니다. @Override public List<Member> findAll() { return new ArrayList<>(store.values()); } 여기서 values() method로 인해서 map의 값만 추출되어 list로 변환해서 받는 것으로 알고 있습니다. 그래서 저는 controller의 members가 값만 list로 나열된 것으로 생각했는데 memberList.html에서 "member : ${members}" member가 list의 value가 아닌 domain.Member class라는 것이 잘 이해가 안됩니다.

  • java
  • spring
  • spring-boot
  • MVC
gto1997 댓글 1 좋아요 3 조회수 625

인기 태그

인프런 TOP Writers

주간 인기글