묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 프레임워크는 내 손에 [스프1탄]
질문이있어요
int result=memberMapper.register(m);이부분은 xml을보면 단순한 쿼리 인서트문장인데 result에 1과 0은 어디서 지정해준건가요?
-
미해결스프링 시큐리티 OAuth2
안녕하세요 MSA 구성을 진행하고 있는 뉴비 신입 개발자입니다.
KeyCloak 을 인가서버로 활용하고Resource 자원 사용하는 Data API 인가 처리를 하는 Auth API (Gateway) 를 구현해서 진행하고 있습니다.그런데 너무 여러가지 방식이 많다보니 혼돈이 와서 선생님이 가르쳐주신 방식으로 인가와 인증을 구현하려고하는데,인가 서버 -> KeyCloak 사용 게이트 웨이에 Oauth2 를 넣으려고 하는데 개념적으로 궁금한 점이 있어 여쭤봅니다.공개 클라이언트 방식과 기밀 클라이언트 가 구현함에 있어 어떤 차이를 가지는지 의문입니다.가령 react -> KeyCloak 요청 시 token 을 바로 가져오려고 하는데, 이 토큰을 받는 것 까진 문제가 없습니다. 하지만 영상에서 보여주신 것과 같이 자원 API 로 접근하는 권한을 획득하기 위해서 기밀 클라이언트 방식으로 구현하면 code 를 리다이렉트 받은 uri 와 token 요청시 리다이렉트 uri 가 같아야하는 문제가 있어서 code 를 auth api 로 받은 뒤 토큰 엔드포인트를 찍어 스프링 프로젝트에서 가져올 때 오류가 발생합니다.react -> keycloak -> code 반환 받은 것 -> spring -> redirect uri 문제로 토큰 발급 불가 가 되는데 어떤 형식으로 처리해야 맞는 것인지 궁금합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
th:field="*{open}"에 의해 생성된 value 속성 관련
addForm.html의 일부 코드입니다. <form th:object="${item}"> <input type="text" id="itemName" th:field="*{itemName}"> <input type="checkbox" id="open" th:field="*{open}"> </form> 렌더링 후 첫 번째 input: <input type="text" id="itemName" name="itemName" value=""> 두 번째 input: <input type="checkbox" id="open" name="open" value="true"> <input type="hidden" name="_open" value="on"/>th:field에 의해 <input>에 name, value 속성이 생기는데, value에는 각각 itemName, open의 값이 들어갑니다.th:object="${item}"에서 넘긴 Item 객체는 빈 객체니까, 첫 번째 <input>에 value=""가 들어간 것은 알겠습니다.그런데, 왜 두 번째 <input>에는 value=""가 아닌 어떻게 true라는 값이 들어가는 것인가요?혹시 <input type="checkbox">일 때는 value에 들어가는 것이 달라지는 것인가요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
<input type="hidden"> value 속성값 관련
<input type="hidden">에서 value 속성을 작성해주는 이유는 알겠습니다. 그런데, 선생님께서 value 속성값으로 on을 작성하신 것에 대해 질문이 있습니다.제가 value="", value="on", value="off", value="true", value="false", value="hello"로 해보았는데, item.open으로 로그를 찍어봤을 때 전부 false로 출력되었습니다. 그렇다면 <input type="hidden">에서 value의 속성값으로는 아무거나 적어도 되는 것인가요? @PostMapping("/add") public String addItem(@ModelAttribute Item item) { ... }@ModelAttribute에 의해 Item 객체가 생성된 후, 넘어오는 것에 open, _open이 있으면 setOpen(true)을 호출하고, 넘어오는 것에 _open이 있으면 setOpen(false)를 호출하는 것인가요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
MVC 프레임워크 만들기 v3 -> v4 리팩토링 질문입니다.
안녕하세요. Model 추가 - v3 단순하고 실용적인 컨트롤러 - v4v3 -> v4 리팩토링 의문이 생겨 질문드립니다.영한님의 위와 같은 설명은 충분히 이해와 공감이 가는 부분입니다.v3 -> v4 으로 리팩토링 중 v4의 Map<String, Object> model 항목이 ControllerV4 구현체 내 출력인수로 사용되는 것으로 보입니다.오히려 구현 과정에서 번거로운 부분은 제거 하였지만, 출력인수로 인한 혼란이 오지 않을까? 라는 생각이 되어 질문드립니다.v4 process 함수에서 2가지의 결과 값을 받는 형태로 보여집니다.process 함수의 실제 return 값 String(viewName)render에 필요한 Map<String, Object> model 값꼭 v3 -> v4 리팩토링 과정이 아닌 실제 현업에서 이와 비슷한 경우 어떠한 방식을 채택하여, 풀어가는지 궁금하여 질문드립니다.
-
미해결스프링 핵심 원리 - 고급편
강의를 듣다 문득, ThreadLocal과 synchronized의 성능차이?가 궁금하여서 질문했습니다.
안녕하세요. 영한님!! ThreadLocal 쪽강의를 듣다가 궁금하게 생겨 질문하게 되었습니다.java에서 동시성을 해결할 수 있는 방법 중 하나인 synchronized가 있다고 알고 있습니다.ThreadLocal과 비교해볼 때 성능적으로 큰 차이가 있을까요??? 혹은 코드 취향에 따라 선택적으로 사용하면 될지 문득 궁금하여 질문을 남겼습니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
기존의 테이블이 삭제되지 않습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요.application.yml jpa: hibernate: ddl-auto: create이라 되어 있는데, 기존의 테이블이 드랍되지 않습니다.질문 게시판을 검색해보니, H2의 버전이 1.4.200인 경우에는 하이버네이트 버전을 5.4.13.Final 로 바꿔야 한다고 되어 있네요. 그래서, build.gradle 에 ext["hibernate.version"] = "5.4.13.Final" 를 추가 해놓고 다시 돌려보니 이제는 엄청난 에러메시지가 나오네용..하이버네이트 버전을 바꾸는 방법이 올바르지 않았나요?
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
현업에서의 jpql
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.쿼리 dsl에서 많이 설명 해주셨는데요 그렇다면 dsl을 쓰는 현업에서는 jpql을 사용할 일이 전혀 없을까요 ? 전혀 없다고 해도 근본이 되는 jpql을 알아둬야 하겠지만 학습시간에 대한 비중을 어디에 크게 둬야 할지 의문입니다 .
-
미해결스프링 핵심 원리 - 기본편
@Configuration 유무 질문
안녕하세요, @Bean이 있더라도,@Configuration이 있어야만, 싱글톤이 보장된다(프록시,,,)고 알고 있습니다... 그러나 강의 중에 보면 Class TestConfig에 @Configuration이 없어도 싱글톤 처럼 작동을 하네요,,(statefulService1 = hello.core.singleton.StatefulService@d78795statefulService2 = hello.core.singleton.StatefulService@d78795) 해당 부분은 왜 그런지 자세한 설명 요청드립니다... public class StatefulServiceTest { @Test void statefulServiceSingleton() { ApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class); StatefulService statefulService1 = ac.getBean("statefulService", StatefulService.class); StatefulService statefulService2 = ac.getBean("statefulService", StatefulService.class); System.out.println("statefulService1 = " + statefulService1); System.out.println("statefulService2 = " + statefulService2); //ThreadA: A사용자 10000원 주문 statefulService1.order("userA", 10000); //ThreadB: B사용자 20000원 주문 statefulService2.order("userB", 20000); //ThreadA: 사용자A 주문 금액 조회 int price = statefulService1.getPrice(); //ThreadA: 사용자A는 10000원을 기대했지만, 기대와 다르게 20000원 출력 System.out.println("price = " + price); Assertions.assertThat(statefulService1.getPrice()).isEqualTo(20000); } // @Configuration static class TestConfig { @Bean public StatefulService statefulService() { return new StatefulService(); } } }
-
미해결스프링 핵심 원리 - 기본편
@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개 까지도 만들고 퍼블릭 메서드를 최대한 적게 가져가라고 가이드를 주는데요, 정적 영역으로 보내면 주/부 생성자로 보낼 수 없기 때문에 그 많은 생성자들이 다 흩어지고, 생성자들 간 관계를 맺을 수 없기 때문에 유연성이 떨어지고 코드 중복이 자주 일어나는 효과가 나는 것 같습니다이는 굳이 정적 영역으로 보내지 않고 주/부 생성자로 구분하면 쉽게 해결될 일이 아닌가? 하는 생각도 들어 질문을 드립니다
-
미해결스프링 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; } }
-
해결됨토비의 스프링 부트 - 이해와 원리
Dependency Injection 부분 질문
토비님 질문이 있습니다.디자인 패턴이며 oop며 다들 지향하는게 추상화에 의존하라 즉 인터페이스에 의존하는 내용이 많은데요그 부분을 스프링 빈 사이의 의존성에 연관을 지으니까 조금 의아한 부분이 있더라구요이 회차 강좌에서 말씀해주신거 처럼HelloController가 인터페이스(HelloService)를 의존한다고 해도결국에는 런타임시 SimpleHelloService에 의존적인거죠?만약 런타임시 CompleHelloService에 의존으로 하려면 결국에는 HelloController 소스를 수정해야하는거죠?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
파일 업로드 중 에러 발생
서블릿과 파일 업로드2 를 학습하던 중삭제가 불가능하다는 예외가 발생하면서여러 방법을 시도해도 해결되지 않아 문의 드립니다. 개발 환경window사용중인 스프링 부트 버전 : 2.7.8자바 언어 버전 : 11 properties 설정경로 설정은 위의 사진처럼 했습니다. 에러 로그를 보면 삭제를 할 수 없다고 뜨면서 예외가 발생합니다. 로그 속에 있는 경로로 들어가 직접 파일 제거 시도-> 서버가 내려갈 경우 파일이 삭제되는 것 확인 가능 해당 부분이 문제라고 생각됩니다.해결하기 위해 했던 노력관리자 권한으로 프로그램 실행결과 : 실패강의 자료 코드 그대로 옮겨 오기결과 : 실패강의 소스 코드 그대로 옮겨 오기결과 : 실패경로 바꿔 보기결과 실패총 4가지의 시도 결과 전부 실패해 문의 드립니다. 에러 발생 로그내가 생각하는 로그 핵심 문제 원인2023-01-22 21:42:00.789 WARN 31328 --- [nio-8080-exec-3] s.w.m.s.StandardServletMultipartResolver : Failed to perform cleanup of multipart items2023-01-22 20:48:55.796 ERROR 28536 --- [nio-7070-exec-3] o.apache.coyote.http11.Http11Processor : Error processing requestjava.io.UncheckedIOException: Cannot delete C:\Users\lgh94\AppData\Local\Temp\tomcat.7070.1452951454340902875\work\Tomcat\localhost\ROOT\upload_ee1add48_92d9_4d5b_8495_af18bb01c136_00000000.tmpat org.apache.tomcat.util.http.fileupload.disk.DiskFileItem.delete(DiskFileItem.java:431) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.catalina.core.ApplicationPart.delete(ApplicationPart.java:54) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.catalina.connector.Request.recycle(Request.java:483) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:441) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:891) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1784) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na]Caused by: java.io.IOException: Cannot delete C:\Users\lgh94\AppData\Local\Temp\tomcat.7070.1452951454340902875\work\Tomcat\localhost\ROOT\upload_ee1add48_92d9_4d5b_8495_af18bb01c136_00000000.tmp... 13 common frames omitted2023-01-22 20:48:55.796 DEBUG 28536 --- [nio-7070-exec-3] o.apache.coyote.http11.Http11Processor : Error state [CLOSE_CLEAN] reported while processing requestjava.io.UncheckedIOException: Cannot delete C:\Users\lgh94\AppData\Local\Temp\tomcat.7070.1452951454340902875\work\Tomcat\localhost\ROOT\upload_ee1add48_92d9_4d5b_8495_af18bb01c136_00000000.tmpat org.apache.tomcat.util.http.fileupload.disk.DiskFileItem.delete(DiskFileItem.java:431) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.catalina.core.ApplicationPart.delete(ApplicationPart.java:54) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.catalina.connector.Request.recycle(Request.java:483) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:441) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:891) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1784) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na]Caused by: java.io.IOException: Cannot delete C:\Users\lgh94\AppData\Local\Temp\tomcat.7070.1452951454340902875\work\Tomcat\localhost\ROOT\upload_ee1add48_92d9_4d5b_8495_af18bb01c136_00000000.tmp... 13 common frames omitted2023-01-22 20:48:55.798 ERROR 28536 --- [nio-7070-exec-3] o.a.coyote.http11.Http11NioProtocol : Error reading request, ignoredjava.io.UncheckedIOException: Cannot delete C:\Users\lgh94\AppData\Local\Temp\tomcat.7070.1452951454340902875\work\Tomcat\localhost\ROOT\upload_ee1add48_92d9_4d5b_8495_af18bb01c136_00000000.tmpat org.apache.tomcat.util.http.fileupload.disk.DiskFileItem.delete(DiskFileItem.java:431) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.catalina.core.ApplicationPart.delete(ApplicationPart.java:54) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.catalina.connector.Request.recycle(Request.java:483) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.catalina.connector.CoyoteAdapter.log(CoyoteAdapter.java:515) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:429) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:891) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1784) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na]Caused by: java.io.IOException: Cannot delete C:\Users\lgh94\AppData\Local\Temp\tomcat.7070.1452951454340902875\work\Tomcat\localhost\ROOT\upload_ee1add48_92d9_4d5b_8495_af18bb01c136_00000000.tmp... 13 common frames omitted2023-01-22 20:48:55.799 ERROR 28536 --- [nio-7070-exec-3] org.apache.tomcat.util.net.NioEndpoint : Error running socket processorjava.io.UncheckedIOException: Cannot delete C:\Users\lgh94\AppData\Local\Temp\tomcat.7070.1452951454340902875\work\Tomcat\localhost\ROOT\upload_ee1add48_92d9_4d5b_8495_af18bb01c136_00000000.tmpat org.apache.tomcat.util.http.fileupload.disk.DiskFileItem.delete(DiskFileItem.java:431) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.catalina.core.ApplicationPart.delete(ApplicationPart.java:54) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.catalina.connector.Request.recycle(Request.java:483) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.catalina.connector.CoyoteAdapter.log(CoyoteAdapter.java:515) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.catalina.connector.CoyoteAdapter.checkRecycled(CoyoteAdapter.java:539) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.coyote.http11.Http11Processor.recycle(Http11Processor.java:1439) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.coyote.AbstractProtocol$ConnectionHandler.release(AbstractProtocol.java:1098) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:1056) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1784) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.71.jar:9.0.71]at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na]Caused by: java.io.IOException: Cannot delete C:\Users\lgh94\AppData\Local\Temp\tomcat.7070.1452951454340902875\work\Tomcat\localhost\ROOT\upload_ee1add48_92d9_4d5b_8495_af18bb01c136_00000000.tmp... 14 common frames omitted
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
<th:block> 태그의 존재 이유 관련 질문
<div th:each="user : ${users}"> <div> 사용자 이름1 <span th:text="${user.username}"></span> 사용자 나이1 <span th:text="${user.age}"></span> </div> <div> 요약 <span th:text="${user.username} + ' / ' + ${user.age}"></span> </div> </div><th:block> -> <div>로 바꾼 코드입니다.th:block 태그를 사용하지 않고 div 태그 2개를 반복할 수 있는 방법이 존재할 것 같아서 바꿔본 것인데,가장 바깥 <div> 태그가 출력된다는 점을 제외하면 눈에 보이는 결과물은 동일합니다.제가 아직 경험이 부족해서 <th:block>가 유용하게 사용되는 경우를 모르는 것이겠죠...? ㅠㅠ
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
선행 지식
스프링 강의 선행으로 요구되는 지식이 자바, 관계형 데이터베이스 기초라고 되어 있는데요자바랑 MySQL은 공부했습니다.그런데 JDBC나 JSP, 서블릿, 디자인 패턴 등에 대한 지식이나 웹 개발에 대한 지식은 모른 채로 로드맵 시작해도 상관없나요?
-
미해결
JPA 식별관계 사용에 대해서...
Jpa를 사용할 때 테이블 관리를 쉽게 하기 위해서 비식별 관계로 테이블을 설계하라고 들었는데 그러면 실무에서 jpa쓸 때 식별관계를 안쓰나요?
-
해결됨토비의 스프링 부트 - 이해와 원리
DI를 이용한 Proxy패턴 관련 질문
DI를 이용한 Decorator, Proxy 패턴 듣고있는데요. 강의자료에 프록시 패턴의 프록시와 일반적용 용어 프록시, 자바의 다이나믹 프록시가 동일한 건 아니다. 이게 혹시 어떤내용인지 좀 더 알 수 있을까요?
-
미해결스프링 핵심 원리 - 기본편
스프링 빈 호출시 질문있어요 !!
스프링 부트 쓸때는 그냥 편하게 스프링 빈 가져왔는데 AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class); DiscountPolicy rateDiscountPolicy = ac.getBean("rateDiscountPolicy",DiscountPolicy.class);본 강의에서는 이처럼 ac 객체만들고 ac.getBean()해서 들고오는 이유가 뭐죠 ?? 제 생각에는 클래스 2개가 둘다 스프링 빈 등록시 그냥 편하게 가져와서 쓰면 된다. 하지만 만일 A클래스는 스프링빈 등록 x, B클래스는 스프링 빈 등록 시A에서 B객체를 들고 올때는 강의와 마찬가지로 ac.getBean()으로 들고와야 한다 혹시 맞나요 ??
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
인텔리제이 무료 버전도 학습에 지장없나요?
지장없다는 말도 있고 있다는 말도 있던데 저는 김영한님 로드맵 2개 다 들을 예정인데 강의가 몇십 개 있더라구요 인텔리제이 무료 버전을 써서 막히는 부분들이 있을까요?