묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
[공유]Invalid value type for attribute 'factoryBeanObjectType': java.lang.String
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]스프링 부트 버전 3.2.0 사용 하시는분들 mybatis 의존성 추가하실때 이렇게 추가하시면 돼요..!
-
해결됨[리액트 1부] 만들고 비교하며 학습하는 리액트 (React)
componentDidMount에서 getKeywordList()를 하는 이유
안녕하세요. 강의 재밌게 잘 듣고 있습니다.강의를 듣다 궁금증이 생겨 질문 남깁니다. store.getKeywordList() 메서드를 사용해서 keywordList를 storage에서 가져오는 작업을 componentDidMount에서 하셨는데,main.js의 search 메서드에서 submit이 발생했을 때, store에서 searchResult를 가져오는 것처럼keyword tab을 클릭했을 때 keywordList를 가져오는 방식으로 작성하지 않고 componentDidMount를 사용하신 이유가 궁금합니다. 아래와 같이 onClick과 핸들러를 사용하여 작성해도 정상적으로 동작하는 것처럼 보이는 것을 확인했습니다. handleTabClick(tabType) { if (tabType == TabType.KEYWORD) { const keywordList = store.getKeywordList(); this.setState({ keywordList }); } } ... const tabs = ( <> <ul className="tabs"> {Object.values(TabType).map((tabType) => { return ( <li className={tabType === this.state.selectedTab ? "active" : ""} key={tabType} onClick={() => { this.setState({ selectedTab: tabType }) handleTabClick(tabType)}} > {TabLabel[tabType]} </li> ); })} </ul> {this.state.selectedTab === TabType.KEYWORD && keywordList} {this.state.selectedTab === TabType.HISTORY && historyList} </> );
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
스프링부트와 jpa모두 듣고 msa구축 설계
스프링부트 강의를 듣고 김영한님 유투브와 jpa entity 설계를 보던중 만약 리소스서버와 인증서버를 분리할때 유저의 entity를 리소스서버와 인증서버 2곳 모두에 설계 해야되나요?
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
JpaRepositoryV2 도입 이유
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]제가 이해한 내용을 설명하고, 이해가지 않은 내용을 질문하려 합니다. Spring Data JPA 기술을 이용하여 SpringDataJpaItemRepository를 구성했고, 해당 interface를 바로 ItemServiceV1에서 의존관계 주입하여 사용하고 싶다.하지만, 이미 ItemServiceV1은 ItemRepository interface를 주입받아 사용하고 있기 때문에 SpringDataJpaItemRepository interface를 사용하려면 ItemServiceV1에서 코드레벨에서의 수정이 필연적으로 일어나게 된다.(문제점 1)또한, SpringDataJpaItemRepository는 ItemRepository를 extends한 것이 아닌 JpaRepository를 extends한 것임.(문제점 2)따라서 이런 문제점들 때문에 JpaItemRepostioryV2 class를 도입하여 ItemRepository와 SpringDataJpaItemRepository 사이를 맞추려 한다. 위 내용처럼 서술했을 때 올바르게 서술한 것인지 궁금하고,2가지 이해가지 않는 부분에 대해서 질문하고 싶습니다.첫번째: 문제점2가 왜 문제인건지 잘 모르겠습니다.두번째: “ItemRepository와 SpringDataJpaItemRepository 사이를 맞추려 한다”에서 맞춘다가 정확히 어떤 것을 맞추는 것이라고 해야 표현 상 올바른 것인지 잘 모르겠습니다.
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
JpaRepository - 기본적인 CRUD 기능
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]-> 강의 pdf 캡처본입니다. 해당 캡처본에서 JpaRepository를 인터페이스 상속받으면 기본적인 CRUD 기능을 사용할 수 있다고 하는데, '기본적인 CRUD 기능'이 의미하는 것이 'CrudRepository가 가지고 있는 CRUD 메서드'(save, delete 등등)를 의미하는 것인가요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
메시지 파일 관리를 백엔드에서 하나요?
[질문 내용]메시지를 관리하는 거를 백엔드 단에서 파일 하나 만들어서 관리하는 거 같은데 이걸 백엔드랑 프론트로 나눠서 개발을 하는 경우에도 메시지 관리를 백엔드단에서 하게 되나요? 뭔가 프론트에서 할 거 같아서 질문드립니다.
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
트랜잭션 동작 원리 정리
트랜잭션의 동작 원리에 대해서 정리해봤습니다.제대로 이해했는지 확인 부탁드립니다! 혹시 잘못 이해하고 있는 부분이 있다면 말씀 부탁드립니다. 서비스 클래스의 메소드에 @Transactional 이 있으면 스프링은 해당 비즈니스 로직을 상속한 AOP 프록시 객체를 생성한 후, 이를 스프링 빈에 등록한다.클라이언트가 해당 프록시를 호출한다. (비즈니스 로직 자체를 호출하지 않는다)스프링은 스프링 컨테이너에 등록된 트랜잭션 매니저를 획득한다.트랜잭션 매니저의 transactionManager.getTransaction()을 호출하여 트랜잭션을 시작한다.트랜잭션 매니저는 스프링 컨테이너에 등록된 데이터 소스를 이용하여 커넥션을 생성한다.커넥션의 con.setAutoCommit(false) 호출로 수동 커밋 모드로 변환한다.생성하고 설정을 끝낸 커넥션을 트랜잭션 동기화 매니저에 보관한다.실제 서비스를 호출하면, 서비스의 비즈니스 로직과 리포지토리의 데이터 접근 로직이 수행된다.리포지토리의 데이터 접근 로직은 트랜잭션 동기화 매니저에 보관된 커넥션을 획득한 후 DB에 접근하여 SQL을 수행한다.비즈니스 로직이 끝나면서 AOP 프록시에서 커밋 또는 롤백을 통해 트랜잭션을 종료한다.트랜잭션을 종료함으로써 커넥션은 커넥션 풀에 반납된다.
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
프록시 객체 생성은 @Transactional 메소드 단위인가요?
프록시에 대해서 잘 모르는 상태로 질문드립니다.앞으로 다른 강의에서 나올 수 있는 내용이지만, 일단 큰 그림을 잡을 수 있게 간단하게 질문드립니다. 이번 강의에서 메소드에 @Transactional을 붙이면 프록시 객체가 만들어진다고 배웠습니다.그렇다면 @Transactional가 붙어있는 메소드 단위로 프록시 객체가 만들어지는 건지, 아니면 Service 클래스 단위로 프록시 객체가 만들어지는 건지 궁금합니다.예를 들어, Service 클래스에 3개의 메소드가 있다고 가정했을 때, @Transactional 메소드가 2개, 일반 메소드가 1개 있다면, 프록시 객체는 2개가 만들어지는 건가요? 아니면 한 개의 프록시 객체에 두 개의 메소드가 등록되는 건가요?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
mapper.xml 에서 dtd 를 못찾습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]mapper.xml 제일 윗줄인 DOCTYPE 부분 제일 뒤쪽 dtd 주소에 빨간줄이 그어지면서 cannot find dtd file 또는 해당 dtd 파일을 받는중에 오류가 났다고 나오는데요, 덕분에 <mapper>, <select>등 전부 빨간줄이 그어집니다 ㅠ 모든 dtd 파일을 못가져오나 싶었는데, mybatis-context.xml의 config dtd는 또 잘 가져오구요... 어떤것 때문에 mapper dtd를 못가져오는건지 모르겠습니다
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
이체중 예외 발생 테스트에서 롤백이 안되는 것 같아요
프로젝트 코드 : https://drive.google.com/file/d/11CCB36D9oTLIXMvT4LUcGoXfyXB9Pk0E/view?usp=sharing MemberSerivceV3_1Test, MemberSerivceV3_2Test 에서 이체중 예외 발생 테스트가 통과가 안됩니다.기대하는 바는 롤백이 적용되어야 하는데, 실제 값은 롤백이 적용되지 않는 8000원이 저장됩니다.PlatformTransactionManager을 적용한 코드에서 문제가 발생하는 것 같습니다.딱히 놓친 부분이나 잘못한 부분을 발견하기 힘들어서 도움을 요청드리고자 질문 올립니다. ㅠㅠ 감사합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Errors 관련 타입캐스팅에 관해 질문드립니다
@Override public void validate(Object target, Errors errors) { Item item = (Item) target; // 검증 로직 ValidationUtils.rejectIfEmptyOrWhitespace(errors, "itemName", "required"); // 간단한 공백이나 값이 안들어왔을때 if (item.getPrice() == null || item.getPrice() < 1000 || item.getPrice() > 1000000) { errors.rejectValue("price", "range", new Object[]{1000,1000000},null); } if (item.getQuantity() == null || item.getQuantity() >= 9999) { errors.rejectValue("quantity", "max", new Object[]{9999},null); } // 특정 필드가 아닌 복합 룰 검증 if (item.getPrice() != null && item.getQuantity() != null) { int resultPrice = item.getPrice() * item.getQuantity(); if (resultPrice < 10000) { errors.reject("totalPriceMin", new Object[]{10000,resultPrice}, null); } } } }강의에서는 errors를 사용하였는데이 부분을 아래와 같이 BindingResult로 타입캐스팅 후 사용하여도 되는걸까요?target의 경우에는 타입캐스팅을 해주었는데 errors도 같은 맥락으로 가능한가 싶어 질문드립니다. 반대로 target을 그대로 가져와 사용하여도 문제 없을까요? @Override public void validate(Object target, Errors errors) { Item item = (Item) target; BindingResult bindingResult = (BindingResult) errors;
-
미해결[NarP Series] MVC 프레임워크는 내 손에 [나프2탄]
뷰 <form => PostMapping 컨트롤러 VO(int 형) 받기 문의 드립니다
뷰 <form => PostMapping 컨트롤러 VO(int 형) 받기 문의 드립니다 안녕하세요 강사님프로젝트 도중에 막히는 부분이 있어 질문드립니다보안 지적사항이 나와서 기존 소스 호출 get 방식으로 호출 하는 부분을모두 post 방식으로 변경 하라고 해서작업중입니다뷰 => 컨트롤러 => 서비스 => dao or repository 뷰 화면단에서 <form 에 있는 항목을 컨트롤러로 PostMapping 으로 넘겨 vo 로 받고 싶은데바인딩예외가 발생합니다. vo 클래스에는 현재 int 형으로선언이 되어 있는데 get으로 넘길때는 에러가 없었으나post 로 변경해서 컨트롤러로 넘어가지 않습니다제가 뷰화면단에서 <form 안에 input 타입을 "text" or "number" 형으로 변경 해가면서 테스트 해봐도 마찬가지네요 혹시해결 방법이 있을까요?<<■■■■ 뷰 화면 단 >><form <input type="text" => post 넘기면 에러 발생 <input type="number" => post 넘기면 에러 발생 <<■■■■ 컨트롤러 단 >>@PostMapping('~.do')public getSomeMethod(SomeVoClass param){ //■■메서드파라미터 SomeVoClass 안에 int 형 sn 항목 있습니다<<■■■■ vo 클래스 >>pubiic class SomeVoClass{ private int sn;//■■게시판일련번호 int 형으로 선언됨}<<■■■■ 자바에러메세지 >>org.springframework.validation.BindException:org.springframework.validation.BeanPropertyBindingResult typeMissmatch.SomeVoClass.sntypeMissmatch.sntypeMissMatch.int.typeMismatchdefault message[Failed to convert property value of type 'java.lang.String[]'nested exception is java.lang.NumberFormatException: for input string ",1234"]혹시 시간 나실 때 알려주시면 감사하겠습니다수고하세요.. 김동희 드림
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
spring mvc vo int 받기 문의 드립니다
spring mvc vo int 받기 문의 드립니다 안녕하세요 강사님프로젝트 도중에 막히는 부분이 있어 질문드립니다보안 지적사항이 나와서 기존 소스 호출 get 방식으로 호출 하는 부분을모두 post 방식으로 변경 하라고 해서작업중입니다뷰 => 컨트롤러 => 서비스 => dao or repository 뷰 화면단에서 <form 에 있는 항목을 컨트롤러로 PostMapping 으로 넘겨 vo 로 받고 싶은데바인딩예외가 발생합니다. vo 클래스에는 현재 int 형으로선언이 되어 있는데 get으로 넘길때는 에러가 없었으나post 로 변경해서 컨트롤러로 넘어가지 않습니다제가 뷰화면단에서 <form 안에 input 타입을 "text" or "number" 형으로 변경 해가면서 테스트 해봐도 마찬가지네요 혹시해결 방법이 있을까요?<<■■■■ 뷰 화면 단 >><form <input type="text" => post 넘기면 에러 발생 <input type="number" => post 넘기면 에러 발생 <<■■■■ 컨트롤러 단 >>@PostMapping('~.do')public getSomeMethod(SomeVoClass param){ //■■메서드파라미터 SomeVoClass 안에 int 형 sn 항목 있습니다<<■■■■ vo 클래스 >>pubiic class SomeVoClass{ private int sn;//■■게시판일련번호 int 형으로 선언됨}<<■■■■ 자바에러메세지 >>org.springframework.validation.BindException:org.springframework.validation.BeanPropertyBindingResult typeMissmatch.SomeVoClass.sntypeMissmatch.sntypeMissMatch.int.typeMismatchdefault message[Failed to convert property value of type 'java.lang.String[]'nested exception is java.lang.NumberFormatException: for input string ",1234"]혹시 시간 나실 때 알려주시면 감사하겠습니다 수고하세요..김동희 드림
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
MemberServiceIntegrationTest.java를 다 만들었는데 항상 이 문구만 떠요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. Expected java.lang.IllegalStateException to be thrown, but nothing was thrown 이게 문제인가요?이게 문제인가요? 중복처리에서 걸려야 하는데 안 걸려요
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
findByName 질문있습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]findById의 리턴 값은 Optonal.ofNullable을 사용해서 값을 반환하는데findByName의 리턴 값은 왜 Optoinal.ofNullable을 사용하지 않나요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
form프로젝트 import에러 해결했어요! 도움되시라고 작성해보았습니다~
안녕하세요.오늘 수업자료 다운로드 후 form-start파일을 form으로 프로젝트명 변경 하고 에러나는 부분때문에 2시간을 막연하게 보내고 구글링 + 인프런에 있는 수강자분들의 질문과 공식서포터즈 님들의 해결방법 작성해놓은것들 그대로 셋팅해봐도 안되었던 문제를 해결했어요.해결방법 공유를 위해 작성했습니다! (질문아니예요ㅠ)저는 설정하면서 총 3개의 문제를 겪음 ㅠ제가 겪고 해결한 부분이 도움될 분들이 계실거라 생각하고 몇자 적어봅니다. (사실 좀 길어요ㅠ 그래도 제가 버린시간을 다른분들께선 알차게 쓰시길 바라는 마음으로 작성중) [진행 및 문제를 확인]프로젝트를 import 한후 build.gradle 파일을 열어서 gradle 7버전 이상, java는 17로 사용하는 것으로 설정완료.이후 윈도우에서 인텔리제이를 사용하고 있어서 setting 접속한 후 해당설정 화면에서 gradle버전을 PC에 7.4버전이 설치되어 있는 경로로 설정, 그리고 자바도 17버전으로 설정을 해줍니다. refrash하는데 에러...저는 gardle 7.4-all버전을 사용하려고 설정을 모두 gradle설정하는부분은 7.4버전대로 설정했는데 뜬금없이 console에 나타난 에러메세지는 gradle을 gradle-6.8.2-bin.zip 로 설정되어있어서 안된다고 나오더라구요.에러메세지 : Unsupported Java.Your build is currently configured to use Java 17.0.4 and Gradle 6.8.2. [원인]분명히 setting > gradle 메뉴에가서 gradle을 7버전 사용한다고 설정했는데...뭐가 문제지? 싶어서 구글링해도 뭐해도 다 해봤던 설정만 나와서 답답하더라구요.그래서 그냥 우선 gradle관련 설정파일을 하나하나 확인해봐야겠다는 마음으로 gradle설정파일을 확인하는데 그중 gardle-wrapper.properties 파일에 문제가 있음을 확인사실 설정관련 정보는 저도 잘 몰라요.. 그런데 확실하게 알수 있었던건 distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.2-bin.zip이 부분으로 인해 프로젝트가 gradle을 다른버전을 사용하도록 설정되어 있는걸 알게됨. [문제1 해결방법]1. form > gradle > wrapper > gradle-wrapper.properties 파일을 클릭해서 오픈2. distributionUrl에 있는 설정정보를 gradle을 7버전 이상으로 설정값을 변경그런데 저는 다른정보도 변경해줘야 할것 같아서 이전에 타임리프 프로젝트에서 설정되어있는 gradle-wrapper.properties 파일의 정보를 그대로 복붙했어요.(저는 여기서 gradle-8.5-bin.zip으로 설정되어있어서 그냥 그거 설정함)distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists 3. gradle refresh [문제2 또 에러 (자바9버전 이상에서 제공되지 않는 어노테이션 문제)그런데 refresh 한 후 여기까지 하고 또 에러가 납니다.프로젝트에 자바9버전이상에서 그냥 사용할 수 없는 어노테이션이 있나봐요. 영한님이 이전 servlet강의에서 말씀해주셨던 자바8인가? 9이상부터 제공되지 않는 어노테이션들이 자바 17버전에서 제공되지 않는 문제..사용하도록 설정해야되니까 관련 코드를 찾아서 dependencies에 추가해주는걸로 해결했어요.에러메세지 : path~~~~\dev\05_스프링mvc2-백엔드웹개발활용기술\form\src\main\java\hello\itemservice\TestDataInit.java:8: error: package javax.annotation does not existimport javax.annotation.PostConstruct;^ [문제2 해결방법]1.build.gradle 파일열기2. dependencies에 아래의 코드 추가implementation group: 'javax.annotation', name: 'javax.annotation-api', version: '1.3.2'3. gradle refresh [문제3 또 에러]문제1, 문제2 까지 겪고 해결방법대로 설정완료 후 잘되나 싶더만 아래의 에러메세지가 나타납니다.프로젝트가 빌드될때 java11이 사용되도록 설정이 되어있어서 발생된것 같아 17로 변경해줍니다.에러메세지 : * What went wrong: Execution failed for task ':ItemServiceApplication.main()'.> Process 'command 'C:\Program Files\Java\jdk-11.0.17\bin\java.exe'' finished with non-zero exit value 1 [문제3 해결방법]1. 우측상단 select Run/debug configuration 박스클릭2. Edit Configurations 클릭3. Run/Debug Configurations 설정 창에서 java version 7로 변경 이후 프로젝트가 잘 구동되어 강의 듣을수 있게 되었습니다 ㅋㅋㅋ 으..말주변 없어서 이거 작성하느냐고 1시간 걸림 ㅠㅠ 설명이랑 같이 작성하느냐고 두서없을수 있으나..한가지라도 도움되시길 바라면서 마침! ps. 프로젝트의 설정파일 정보가 변경되었으면 좋겠습니다!프로젝트를 다운받고 안되는 부분이 초보입장에선 동공에 지진이... 좋은강의 늘 감사합니다:)
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
스프링 예외처리-필터 강의 질문
안녕하세요 localhost:8080/error-ex 호출로 임의로 RuntimeException 발생 시 에러 처리 로그 관련해서 질문 남깁니다.https://ballistic-uncle-12b.notion.site/eb9d5a1ee6e74d6db70c0658241aa8b1?pvs=4java.lang.RuntimeException: 예외발생 !!! ~~ 로그가 두 번 남겨져서 Exception이 2번 발생하는 지 확인하려고, Exception 발생이 두 번 남겨지는 지 확인하기 위해 “Error occurs” 는 로그 메시지를 추가했으나 위 로그 내용과 같이 Exception은 한 번만 던져졌습니다.흐름 상 최초 요청 시 /error-ex 를 통해 was -> 필터 -> 서블릿 -> 컨트롤러/error-ex: (예외발생)* was** <- 필터 <- 서블릿 <- 컨트롤러해당 Exception에 매핑된 요청 url 탐색(/error-page/500)탐색된 url(/error-page/500)로 다시 요청 was -> 필터 -> 서블릿 -> 컨트롤러/error-page/500 was <- 필터 <- 서블릿 <- 컨트롤러위 요청 흐름 상이나 개인적으로 추가한 “Error occurs” 로그에서도 확인한 것처럼 Exception은 * 시점에 1회 발생합니다.시점에서, java RuntimeException이라 java main thread의 최상단 함수(main)에서 해당 Exception에 대한 로그가 찍힌 것으로 생각되는데, RuntimeException에 관한 로그는 왜 2번 적히는지 궁금합니다.아울러 main 함수가 ** 시점에 존재하는 게 맞는지도 추가로 궁금하여서 질문 남깁니다.감사합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
첫프로젝트 생성 에러가 너무 길어요
응용 프로젝트를 만들어 보려하는데 이렇게 에러가 엄청 긴데 왜이런걸까요? 보통 화이트 에러 페이지는 서너줄 아닌가요 ㅜㅜ이렇게 만들어서 돌려봤습니다
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
이미지 서버에 질문하나 드려도 될까요
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]제가 지금 토이프로젝트로 게시판을 만드려고 하는데,div 태그에 contenteditable 속성을 넣어서 수정 가능하게 만들고,이미지 붙여넣기 하면 img 붙여넣기 되면서 바이너리? base64~~ 하면서 img 태그의 src로 붙는데,다른 게시판 웹사이트 보니까, okky나 tistory같은.붙여넣기 하면 바로 서버에 저장이 되는 모양이더라구요.그러니까, 붙여넣기 하면 https://자기사이트/경로/파일이름 이런식으로 되는 것 같아요.아마 프론트엔드 쪽에서 붙여넣기 하면 저 바이너리 파일 서버로 보내서 그 이미지 서버에서 임의의 이름 붙이고 그 주소 자체를 넘겨줘서 프론트엔드쪽에서 응답받으면 그걸 src로 쓰는 것 같은데, 제가 궁금한게, 그래서 붙여넣기 꾹 눌러서 연속으로 해봤거든요? 근데 모두 다른 이름으로 src에 부여되었어요. 그리고, 게시판 취소를 눌러도 그 url 복사했다가 들어가봐도 계속 들어가져요.근데 이러면 낭비가 될 수 있지 않나요? 만약 게시판 취소해버리면 그냥 서버에 이미지만 저장되고 그거와 링크된 게시물은 없게되잖아요.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
수업자료에 수정이 필요한 부분이 보여서 의견 드립니다.
프로젝트 생성시 Project Metadata 에 Java11로 설정하라고 작성되어 있는데요. Project MetadataGroup: helloArtifact: thymeleaf-basicName: thymeleaf-basicPackage name: hello.thymeleafPackaging: JarJava: 11 <<<<<<<<<<<<<이부분 현재 스프링부트 3버전대에서 17사용하라고 다른부분에는 작성되어 있는데 해당 부분에는 수정이 안되어있어서 수정이 필요할것 같아 의견드립니다 🙂 자칫하다 프로젝트 다시받아서 해야할 수 있어 번거로움이 있을 것 같아서요!좋은강의에 늘 감사드립니다 영한님