묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
오류(java.lang.IllegalStateException: java.lang.IllegalArgumentException: No DataSource specified)
강의와 똑같이 한 것 같은데 "No DataSource specified" 오류가 뜹니다ㅠㅠ
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
Facade를 controller 에서의 사용
안녕하세요 동시성 관련된 수업을 너무 잘 들었습니다. 위와 같이 만들어진 facade의 decrease 메서드를 controller에서 바로 사용하면 동시성 문제가 해결되는걸까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
HomeController가 선택되는 이유가 궁금합니다
수업과 같이 코드를 다 작성하고, HelloStringApplication을 실행하고나서localhost:8080을 들어가면 왜 3개의 컨트롤러중 home컨트롤러가 실행되어 home.html이 화면에 출력되는지 궁금합니다.
-
미해결스프링 핵심 원리 - 기본편
@beforeEach 사용하는 이유가 궁금합니다.
@beforeEach 를 사용하면 모든 테스트는 자신이 실행되기 전에 이 작업을 수행한다 라고 되어있는데 MemberServiceTest 부분에서 @beforeEach를 안쓰고MemberService memberService; AppConfig appConfig = new AppConfig(); memberService = appConfig.memberService();위와같이 쓰니 오류(Unknown class: 'memberService')가 났습니다.MemberService memberService; @BeforeEach public void beforeEach(){ AppConfig appConfig = new AppConfig(); memberService = appConfig.memberService(); }위의 코드처럼 @BeforeEach 사용해야 appConfig와 memberService를 정의 할 수 있는 이유가 궁금하며 @BeforeEach가 없으면 왜 오류가 나는지 궁금합니다.답변주시면 정말 감사하겠습니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
팩토리 메서드를 정적으로 사용하는 이유에 대해서 궁금합니다
안녕하세요 영한님 강의 잘 듣고 있습니다^^전부터 궁금해 왔던 것인데요, 팩토리를 만들 때 정적으로 올리는 이유에 대해서 궁금합니다영한님이 다른 QnA에서 추천해 주신 내용들을 읽어보았으나 굳이 왜 "정적"영역으로 보내는 가에 대한 의문은 쉽게 풀리지 않습니다 ㅜㅜ일단 정적 팩토리 메서드로 보내면 생성자들에 대한 응집도가 크게 떨어지는 느낌입니다. "엘레강트 오브젝트"라는 책을 보면 생성자는 10~15개 까지도 만들고 퍼블릭 메서드를 최대한 적게 가져가라고 가이드를 주는데요, 정적 영역으로 보내면 주/부 생성자로 보낼 수 없기 때문에 그 많은 생성자들이 다 흩어지고, 생성자들 간 관계를 맺을 수 없기 때문에 유연성이 떨어지고 코드 중복이 자주 일어나는 효과가 나는 것 같습니다이는 굳이 정적 영역으로 보내지 않고 주/부 생성자로 구분하면 쉽게 해결될 일이 아닌가? 하는 생각도 들어 질문을 드립니다
-
해결됨토비의 스프링 부트 - 이해와 원리
TestRestTemplate로 테스트 하는데 403 FORBIDDEN이 응답으로 옵니다.
문제가 되는 코드입니다. 브라우저에서는 200 응답이 정상적으로 오는데 테스트 코드에서만 이런 문제가 생깁니다. 의심가는 부분은 user-agent인데 헤더를 설정해주는 부분이 TestRestTemplate에는 없어서 다른 해결 방법이 있는지 질문드립니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
main/resources에서 basic 폴더 찾는 법 관련 질문
BasicItemController.java의 items()에서 return "basic/item";을 수행합니다.그리고 resources 폴더 하위는 다음과 같이 구성되어 있습니다.static > css폴더, html폴더templates > basic폴더return "basic/item"; 했을 때, basic폴더가 static이 아닌 templates폴더 하위에 있다는 것을 어떻게 아나요?static폴더에 있는지, templates폴더에 있는지 다 조회를 해보고 아는 것인가요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
직접 스프링 빈 등록하기 관련 질문
자바 코드로 직접 스프링 빈 등록하기에서 SpringConfig 파일에 코드를 작성하시는 부분을 보다가 궁금한게 생겨서 질문합니다.스프링 컨테이너에 빈을 등록한다는 것은 등록하고자하는 클래스의 실제 객체, 즉 인스턴스를 하나 생성하여 관리한다는 것으로 이해했는데요. 그럼 @Bean annotation을 붙이는 것은 빈으로 등록하겠다는 것을 명시하는 것을 나타내는 것 같은데, 꼭 메서드 형식으로 작성을 해야하는 것인가요? 예를 들어, 강의에 적혀있던 메서드 대신@Bean public MemberService memberService = new MemberService();위와 같이 변수 형태로 선언하면 안되는 것인가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
th:text에 의해 대체되는 부분 관련 질문
items.html의 일부 코드입니다. <td><a th:text="${item.id}">회원id</a></td> <td><a th:text="${item.itemName}">상품명</a></td> <td th:text="${item.price}">10000</td> <td th:text="${item.quantity}">10</td>선생님께서는 th:text에 의해 대체될 부분에 '회원id', '상품명', '10000', '10'을 작성하셨습니다.사실 저는 어차피 대체될 부분이니까 비워둬야 겠다고 생각을 했었는데, (th:text에 대체되더라도) 무엇이 들어가는지를 작성해두는 것이 좋은가요?그렇다면 혹시 서버에서 렌더링되지 않고 브라우저로 바로 봤을 때 무엇이 들어가는지 알기 위함인 것인가요?서버를 거치지 않고 브라우저로 바로 봤을 때의 상황까지 고려해주는 것이 좋은가요??
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
타임리프에서 URL 표현하는 법
items.html의 일부 코드입니다. <link th:href="@{/css/bootstrap.min.css}"> <button th:onclick="|location.href='@{/basic/items/add}'|"></button>MVC2 강의의 타임리프 편을 듣고 왔는데요,쿼리 파라미터, 경로변수 없는 단순한 URL(ex. @{/hello} -> /hello)인 경우, @{} 없이 그냥 문자열로 다루면 안 되는 것인가요?타임리프에서 th:href로 경로를 작성할 때는 단순 경로일지라도 @{}로 경로를 작성하는 것이 원칙인가요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@ModelAttribute Item item에 관한 질문(추가 수정)
앞선 질문내용이 잘못된것이 있어서 수정합니다.[질문 내용]@ModelAttribute는 지정된 객체를 생성하여, 요청 파라미터의 값을 해당 객체의 프로퍼티를 보고 입력해준다고 알고 있습니다.그리고 자동으로model.addAttribute("item", item);을 실행해 줄텐데 이때 모델에 담기는 item은기존에 업데이트하려는 item객체가 아니라 @ModelAttribute로 인해 새로 생성된 item을 넣어주게 되는 것 아닙니까?해당 모델을 return "/basic/item";으로 넘겨주게 되면 새로 생성된 item은 updateParam이기 때문에 id값이 없어서 예외가 발생하는 문제가 있습니다.따라서 redirect를 이용하여return "redirect:/basic/items/{itemId}"로 재요청을 하게되면 기존 model이 초기화 되고, itemId로 리포지토리에 있는 item을 찾고 해당 아이템을 model에 추가 하여"/basic/item" Html From으로 경로 이름을 반환하는 것으로 이해하면 될까요? (추가)리턴을 pathName으로 바로 해주어도item.id에 값이 제대로 들어가는 것으로 확인되는데Model에 담기는것은 updateParam 으로 id값이 없는 것으로 알고 있습니다. 어떻게 잘 작동하는지 궁금합니다.!
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
spring-mybatis 이미지 업로드 관련 NullPointerException 에러
안녕하세요!수업 듣다가 Mybatis로 이미지 업로드 해보려는데, 실패해서요 조언 좀 듣고 싶습니다.아래 코드에서 fileData.setFilePath가 Null 값으로 나오는데 왜그런걸까요 ? ㅠㅠjava.lang.NullPointerException: nullcom.restapi.bin.service.FileUploadDownloadService.uploadImageToFileSystem(FileUploadDownloadService.java:29) ~[main/:na]@Data public class FileData { private Long id; private String name; private String fileType; private String filePath; public FileData(Long id, String name, String fileType, String filePath) { this.id = id; this.name = name; this.fileType = fileType; this.filePath = filePath; } }@Service @Slf4j public class FileUploadDownloadService { @Autowired private FileDataMapper mapper; private static FileData fileData; private final String FOLDER_PATH = "/Users/david/Downloads/image/"; public String uploadImageToFileSystem(MultipartFile file) throws IOException { String filePath = FOLDER_PATH + file.getOriginalFilename(); log.info("file Path={}", filePath); fileData.setFilePath(filePath); fileData.setName(file.getOriginalFilename()); fileData.setFileType(file.getContentType()); log.info("fileData={}", fileData); mapper.insert(fileData); log.info("fileData={}/{}/{}", fileData.getFileType(), fileData.getName(), fileData.getFilePath()); file.transferTo(new File(filePath)); return null; } public byte[] downloadImageFromFileSystem(String fileName) throws IOException { Optional<FileData> dbImageData = mapper.findByFile(fileName); //이미지가 저장된 파일을 가져옴 > 바이트배열로 변환 > 서비스에서 다시 반환하여 얻음 String filePath = dbImageData.get().getFilePath(); byte[] images = Files.readAllBytes(new File(filePath).toPath()); return images; } }
-
해결됨토비의 스프링 부트 - 이해와 원리
블로그에 강의 내용을 정리해서 올려도 괜찮을까요?
안녕하세요. 수업 흥미롭게 듣고 있는 수강생 입니다.블로그에 공부한 내용을 정리해두는걸 좋아합니다. (예시) 토비님의 강의도 아래처럼 강의를 정리하면서 듣고 있는데 혹시 블로그(광고 안붙인 블로그입니다.)에 아래와 같이 메모한 강의 내용을 올려도 괜찮을지 문의드립니다. 주로 강의 따라서 작성한 코드 스샷 및 말하신 내용 중 기억할만한 부분들이나 전체적인 흐름을 적었습니다. (나중에 제가 보고 기억날 수 있게요)가능하시다면 혹시 일부 강의 스샷도 올려도 되는지 궁금합니다(특히 현재까지의 코드 구조 중간중간 설명해주신 부분이나 초반에 Containerless 설명해주신 부분이요! 물론 몇장만요.)
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
모델추가 부분에서 왜 에러가 뜨는지 잘모르겠습니다.
지금까지 잘 되다가 모델에 멤버객체를 집어넣는 부분에서 에러가 떠서 진행이 안되네요.. 구글에 쳐도 여거가지 시도를 해도 잘안되서 질문드립니다..
-
해결됨토비의 스프링 부트 - 이해와 원리
@ComponentScan 에 대해서
@Component를 사용하기 위해서는 @ComponentScan을 사용하는데 더 나아가 @component가 메타 어노테이션으로 쓰이는 @Service나 @Controller 같은 경우는 @ComponentScan없이 동작이 되는데요. 내부적으로는 @Component 어노테이션을 사용해 @ComponentScan이 필요하지 않을까 했는데 없어도 동작이 되는것 같은데요.이는 동작이 다른건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
컬렉션 필드에서 초기화 질문이 있습니다. (arraylist 기본 사이즈 문제)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]ArrayList는 기본 사이즈를 10으로 생성하고 이후 사이즈를 초과할 경우 2배로 늘린 후 기존의 값을 복사하는 것으로 알고 있습니다.만약 사용자의 orders 개수가 10개 이상이라면, 이것을 지속적으로 늘리는 연산이 필요할 것으로 생각됩니다.실무에서는 arraylist를 필드 초기화할 때, 이런한 것을 예상해서 넉넉한 사이즈로 초기화를 하는지, linkedlist로 초기화하여 불필요한 연산을 줄이는 지 궁금합니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
quantity 검증에 질문이 있습니다.
안녕하세요. 우선 좋은 강의 감사드립니다.수업을 따라 진행하다가, quantity 검증과 관련해 질문이 있습니다.일부러 수량(quantity)에 큰 값을 넣어봤는데요, 저장을 누르면 이 숫자를 문자로 인식하는 것 같습니다. 99999로 입력하면 올바른 에러가 발생하는데요, 캡쳐본에 있는 값으로 넣게 되면2023-01-23 12:23:56.797 WARN 21288 --- [nio-8080-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errorsField error in object 'item' on field 'quantity': rejected value [9999999999999]; codes [typeMismatch.item.quantity,typeMismatch.quantity,typeMismatch.java.lang.Integer,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [item.quantity,quantity]; arguments []; default message [quantity]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.lang.Integer' for property 'quantity'; nested exception is java.lang.NumberFormatException: For input string: "9999999999999"]]이러한 에러가 발생하게됩니다.혹시 이런 에러가 발생하는 이유가 있나요? 아 혹시 integer의 최대 숫자보다 커서 문자로 인식이되는건가요?감사합니다.
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
api/v1/members 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.400 에러가 뜨는데 어느 부분을 놓쳤을까요?@RequiredArgsConstructor @RestController public class MemberApiController { private final MemberService memberService; @PostMapping("/api/v1/members") public CreateMemberResponse saveMemberV1(@RequestBody @Valid Member member) { Long id = memberService.join(member); return new CreateMemberResponse(id); } @Data static class CreateMemberResponse { private Long id; public CreateMemberResponse(Long id) { this.id = id; } } }
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
F12 개발자 도구 Headers에 왜 Form Data가 있는거죠?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강사님께서 F12(개발자 도구 창)을 띄워서 Form Data가 넘어오는걸 보여주셨는데그림을 보면 Headers 메뉴 안에 Form Data 가 있습니다.그런데 HTTP프로토콜에서 Form Data는 쿼리 스트링 형식으로 message body에 들어가서 전달 된다고 알고있는데 개발자 도구에서는 Headers메뉴에 있네용편의상 Headers메뉴에 message body값도 같이 넣은건지 제가 뭔가 잘못이해하고 있는 건지 궁금합니다.
-
해결됨토비의 스프링 부트 - 이해와 원리
Dependency Injection 부분 질문
토비님 질문이 있습니다.디자인 패턴이며 oop며 다들 지향하는게 추상화에 의존하라 즉 인터페이스에 의존하는 내용이 많은데요그 부분을 스프링 빈 사이의 의존성에 연관을 지으니까 조금 의아한 부분이 있더라구요이 회차 강좌에서 말씀해주신거 처럼HelloController가 인터페이스(HelloService)를 의존한다고 해도결국에는 런타임시 SimpleHelloService에 의존적인거죠?만약 런타임시 CompleHelloService에 의존으로 하려면 결국에는 HelloController 소스를 수정해야하는거죠?