묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
lettuce에서 lock할 때 동시성 문제
안녕하십니까 lettuce 라이브러리를 사용해서 lock을 할 때 redisLockRepository.lock(key)로 redis에 key값을 확인 하잖아요 동시에 여러서버에서 lock을 걸 때 저 코드에서는 동시성 문제가 안생기나요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
앞으로의 방향
[질문 내용]안녕하세요!! 우선 좋은 강의 만들어주셔서 너무 감사합니다! 이번 강의도 정말 잘 들었습니다!! 저는 자바 입문, 실전 자바 기본편을 듣고 이번 스프링 입문 강의를 완강했습니다. 이전에는 자바에 대해 책으로 공부하고 강의를 통해 이해하는데 큰 어려움이 없었지만 스프링은 처음이라 많이 헤매는 느낌을 받습니다. 궁금한 점은 헤매는 느낌을 받는 이유는 자바에 대한 이해가 부족해서 인지 스프링에 대한 이해가 부족해서 인지 알고싶습니다. 또한 제 계획은 24년도 상반기에 나올 자바 중급,고급 강의를 듣고 스프링 완전정복 강의를 듣고 토이프로젝트를 통해 실력을 향상시키는 것이 목표입니다. 이 방향성이 괜찮은지 아니면 어떤 방향으로 나아가야하는지 조언 부탁드립니다.!! 처음 자바를 공부하고 너무나도 헷갈리고 어려운 순간들이 많았는데 김영한 선생님의 강의를 듣고 나름대로 발전한 것 같아서 항상 감사하고 있습니다. 양질의 강의를 제공해주셔서 감사합니다 !! 24년도 잘 부탁드립니다!!
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
순수 jdbc 강의에서 H2 database적용 후, 회원목록 조회에서 Whitelabel 오류가 뜹니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.2023-12-27T19:46:31.932+09:00 ERROR 20716 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.IllegalStateException: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection] with root cause 강의를 따라하면서 진행하다가 페이지에서 회원목록으로 들어가면 Whitelabel 오류가 뜹니다. 혹시 위 오류가 어떤 이유에서 나는지 알 수 있을까요??
-
미해결스프링 핵심 원리 - 기본편
왜 순수한 자바로 테스트 해야 하나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네[질문 내용]1. 제목과 같은 내용입니다. 강의 어느 편인가 해당 내용에 대해서 짧게 답변 해주신 부분을 어렴풋이 본거 같은데 잊어서 질문 드립니다. 해당 질문에 대한 답변 또는 관련 영상을 혹시 아신다면 감사 드릴거 같습니다.2. 해당 질문에 대한 원인은 다음과 같습니다. 순수한 자바 코드가 스프링 프레임워크를 포함한 것보다 상대적으로 작은 범위여서 일단 공통 부분인 자바 파트에서 테스트를 하고 그 다음 스프링으로 가는 것이 맞겠다는게 처음 생각이었습니다. 근데 문득 이게 맞나 ? 명확한 근거가 아닌 저의 추측에 기반한 근거였기 때문에 1번의 설명과 같이 모호해서 질문을 드립니다.개발자인데 아직도 문서를 두서 없이 작성합니다.해당 부분에 있어 양해를 구합니다.읽어주셔서 감사합니다.
-
해결됨스프링 핵심 원리 - 기본편
Autowired 관련 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]의존관계 자동주입에 대해 정리를 하던도 중 제가 이해한것이 맞는지 궁금하여 질문드립니다. 컨테이너에 빈을 등록하는 방법에는 대표적으로,1.컴포넌트 스캔을 통해 등록하는 방법2. 자바설정클래스를 통해 등록하는 방법3 xml 파일을 통해 등록하는 방법이 있고 이때 의존관계주입을 2번과 3번에서는 직접 구현체를 정의? 해주었지만컴포넌트 스캔을 사용할때 의존관계주입을 (OCP와 DIP 원칙을 지키며) 해주기 위해선 @Autowired 을 사용해야한다. 그리고 @Autowired 을 해주는 방법에는 아래와같은 방법이 있다.생성자주입필드주입setter 주입일반메서드 주입이렇게 이해하였는데 제가 이해 한 것이 맞나요?
-
미해결스프링 시큐리티 OAuth2
keycloak 최신버전(23.0.1) 에서는 implict 설정할때에 redirect url 설정하는 부분이 사라졌습니다
그러다보니 화면대로 implict로 인증받을 때에 401 응답만 계속 받게 되고 토큰 조차 확인이 안되네요 혹시 다른 방법이 있을까요?
-
해결됨실무 환경 그대로 주문게시판 만들기 웹개발 기초 마스터
페이징처리 관련 문의 드립니다
안녕하세요. 페이징 처리 관련하여 질문 사항 있어 요청 드립니다.현재 다른 분께서 페이징 처리 관련하여 질문하신 것에 강사님께서 댓글 달아주신 내용 보면서 페이징 처리 구현 중인데 잘 안되서 문의드립니다.구현한 사항은 순서대로 다음과 같습니다.1) OB_001.xfdl(게시판 메인화면) 그리드 하단에 div 만들고id : Div00url : cmm::paging_comm.xfdl기입한 후, 저장하였습니다 2) paging_comm.xfdl cmm 폴더내에 paging_comm.xfdl 파일 생성하여 페이징 처리 관련 컴포넌트 만들고 ID 부여하였습니다. 이후, 공유해주신 링크에 paging_comm.xfdl 페이징 처리 스크립트 전체 복사하여 붙여넣었습니다. 3) UiadapterBoardServiceImpl.java에 page_sample.jsp 스크립트를 java 코드로 변환하여 selectOrdLList 메서드에 코드 추가하였습니다.코드 아래와 같이 첨부드리니 확인 부탁드립니다.( HttpServletRequest request = ;, HttpServletResponse response = 부분에서request.getInputStream()과 response.getOutputStream();에서 "The local variable request may not have been initialized" 동일한 오류 납니다. )public ArrayList<Map<String, Object>> selectOrdList(Map<String, Object> ds_searchList) { UiadapterBoardMapper mapper = sqlSession.getMapper(UiadapterBoardMapper.class); try { String strCharset = "utf-8"; // PlatformRequest 생성 및 데이터 수신 HttpServletRequest request = (HttpServletRequest) request.getInputStream(); //The local variable request may not have been initialized 오류 발생 PlatformRequest platformRequest = new PlatformRequest(request.getInputStream(), PlatformType.CONTENT_TYPE_XML, strCharset); platformRequest.receiveData(); PlatformData inPD = platformRequest.getData(); VariableList inVariableList = inPD.getVariableList(); DataSetList inDataSetList = inPD.getDataSetList(); int iRowCnt = inVariableList.getInt("rowCount"); int iPageNo = inVariableList.getInt("pageNum"); // PlatformResponse 생성 HttpServletResponse response = (HttpServletResponse) response.getOutputStream(); // The local variable request may not have been initialized 오류 발생 PlatformResponse platformResponse = new PlatformResponse(response.getOutputStream(), PlatformType.CONTENT_TYPE_XML, strCharset); PlatformData outPD = new PlatformData(); VariableList outVariableList = new VariableList(); DataSetList outDataSetList = new DataSetList(); try { int iTotalRowCount = 1000; int nPageBlock = (int) Math.ceil((double) iTotalRowCount / iRowCnt); int nStartRow = iRowCnt * (iPageNo - 1); int nEndRow = nStartRow + 30; DataSet outDataSet = new DataSet("output"); outDataSet.addColumn("Column0", DataTypes.INT, 10); outDataSet.addColumn("Column1", DataTypes.STRING, 10); outDataSet.addColumn("Column2", DataTypes.STRING, 10); outDataSet.addColumn("Column3", DataTypes.STRING, 10); outDataSet.addColumn("Column4", DataTypes.STRING, 10); outDataSet.addColumn("Column5", DataTypes.STRING, 10); outDataSet.addColumn("Column6", DataTypes.STRING, 10); outDataSet.addColumn("Column7", DataTypes.STRING, 10); outDataSet.addColumn("Column8", DataTypes.STRING, 10); outDataSet.addColumn("Column9", DataTypes.STRING, 10); int nRow; for (int i = nStartRow; i < nEndRow; i++) { if (i + 1 > 1000) { break; } nRow = outDataSet.newRow(); outDataSet.set(nRow, "Column0", i + 1); outDataSet.set(nRow, "Column1", "test"); outDataSet.set(nRow, "Column2", "test"); outDataSet.set(nRow, "Column3", "test"); outDataSet.set(nRow, "Column4", "test"); outDataSet.set(nRow, "Column5", "test"); outDataSet.set(nRow, "Column6", "test"); outDataSet.set(nRow, "Column7", "test"); outDataSet.set(nRow, "Column8", "test"); outDataSet.set(nRow, "Column9", "test"); } outDataSetList.add(outDataSet); Variable pageBlockCount = new Variable("pageBlockCount"); pageBlockCount.set(nPageBlock); Variable totRowCount = new Variable("totRowCount"); totRowCount.set(iTotalRowCount); outVariableList.add("ErrorCode", 0); outVariableList.add("ErrorMsg", "succ"); outVariableList.add(pageBlockCount); outVariableList.add(totRowCount); } catch (Exception e) { outVariableList.add("ErrorCode", -1); outVariableList.add("ErrorMsg", e.toString()); } finally { outPD.setDataSetList(outDataSetList); outPD.setVariableList(outVariableList); OutputStream out = response.getOutputStream(); platformResponse.setData(outPD); platformResponse.sendData(); } } catch (Exception e) { } return mapper.selectOrdList(ds_searchList); } 4) 기존 주문 조회 쿼리를 안내해주신대로 한번 더 감싸서 수정하였습니다4) 기존 주문 조회 쿼리를 안내해주신대로 한번 더 감싸서 수정하였습니다 SELECT * FROM ( A.ORD_NO AS ORD_NO /*주문번호*/ , FN_CODE_NM('001',A.ORD_STAT_CD) AS ORD_STAT_NM /*주문상태*/ , A.CUST_CD AS CUST_NO /*고객번호*/ , B.CUST_NM AS CUST_NM /*고객명*/ , FN_CODE_NM('002',B.CUST_GBCD) AS CUST_GBCD_NM /*고객구분*/ , B.PHONE AS PHONE /*전화번호*/ , B.ADDR AS ADDR /*주소*/ , C.ITEM_NM AS ITEM_NM /*상품명*/ , A.REG_DT AS REG_DT /*주문일시*/ , 0 AS CHK /*체크박스*/ FROM TB_ORD A LEFT JOIN TB_CUST B ON A.CUST_CD = B.CUST_CD LEFT JOIN TB_ITEM C ON A.ITEM_CD = C.ITEM_CD WHERE 1=1 <if test="ORD_NO != null and ORD_NO !=''"> AND A.ORD_NO = #{ORD_NO} </if> <if test="CUST_NM != null and CUST_NM !=''"> AND B.CUST_NM = #{CUST_NM} </if> <if test="COMP_YN == 'true'"> AND B.CUST_GBCD = 'C' </if> <if test="ORD_STAT_CD != null and ORD_STAT_CD !=''"> AND A.ORD_STAT_CD = #{ORD_STAT_CD} </if> <if test="CUST_GBCD != null and CUST_GBCD !=''"> AND B.CUST_GBCD = #{CUST_GBCD} </if>) A <choose> <when test = "pageNum ==1 "> WHERE <![CDATA[A.RNUM <= #{rowCount}]]> </when> <otherwise> WHERE <![CDATA[A.RNUM > (#{pageNum}-1)*#{rowCount} AND A.RNUM <= #{pageNum}*#{rowCount}]]> </otherwise> </choose> 5) 결과상단과 같은 과정을 통해 구현한 후, 넥사크로에서 런치하여 확인해보니 메인화면 자체가 뜨지 않습니다.혹시 paging_comm.xfdl의 스크립트와 page_sample.jsp 자바 형식으로 변환하여 UiadapterBoardServiceImpl에 구현한 코드 공유해주실 수 있으실까요?그리고 OB_001.xfdl에 페이징 처리 div 만들고 "id : Div00"와 "url : cmm::paging_comm.xfdl" 부여한 후, cmm 폴더에 paging_comm.xfdl 형성하여 페이징 처리 관련 컴포넌트 그리고 id 부여하여 스크립트 복붙하는게 맞는지 확인 부탁드립니다.감사합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
getLong 함수 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Oracle DB를 연동해서 강의 내용을 따라가고있는데, 저기 getLong부분에서 계속해서 오류가 발생합니다 ㅠㅠ오류 내용은 위와 같습니다... 실제DB에 값은 잘저장됩니다.Member라는 클래스 대신 User라고 이름을바꿔 사용하고있고, 사진과 같이 멤머변수도 두개 추가하였습니다.(아래는 getter/setter 코드입니다.)오라클 테이블은 다음과 같이 사용하고있습니다..
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@ModelAttribute와 생성자
안녕하세요.@ModelAttribute 바인딩에 대한 질문 드립니다.바인딩 방식으로 제가 생각한 것은필드를 인자로 받는 생성자가 있다면 해당 생성자로 값을 주입한다.없다면 기본 생성자와 Setter를 이용해 값을 할당한다.이렇게 생각했습니다. @Getter @Setter public class Item { private Long id; private String itemName; private Integer price; private Integer quantity; public Item(String itemName, Integer price, Integer quantity) { this.itemName = itemName; this.price = price; this.quantity = quantity; } }이렇게 해놓은 상태에서 Controller addItemV2 메소드를 실행할 경우,Cannot resolve parameter names for constructor public hello.itemservice.domain.item.Item(java.lang.String,java.lang.Integer,java.lang.Integer)위와 같은 오류가 발생합니다. 기본 생성자를 추가했을 경우에는 정상 작동하구요.1번의 방식으로 실행된다면 오류없이 실행되어야 한다고 생각했는데 바인딩 방식을 잘 못 이해하고 있는 것인지 궁금합니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
User이 계속 null으로 들어와서 오류가 나네요
강의내용그대로 입력하였는데 왜그럴까요 ㅠㅠ서비스부분public void loan(BookLoanReq req) { Book book = bookRepstory.findByName(req.getBookName()).orElseThrow(IllegalArgumentException::new); if (userLoanHistoryRep.existsByBookNameAndIsReturn(book.getName(), false)){ throw new IllegalArgumentException("대출중인 책입니다."); } User user=userRepstrory.findByName(req.getUserName()).orElseThrow(IllegalArgumentException::new); userLoanHistoryRep.save( new UserLoanHistory(user.getId(),book.getName(),false)); }public interface UserRepstrory extends JpaRepository<User,Long> { Optional<User> findByName(String name); }package com.group.libraryapp.domain.user; import javax.persistence.*; @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; public User(String name,Integer age) { if(name==null||name.isBlank()){ throw new IllegalArgumentException(String.format("널값")); } this.name = name; this.age = age; } @Column(name="age",length = 20) private Integer age; @Column(name="name",nullable = false) private String name; protected User(){ } public Long getId() { return id; } public Integer getAge() { return age; } public String getName() { return name; } public void update(String name){ this.name=name; } public User(Long id, Integer age, String name) { this.id = id; this.age = age; this.name = name; } } 마지막으로 오류코드올려드릴게요 ava.lang.IllegalArgumentException: null at java.base/java.util.Optional.orElseThrow(Optional.java:403) ~[na:na] at com.group.libraryapp.service.book.BookService.loan(BookService.java:39) ~[main/:na] at com.group.libraryapp.controller.book.BookController.loan(BookController.java:29) ~[main/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[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:568) ~[na:na]
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberRepositoryTest
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]WARNING: A Java agent has been loaded dynamically (C:\Users\home\.gradle\caches\modules-2\files-2.1\net.bytebuddy\byte-buddy-agent\1.14.10\90ed94ac044ea8953b224304c762316e91fd6b31\byte-buddy-agent-1.14.10.jar)WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warningWARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more informationWARNING: Dynamic loading of agents will be disallowed by default in a future releaseOpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended테스트는 성공하는데 이렇게 경고문이 뜨는데 무시해도 될까요?? 구글링 해봐도 안나와서요
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
오류발생코드질문드립니다
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'bookService' defined in file [C:\Users\user\OneDrive\���� ȭ��\����ڷ�\Java_Spring_Library_Application new\library-app\library-app\build\classes\java\main\com\group\libraryapp\service\book\BookService.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userLoanHistoryRep' defined in com.group.libraryapp.repstory.user.userloan.UserLoanHistoryRep defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract boolean com.group.libraryapp.repstory.user.userloan.UserLoanHistoryRep.existIsBookNameAndIsReturn(java.lang.String,boolean); Reason: Failed to create query for method public abstract boolean com.group.libraryapp.repstory.user.userloan.UserLoanHistoryRep.existIsBookNameAndIsReturn(java.lang.String,boolean)! No property 'existIsBookName' found for type 'UserLoanHistory'; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract boolean com.group.libraryapp.repstory.user.userloan.UserLoanHistoryRep.existIsBookNameAndIsReturn(java.lang.String,boolean)! No property 'existIsBookName' found for type 'UserLoanHistory'요약해보면 자바의 DTO객채의 이름하고 mysql에있는 테이블의 이름과 일치 하지않아서오류가 발생하는듯하는듯한데 왜 오류가 발생할까요? 객채생성하고 테이블올려드릴게요
-
미해결스프링 핵심 원리 - 기본편
Test 오류..!
안녕하세요. 테스트 오류가 나서 질문 드립니다 !어디 부분을 수정해야 할지 모르겠습니다 ㅠㅠ package hello.core.order;import hello.core.acnnotation.MainDiscountPolicy;import hello.core.discount.DiscountPolicy;import hello.core.member.Member;import hello.core.member.MemberRepository;import lombok.RequiredArgsConstructor;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.stereotype.Component;@Componentpublic class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository ; private final DiscountPolicy discountPolicy ; @Autowired public OrderServiceImpl(MemberRepository memberRepository, @MainDiscountPolicy DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; } @Override public Order createOrder(Long memberId, String itemName, int itemPrice) { Member member = memberRepository.findById(memberId); int discountPrice = discountPolicy.discount(member, itemPrice); return new Order(memberId, itemName, itemPrice, discountPrice); } //테스트 용도 public MemberRepository getMemberRepository() { return memberRepository; }}
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Thymeleaf
<!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <body> <div class="container"> <div> <table> <thead> <tr> <th>#</th> <th>이름</th> </tr> </thead> <tbody> <tr th:each="member : ${members}"> <td th:text="${member.id}"></td> <td th:text="${member.name}"></td> </tr> </tbody> </table> </div> </div> <!-- /container --> </body> </html> 여기서 ${member.id}와 ${member.name}은 member 객체에 getter가 있어야만 접근할 수 있는건가요?그리고 ${member.getId()} 이런식으로는 접근이 안되나요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
MemoryMemberRepository
private static Map<Long, Member> store = new HashMap<>();private static long sequence = 0L;@Overridepublic Member save(Member member) {member.setId(++sequence);store.put(member.getId(), member);return member;} 여기서 궁금한게 save 메서드에서 왜 member를 return 하나요?return 된 member를 사용하는 곳은 어디에도 안보이는데 왜 return 하는지 궁금합니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
SpringDataJpa 테스트 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 뭐가 문젠지 전혀 모르겠습니다 ㅠㅠ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
find와 createQuery의 차이점
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요.findById와 findByName에서 id는 find를 쓰고 name은 createQuery를 쓰는 건 id는 member로 반환하고 name은 list로 반환하기 때문인건가요?find와 createQuery 둘다 조회하는 메서드인데 어떤 차이가 있는지 궁금합니다.
-
미해결스프링 핵심 원리 - 기본편
request스코프와 컴포넌트 스캔
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 복습 중 궁금한 점이 생겨서 질문드립니다. 컴포넌트 스캔을 하게 되면 @component annotation이 붙은 객체를 스프링빈으로 등록해주는 것으로 알고 있습니다. 그런데 이 객체가 request 스코프일 경우 request요청이 있어야 스프링 빈으로 등록이 가능하다면 처음 스프링 애플리케이션을 실행할 때 @Component가 붙은 객체를 탐색하면서 @Scope("request")가 붙어있다면 스프링 컨테이너가 이 객체는 스프링빈으로 등록하지 않고 넘어가는 것인지 궁금합니다!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
중복_회원_예외 fail 부분 질문 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.fail(); 부분에서 setName("test")로 member1, member2를 같게 해주었는데도 오류가 발생하여 질문드립니다.혹시 fail()을 잘못 사용하였는지 확인하기 위해 join을 두번 다 member1으로 하였을 때는 오류가 발생하지 않았습니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
톰캣의 webapp 인식에 대한 문제
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 강의를 듣다가 문제가 발생하여 질문 남깁니다.먼저 발생한 문제점은 어느 순간부터 톰캣이 localhost:8080을 인식하지 못하는 것 같습니다. 코드를 실행하면 톰캣이 8080에서 start했다는 로그는 찍히는데 url 창에 localhost:8080을 입력하면 톰캣의 루트 디렉토리(webapp)에 있는 webapp.index.html을 인식하지 못하는 것 같습니다. 그런데 html을 브라우저로 여는 것을 지원해주는 것 같길래 열어보니(첫 번째 사진에 화살표로 강조된 부분) 두 번째 사진과 같이 localhost:8080이 아닌 "http://localhost:63342/spring_MVC/servlet.main/webapp/index.html?_ijt=22fu4h3punn2kubkafeq5afd18&_ij_reload=RELOAD_ON_SAVE" 로 찍히네요 혹시 이러한 상황에 대해서 조언을 얻을 수 있을까 해서 글을 남깁니다 답변주시면 감사하겠습니다.