안녕하세요. ERD 읽는법 강의에 사용된 표 자료에서 보면은, ONE - MANY 가 보통 컬럼으로 매치가 되는데 테이블 : 테이블로 ONE-MANY가 매치 되는곳이 두군데 있더라구요. employees(one) - orders(many) products(one) - orderdetails (many) 그런데 orders 테이블안을 보면 employees를 전체 사용하는 무언가가 있는것이 아닌, employeeID가 FK 되어 있거든요. 그러면 테이블별 매칭이 아닌 employee테이블 내 employeeID 컬럼 (one) - orders테이블 내 employeesid(many)로 연결되어야 하는게 아닌가요?
package com.devques.phoca_chips import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.runApplication @SpringBootApplication public class PhotoCardApplication { } fun main(args: Array<String>) { runApplication<PhotoCardApplication>(*args) } // Application.kt 메인 파일 package com.devques.phoca_chips.test import org.springframework.stereotype.Controller import org.springframework.ui.Model import org.springframework.web.bind.annotation.GetMapping @Controller class IndexController { @GetMapping("/") fun index(model: Model): String { return "/index.html" } } // test.kt 테스트 파일 2024-05-22T23:48:47.176+09:00 ERROR 10856 --- [nio-8080-exec-1] org.thymeleaf.TemplateEngine : [THYMELEAF][http-nio-8080-exec-1] Exception processing template "/index.html": Error resolving template [/index.html], template might not exist or might not be accessible by any of the configured Template Resolvers org.thymeleaf.exceptions.TemplateInputException: Error resolving template [/index.html], template might not exist or might not be accessible by any of the configured Template Resolvers 2024-05-22T23:48:47.184+09:00 ERROR 10856 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.thymeleaf.exceptions.TemplateInputException: Error resolving template [/index.html], template might not exist or might not be accessible by any of the configured Template Resolvers] with root cause org.thymeleaf.exceptions.TemplateInputException: Error resolving template [/index.html], template might not exist or might not be accessible by any of the configured Template Resolvers 파일 구조 코드 에러입니다. 템플릿 폴더에 html, css 파일을 넣었을때는 정상적으로 페이지가 작동했는데 static 폴더로 옮긴 이후에 위와 같이 오류가 나오면서 파일을 찾지 못하는것 같습니다.. 비슷한 오류가 템플릿 폴더에서 나왔을땐 spring-boot-starter-thymeleaf 를 사용해서 해결했었는데 왜 static 폴더 안에 있는 파일들은 인식하지 못하는건지 궁금합니다. 스태틱과 템플릿 폴더가 서로 다른 정적,동적 콘텐츠를 다루는건 알고 있지만 왜 결과가 다르게 나오는지 모르겟습니다. 추가로 "/index.html" <-- 이 주소를 index, index.html, static/index.html, /static/index.html 등등 여러가지로 변경해봐도 달라지는건 없었습니다. 검색해봐도 비슷한 사례가 없는것같아 질문합니다.
다른분 질문도보고 답변도보고 수정도해보았는데 도저히 안됩니다... 폴더구조입니다. import 오류로 동영상 내용과 동일하게 ../ 를 추가 후 재 호출하면 아래와같이 나옵니다. 소스상 문제는없는것같은데.. 무엇이문제일까요.. 다른분질문에 AI가 라우팅문제일수있다 했는데 NEXT.CONFIG.JS에 따로 설정도없습니다. 다른분질문보니 /app/(beforeLogin)/page.tsx를 넣은것은 /app/page.tsx와 같은거라고 답변이 달린것도봣는데 위 오류에서 벗어날수가없습니다..
안녕하세요. 강의를 보던 도중 PostgreSQL을 설치하라고 하셔서, 수업 노트에 남겨두신 다운로드 url 링크를 타고 들어갔습니다. 해당 사이트에서 가장 최신 버전부터 하나씩 다 다운로드 해서 exe 파일을 모두 실행 시켜봤지만,,, Setup 설치 창 자체가 display되지 않습니다..
안녕하세요 ㅎㅎ 처음으로 3주차 문제를 혼자 힘으로 풀 수 있어서 너무 기뻤는데, 선생님과 다르게 풀어서 혹시 비효율적인 코드는 아닐까하고 여쭤보러 왔습니다! 얼마 전까지 실버도 못 풀던 제가 골드를 혼자 힘으로 맞출 수 있게 해주셔서 너무 감사합니다 ㅠㅠㅠ http://boj.kr/106cce4c523c4f4c8e18e73d413433e4
안녕하세요. as로 명명하는 것에 관해 질문드립니다. "2-5. 집계(GROUP BY + HAVING + SUM/COUNT)"에서 선생님께선 다음과 같이 쿼리를 작성해주셨는데요. select type1, count(id) as cnt from `basic.pokemon` group by type1 having cnt >= 10 order by cnt desc count(id)를 cnt로 명명한 후, having과 order by에서 그 별명을 이용하여 간단히 입력하신 걸 이해했습니다. 여기서 sql에 익숙해지고자, 여러 시험을 해보았는데, 다음과 같은 쿼리도 같은 결과를 출력할 수 있었습니다. select type1, count(type1) as cnt from `basic.pokemon` group by type1 having count(id) >= 10 order by count(kor_name) desc select 내의 count 괄호 내에는 type1 열을 불러 읽고, having 내의 count 괄호 내에는 id 열을 불러 읽고, order by 내의 count 괄호 내에는 kor_name 열을 불러 읽고, as로 select 내의 count 함수를 따로 명명해주었지만 그 별명을 사용하지는 않았습니다. 즉, 각 count 함수의 변수를 모두 전혀 다른 것들을 불러 읽는 엉망진창(...)으로 만들어 보았는데요. 그럼에도 불구하고, 문제 없이 같은 결과가 출력된다는 것은, as는 입력 간편화를 위해 이용하는 것이니, 명명을 하더라도 이용하지 않아도 출력상 문제는 없다고 이해해도 될까요? 그리고 count 내 변수를 랜덤하게 지정해도 같은 결과가 나옴에도 불구하고, id 열을 변수로 쓰는 이유는, 실무에서는 값이 누락되어 있을 가능성이 있을 열이 아닌, 하나의 row마다 반드시 값이 주어지는 열(=id 열)을 쓰는 것이 잘못된 집계를 피하기 위함이라고 이해해도 될까요? 글이 길어졌지만, 답변을 기다립니다. 미리 감사합니다.
섹션3 애니메이션 - 애니메이션 커브 강의에서 궁금한점이 있느데요. Get Curve Value가 리턴하는 값을 print text 함수를 통해서 로그를 찍어보았는데, Right로 돌리는걸 기준으로 해서 제 예상에는 -90, -80, -70 ... 0 이렇게 될거라고 예상을 했는데, 실제로 로그를 찍어보니, -1, -10, -20, ... -80, -75, -70, .... 0 이런느낌으로 찍히는데, 이유를 잘 모르겠습니다. Right Animation에서 Rotation Curve는 -90~0으로 세팅되어있습니다.
scroll_by_amount로 바뀌면서 시작하는 위치를 설정할 수 없게 된 것 같은데, 만약 인피니티 스크롤 하려고 할 때, 해당 마우스 포인터가 특정한 섹션에 있어야지 인피티니 스크롤을 할 수 있는 페이지라면 어떻게 설정을 해야될까요? 따로 sx, sy와 같이 해당 부분을 고정시키는 방법은 없을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] [JPA 적용1 - 개발] 14:08 에서 일반적으로 비즈니스 로직을 시작하는 서비스 계층에 트랜잭션을 걸어준다고 했는데 Service + Repository 둘다 트랜잭션을 거는 경우도 있을까요? 둘다 트랜잭션을 거는 경우에 Service에서는 정상적으로 작동해서 트랜잭션이 걸리지 않고, Repository에서는 롤백이 되는 경우도 있을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요 8:29강의 부분에서 id를 @GenerateValue를 쓰고, 테이블에서도 generateValue를 쓰는데 대신에 auto_increment를 써도 될까요? 안되는 이유가 있을까요? 쓸 수 있다면 어노테이션 @generatedValue대신 어떤 걸 쓸 수 있나요?
@PutMapping("/{pno}") public Map<String, String> modify(@PathVariable Long pno, ProductDTO productDTO) { // productDTO안에 pno값만 고정 productDTO.setPno(pno); // 원래 상품을 가지고 온다. old product 가져온다. DB에 저장되어 있는 저장된 정보 ProductDTO oldProductDTO = productService.get(pno); // 새로 업로드할 파일 가져온다. List<MultipartFile> files = productDTO.getFiles(); // 새로 업로드할 파일 저장 List<String> currentUploadFileNames = fileUtil.saveFiles(files); // 지워지지 않는 파일들 keep files 예전 파일 그대로 있는 것 List<String> uploadedFileNames = productDTO.getUploadFileNames(); if(currentUploadFileNames != null && !currentUploadFileNames.isEmpty()) { uploadedFileNames.addAll(currentUploadFileNames); } // 수정하기 productService.modify(productDTO); // 오래된 파일이 문제. 지워져야 하는 파일들 처리 // 기존 파일들을 가져온다. List<String> oldFileNames = oldProductDTO.getUploadFileNames(); if(oldFileNames != null && !oldFileNames.isEmpty()) { // 기존 파일 남아 있는지 확인 // uploadedFileNames에서 없다는건 이 파일은 이제 존재할 의미가 없다는것 그런것만 골라서 모은다. List<String> removeFiles = oldFileNames.stream().filter(fileName -> uploadedFileNames.indexOf(fileName) == -1 ) .collect(Collectors.toList()); // 삭제한다. fileUtil.deleteFiles(removeFiles); } return Map.of("RESULT", "SUCCESS"); } ProductController 에 이 메서드를 입력하고 ProductService에는 // 수정 void modify(ProductDTO productDTO); 이걸 입력하고 ProductServiceImpl에는 @Override public void modify(ProductDTO productDTO) { // 조회 Optional<Product> result = productRepository.findById(productDTO.getPno()); Product product = result.orElseThrow(); // 변경내용 반영 product.changePrice(productDTO.getPrice()); product.changeName(productDTO.getPname()); product.changeDesc(productDTO.getPdesc()); product.changeDel(productDTO.isDelFlag()); // 이미지 처리를 위해 목록을 비운다. List<String> uploadFileNames = productDTO.getUploadFileNames(); product.clearList(); if(uploadFileNames != null && uploadFileNames.isEmpty()) { uploadFileNames.forEach(uploadName ->{ product.addImageString(uploadName); }); } // 저장될 때 파일이 문제 파일이 변경됐는지 알 수 가 없다. productRepository.save(product); } private ProductDTO entityToDTO(Product product) { ProductDTO productDTO = ProductDTO.builder() .pno(product.getPno()) .pname(product.getPname()) .pdesc(product.getPdesc()) .price(product.getPrice()) .delFlag(product.isDelFlag()) .build(); List<ProductImage> imageList = product.getImageList(); if(imageList == null || imageList.isEmpty()) { return productDTO; } // 상품 이미지 목록 문자열로 바꾸기 List<String> fileNameList = imageList.stream().map(productImage -> productImage.getFileName()).toList(); productDTO.setUploadFileNames(fileNameList); return productDTO; } 이걸 입력하고 postman에서 PUT방식으로 해서 기존 이미지파일 내용을 그대로 복사해서 테스트를 하는데 "msg": "Validation failed for argument [1] in public java.util.Map <java.lang.String, java.lang.String> org.zerock.apiserver.controller.ProductController.modify(java.lang.Long,org.zerock.apiserver.dto.ProductDTO): [Field error in object 'productDTO' on field 'uploadFileNames': rejected value [ org.springframework.web.multipart.support .StandardMultipartHttpServletRequest$StandardMultipartFile@192a0968]; codes [typeMismatch.productDTO.uploadFileNames,typeMismatch.uploadFileNames, typeMismatch.java .util.List,typeMismatch]; arguments [ org.springframework.context.support .DefaultMessageSourceResolvable: codes [productDTO.uploadFileNames,uploadFileNames]; arguments []; default message [uploadFileNames]]; default message [Failed to convert property value of type ' org.springframework.web.multipart.support .StandardMultipartHttpServletRequest$StandardMultipartFile' to required type 'java.util.List' for property 'uploadFileNames'; Cannot convert value of type ' org.springframework.web.multipart.support .StandardMultipartHttpServletRequest$StandardMultipartFile' to required type 'java.lang.String' for property 'uploadFileNames[0]': no matching editors or conversion strategy found]] " 이런 에러가 계속 발생하는데요 왜 그럴까요 ㅠ postman에서 출력하는 메세지입니다. GTP에 입력해서 물어봤는데 ProductController 의 modify 메서드에서 ProductDTO 객체의 uploadFileNames 필드가 잘못된 타입으로 전달되었기 때문에 발생합니다. 이런 메세지를 주는데 강의 내용과 똑같이 입력했는데 왜 이런 메세지를 뱉어내는지 잘 모르겠습니다 ㅠ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 싱글톤 문제를 해결하기 위한 방법으론 이번 강의에서 설명하는 상태를 무상태로 설계하는 방법, 스프링 고급강의에서 설명해주는 방식인 쓰레드 로컬도 싱글톤을 해결하기 위한 방법 중 하나인가요??
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] enum의 경우 대문자로 모두 작성하셨는데 그냥 개발자들간의 enum을 알아보기위한 약속같은 것일까요? 대문자로만 작성하는 이유가 있을까요?