묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결토비의 스프링 부트 - 이해와 원리
서버운영중 오류 예외 발생시 원인 찾는 방법 문의 드립니다
안녕하세요 토비님~이번에도 강의 내용과 상관 없는 질문 드립니다 시스템을 운영하면서 예상치 못한 에러상황이나자바소스 예외 상황이 발생 했을 때 예외가 발생한 자바소스는 어떤 자바파일 이며그 특정 자바 파일 몇번째 라인에서 왜? 오류나 예외가 발생했는지로그를 담아 db에 넣고 싶습니다. 그러면 개발자 입장에서 원인 찾아 소스 수정하는게 빠를 테니까요..(서버에 남는 로그파일에서 찾아서 로그를 다시 다운받아서 찾아 보는 것 보다 db 테이블에서 clob 으로 레고드를 남기고 찾아서, 따라 가는게 이득이라고 생각했습니다 ) 구글링해보니 우선 아파치 ExceptionUtils 부분이 있어아래 이미지와 같이 적용을 했는데 토비님이 실무에서 사용하고 계시는 다른 쉽고 좋은 베스트 방법이 있진 않을까 문의 드립니다 급한 질문 아닙니 시간 나 실 때알려주시면 감사하겠습니다. 수고하세요.--█●●--------------------------------------------#Exception #Error#예외#처리#원인#로그#부트#spring#sping-boot#springboot#토비--█●●--------------------------------------------
-
해결됨토비의 스프링 부트 - 이해와 원리
회사 비지니스 공통업무처리 관련 유용한 라이브러리 들이 있는지 여쭤봅니다
안녕하세요 토비님~이번에도 강의 내용과 상관 없는 질문 드립니다회사에서 타임리프 + JPA + 마이바티스 + 스프링/스프링부트 + 오라클 환경에서 개발하고 있습니다 MVC CRUD, API 송수신, 특이업무를 제외하고는 보통 회사에서 일어나는 공통업무는 아래와 같은 부분이 있다고 생각 합니다*.엑셀다운*.엑셀업로드*.이메일전송(첨부파일포함)*.PDF다운*.FAX전송*.출력 다른 분들이 먼저 개발해 놓은 소스를 참고해 가며개발 수정 운영을 하고 있는데요 제가 느끼기에는 뭔가 불필요한 소스 코드가 많고 긴 건 아닐까?..누군가 잘 만들어 놓은 라이브러리 메서드에 파라미터만 담아주고호출 하면 되진 않을까 생각이 들었습니다 혹시, 아래와 같은 공통 업무 사항들에 대해서 스프링 진영에서 Util 성격으로 잘 만들어 미리 만들어 놓은 좋은 라이브러리가 있지는 않 을까 생각이 듭니다 (엑셀업로드,다운로드/이메일송수신/PDF/FAX/출력 .. )회사마다 환경이나 요구 상황에 따라서 다르겠지만, 토비님은 이런 공통 비지니스 업무 관련 엑셀업로드,다운로드/이메일송수신/PDF/FAX/출력 관련 공통 비지니스 업무 관련해서 스프링 진영에서 혹시 이미 만들어 놓은 라이브러리 의존 관계를 추가해서사용하고 계시는 부분이 있나 여쭤봅니다 만약 사용하고 계신다면 어떠 어떠한 것들이 있는지 소개 부탁 드립니다 급한 질문 아닙니 시간 나 실 때알려주시면 감사하겠습니다. 수고하세요.--█●●--------------------------------------------#엑셀#이메일#PDF#FAX#출력#스프링#스프링부트#부트#spring #sping-boot#springboot#토비#공통#라이브러리--█●●--------------------------------------------
-
미해결토비의 스프링 부트 - 이해와 원리
5:40분초 쯤에... 프로퍼티클래스의 분리 강의에서
@Bean @ConditionalOnMissingBean public ServletWebServerFactory jettyServletWebServerFactory(ServerProperties serverProperties){} 이부분에 ServerProperties 을 따로 주입을 안받아도 되나요..? 빈으로 띄워서 그런건가..?매개변수에 딱 저렇게 누가 넣어주는건가요..?@Autowired없이..? 헷갈리네요 ㅠㅠㅠ
-
미해결토비의 스프링 부트 - 이해와 원리
강의 자료 소스코드가 github에 있는것과 다르던데..
https://github.com/tobyspringboot/helloboot 에 있는 소스랑 다르던데.. META-INF.spring에 있는 내용은 어떻게 구성하는 것인가요? 강의 휘리릭 듣고 따라 하려고 하는데.. 잘 안되네요.. ^^;
-
해결됨토비의 스프링 부트 - 이해와 원리
@Configuration에 대해 질문드립니다.
안녕하세요 토비님강의를 듣다가 의문점이 생겨서 질문 드립니다.@Configuration와 @Component의 차이점을 잘 모르겠습니다. @Configuration안을 보면 @Component와 @Documented가 있는데 단지 @Documented 차이인가요?아니면 ProxyMode를 사용하기위한 상위 버전의 개념이라고 생각 하면 될까요?
-
해결됨토비의 스프링 부트 - 이해와 원리
스프링 api 메세지 수신시 map dto 뭐가 좋을까요? 어떤상황에 map , dto 를 선택해서 사용해야 할까요?
안녕하세요 토비님 ~ 토비님 강의와 유튜브 잘 보고 있습니다. 감사합니다.강의 내용과 벗어난 질문이긴 하지만 개발하다 궁금한 부분 있어 질문 드립니다 스프링을 이용해서 api 데이터 수신 시저는 RestTemplate dto선언해서 Mapstruct 이용해서 개발을 했고다른분은 map 을 이용해서 받아서 개발하는걸 봤습니다 처리해야 하는 상황에 따라 다르겠지만,토비님이 경험하신 노하우로는 어떤 경우에는 map 으로 받으면 좋고 어떤경우는 dto 로 받아서 처리하는게 좋은 건지 정석, 베스트 정답이 있을까요?경우에 따라서 사례를 들어서 설명해주시면 좋겠습니다 급한 질문은 아니니 한가한 시간 나실 때알려 주시면 좋겠습니다 #spring #스프링#spring-boot#스프링부트#부트#RestTemplate#레스트템플릿#api#map#dto#vo#최선#정석
-
해결됨토비의 스프링 부트 - 이해와 원리
스프링, 스프링부트,배치, JPA, MVC, 디자인 패턴 등등 어떻게 공부 해야 할지 조언 부탁드립니다
안녕하세요 토비님강의 잘 들었습니다~ 오늘 새벽에 토비님 유투브를 일부 보다 보니오라클 레퍼런스 사이트가 잘되어 있으니보시면 웬만한 책보다 잘되있고 유용하다고 말씀하시더라구요 토비님이 선배 개발자 로서학생분들, 후배 개발자 동료 분들이스프링, 스프링부트,배치, JPA, MVC, 디자인 패턴 등등어떻게 공부 해야 할지 추천 조언 부탁 드립니다 좋은 유튜브나, 강의사이트, 블로그, 서적 등이공부하고 참고 할 수 있는 부분들이요부끄럽지 않은 개발자가 되고 싶고지금 보다 더 성장하고 싶습니다( 요즘 올리시는 유튜브에 타임어택 잘 보고 있습니다 ) -.토비님을 존경하고 사랑하는 후배 개발자가.. #spring-boot#spring#스프링#스프링부트#JPA#MVC#추천#공부#방법#조언
-
미해결토비의 스프링 부트 - 이해와 원리
안녕하세요 토비선생님 load(MyAutoConfiguration.class)
여기에 들어가는 클레스는 DispacherServiletConfigTomcatWebWebServerConfig에 선언된 애노테이션? 메타에노테이션?클레스 값을 넣는 건가요 ?? MyAutoConfiguration에서DispacherServiletConfigTomcatWebWebServerConfig2가지에 대한 메타데이터 설정을 세팅함(Configration)그리고 DispacherServiletConfig,TomcatWebWebServerConfig 에 @MyAutoConfiguration 에노테이션 선언EnalbeMyAutoConfigration에서 MyAutoConfigImportSelector를 이용해파일 경로에 있는 빈 정보들을 가저옴 .load(설정이 셋팅된 @클레스 입력,classLoader)MySpringBootApplication 에서@EnableMyAutoConfigration 선언을 통해서 사용제가 현재 이해한 바는 이런데 맞을까요?
-
미해결토비의 스프링 부트 - 이해와 원리
강의 다운로드가 가능한가요?
현재 파견나와서 인터넷 설치가 안되어있어 테더링으로 하려니 부담이 되서요회사에서 다운 후 집에가서 공부하고 싶은데 가능한지 궁금합니다.안되면 어쩔 수 없구요
-
해결됨토비의 스프링 부트 - 이해와 원리
스프링 컨테이너 설명중 헷갈리는 부분이 있어 질문 드립니다.
안녕하십니까강의 즐겁게 보고 있습니다.Containerless 강의 6분 30초 부분에서 다음과 같이 설명 해주셨습니다."여러개의 Bean을 가지고 있는 스프링 컨테이너가 서블릿 컨테이너 뒤쪽에서 서블릿을 통해서 웹으로 들어온 요청을 받아가지고 스프링 컨테이너한테 다시 넘겨준다."해당 부분 설명이 조금 헷갈리는데 그냥 단순하게 서블릿 컨테이너를 통해 들어온 요청을, 서블릿 컨테이너 뒤에서 동작하고 있는 스프링 컨테이너에 넘겨준다. 정도로 생각하면 될까요?"스프링 컨테이너한테 다시 넘겨준다" 는 부분이 좀 헷갈리는데 제가 이해한것이 맞는지 궁금하여 질문 남깁니다. 감사합니다.
-
미해결토비의 스프링 부트 - 이해와 원리
@MyAutoConfiguration 애노테이션 역할
안녕하세요. 토비님.강의를 들으면서 DispatcherServletConfig와 TomcatWebServerConfig 정보는 ...import 파일에서 정보를 가져와서 빈으로 등록하는 것으로 이해하였습니다.그러면 의아했던 점이 ..Config 클래스에 선언한 @MyAutoConfiguration 애노테이션의 역할을 import 파일이 대신 해주고 있는 것으로 이해하였는데, 이 애노테이션도 같이 선언되어있어서 이 애노테이션은 어떤 역할을 하는지 궁금합니다.실제로 @MyAutoConfiguration이 애노테이션을 삭제하고 스프링을 실행해도 정상적으로 동작을 하고 테스트도 통과하였습니다. (강의 내에서 토비님께서 관례상으로 붙인다고 말씀하셨던 것으로 기억을 하는데, 이가 @MyAutoConfiguration 애노테이션을 관례상 붙여준다는 의미였는지는 정확히 잘 모르겠어서 질문드렸습니다.) 좋은 강의 만들어주셔서 잘 듣고 있습니다! 감사합니다!!
-
해결됨토비의 스프링 부트 - 이해와 원리
안녕 하세요~~
강의 내용과 관련 없는 내용이기는 한데...너무 궁금한게 있어서요~~토비님은 스프링으로 실무를 하실 때 테스트를 어떻게 하시나요?컨트롤러, 서비스, 도메인 그외 등등 있을 때각자 다 테스트를 하시는지...고전파로 하시는지 런던파로 하시는지...좀 궁금합니다~~ 감사합니다
-
해결됨토비의 스프링 부트 - 이해와 원리
안녕 하세요
우리가 스프링 부트를 사용할 떄 dispatcher랑 factory를 등록하는 것 없이 사용 가능한데spring boot starter web 라이브러리를 추가 하면 자동으로 등록되는 거죠??
-
해결됨토비의 스프링 부트 - 이해와 원리
THIS!
안녕하세요, 자바 기본 적인 질문 한가지만 드릴게요...! public class HellobootApplication { public static void main(String[] args) { GenericWebApplicationContext applicationContext = new GenericWebApplicationContext() { @Override protected void onRefresh() { super.onRefresh(); ServletWebServerFactory serverFactory = new TomcatServletWebServerFactory(); WebServer webServer = serverFactory.getWebServer(servletContext -> { servletContext.addServlet("dispatcherServlet", new DispatcherServlet(this)) .addMapping("/*"); }); webServer.start(); } }; applicationContext.registerBean(HelloController.class); applicationContext.registerBean(SimpleHelloService.class); applicationContext.refresh(); }} 여기서 this는 HellobootApplication class가 아닌, applicationContext 를 지칭 하는게 맞을까요..?매번 this가 조금씩 헷갈리네요 ,,,, 이상한 질문 죄송합니다....!
-
해결됨토비의 스프링 부트 - 이해와 원리
스프링 책 질문 드립니다
선생님 강의 잘 보고 있습니다. 스프링부트 강의이다 보니 스프링 공부를 더 해보고 싶은데지금 나와있는 스프링3.1을 사는게 좋을까요 기다렸다가 스프링6강의를 보거나책을 사는게 좋을까요?
-
미해결토비의 스프링 부트 - 이해와 원리
학습 테스트 작성 시 정적 클래스 관련질문
안녕하세요.강의 잘 보고 있는 수강생 입니다.@Configuration과 proxyBeanMethods 강의를 듣고 실습하던 도중 질문이 있습니다. Bean1, Bean2, Common, MyConfig 클래스들을 Static클래스로 만들어야 정상적인 테스트가 가능한것을 확인했는데요. 해당 클래스들을 정적 클래스가 아닌 내부 클래스로 작성하니 적절한 빈타입을 찾을 수 없다라는 에러메시지가 표출되었습니다. 이상해서 해당 클래스들을 별도의 java파일로 작성하니 문제없이 정상동작하는것을 확인하였는데요. 왜 내부클래스 작성 시 정적 클래스로 만들어야 동작하는지 이유를 잘 모르겠습니다. 감사합니다.
-
해결됨토비의 스프링 부트 - 이해와 원리
메소드 빈주입
안녕하세요 토비님 강의 잘듣고있습니다!다름이 아니라 강의 내용중 메서드 파라미터에 빈을 주입 받아 사용하는 것에 궁금증이 생겨 질문드립니다. 일반 적으로 빈을 주입받아 사용할 때 @Autowired나 생성자 등으로 초기화를 해주었는데, 위의 코드의 매개변수는 그런 과정이 없이 바로 빈을 주입받는 것인가요 ?
-
해결됨토비의 스프링 부트 - 이해와 원리
질문드립니다.
안녕하세여 초보적인 질문드려서 죄송합니다..Configuration ProxyBeanMethods 값을 false 를 주면 호출 할때마다 새로운 객체를 생성하게 되는데.. 다시 말해 싱글톤임을 보장 받을수 없게 되는걸로 이해하였습니다. 아마 false주는 경우는 없을듯합니다만 혹시 사례가 있을까요?'굳이' 라는 말을 강의에서 계속 하셔서 사례라고 하면 생각해봤을때 싱글톤의 단점인것을 보안하기 위해 사용되는건지? 아니면 성능적인것 때문에 그런지 궁금합니다.마지막 내용에 spring 에 실제 사용된 내용으로 봤을떈, 단순한 Configuration 일땐 false를 주면 될듯한데. 디테일한 사례가 궁금합니다. 감사합니다.
-
미해결토비의 스프링 부트 - 이해와 원리
자동 구성 정보 분리가 안됩니다.
안녕하세요 자동 구성 정보 분리쪽 강의를 따라 구현하던 도중 문제가 발생하여 질문을 남깁니다. return new String[]{ "tobyspring.config.autoconfig.TomcatWebServerConfig", "tobyspring.config.autoconfig.DispatcherServletConfig" };직접 경로를 작성해주는 경우에는 문제 없이 동작합니다.Iterable<String> candidates = ImportCandidates.load(MyAutoConfiguration.class, classLoader); return StreamSupport.stream(candidates.spliterator(), false).toArray(String[]::new);클래스 로더를 이용해서 외부에서 파일 경로를 불러오는 방법을 사용하면 아래와 같은 문제가 발생합니다.오후 11:26:47: Executing ':HellobootApplication.main()'... > Task :compileJava > Task :processResources UP-TO-DATE > Task :classes > Task :HellobootApplication.main() FAILED . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.7.8) 2023-02-27 23:26:49.370 INFO 3532 --- [ main] t.helloboot.HellobootApplication : Starting HellobootApplication using Java 17.0.6 on yj_notebook with PID 3532 (C:\git\TID\helloboot\build\classes\java\main started by deter in C:\git\TID\helloboot) 2023-02-27 23:26:49.374 INFO 3532 --- [ main] t.helloboot.HellobootApplication : No active profile set, falling back to 1 default profile: "default" 2023-02-27 23:26:49.641 WARN 3532 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.context.MissingWebServerFactoryBeanException: No qualifying bean of type 'org.springframework.boot.web.servlet.server.ServletWebServerFactory' available: Unable to start AnnotationConfigServletWebServerApplicationContext due to missing ServletWebServerFactory bean 2023-02-27 23:26:49.667 ERROR 3532 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPLICATION FAILED TO START *************************** Description: Web application could not be started as there was no org.springframework.boot.web.servlet.server.ServletWebServerFactory bean defined in the context. Action: Check your application's dependencies for a supported servlet web server. Check the configured web application type. Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0. You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins. See https://docs.gradle.org/7.6/userguide/command_line_interface.html#sec:command_line_warnings 3 actionable tasks: 2 executed, 1 up-to-date FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':HellobootApplication.main()'. > Process 'command 'C:/Users/deter/.jdks/azul-17.0.6/bin/java.exe'' finished with non-zero exit value 1 * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 2s 오후 11:26:49: Execution finished ':HellobootApplication.main()'. 제가 생각하기로는 클래스 로더를 통해서 구성 정보를 불러와야 하는데 못 불러오고 있는 것 같습니다.package tobyspring.config.autoconfig; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.servlet.server.ServletWebServerFactory; import org.springframework.context.annotation.Bean; import tobyspring.config.MyAutoConfiguration; @MyAutoConfiguration public class TomcatWebServerConfig { @Bean public ServletWebServerFactory servletWebServerFactory() { return new TomcatServletWebServerFactory(); } } 이 문제를 해결하기 위해서java 버전 11, 17gradle 버전 7.6, 8.0Build and run 을 Geadle, IntelliJ파일 경로 수정 등로 변경하는 방법들을 시도해봤지만 해결하지 못했습니다. 현재 제 개발 환경은 아래와 같습니다.IntelliJ버전은 2022.2.3 Community버전spring boot 2.7.8gradle 7.6어디서 문제가 발생하는지 감을 잡을 수 없어서 문의드립니다.
-
미해결토비의 스프링 부트 - 이해와 원리
spring: command not fount 왜 뜨는걸까요 ?
spring boot 가 설치되었다고 나오는데 spring 명령어를 치면 command not found 라고 뜨네요.. 혹시 해결방법이 없을까요 ?