묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
예제 코드 파일
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.스프링 핵심 원리 - 기본편 에서 김영한님이 작성하신 코드 파일을 다운로드 받을 수 있나요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
index.html 경로 인식
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요 복습을 진행중 입니다멀티모듈 프로젝트로 만들어서 그런지 index.html 위치를 제대로 설정하였는데도 http://localhost:8080/ 로 들어가면 404에러가 뜨는데 이유를 모르겠습니다 ㅠ사진은 디렉토리 구조입니다/resources/static 아래에 두면 웰컴 페이지로 잘 동작하지만, 그 후 jsp사용한 회원 가입 등을 할 때 404에러가 발생하여 질문드리게 되었습니다
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
EmailSender, passwordEncoder 빈 주입 문의
안녕하세요, 강사님. 올려주신 강의를 열심히 듣고 있습니다.제가 코드를 따라하고 있는데 MemberService에서 주입한 emailSender와 passwordEncoder에 Could not autowire. No beans of 'PasswordEncoder' type found. 라는 오류가 뜹니다.찾아보니 해당 인터페이스가 빈으로 등록되지 않아서 생긴 오류라고 하는데 어디서 빈으로 등록한건지 못찾겠습니다. 급한대로 두 인터페이스에 @Component를 해봤는데 MemberService의 오류는 사라졌지만 MemberResisterTest에 NoSuchBeanDefinitionException 문제가 뜹니다. 원래는 인터페이스들을 어떻게 빈으로 등록했던건가요?
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
DataSource Hikari 사용 이유
DataSource 관련 질문이 있습니다!1. 왜 Hikari Pool을 사용하신건지 궁금합니다.2. Maximum Connection Pool Size를 40개로 설정하신 이유도 궁금합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
예외 발생 요청 흐름에서 필터와 인터셉터 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]예외 발생 흐름이 WAS - 필터 - 서블릿 - 인터셉터 - 컨트롤러 순이라고 배웠습니다이때, 서블릿은 Spring의 DispatcherServlet을 의미하는 것으로 알고 있습니다그렇다면 여기서 말하는 "필터"와 "인터셉터"는 개발자가 직접 구현한 것을 뜻하는 건가요?아니면 Spring 자체 구조 안에 필터와 인터셉터가 내장되어 있는 건가요?
-
해결됨재고시스템으로 알아보는 동시성이슈 해결방법
saveAndFlush 사용 이유 문의
decrease 함수 안에서 일반적인 save가 아닌 saveAndFlush를 사용하는 이유가 궁금해서 문의 드립니다. 다른 이유가 있을까요?
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
jobConfiguration 구성 질문
안녕하세요, 강의를 보던 중 문득 궁금한 점이 생겨 문의드립니다. Spring Batch에서 Job 설정 클래스를 구성할 때, 아래와 같이 두 가지 스타일이 혼용되는 것을 자주 보게 되는데요.🥔 PotatoJobConfiguration (생성자 주입 방식)@RequiredArgsConstructor public class PotatoJobConfiguration { private final JobRepository jobRepository; private final PlatformTransactionManager transactionManager; @Bean public Job potatoJob() { return new JobBuilder("potatoJob", jobRepository) .start(potatoStep()) .build(); } @Bean public Step potatoStep() { return new StepBuilder("potatoStep", jobRepository) .tasklet((contribution, chunkContext) -> RepeatStatus.FINISHED, transactionManager) .build(); } }🥬 KimchiJobConfiguration (메서드 파라미터 주입 방식)@RequiredArgsConstructor public class KimchiJobConfiguration { @Bean public Job kimchiJob( final JobRepository jobRepository, final Step kimchiStep ) { return new JobBuilder("kimchiJob", jobRepository) .start(kimchiStep) .build(); } @Bean public Step kimchiStep( final JobRepository jobRepository, final PlatformTransactionManager transactionManager ) { return new StepBuilder("kimchiStep", jobRepository) .tasklet((contribution, chunkContext) -> RepeatStatus.FINISHED, transactionManager) .build(); } }강의를 보다 보면 예시마다 사용되는 경우가 다르던데,어떤 기준에 따라 생성자 주입 방식과 메서드 파라미터 주입 방식을 구분해서 사용하시는지 궁금합니다. 실무에서도 보통 이 둘을 혼용하는 편인지,아니면 상황에 따라 선호되는 방식이 명확히 나뉘는지 조언 부탁드립니다. 감사합니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
트랜잭션 전파 질문.
두가지 질문 있습니다. 1) 16분 30초부터 설명하는 내부 트랜잭션 응답 흐름에서 궁금한점이 있습니다.이번 강의에서 내부 트랜잭션이 참여하게 되면 이것은 아무것도 하지 않는 것이다라고 하셨고내부 트랜잭션이 커밋해도 신규 트랜잭션이 아니기 때문에 실제 커밋을 호출하지 않는다. 그리고 실제 커넥션에 커밋이나 롤백을 호출하면 트랜잭션을 끝나기 때문에 안되기 때문에 실제 커밋을 호출하면 안되고 여기서는 아무것도 안한다 라고 설명하시는데요.그렇다면 다음 코드에서@Test void inner_commit() { log.info("외부 트랜잭션 시작"); TransactionStatus outer = txManager.getTransaction(new DefaultTransactionAttribute()); log.info("outer.isNewTransaction()={}", outer.isNewTransaction()); log.info("내부 트랜잭션 시작"); TransactionStatus inner = txManager.getTransaction(new DefaultTransactionAttribute()); log.info("inner.isNewTransaction()={}", inner.isNewTransaction()); log.info("내부 트랜잭션 커밋"); // txManager.commit(inner); log.info("외부 트랜잭션 커밋"); txManager.commit(outer); }내부 트랜잭션에서 실제 커밋을 호출하면 안되고 어차피 아무것도 하지 않는 것이라면 없어도 되는 코드 아닌가? 라고 생각했는데 아래 다른 분이 하신 비슷한 질문의 답변에서 내부 트랜잭션을 사용한다고 결정했다면 항상 내부 트랜잭션을 커밋이나 롤백을 결정하셔야 합니다. 라고 답변 하신 것을 보았는데요. 아무것도 하지 않는데 내부 트랜잭션은 왜 커밋을 해주어야하는건가요? 2) 1번 질문이랑 관련 있는 것 같기는한데요.이전 강의에서 모든 논리 트랜잭션이 커밋되어야 물리 트랜잭션이 커밋된다고 하셨는데요, 이번 강의에서나 다음 강의에서나 외부(물리) 트랜잭션만 커밋해도 실제 커넥션에 모두 커밋되는 것 같은데.. 아닌가요? 이것이 맞다면 1번 질문과 마찬가지로 외부 (물리) 트랜잭션만 하면 되니 txManager.commit(inner) 코드는 필요 없는 것 아닌가요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
빌드 시작부터..
빌드 시작부터 오류가 나요;;
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
jobExecutionContext 에 접근하는 방법
치치직...1장 작전 3에서,키보드는 꽉 잘 잡았는데 궁금한게 발생했다. jobExecutionContext 에 접근/수정할 때chunkContext 를 통해서 접근하는 방법과 contribution 을 통해서 접근하는 방법 두가지를 알게 되었다. 일부러 두가지 침투 방식 을 알려준 것 같으나 두 방식의 차이가 있는지, 무엇이 더 선호되는지 아니면 취향의 문제인지 궁금하다.
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
동일 프로젝트에 서비스 간 의존성 주입 질문
안녕하세요. 강의 잘 보고 있습니다. 헥사고날 아키텍처 구조에서 궁금한 점이 있습니다.동일 프로젝트에 회원, 부서 도메인이 있고, 회원 서비스가 부서 서비스를 의존하고 있을 경우이 경우에는 포트+어댑터 패턴을 유지하는게 좋을까요? 아니면 부서 패키지 내에 존재하는 서비스 인터페이스로 주입받아도 괜찮을까요?포트 + 어댑터 구조로 할 경우 어댑터가 단순히 부서 서비스를 의존받아 호출만 하는 용도로만 사용하는거 같아 장점을 잘 모르겠습니다. (회원, 부서 도메인이 별도 프로젝트로 분리될 가능성은 희박하다는 전제입니다.)
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
ControllerV3 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.controllerV3를 만들때 파라미터로 Map<String,String>으로 전해주시는데 이것은 V2에서는 사용안하는 response를 없애기 위한것인가요?그렇다면 파라미터로 그냥HttpServletRequest requestt만 받게 하면 안되나요?
-
미해결스프링 부트 - 핵심 원리와 활용
내장 톰캣 실행 오류 관련 질문드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]오후 12:21:38: Executing ':hello.embed.EmbedTomcatServletMain.main()'…> Task :compileJava UP-TO-DATE> Task :processResources NO-SOURCE> Task :classes UP-TO-DATE> Task :hello.embed.EmbedTomcatServletMain.main()EmbedTomcatServletMain.main7월 13, 2025 12:21:39 오후 org.apache.coyote.AbstractProtocol initINFO: Initializing ProtocolHandler ["http-nio-8080"]7월 13, 2025 12:21:39 오후 org.apache.catalina.core.StandardService startInternalINFO: Starting service [Tomcat]7월 13, 2025 12:21:39 오후 org.apache.catalina.core.StandardEngine startInternalINFO: Starting Servlet engine: [Apache Tomcat/10.1.5]7월 13, 2025 12:21:39 오후 org.apache.coyote.AbstractProtocol startINFO: Starting ProtocolHandler ["http-nio-8080"]여기서 시간만 무제한으로 잡아먹고 더 진행이 안되는데 어떻게 해야할까요.. 내장 톰캣2-서블릿 강의를 보고 하는 중입니다. 8080 포트는 톰캣 외에 사용하는 것이 없고, 톰캣 폴더에 webapps도 만들어 두었고,혹시 몰라 java 17도 다시 깔고 환경변수 설정도 다 했는데, 다른 컴퓨터에서도 같은 문제가 발생합니다. 검색해서 java.security의 securerandom.source=file:/dev/randomtosecurerandom.source=file:/dev/./urandom바꿔봤는데도 그대로입니다.어떻게 해야할까요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
response.sendRedirect("/basic/hello-form.html"); 코드에서 302번이확정적인지? ?
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 저가 이해 한게 맞는지 알고 싶어서 올립니다. 사진을 보시면 response.sendRedirect("/basic/hello-form.html"); 라는 코드가 있는데저가 이해한 바로는 여기 이 코드(로직) 안에 "302"이 고정 되어 있어서 302번 상태 코드를 호출 하고 폼으로 간다 라고 이해 해도 되냐요?답변 부탁드립니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
로그아웃시 서버로 전달되는 쿠키(세션ID)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]로그아웃시에 서버로 전달되는 쿠키는 브라우저가 자신에게 저장된 쿠키 값을 조회해서 HTTP 헤더에 넣은 다음 서버로 전달하는 걸까요?
-
해결됨토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
안녕하세요 토비님 개인적인 질문이 있습니다.
강의와는 관련이 없는데, 개인적인 질문이 있습니다.저는 자바 스프링 신입 개발자를 준비하고 있는 학생입니다.지금까지는 MVC 패턴만 사용하고, 모놀리틱 아키텍처를 사용해서 배포를 진행하고 프로젝트를 해왔습니다. 제가 알기로는 학습적으로나 포트폴리오적으로나 필요성을 느껴서 하는 공부가 제일 좋다고 들었습니다. 근데, 최근에는 어떤 필요성을 느끼지 못하면서 대규모 시스템 강의,헥사고날 아키텍처가 중요하다고 하니 강의 등을 듣고 있습니다. 왜냐하면, 본격적인 취업은 내년이고 시간이 좀 남았습니다. 그래서 해당 강의들을 들어두면 언젠가 개인 프로젝트나 현업에서 사용할 수 있지 않을까하고 듣고있습니다만, 제가 사용했던 MVC 패턴의 장단점 등 기본적인 것들도 알지 못하는 상태에서 계속 진도 나가듯이 이런 저런 강의를 듣고 하는게 괜찮을까요? 즉, 아직 기본도 잘 모르면서 계속 새로운 걸 배우는 과정들이 괜찮을까하는 걱정이 드네요. 하지만, 한편으로는 CS지식이 너무 방대해서 기초를 다 잡아두고 다음 단계로 넘어간다는 것도 솔직히 엄두가 안납니다. 그래서 우선은 쭉 이것저것 배워두고 나중에 필요하면 다시 찾아보면서 공부하면 되지 않을까 싶은데, 토비님은 어떤 방향이 더 괜찮다고 생각하시나요??
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Content-Type에 나오는 txet/plain이 무엇인지?
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 . 굼긍즘이 생겨서 질문을 드립니다.hello.servlet.basic.response 에 있는 ResponseHeaderServlet 클래스 에서response.setHeader() 에서"Content-type","text/plain;charset=utf-8" 이렇게 입력하는 것을 보았습니다.근데 여기 입력에서 첫 번째 입력 값 text/plain 에 대해서 잘 모르겠습니다. 그래서 검색해서 찾아보니(볼로그 글을 보니) text/plain: 일반 텍스트 데이터임을 의미text/plain: 일반적인 평문의 글을 의미하며, html도 이에 해당 합니다.이렇게 두 가지 글을 찾을 수가 있었으나 뭔 말 인지 이해가 안되는 상황입니다. 혹 text/plain 에 대해서 더 자세히 알켜 주실수 있나요? 답변 부탁 드립니다.
-
해결됨스프링 핵심 원리 - 기본편
컨테이너 호출 방법 질문
지금까지ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);테스트 코드 만들때 수동으로 빈을 등록하도록 만든 설정(AppConfig)을, 컨테이너를 만들어 빈 들을 등록하고, 의존관계를 주입한 환경에서 테스트 진행.ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class);컴포턴트 스캔 애노테이션을 포함하고 필터로 범위를 제한한 설정으로 컨테이너를 만들어서 빈들을 등록하고 의존관계를 주입한 환경에서 테스트 진행 그래서 테스트에서 만든 컨테이너는AppConfig ,AutoAppConfig 로 만들어진 빈들로만 구성된 컨테이너가 만들어지는 거죠. 이렇게 설정 클래스를 통한 빈들로만 구성된 컨테이너를 테스트에서 사용 하는 이유는 ,내가 설정한 (복잡한 로직의 수동 빈 등록이 필요한) 설정클래스들만 테스트에서 확인하기 위함이죠? 그렇다면 실무에서는@SpringBootApplication 애노테이션이 있는 메인클래스가 있어서 @Comopenet로 자동 등록된 빈들과 AppConfig 처럼 설정 클래스로 수동 등록된 빈들은 모두 같은 컨테이너에 보관될거잖아요. 테스트에서는 이렇게 compnent로 자동 구성된 빈들로만 이루어진 컨테이너를 호출하거나, 지금까지 진행한 설정클래스들을 통한 빈들로만 이루어진 컨테이너를 호출하거나, 전체적인 빈들이 있는 컨테이너를 호출하는 등 다양하게 테스트를 진행하겠죠? 각각의 테스트에서 컨테이너를 호출하는 방법이 무엇인가요? 뒤에 강의들에서 이러한 질문들을 해결하는 개념들이 나오나요?
-
해결됨스프링 핵심 원리 - 기본편
@Configuration 를 왜 사용할까요?
@SpringBootApplication 이 루트 위치에 있고 이 애노테이션 설정안에@ComponentScan이 있고 따라서@Component 애노테이션이 붙은 클래스들을스프링 컨테이너에 싱글톤 으로 빈 등록을 하고 @AutoWired로 의존관계를 주입해준다 라고 이해했습니다 @ComponentScan을 배우기 전에는AppConfig에서 @Configuration 과 @Bean으로 클래스들을 수동으로 빈 등록을 하고 의존관계도 주입해줬죠. 그리고 이 과정에서 여러 객체가 발생하는 하여 싱글톤이 깨지는 것을@Configuration 을 통해 CGLIB 라이브러리로 싱글톤을 보장해준다 라고 이해했습니다. @SpringBootApplication -> @ComponentScan 으로 @Component 클래스들을스프링이 싱글톤을 보장하면서 컨테이너에 빈으로 등록하는것의 대한 과정에 대한 구체적인 과정이 있나요?(@Configuration 에선 CGLIB 라이브러리로 new가 여러개 있어도 싱글톤을 보장하는데.. 이런 구체적인 과정이 있는지?)아니면 그냥 간단하게 저렇게 하면 싱글톤을 보장한다. 라고 이해하면 될까요? 그리고 @ComponentScan과 @Component로 클래스들을 사용함으로 AutoAppConfig는 아무런 코드 가 없었죠,Configuration 과 Bean으로 수동 등록하고, 싱글톤이 깨져서, CGLIB 라이브러리를 사용했던것이 대체되었다는건데, @Configuration 과 CGLIB 라이브러리를 왜 사용했던건지요? 그냥 @ComponentScan과 @Component로 클래스들을 사용하면 되잖아요.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
LoginCheckFilter의 sendRedirect부분에 대해 질문드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.LoginCheckFilter의 doFilter 메서드에서 미인증 사용자의 요청일 경우 httpResponse.sendRedirect("/login?redirectURL=" + requestURI);위와 같이 리다이렉트를 해주는데 @PostMapping("/login") public String loginV4(@ModelAttribute LoginRequest loginRequest, HttpServletRequest request, @RequestParam(defaultValue = "/") String redirectURL) { log.info("redirectURL: {}", redirectURL);로그를 찍어보면 "/" 값이 넘어옵니다.여기서 궁금한게 있는데, redirect는 get요청으로 알고있는데 어떻게 Post요청이 되는지 궁금합니다.브라우저가 응답을 받아 리다이렉트 했을 때 요청받는 건 GetMapping("/login")이 아닌건가요?