묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 고급편
Gradle과 Intellij IDEA의 실행 결과 차이가 발생합니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]Intellij IDEA를 실행했을때 whitelabel error가 뜨고 Gradle로 실행했을때는 정상적으로 작동이 되는지 잘 모르겠습니다.<Gradle로 실행했을 때><Intellij IDEA로 실행했을 때>2024-04-24T10:14:45.934+09:00 ERROR 11612 --- [advanced] [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.IllegalArgumentException: Name for argument of type [java.lang.String] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the '-parameters' flag.] with root causejava.lang.IllegalArgumentException: Name for argument of type [java.lang.String] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the '-parameters' flag. at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.updateNamedValueInfo(AbstractNamedValueMethodArgumentResolver.java:187) ~[spring-web-6.1.6.jar:6.1.6] at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.getNamedValueInfo(AbstractNamedValueMethodArgumentResolver.java:162) ~[spring-web-6.1.6.jar:6.1.6] at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:108) ~[spring-web-6.1.6.jar:6.1.6] at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122) ~[spring-web-6.1.6.jar:6.1.6] at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:224) ~[spring-web-6.1.6.jar:6.1.6] at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:178) ~[spring-web-6.1.6.jar:6.1.6] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.1.6.jar:6.1.6] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) ~[spring-webmvc-6.1.6.jar:6.1.6] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) ~[spring-webmvc-6.1.6.jar:6.1.6] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.1.6.jar:6.1.6] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) ~[spring-webmvc-6.1.6.jar:6.1.6] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) ~[spring-webmvc-6.1.6.jar:6.1.6] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.1.6.jar:6.1.6] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.1.6.jar:6.1.6] at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) ~[tomcat-embed-core-10.1.20.jar:6.0] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.1.6.jar:6.1.6] at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.20.jar:6.0] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:206) ~[tomcat-embed-core-10.1.20.jar:10.1.20] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150) ~[tomcat-embed-core-10.1.20.jar:10.1.20] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.20.jar:10.1.20] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:175) ~[tomcat-embed-core-10.1.20.jar:10.1.20] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150) ~[tomcat-embed-core-10.1.20.jar:10.1.20] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.1.6.jar:6.1.6] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.6.jar:6.1.6] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:175) ~[tomcat-embed-core-10.1.20.jar:10.1.20] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150) ~[tomcat-embed-core-10.1.20.jar:10.1.20] at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.1.6.jar:6.1.6] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.6.jar:6.1.6] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:175) ~[tomcat-embed-core-10.1.20.jar:10.1.20] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150) ~[tomcat-embed-core-10.1.20.jar:10.1.20] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.1.6.jar:6.1.6] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.6.jar:6.1.6] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:175) ~[tomcat-embed-core-10.1.20.jar:10.1.20] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150) ~[tomcat-embed-core-10.1.20.jar:10.1.20] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-10.1.20.jar:10.1.20] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.20.jar:10.1.20] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) ~[tomcat-embed-core-10.1.20.jar:10.1.20] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[tomcat-embed-core-10.1.20.jar:10.1.20] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.20.jar:10.1.20] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.20.jar:10.1.20] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) ~[tomcat-embed-core-10.1.20.jar:10.1.20] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) ~[tomcat-embed-core-10.1.20.jar:10.1.20] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.20.jar:10.1.20] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) ~[tomcat-embed-core-10.1.20.jar:10.1.20] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1736) ~[tomcat-embed-core-10.1.20.jar:10.1.20] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.20.jar:10.1.20] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-10.1.20.jar:10.1.20] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.20.jar:10.1.20] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) ~[tomcat-embed-core-10.1.20.jar:10.1.20] at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na] Chat GPT로 물어봤는데 이해가 되지 않아서 질문 남깁니다. 두 방식으로 돌렸을 때 왜 이런 차이가 발생하는 건가요??
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
인텔리제이 디버그 질문입니다.
디버그가 왜 안되나요? 바로 톰캣 실행되는데요. 예를들어 디버그 모드면 watch부분이랑 뷰네임이 뭐가 들어가는지 보여야 하는거 아닌가요? 해당 코드는 view모델3부분입니다. 추가질문입니다. 제가 아래 2번째 사진(빨간색 박스)를 클릭했을 때 디버깅이 시작됩니다. (그전까지는 안되요.) 보통 파이참같은 경우 코드에서 중단점 설정 후 디버그를 누르면 바로 디버깅 모드 전환이 되는데요. 인텔리제이는 코드 중단점을 설정해놓아도 톰캣 스타트 시켜놓고(첫번째사진처럼) html에서 화면을 클릭해야 해당 디버깅이 들어가지나요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Model 추가 - v3 질문입니다.
Model 추가 - v3 23분 질문입니다.FrontControllerServletV3 코드입니다.package com.example.servservlet.web.frontcontroller.v3;import com.example.servservlet.web.frontcontroller.MyView;import com.example.servservlet.web.frontcontroller.v3.ControllerV3;import com.example.servservlet.web.frontcontroller.ModelView;import com.example.servservlet.web.frontcontroller.v3.controller.MemberFormControllerV3;import com.example.servservlet.web.frontcontroller.v3.controller.MemberListControllerV3;import com.example.servservlet.web.frontcontroller.v3.controller.MemberSaveControllerV3;import jakarta.servlet.ServletException;import jakarta.servlet.annotation.WebServlet;import jakarta.servlet.http.*;import java.io.IOException;import com.example.servservlet.domain.member.Member;import com.example.servservlet.domain.member.MemberRepository;import com.example.servservlet.web.frontcontroller.v1.ControllerV1;import jakarta.servlet.RequestDispatcher;import jakarta.servlet.ServletException;import jakarta.servlet.http.HttpServletRequest;import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;import java.util.List;import java.io.IOException;import java.util.HashMap;import java.util.Map;@WebServlet(name = "frontControllerServletV3", urlPatterns = "/front-controller/v3/*")public class FrontControllerServletV3 extends HttpServlet { private Map<String, ControllerV3> controllerMap = new HashMap<>(); public FrontControllerServletV3() { controllerMap.put("/front-controller/v3/members/new-form", new MemberFormControllerV3()); controllerMap.put("/front-controller/v3/members/save", new MemberSaveControllerV3()); controllerMap.put("/front-controller/v3/members", new MemberListControllerV3()); } @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String requestURI = request.getRequestURI(); ControllerV3 controller = controllerMap.get(requestURI); if (controller == null) { response.setStatus(HttpServletResponse.SC_NOT_FOUND); return; } //MemberFormControllerV3,MemberSaveControllerV3 내용을 paramMap에 저장한다. Map<String, String> paramMap = createParamMap(request); ModelView mv = controller.process(paramMap); //질문1. 자식 controller를 부모 ModelView에 저장하는 다형성을 뜻하는건가요?ModelView에 .process함수가 없는데 왜 저장하는거에요? //질문2. 아래부분에서 for문(반복문)이 없고 한개의 뷰네임을 저장하면 나머지 2개의 뷰 처리는 어떻게 하는건가요? //아니면 원래 반복문은 없고 요청이 있는 get(requestURI)만 viewName에 저장하는건가요? // 예를들어 /front-controller/v3/members/save 이면 viewName에 MemberSaveControllerV3()이부분을 저장하는게 맞나요? String viewName = mv.getViewName();//MemberFormControllerV3,MemberSaveControllerV3 내용 중 한개의 뷰네임을 저장한다. MyView view = viewResolver(viewName);//물리적 주소 저장 view.render(mv.getModel(), request, response); } private MyView viewResolver(String viewName) { return new MyView("/WEB-INF/views/" + viewName + ".jsp"); } private Map<String, String> createParamMap(HttpServletRequest request) { Map<String, String> paramMap = new HashMap<>(); request.getParameterNames().asIterator() .forEachRemaining(paramName -> paramMap.put(paramName, request.getParameter(paramName))); return paramMap; //<-질문3. 이 부분이 강의에서 각각 파라미터 네임을 계속 꺼내서 저장한다고 하셨는데 반복을 의미하는건가요? }}
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
405에러가 발생합니다. 이유를 잘 모르겠습니다.
1package com.attendance.scheduler.infra.config.security; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.SecurityFilterChain; @Configuration @RequiredArgsConstructor @EnableWebSecurity public class SecurityConfig { public static final String[] ENDPOINTS_WHITELIST = { "/", "/submit", "/completion", "/class/**", "/board/**", "/join/**", "/cert/**", "/help/**", "/comment/**", "/css/**", "/js/**" }; private final CustomAuthenticationFailureHandler customAuthenticationFailureHandler; @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } @Bean public SecurityFilterChain adminFilterChain(HttpSecurity httpSecurity) throws Exception { httpSecurity .csrf(AbstractHttpConfigurer::disable) .securityMatcher("/admin/**","/manage/**") .authorizeHttpRequests(auth -> auth .requestMatchers("/admin/**") .hasAuthority("ADMIN") .requestMatchers("/manage/**") .hasAnyAuthority("ADMIN", "TEACHER") .anyRequest().authenticated()) .formLogin(httpSecurityFormLoginConfigurer -> httpSecurityFormLoginConfigurer .defaultSuccessUrl("/manage/class", true) .failureHandler(customAuthenticationFailureHandler) .loginPage("/login") .loginProcessingUrl("/login") ) .logout(httpSecurityFormLogoutConfigurer -> httpSecurityFormLogoutConfigurer .logoutUrl("/logout") .invalidateHttpSession(true) .deleteCookies("JSESSIONID") .logoutSuccessUrl("/")) .sessionManagement(sessionManagement -> sessionManagement .invalidSessionUrl("/login") .maximumSessions(1) .maxSessionsPreventsLogin(true) .expiredUrl("/login")); return httpSecurity.build(); } } 2package com.attendance.scheduler.infra.config.security; import com.attendance.scheduler.admin.domain.AdminEntity; import com.attendance.scheduler.admin.repository.AdminJpaRepository; import com.attendance.scheduler.infra.config.security.Admin.AdminDetails; import com.attendance.scheduler.infra.config.security.User.TeacherDetails; import com.attendance.scheduler.teacher.domain.TeacherEntity; import com.attendance.scheduler.teacher.repository.TeacherJpaRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Component; @Slf4j @Component @RequiredArgsConstructor public class AccountDetailService implements UserDetailsService { private final AdminJpaRepository adminJpaRepository; private final TeacherJpaRepository teacherJpaRepository; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { log.info("teacherId = {}", username); final TeacherEntity teacherEntity = teacherJpaRepository .findByUsernameIs(username); if(teacherEntity != null){ return new TeacherDetails(teacherEntity); } else { final AdminEntity adminEntity = adminJpaRepository .findByUsernameIs(username); if (adminEntity != null) { log.info("adminId = {}", username); return new AdminDetails(adminEntity); } } throw new UsernameNotFoundException(username); } }3<form method='post' th:action="@{/login}" th:object="${login}"> 로그인을 진행하면 405에러가 계속 발생합니다. 이유를 찾고 있으나 아이디와 비밀번호를 입력해도 2번 코드의 로그에 남지 않습니다. 혹시 이유를 알려주실수 있을까요? 감사합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
findAll 테스트 전에는 오류 없었는데 findAll 테스트 했더니 findbyName에서 에러 났어요..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.전체 코드입니다.package com.example.hellospring.repository; import com.example.hellospring.domain.Member; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import java.util.List; import java.util.Optional; class MemoryMemberRepositoryTest { MemberRepository repository = new MemoryMemberRepository(); @Test public void save(){ Member member = new Member(); member.setName("spring"); repository.save(member); Member result = repository.findById(member.getId()).get(); // Assertions.assertEquals(member, result); Assertions.assertThat(member).isEqualTo(result); } @Test public void findByName(){ Member member1 = new Member(); member1.setName("spring1"); repository.save(member1); Member member2 = new Member(); member2.setName("spring2"); repository.save(member2); Member result = repository.findByName("spring1").get(); Assertions.assertThat(result).isEqualTo(member1); } @Test public void findAll(){ Member member1 = new Member(); member1.setName("spring1"); repository.save(member1); Member member2 = new Member(); member2.setName("spring2"); repository.save(member2); List<Member> result = repository.findAll(); Assertions.assertThat(result.size()).isEqualTo(2); } } 참고로 save 테스트에서 에러가 발생해서 findById 를 String -> Long 으로 바꾼 상태입니다.package com.example.hellospring.repository; import com.example.hellospring.domain.Member; import java.util.List; import java.util.Optional; public interface MemberRepository { Member save(Member member); Optional<Member> findById(Long id); Optional<Member> findByName(String name); List<Member> findAll(); } package com.example.hellospring.repository; import com.example.hellospring.domain.Member; import java.util.*; public class MemoryMemberRepository implements MemberRepository { private static Map<Long, Member> store = new HashMap<>(); private static long sequence = 0L; @Override public Member save(Member member) { member.setId(++sequence); store.put(member.getId(), member); return member; } @Override public Optional<Member> findById(Long id) { return Optional.ofNullable(store.get(id)); } @Override public Optional<Member> findByName(String name) { return store.values().stream() .filter(member -> member.getName().equals(name)) .findAny(); } @Override public List<Member> findAll() { return new ArrayList<>(store.values()); } }
-
미해결견고한 결제 시스템 구축
혹시.. 실습 코드 제공 받을때 코틀린이 아닌 자바 언어 받을수 있을까요?...
사실 코틀린은 제가 한번도 사용해 본적도 없고 이번에 프로젝트 구성할때 자바로 만들 계획이라서요. 그렇다고 선생님 실습 코드를 전부 그래도 사용하는것은 아닌데요. 강의 보면서 자바로 구성된 코드를 보면서 공부하면 이해하는데 도움이 많이 될것 같아서요... 부탁드립니다!!
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
"HttpServletRequest - 기본 사용법" 강의 내용 중 질문
처음 http://localhost:8080/request-header?username=hello 로 URL 입력 후 콘솔을 확인하면 아래와 같이 Header 편의 조회가 출력되었습니다.이후에 Postman을 통해서 다음과 같이 hello! 라는 메시지를 POST 방식으로 전송을 한 후 콘솔을 확인해 보니 아래와 같이 출력되었습니다.이때 Postman을 통해 보낸 방식에서 cookie가 조회되지 않는 이유는 Postman을 사용해서 POST 요청을 할 때 쿠키 설정을 따로 해주지 않아서 그런거고 크롬에서 URL을 검색해서 GET 방식으로 조회할 때는 크롬이 자동으로 쿠키를 할당해준건거요...??
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
assertThat import, RunWith annotation 관련 문의
=======================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]혹시 여기서 import 활성화를 위해서 어떤 조치를 취해야 하는지 궁금합니다. (setting 설정은 Gradle에서 실행하도록 설정해놨음)
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
DB insert 안됨
window command에서 h2.bat하고 db띄운 후그냥 창x눌러서 껐는데요 그다음 다시 커맨드 열어서 h2.bat하고 insert 쿼리 날렸는데insert가 반영이 안돼요jsessionid 처음 나왔던걸로 해도 안되고새로 나오는 것으로 해도 안되는데창을 새로 띄워도 원래 jsessionid로 해야 하는건가요? test.mv.db 파일도 새로 생성해야 하나요? 파일을 올리고 싶은데 첨부파일 넣는 곳이 없네요 어떻게 해야 하나요?
-
미해결스프링 부트 - 핵심 원리와 활용
외부파일 질문
[질문 내용]application.properties가 윈도우환경에서는 무슨 파일로 저장해야하나요?텍스트 문서파일로 저장하고 그 안에 내용을 쓰니 빌드하면 이렇게 나옵니다2024-04-23T20:52:12.297+09:00 INFO 2056 --- [ main] hello.EnvironmentCheck : env url=null2024-04-23T20:52:12.299+09:00 INFO 2056 --- [ main] hello.EnvironmentCheck : env username=user2024-04-23T20:52:12.300+09:00 INFO 2056 --- [ main] hello.EnvironmentCheck : env password=null2024-04-23T20:52:12.436+09:00 INFO 2056 --- [ main] hello.ExternalApplication : Started ExternalApplication in 1.65 seconds (process running for 2.338)
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
form관련 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]질문이 있습니다 제가 회사에서 부트를 사용해서 타임리프 관련해서 학습하고 사용 할려고 하는데 form을 사용해서 action 을 하는게 아닌 거의다 js를 통해 ajax를 사용하는 등 거의 js를 통해 서버와 통신하는 방법을 사용하고 있습니다.이럴 때 타임리프에서 th:object 옵션을 사용할 방법이 따로 없을까요? html에서 form을 사용하지 않는 이상?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
매핑이 잘 안되는거 같아요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.영학님이 주신 걸로 하면 버전이 안맞아서 커뮤니티 글에 있는 17버전을 새로 만들어서 영학님이 주신 form에 내용을 main하고 resources를 바꿔서 실행 하는데 서버도 열리고 잘 되는데 이상하게 이런 현상이 떠서 질문을 드립니다이렇게 뜨고 상품관리 를 누루면이렇게 뜨는데 위에 basic을 form으로 바꾸면 잘 뜨고 다른 기능도 잘 됩니다.그런데 할때 마다 계속 바꿔야 하니 문제를 찾아 보고 있는데 resources에 index.html도 확인 했는데 basic이 쓰인 곳도 없고 FormController 부분에도 basic을 반환 하는 부분도 없는데 프로그램 코드안 에서도 basic을 반환 하는 부분이 어디에도 없는데 뭐 때문에 그런지 잘 모르겠습니다. 재가 미숙해서 잘 못 찾는것도 있지만.. 배운다는 생각으로 충고 주시면 잘 배우겠습니다
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
RequestMapping 이후 GetMapping
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]이렇게 RequestMapping으로 /template으로 시작하는 url을 mapping하고, /fragment로 오는 get을 template()에서 처리합니다. 그런데 이런 컨트롤러 클래스 내부의 메소드를 public으로 하는 이유가 있을까요? 예외없이 private으로 해야하는 것 아닌가요? 다른곳에서 TemplateController 인스턴스를 만들어서 template() 함수를 쓰려고 해도, templateController가 @Controller니까 의미 없지 않나요? 즉,spring 차원에서 public을 막고 private으로만 메소드를 만들게 할 수 도 있는데, 그렇게 않한 이유가 알고 싶습니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
스프링 메시지 소스 사용 = 오류 발생건입니다.
실행하면 아래와 같은 메세지가 뜹니다.실행 자체가 안되는거 같은데요?spring.messages.basename=messages 설정 여부와 상관없이 오류가 납니다.@SpringBootTest public class MessageSourceTest { @Autowired MessageSource ms; @Test void helloMessage() { String result = ms.getMessage("hello", null, null); assertThat(result).isEqualTo("안녕"); } } Execution failed for task ':test'.> There were failing tests. See the report at: file:///C:/CodingStudy/스프링/message/build/reports/tests/test/index.html* 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.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
타임 리프 객체 접근
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]user.username 이 어떻게 가능한가요? private 이어서 user.getUsername() 해야하는 것 아닌가요? 아니면, 서버 사이드에서 user.username 을 user.getUsername으로 바꿔주나요?
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
15섹션 프로그래밍 방식의 인가 구현 – DB 연동 / 여러개의 권한매핑
섹션 15 (프로그래밍 방식의 인가 구현 – DB 연동) 강의에서 6:10 에 작성하신 코드위 코드에 대해서 질문 드립니다. 저는 PageDto라는 객체를 만들고해당 객체는 String url, Set<PageRole>으로 구성되어있고위와 같이 코드를 작성하였습니다.데이터를 Map에 넣고 콘솔창에 출력해보았을 때url값이 중복이라(맵의 key값) 마지막 권한만이 Map<String, String>객체에 들어가는데 하나의 url에 여러 개의 권한을 매핑 할 때 해당 구조로 작성 하는 것이 맞는지 질문 드립니다.만약에 Map<String, Set>구조이면 이후 커스텀 매니저에서 setMapping()의 로직이 달라지는지도 궁금합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
HTTP 요청 메시지 로그로 확인하기
HTTP 요청 메시지 로그로 확인하기 위해application.properties에 다음과 같이 작성하고spring.application.name=Servlet logging.level.org.apache.coyote.http11=debug재실행 후에 http://localhost:8080/hello?username=park으로 요청을 보내니 다음과 같이 로그가 찍혔습니다.HTTP Request를 파싱하는데 에러가 발생합니다.어떻게 해결해야 하나요?답변해주시면 감사하겠습니다.HelloServlet 코드는 다음과 같습니다!package com.example.servlet.basic; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(name = "HelloServlet", urlPatterns = "/hello") public class HelloServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("HelloServlet.service"); System.out.println("request = " + request); System.out.println("response = " + response); String username = request.getParameter("username"); System.out.println("username = " + username); // header response.setContentType("text/plain"); response.setCharacterEncoding("utf-8"); // html 안에 들어간다. response.getWriter().write("hello " + username); } }
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
스프링 db연결 실패,,,ㅠ
도와주세요,,,
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
람다로 변할때 alt _+ enter 안됨,,
람다식으로 변할때 new RowMapper에서 알트 + 엔터 쳐도 아무것도 안나오는데 뭐가 설정이 잘못된건가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
서블릿, JSP, MVC 패턴질문입니다.
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <form action="/jsp/members/save.jsp" method="post"> username: <input type="text" name="username" /> age: <input type="text" name="age" /> <button type="submit">전송</button> </form> </body> </html> 서블릿, JSP, MVC 패턴 강좌 : JSP로 회원 관리 웹 애플리케이션 만들기 10분에서요.age를 숫자가 아닌 문자를 넣으면 에러 페이지가 뜨는데 위에 코드에 숫자만 넣으라는 부분이 없는데 어디에서 에러를 잡아주는건가요? 자바는 아닌것 같아서요.2.MVC 패턴 - 적용 5분 45초 질문있습니다. 데이터 저장은 MemberRepository 에서 하는걸로 이해했는데요. servlet/src/main/webapp/WEB-INF/views/new-form.jsp 이 파일에서 save가 상대경로를 의미하여, /servlet/members/new-form-> /servlet/members/save로 바뀐다고 하셨는데요.그럼 save 즉 아래 파일(코드)에서 저장한다는 말씀인가요? <%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <meta charset="UTF-8"> <title>Title</title></head><body><!-- 상대경로 사용, [현재 URL이 속한 계층 경로 + /save] --><form action="save" method="post"> username: <input type="text" name="username" /> age: <input type="text" name="age" /> <button type="submit">전송</button></form></body></html> package hello.servlet.web.servlet;import hello.servlet.domain.member.MemberRepository;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.PrintWriter;@WebServlet(name = "memberFormServlet", urlPatterns = "/servlet/members/new-form")public class MemberFormServlet extends HttpServlet { private MemberRepository memberRepository = MemberRepository.getInstance(); @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); response.setCharacterEncoding("utf-8"); PrintWriter w = response.getWriter(); w.write("<!DOCTYPE html>\n" + "<html>\n" + "<head>\n" + " <meta charset=\"UTF-8\">\n" + " <title>Title</title>\n" + "</head>\n" + "<body>\n" + "<form action=\"/servlet/members/save\" method=\"post\">\n" + " username: <input type=\"text\" name=\"username\" />\n" + " age: <input type=\"text\" name=\"age\" />\n" + " <button type=\"submit\">전송</button>\n" + "</form>\n" + "</body>\n" + "</html>\n"); }}