묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 프레임워크는 내 손에 [스프2탄]
idx, boardGroup 번호에 대해
idx는 1번부터 시작하고 boardGroup은 0번부터 시작하셨는데, boardGroup도 idx와 동일하게 1번부터 해도 상관없을까요? 관습적으로 0번부터 하는건지 다른 이유가 있는 건지 궁금합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
filter 질문
@PostMapping("/login") public String loginHttpSession(@Validated @ModelAttribute("member") LoginForm loginForm, BindingResult bindingResult,HttpServletRequest request, @RequestParam(value = "redirectURL") String redirectURL) { if(bindingResult.hasErrors()) { log.info("로그인 에러"); return "login/login"; } SignUpMember signUpMember = loginService.loginMember(loginForm.getLoginId(), loginForm.getPassword()); if(signUpMember == null) { bindingResult.reject("loginFail", "아이디 또는 비밀번호가 틀렸습니다"); return "login/login"; } HttpSession session = request.getSession(); session.setAttribute(SessionConst.LOGIN_MEMBER, signUpMember); return "redirect:/guPage/index"; } 위 코드를 작성해서 http://localhost:8080/login?redirectURL=/basic/items위 url을 post로 받으려 하는데 405 error가 뜨네요 어떻게 하면 될까요?그리고 제가 알기론 @RequestParam(value = "redirectURL") String redirectURL에서 value를 제거해도 된다고 알고 있는데 value를 안적어주니 이것도 에러가 나더라고요 어떻게 하면 될까요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
jsp파일의 html 태그에 대해 궁금한 것이 있습니다.
강의록을 보면 이전의 MemberFormServlet 코드에서는 응답 메시지 상단에 <!DOCTYPE HTML>을 명시해주었는데, 왜 이번 jsp에서는 html 태그 위에 <!DOCTYPE HTML>를 명시해주지 않아도 정상적으로 동작하나요?https://developer.mozilla.org/en-US/docs/Web/HTML/Quirks_Mode_and_Standards_Mode위에서 <!DOCTYPE HTML>는 브라우저한테 어떤 document 타입을 사용하는지를 알려주기 위해 반드시 최상단에 명시해야 한다고 되어 있습니다. 만약 이것을 명시하지 않으면 quirk mode로 동작이 되서 현재 널리 채택된 full-standard mode와 다르게 렌더링될 수 있다고 되어있습니다.
-
미해결Practical Testing: 실용적인 테스트 가이드
SpringSecurity 사용 시 Controller 테스트
안녕하세요 좋은 강의를 제공해주셔서 너무 감사합니다. 평소 테스트에 대해 고민하던 많은 부분이 해결되었습다. 그러나 아직 해결하지 못 한 부분이 있습니다.전 개인 프로젝트에 Spring Security 를 이용해 인증 및 인가를 구현하였습니다. 또한, 컨트롤러에 @AuthenticationPrincipal 을 이용해 인증 객체를 가져와 로그인한 회원의 정보를 사용하고 있습니다.강사님의 경우 @WebMvcTest 를 이용해 컨트롤러만 띄워 최소한의 파라미터만 검증하였습니다. 저 역시 처음엔 @WebMvcTest 를 이용해 최소한의 비용으로 컨트롤러를 테스트해보려 했으나 테스트 수행 시 Security 관련 빈이 없어 잦은 오류가 발생하였습니다.이 경우 @WebMvcTest 를 그대로 사용하며 TestSupport 와 같은 클래스에 시큐리티 관련 빈들을 모두 목킹하고 @AuthenticationPrincipal 으로 가져오는 인증객체 또한 목킹하는 것이 좋은 테스트일지 @SpringBootTest 를 사용한 다음 인증객체를 주입하는 것이 좋은 테스트인지 잘 판단이 안됩니다. (@AuthenticationPrincipal 의 경우 컨트롤러 메서드의 파라미터로 들어가는데 이것 역시 목킹이 가능한지도 잘 감이 안잡힙니다.)마지막으로 Spring Security 를 구성하는 필터 혹은 인터셉터나 kafka, websocket 같은 비동기 통신의 경우 실무에서 어떻게 테스트를 수행하는지 궁금합니다!긴 질문 읽어주셔서 감사합니다
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
WebMvcConfigurer에 대해서 궁금합니다.
@Configuration @RequiredArgsConstructor public class WebMvcConfig implements WebMvcConfigurer { private final AppConfig appConfig; @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) { resolvers.add(new AuthResolver(appConfig)); } }안녕하세요 제가 지금 프로젝트를 하나 하고있는데요이 코드에서resolver.add()를 하면 어떻게 되는건지 궁금합니다.AuthResolver에 대한 의존성을 추가해주는 코드인가요?resolvers.add()의 동작방식이 궁금합니다.그리고 resolver의 정확한 의미가 뭔지 궁금합니다
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
오류로 인해 실행 안됨
이 에러가 발생합니다.설정에서 Gradle을 jdk로 바꿔봤습니다.아래 3가지를 선택 취소 후 다시 선택했습니다.java 폴더 -> Sources Tab 선택test 폴더 -> tests Tab 선택resource 폴더 -> resource Tab 선택그래도 해결이 안되기에 이렇게 글을 적습니다. 해결: 우측 상단에 Main으로 되어있었는데 이것을 LibraryAppApplication으로 바꾸니 해결되었습니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
No DataSource specified 에러가 뜹니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]선생님, 스프링을 통해서 제가 생각한 대로 설계해서 잘 만드는 백엔드 개발자가 꿈인 사람입니다.앞부분에는 천천히 강의 설명을 잘 해주셔서 이상없이 잘 따라왔는데요.순수 jdbc 강의부터 복사 붙여넣기로 강의 속도가 빨라지면서낯선 메소드와 코드들이 보여서 이해가 안가고 있습니다.실무에서 쓰는데 순수 jdbc 원리는 꼭 깊이 있게 짚고 나가지 않아도 될까요? 어렵습니다ㅠㅠ 게다가 SpringConfig에서 JdbcMemberRepository로바꾸면서 db접근도 안되고 화이트라벨 에러만 계속 발생하고 있습니다..ㅠ chatgpt에 물어보고 검색을 해도 이 문제를 도저히 해결할 수가 없네요.. [에러 내용]java.lang.IllegalArgumentException: No DataSource specified윈도우에서 사용하고 있으며, 스프링부트 버전은 3.xh2 데이터베이스도 최신버전으로 설치해서 실행했습니다.[구글 드라이브]https://drive.google.com/file/d/1HzXNwnwBzOTJIvrzJZisrvoO2LkbYIDI/view?usp=sharing
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
name을 name2로 바꿀려면 어떻게 하나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.API 강의에서 @ResponseBody를 이용해 JSON 으로 객체를 변환받는 내용의 코드에서 name이 너무많아 반환받는 JSON 키를 "name2"로 변경해보고싶어 코드와 url등등 name2를 넣어 계속 실행해봣지만 계속 키는 "name"에서 변하지가 않습니다. 어디를 변경해야 하는걸까요??
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
섹션4_Model추가 V3 강의 질문 입니다.
섹션4_Model추가 V3 강의 내용 중FrontControllerServletV3 클레스 에서 해당 render 메서드의 파라미터 mv.getModel()에는 createParamMap 메서드에서 만들어진 paramMap? 즉 key, value로 생성된 모든 request 값이 들어가고, view.render(mv.getModel(), request, response); 메서드 내부에 modelToRequestAttribute 메서드는 위에서 넘겨준 paramMap을 다시 request에 새팅해주는게 맞나요? 어질 어질 하네요.. ㅜㅜ
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
HttpSession 정리
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]HttpSession에 관해서 공부한 내용을 정리해보았는데 한번 피드백해주시면 감사하겠습니다1. 정리한 부분getSession()을 통해 이미 생성되어있는 세션 저장소에 할당할 HttpSession 빈 세션 객체 하나를 생성 후 반환 getSession()을 통해 생성된 HttpSession 빈 세션 객체에 setAttribute()를 통하여 map 형태의 세션 정보를 저장할 수 있다. 이때 세션 정보는 (세션 이름 , 회원 정보) 로 형태로 저장되고 이 순간 해당 세션을 식별하기 위한 세션id는 톰캣에서 자동으로 생성해줌 따라서 getSession()을 통해 세션 저장소에 저장될 한 세션 객체 HttpSession의 형태를 굳이 표현해보자면 (sessiondId , Map<String , Object>)이고 , 거기다가 setAttribute()를 통해 “세션 이름”과 “회원 정보”를 지정해서 저장하면 (UD3R9A33 , (“loginMember” , member)) 형태로 저장됨 그럼 이 순간 톰캣 서버가 자동으로 Set-Cookie: JSESSIONID=UD3R9A33를 지정해서 클라이언트에 전달함 그에 따라 서버와 클라이언트 간 쿠키를 통해 자동 지정된 세션id를 통해 사용자 여부를 식별할 수 있는 것이렇게 이해하면 될까요? 2. 추가 질문 사항세션 저장소의 한 공간을 차지하는 한 세션 객체 HttpSession에 setAttribute()를 여러 개 호출할 수 있는데 이는 한 HttpSession 공간에서 또 여러 개의 세션 정보를 가질 수 있다고 이해하면 될까요?만약 이가 맞다면 getSession()을 통해 여러 개의 HttpSession을 생성하는 것과 setAttribute()를 통해 한 HttpSession 안에서 여러 개의 세션을 생성하는 것의 차이가 궁금합니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Collection을 반환할 때엔 Optional을 사용하지 않는 이유가 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) YES2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) YES3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) YES[질문 내용]여기에 질문 내용을 남겨주세요. 질문 주제 : Optional 에 대해상세 내용 : MemberService 의 조회용 메서드에서 단일 객체를 조회할 경우, 반환 타입을 Optional<Member> 로 정의하지만, List 등의 컬렉션에서는 Optional<List<Member>>을 사용하지 않고 List<Member> 이유가 궁금합니다. List에 담을 값이 없어도 List라는 객체가 반환되기 때문(null이 아니기 때문)에 괜찮은 걸까요?list.empty() 라는 메서드를 통해 조회 요청에 대해 반환할 객체가 없음을 알 수 있고, 이에 따른 후처리를 할 수 있기 때문인가요?
-
해결됨스프링 핵심 원리 - 기본편
프로젝트를 오랜만에 실행하는 과정에서의 실행 문제
프로젝트를 실행하는데 있어 다음과 같이 정상적으로 실행되지 않아 질문을 올립니다.뚜렷한 에러 코드가 없어 어떤 설정이 문제인지 어떤 방식으로 해결해야 하는지 궁금합니다!https://drive.google.com/file/d/1vC-tIcbO8hDnNhJWwr3yidCHsA0nqnmk/view?usp=sharing
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
@Configuration에 대해서 궁금합니다
안녕하세요@Configuration 과 @Bean은 세트라고 하셨는데요제가 프로젝트를 하나 하고있는데요implements WebMvcConfigurer를 구현하면메서드에 @Bean을 안붙여도 잘 동작을 하는데요 이유가 뭔지 궁금합니다..
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
h2 테이블 생성이 안되요 ㅠㅠ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요. 테스트를 실행할때 테이블이 생성이 안되는데 도와주세요옹
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
서블릿과 파일 업로드1 - debug 로그 내용이 출력 되지 않습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) -> 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) -> 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) -> 예[질문 내용]application.properties 에 logging.level.org.apache.coyote.http11=debug 를 설정하여 HTTP 메시지 로그를 보고자 하였으나 강의 영상처럼 출력 되지 않습니다.↑상품명과 파일(임의의 png 이미지)을 서버로 보낸 상태 apache DEBUG 레벨 로깅 내용을 보고 싶은데 어떻게 해야하나요? [사용환경]os: win11springBoot: 3.2.3ide: Ultimate 2023.3.2java: 17
-
미해결스프링 부트 - 핵심 원리와 활용
인텔리제이 무료버전 Deployment directory 설정 문제
소스 코드의 server 프로젝트 빌드하고메뉴얼을 따라 tomcat을 설정하는 중Deployment directory 파일 설정 부분에서.gradle 과 build 폴더가 보이지 않는 문제가 발생하고 있습니다혹시 제가 뭔가를 잘못했나 싶어 프로젝트를 지우고여러번 반복해 봤는데 똑같은 상황이 반복 중입니다저의 문제가 아닌 것 같아 문의 드립니다저는 최신 버전 IntelliJ IDEA 2023.3.4 (Community Edition) 를 사용 중입니다smart tomcat 버전은 4.7.2 이구요
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Result클래스 사용이유
@GetMapping(api/v2/members)public Result memberV2(){...}로 작성되어있습니다.그런데 그냥@GetMapping(api/v2/members)public List<MemberDto>memberV2(){...}로 반환하면 되지않나요?제가 생각하는 Result를 사용한 이유는 count같은 다른 정보들도 넣기 위함인 거 같은데 맞을까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
was 장애 시, 기본 에러페이지를 커스텀 가능한가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요.해당 영상을 보고 나서 개발 하는 중 궁금점이 생겨 질문드립니다.WAS가 죽으면(=서버가 과부하가 되거나 어떤 요인에 의해 다운될 경우) WAS가 표출해주는 에러페이지를 보여주지 못하고 (templates 파일은 내부적으로 was만 접근 가능하기 때문)톰캣에 기본 내장된 에러페이지를 보여준다라고 이해했습니다.이 때, 톰캣이 보여주는 내장된 에러페이지는 에러코드 및 톰캣 버전 등 정보를 가지고 있어 보안상 위험하다고 판단이 되었습니다.이러한 경우 정적 소스를 처리할 수 있는 web server에서 개발자가 커스텀한 에러페이지를 표출할 수 있도록 해야 될 거 같은데, 이게 가능한지 , 어떻게 설정을 해야하는지 궁금합니다.또한 불가능하다면 어떤 다른 방식으로 위의 문제점을 해결하는지 궁금합니다. 감사합니다.
-
미해결스프링 핵심 원리 - 고급편
ThreadLocal 관련 질문입니다.
traceId = traceId.createPreviousId(); // traceIdHolder.set(traceId.createPreviousId());두 코드의 결과에는 큰 차이가 없는 것 같은데, 굳이 traceIdHolder.set 을 사용해야 하는 이유가 있을까요??
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
테스트를 전체 실행할 시 한개만 성공 한개는 실패
위의 질문과 똑같은 질문입니다!@SpringBootTestclass stockServiceTest {@Autowired private StockService stockService; @Autowired private StockRepository stockRepository; @BeforeEach public void setUp(){stockRepository.saveAndFlush(new Stock(1L,100L)); }@AfterEach public void after(){stockRepository.deleteAll(); }@Test @DisplayName("동시에 100개 요청")void 동시에_100개의_요청() throws InterruptedException {//given int threadCount = 100; // ExecutorService는 비동기로 실행하는 작업을 단순화하여 사용할 수 있게하는 자바 api ExecutorService executorService = Executors.newFixedThreadPool(32); // CountDownLatch는 다른 쓰레드에서 수행중인 작업이 완료될때까지 대기할 수 있도록 도와주는 클래스 CountDownLatch latch = new CountDownLatch(threadCount); for (int i = 0; i < threadCount; i++) {executorService.submit(()->{try {stockService.decrease(1L,1L); }finally {latch.countDown(); }}); }latch.await(); //when //then Stock stock = stockRepository.findById(1L).orElseThrow(); assertThat(stock.getQuantity()).isEqualTo(0); }@Test @DisplayName("재고감소")void decreaseStock(){//given //when stockService.decrease(1L,1L); Stock stock = stockRepository.findById(1L).orElseThrow(); //then assertThat(stock.getQuantity()).isEqualTo(99); }}1번테스트와 2번테스트를 각각 테스트를 실행할 경우 테스트가 성공하지만 전체 테스트를 실행하게 하여 1번테스트와 2번테스트를 돌리면 No value presentjava.util.NoSuchElementException: No value present라는 예외가 뜹니다.@BeforeEach와 @AfterEach가 있어서 문제가 없을거라 생각하는데 왜 전체 테스트중 동시에_100개의_요청이라는 테스트가 실패하는건가요?