묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 시큐리티 OAuth2
스피링 시큐리티 강의 너무 좋습니다
시큐리티 강의를 만들어주셔서 너무 감사합니다!디버깅을 통한 내부 아키텍처 동작원리 이해가 너무재밌습니다 ㅎㅎ 시큐리티에 대한 거부감이 초반에 있었지만, 스프링 시큐리티 동작원리를 이해하게 되므로써 시큐리티가 재밌어지고 활용도 잘할것 같습니다. 그리고 내부 디버깅을 하면서 느낀게 코드 디자인 설계 특히 디자인 패턴에 대해서도 많이 공부할 수 있게되어서 좋은 공부 방향인것 같습니다 ㅎㅎ 다시한번 감사의 말씀을 드립니다.
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
CookieCsrfTokenRepository 방식 질문 있습니다
csrf는 결국 쿠키와 같이 브라우저가 자동으로 추가하는 이유로 발생하는 문제로 이해했습니다. CookieCsrfTokenRepository방식은 csrf 토큰을 쿠키로 전달하고 client 쪽에서 해당 쿠키값을 읽어서 헤더나, 매개변수로 전달하는걸로 이해했습니다. client에서 cookie를 읽기 위해서는 httponly 속성을 꺼야되는데 이러면 보안상으로 취약해진다고 알고 있는데 이러한 점에도 굳이 세션을 놔두고 해당 방식으로 하는 이점이 있을까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
[ultimate버전] 3:19 화면이 뜨지 않습니다
서블릿의 모든 페이지는 정상동작하는 것을 확인했습니다그러나 http://localhost:8080/jsp/members/new-form.jsp 해당 페이지에 white label error가 발생합니다webapp.JSP.members.new-form.jsp<%@ 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>build.gradleplugins { id 'java' id 'war' id 'org.springframework.boot' version '3.3.4' id 'io.spring.dependency-management' version '1.1.6' } group = 'hello' version = '0.0.1-SNAPSHOT' java { toolchain { languageVersion = JavaLanguageVersion.of(17) } } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' implementation 'jakarta.servlet:jakarta.servlet-api' implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api' implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl' } tasks.named('test') { useJUnitPlatform() }
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
MerberSaveServlet에서 결과가 null로 나타납니다
다음과 같이 코드 작성하였고http://localhost:8080/servlet/members/new-form여기서 username:kim age:20 입력했을때http://localhost:8080/servlet/members/save해당 주소에서 id:1 username/age: null로 나오는데 해결방법을 알고싶습니다
-
미해결스프링 시큐리티 OAuth2
네이버 로그인 시 권한
네이버로 로그인하면 권한이 yml에 설정한 scope - email, profile은 넘어오지 않습니다. 강사님과 코드도 동일한데 어디를 확인해봐야할까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
value값이 무엇인가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요. package hello.hello_spring.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class HelloController { @GetMapping("hello-api") @ResponseBody public Hello helloApi(@RequestParam("name") String name) { Hello hello = new Hello(); hello.setName(name); return hello; } static class Hello { // key: name private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } }이 코드에서 key 값은 name이고 value값은 어떤 것인지 알 수 있을까요? 제가 못 알아들어서요ㅠ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
입력 매개변수 Model model의 유무
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요. 입력 매개변수로 Model model을 쓰는 상황과 안 쓰는 상황을 구별하지 못하겠습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
return "hello"가 html인지 string 값인지 어떻게 구별할 수 있나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.<첫 번째 예시>섹션 2 - View 환경설정에서의 예시 코드@GetMapping("hello") public String hello(Model model) { model.addAttribute("data", "hello!!"); return "hello"; }여기에서 return 값은 hello.html의 이름과 같아야 하기 때문에 return "hello"라고 해야 한다고 하셨는데 "hello.html"인지, String "hello"인지 어떻게 구별할 수 있을까요? 정적 컨텐츠일 때에는 항상 html의 이름과 같은 문자를 return해줘야 하나요? <두 번째 예시>섹션 3 - API 강의에서 첫 번째 예시@GetMapping("hello-string") @ResponseBody public String helloString(@RequestParam("name") String name) { return "hello " + name; }여기에서 return 값이 "hello " + name인데 "hello.html"인지, String "hello"인지 어떻게 아나요? 이때는 항상 String 값을 return해줘야 하나요?-------------------------------------------------입력 매개변수로 Model model을 쓰는 상황과 안 쓰는 상황이 잘 이해가 안 감
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
RememberMeService가 필요한 이유?
안녕하세요. 강의 잘 듣고 있습니다!저의 질문은RememberMe의 존재 이유를 잘 모르겠습니다.로그인이 안풀리게 하려는건가요 ?그러면 세션의 유지시간을 길게 잡을 수 있을 것 같은데, 복잡하게 JSESSIONID와 REMEMBER 조합으로 쓰는 이유가 와닿지가 않네요. 어떠한 이유로 이게 생긴것이고, 어떤 상황에서 유용하게 쓸 수 있을까요?감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
spring data jpa로 반환할 때
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@EntityGraph를 이용하여 페이징 한계를 돌파할 때 리포지토리public interface OrderRepository extends JpaRepository<Order, Long> { @EntityGraph(attributePaths = {"member", "delivery", "orderItems", "orderItems.item"}) Page<Order> findAll(Pageable pageable);}컨트롤러단@GetMapping("/api/v3.1/orders") public List<OrderDto> ordersV3_page( @RequestParam(value = "offset", defaultValue = "0") int offset, @RequestParam(value = "limit", defaultValue = "100") int limit ) { Pageable pageable = PageRequest.of(offset, limit); Page<Order> orders = orderRepository.findAll(pageable); return orders.stream() .map(OrderDto::new) .collect(Collectors.toList()); }이렇게 코드를 작성하면 orderItems 이것이 @OneToMany관계에 있어 DB의 데이터가 늘어나게 되기 때문에(orderItem개수에 따라) @EntityGraph(attributePaths = {"member", "delivery"}) 이렇게 적고 컨트롤러 단에서 동일하게 실행하게 되면 OrderDto::new 이것을 실행하게 되면서 Lazy전략으로 값을 가져오게 되어 페이징을 올바르게 처리할 수 있고, 만일 이때 값을 한번에 묶어서 가져오고 싶으면 @BatchSize를 이용하는 것으로 이해하였는데 올바르게 이해한 것인지 궁금합니다.
-
미해결스프링 부트 - 핵심 원리와 활용
스프링 레거시에서 프로메테우스를 통한 메트릭 수집
강사님 안녕하세요. 만약 스프링부트가 아닌 스프링 레거시 프로젝트와 같은경우cpu 사용량확인 및 메모리 확인 엔드포인트, 메트릭api 를 직접 구현해서 프로메테우스에서 수집하도록 해야할까요? 스프링 레거시프로젝트에서는 Actuator 라이브러리를 못쓰는걸로 알거든요
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
cmd 실행 후 종료 안 됨
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요. cmd로 java -jar hello-spring-0.0.1-SNAPSHOT.jar을 실행해서 웹 페이지가 잘 실행되는 것까지 확인이 되는데 그 이후 실행 종료가 안 됩니다 (아무것도 입력이 안 되는 상태입니다) 이럴 땐 어떻게 해야 할까요?^C도 입력해봤는데 2번째 화면 그대로 입니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
helloServlet작성후 웹페이지가 열리지않습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]HelloServlet를 작성하기전에는 정상작동합니다 근데 HelloServlet를 작성한후 클래스를 찾을수없다는 내용이 나옵니다
-
해결됨실전! 스프링 데이터 JPA
public void changeTeam 함수
안녕하세요. Member가 team이 바뀌면 this.team = team; team.getMembers().add(this);team이 변경되어서 현재 멤버의 팀 정보를 업데이트하고 새로운 팀에 새로운 멤버를 넣는다라고 이해했는데요,기존 팀에 속해있던 멤버 정보는 안지워도 되는걸까요? 감사합니다.
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
레이어드 아키텍처 개발에 대하여
섹션 6 진화하는 아키텍처의 3번째 강의인 핵사고날에 대한 사견 강의 중 8분 9초에 강사님께서 시스템이 명확할 때, 추상화가 너무 많이 되어있다면 쓸모없는 구역이라고 말씀하시고 Spring/JPA/RDB 이 3개를 쓸게 명확하다면 레이어드 아키텍처로 개발하라고 말씀하셨는데 그럼 기술 스택이 명확한 상황이라서 레이어드 아키텍처로 개발을 시작하게 된다면 전체적인 강의 통틀어서 말씀하셨던 의존성 역전, JPA에 종속적인 문제, 도메인 중점 개발 이런 것들이 필요 없어지게 되는걸까요?레이어드 아키텍처 개발이든 핵사고날 아키텍처로 개발을 하든 도메인을 중심으로 개발하는 것이 중요하다고 생각합니다. 하지만 의존성 역전으로 인한 추상화나 그로 인한 테스트 작성이 쓸모가 없어지게 되는걸까요?
-
미해결스프링 시큐리티 OAuth2
jwt login flow에 대해서 질문드립니다.
현재 login post 요청만 되는 것으로 확인이 됩니다.1. login post요청만 받을 수 있도록 설정되어 있는 클래스가 궁금합니다.2. 기존에 있던 loginfilter가 사라지고 현재는 어떤 필터로 대체 되었는지 알고 싶습니다.3. http.addFilterBefore(jwtAuthenticationFilter(macSecuritySigner, octetSequenceKey), UsernamePasswordAuthenticationFilter.class); http.addFilterBefore(jwtAuthorizationMacFilter(octetSequenceKey), UsernamePasswordAuthenticationFilter.class);현재 이렇게 코드가 있는데, 인증일 경우 jwtAuthenticationFilter만 권한 검증일 경우 jwtAuthorizationMacFilter로 가는지 여부 결정하는 과정에 대해서 설명부탁드립니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
초기 설정 오류 및 실행 안 됨
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]자바 버전 17스프링 부트 3.3.4위와 같이 오류가 뜨며 run 버튼이 나타나지 않습니다. 첫 번째 오류 메시지Cause: class jdk.internal.loader.ClassLoaders$PlatformClassLoader cannot be cast to class java.net.URLClassLoader (jdk.internal.loader.ClassLoaders$PlatformClassLoader and java.net.URLClassLoader are in module java.base of loader 'bootstrap') 두 번째 오류 메시지Could not configure services using BuildScopeServices.configure().> Could not configure services using BuildScopeCompileServices.configure().* 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 35ms .gradle 에서 캐시 삭제 해봤습니다.intellij 재설치 해봤습니다.프로젝트를 열 때 build.gradle 파일을 선택하였습니다.어떻게 해결하면 좋을까요...
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
hello-mvc와 hello-template
hello-template으로 return해서 hello-template.html에서 thymeleaft에 로직 처리가 되는것은 이해했으나 그걸 다시 변환후에 주소창에 보면 hello-template에서 처리를 하였는데 왜 hello-template?name=spring가 아닌 hello-mvc?name=spring가 되는건지 궁금합니다.
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
csrf POST 요청 시에 토큰값 넣어도 안되는 경우 확인해보세요
_csrf 파라미터 이름과 값 사이에 공백이 있는지 확인해보세요공백이 있을 경우 아래와 같이 공백을 지우고 다시 시도하시면 정상 작동됩니다### POST request with a header POST http://localhost:8080/csrf Content-Type: application/x-www-form-urlencoded _csrf=6LGfk2d_v1r5vsNT5VxTiI_8HIvuqSEMwVrVRCCQUXXhiSxyjNSppF5Jjz_Uiftmg3FnurzEMbONyhkhpD-wfROnYUTUuE5E
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
제가 이해를 제대로 했는지 궁금해서 질문드립니다
클라이언트 응답후 SecurityContextHolder는 계속 clear된다고 이해했습니다. 그럼 결국 Session에는 SecurityContext 가 저장되서 유지되는거고, 인증이 필요할때 해당 Session에서 SecurityContext를 꺼내 해당 요청동안에 SecurityContextHolder에 저장해서 사용한다고 이해하면 될까요?