inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

섹션.8 메서드 기반 권한 부여 @PreAuthorize

미해결

스프링 시큐리티 완전 정복 [6.x 개정판]

안녕하세요? 섹션8. 메서드 기반 권한 부여 강의 보다가 잘 안되는 부분이 있어서 질문 드립니다! (16분 쯤에 설명 나오는 부분입니다!) @GetMapping("/user/{id}") @PreAuthorize("#id == authentication.name") public String authentication(@PathVariable(name = "id") String id){ return id; } 해당 강의에서 user 로 로그인 시 위 url 로 접근이 가능했는데, 똑같이 해봤는데 403 이 떴습니다. 혹시나 해서 공유해주신 github 프로젝트로 해당 branch 로 체크아웃했더니 같은 현상이 나타납니다. 이것저것 시도해보다가 스프링 공식페이지에서 @P 어노테이션에 대한 설명이 있길래 아래와 같이 도입해봤더니 정상동작합니다. @GetMapping("/user/{id}") @PreAuthorize("#id == authentication.name") public String authentication(@P("id") @PathVariable(name = "id") String id){ return id; } https://docs.spring.io/spring-security/reference/servlet/authorization/method-security.html 강의 하실 때보다 시큐리티 버젼이 또 올라가서 안되는 부분이 생긴 것일까요? 아니면 제가 어떤 부분을 놓치고 있는걸까요? ㅠ

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
  • @preauthorize
Peter Choi 댓글 3 좋아요 0 조회수 609

consumer 셋팅 숫자 출력이 안됩니다.

미해결

실습으로 배우는 선착순 이벤트 시스템

docker exec -it kafka kafka-console-consumer.sh --topic coupon_create --bootstrap-server localhost:9092 --key-deserializer "org.apache.kafka.common.serialization.StringDeserializer" --value-deserializer "org.apache.kafka.common.serialization.LongDeserializer" 라고 터미너에 입력한 후에 테스트 코드 package com.example.coupon_server.service; import com.example.coupon_server.repository.CouponRepository; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; @SpringBootTest public class ApplyServiceTest { @Autowired private ApplyService applyService; @Autowired private CouponRepository couponRepository; @Test @DisplayName("쿠폰 한개 적용 테스트") public void applyOneCoupon() { applyService.applyCoupon(1L); long count = couponRepository.count(); assertThat(count).isEqualTo(1); } @Test @DisplayName("쿠폰 여러개 적용 테스트") public void applyMultiCoupon() throws InterruptedException { int threadCount = 1000; ExecutorService executorService = Executors.newFixedThreadPool(32); CountDownLatch latch = new CountDownLatch(threadCount); for (int i = 0; i < threadCount; i++) { long userId = i; executorService.submit(() -> { try { applyService.applyCoupon(userId); } finally { latch.countDown(); } }); } latch.await(); Thread.sleep(10000); long count = couponRepository.count(); assertThat(count).isEqualTo(100); } @Test @DisplayName("한명당 한개의 쿠폰만 발급") public void applyOneCouponPerUser() throws InterruptedException { int threadCount = 1000; ExecutorService executorService = Executors.newFixedThreadPool(32); CountDownLatch latch = new CountDownLatch(threadCount); for (int i = 0; i < threadCount; i++) { long userId = i; executorService.submit(() -> { try { applyService.applyCoupon(1L); } finally { latch.countDown(); } }); } latch.await(); Thread.sleep(10000); long count = couponRepository.count(); assertThat(count).isEqualTo(1); } } 로 작성했지만 터미널에서 강사님과 같이 숫자들이 찍히자 않습니다. 그리고 터미널 안의 글씨 너무 작은것 같아요

  • java
  • docker
  • spring-boot
  • kafka
  • redis
SJ 댓글 3 좋아요 0 조회수 476

oAuth2.0 로그인 후 쿠키 생성 질문

미해결

@Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { // CSRF 설정 http.csrf((csrf) -> csrf.disable()); http.authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRequests .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll() .requestMatchers("/").permitAll() .anyRequest().authenticated() ); http.oauth2Login((oauth2Login) -> oauth2Login .loginPage("/login") .userInfoEndpoint(userInfoEndpoint -> userInfoEndpoint .userService(principalOauth2UserService)) .defaultSuccessUrl("/", true) .permitAll() ); return http.build(); } 현재 위와 같이 우선 oAuth2.0 인증 기반을 구현했습니다. 이 상태에서 로그인을 하면 웹 브라우저 쿠키에 JSESSIONID : 0C3706243FE7B32FF2A3C757013B164C 형식의 값이 삽입됩니다. 이후 test 용으로 작성한 "/user" 경로로 접근을 시도하면 접근이 가능하게 됩니다. 만약 쿠키를 지우고 "/user" 로 접근하면 "/" 로 튕기고, 다시 로그인을 해야합니다. 여기서 궁금한 게 저는 별도의 쿠키 생성 로직을 작성하지 않았는데 oAuth 로그인 후 JSESSIONID : 0C3706243FE7B32FF2A3C757013B164C 이 녀석이 어떻게 생성된 것인지 궁금하며, 어떻게 저 녀석으로 인증이 필요한 자원에 접근이 가능한 것인지 원리가 궁금합니다. 검색해보니 톰캣 컨테이너에서 세션을 유지하기 위해 발급하는 키라고 하는데, 이게 그냥 인덱스 페이지에 최초 접속할 때도 생기더라구요 ? oAuth 로 로그인하면 값이 바뀌긴 하지만,,, 구글링 해보면 세션 만들고 쿠키 만들고 하던데, 그럴 필요가 없는 거 아닌가요 ? + 추가질문 http.sessionManagement( (sessionManagement) -> sessionManagement .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) .maximumSessions(1) // 최대 허용 가능 세션 수 .maxSessionsPreventsLogin(false) // 멀티로그인 차단, false : 기존 세션 만료(default) .sessionRegistry(sessionRegistry()) ); 이와 같이 또 세션 정책을 세웠는데, 네이버 웨일로 로그인하고, 크롬으로 로그인 하면 둘 다 로그인 상태가 유지되는데 왜 이러는 걸까요...

  • spring
  • security
  • mvc
  • server
  • spring-security
오세창 댓글 1 좋아요 0 조회수 293

섹션 10. try - with - resources

해결됨

김영한의 실전 자바 - 중급 1편

질문입니다! 상황 1 . 우선 NetworkClientExceptionV5는 RuntimeException을 상속 받은 상태입니다. public class NetworkClientExceptionV5 extends RuntimeException { public NetworkClientExceptionV5(String message) { super(message); } } 그러면 NetworkClientExceptionV5를 상속받은 ConnectException과 SendException도 RuntimeException이 되는 거구요. public class ConnectExceptionV5 extends NetworkClientExceptionV5 { private final String address; public ConnectExceptionV5(String address, String message) { super(message); this.address = address; } public String getAddress() { return address; } } public class SendExceptionV5 extends NetworkClientExceptionV5 { private final String data; public SendExceptionV5(String data, String message) { super(message); this.data = data; } public String getData() { return data; } } 상황 2 . 그리고 NetworkClientV5는 AutoCloseable을 구현했습니다. import exception.ex5.exception.ConnectExceptionV5; import exception.ex5.exception.SendExceptionV5; public class NetworkClientV5 implements AutoCloseable { private final String address; private boolean connectError; private boolean sendError; public NetworkClientV5(String address) { this.address = address; } public void connect() { if (connectError) { throw new ConnectExceptionV5(address, address + " 서버 연결 실패"); } // 연결 성공 System.out.println(address + " 서버 연결 성공"); } public void send(String data) { if (sendError) { throw new SendExceptionV5(data, address + " 서버에 데이터 전송 실패 : " + data); } // 전송 성공 System.out.println(address + " 서버에 데이터 전송 : " + data); } public void disconnect () { System.out.println(address + " 서버 연결 해제"); } public void initError(String data) { if (data.contains("error1")) { connectError = true; } if (data.contains("error2")) { sendError = true; } } @Override public void close() throws Exception { System.out.println("NetworkClientV5.close"); disconnect(); } } ==질문입니다!!== NetworkServiceV5에서 public class NetworkServiceV5 { public void sendMessage(String data) { String address = "http://example.com"; try (NetworkClientV5 client = new NetworkClientV5(address)) { client.initError(data); // 추가 client.connect(); client.send(data); } } } try (NetworkClientV5 client = new NetworkClientV5(address))에서 컴파일 오류가 납니다. client에서 올라오는 예외들은 다 RuntimeException이므로 따로 throws를 안 해줘도 되는데 왜 해결하려고 하면 throws를 선언하거나 catch를 해야한다고 하는 건가요? RuntimeException은 예외를 throws 선언없이 자동으로 밖으로 던지기에 catch를 안 해도 상관이 없을텐데 왜 alt + enter을 누르면 throws 선언과 catch를 해야만 된다고 하는 건지 이해가 가지 않습니다. 제가 생각하는 건 이런식으로 흘러간다고 생각했습니다. main()에서 (error1 | error2)를 입력 받음 -> sendMessage를 호출 -> sendMessage에서 코드 진행 -> (client.connect | client.send)를 만나서 NetworkClientV5에 들어감 -> (ConnectException | SendException)을 터트림 -> NetworkClientV5에서 예외를 밖으로 던짐 (런타임이라서 throws 선언 안 해도 던져짐) -> NetworkService로 예외가 날라옴 -> 여기서도 처리가 불가능 하니, 예외를 밖으로 던짐 (여기서 throws 선언을 안해도 던져져야 한다고 생각함. 날아온 예외는 RuntimeException이기 때문에) -> main으로 예외가 넘어옴 -> main에는 catch (Exception e)가 있어서 예외를 잡고 정상흐름으로 돌아옴. 마지막은 메인메서드 입니다! import exception.ex5.exception.SendExceptionV5; import java.util.Scanner; public class NetworkmainV5 { public static void main(String[] args) { NetworkServiceV5 service = new NetworkServiceV5(); Scanner scanner = new Scanner(System.in); while (true) { System.out.print("전송할 문자 : "); String input = scanner.nextLine(); if (input.equals("exit")) { break; } try { service.sendMessage(input); } catch (Exception e) { exceptionHandler(e); } System.out.println(); } System.out.println("프로그램을 종료합니다."); } // 공통 처리 예외 private static void exceptionHandler(Exception e) { System.out.println("사용자 메시지 : 죄송합니다. 알 수 없는 문제가 발생했습니다."); System.out.println("==개발자용 디버깅 메시지=="); // 스택 트레이스 출력 e.printStackTrace(System.out); // 스택 트레이스 출력 System.err //e.printStackTrace(); // 필요하면 예외별로 별도의 추가 처리 가능 if (e instanceof SendExceptionV5 sendEx) { System.out.println("[전송 오류] 전송 데이터 = " + sendEx.getData()); } } }

  • java
  • 객체지향
권정익 댓글 1 좋아요 0 조회수 200

실무에서 spring boot 2.6.x 버전을 사용 하고 있는데요.

미해결

스프링 시큐리티 완전 정복 [6.x 개정판]

여기서 강의 나오는 버전 경우 spring security 버전이 6.x 버전입니다. 현재 실무에서 사용하고 있는 spring boot 버전이 2.6.x 인데요. boot 업그레이드 하지 않고 security 버전을 6.x 버전으로 올려도 괜찮을까요?... implementation group: 'org.springframework.boot', name: 'spring-boot-starter-security', version: '3.2.5' build.gradle 파일에 이렇게 수정해서 올렸더니 @EnableWebSecurity 같은 중요한 객체가 import가 안되는 문제가 생겨서요 ㅠㅠ

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
리나 댓글 2 좋아요 1 조회수 553

안녕하세요 선생님 rememberme 질문드립니다..!

해결됨

[초급] 찍어먹자! 코틀린과 Spring Security + JWT로 회원가입 만들기

스프링 시큐리티 + JWT 를 사용한 API 서버에서 프론트(리액트)에다가 회원 로그인할 때 자동 로그인을 선택하면 자동 로그인이 되도록 수행하고 싶습니다. 문제는 세션을 비활성화한 상태에서 자동 로그인 유지를 어떻게 접근해야 할까요...?

  • kotlin
  • spring-boot
  • jpa
  • spring-security
  • jwt
optional94 댓글 1 좋아요 0 조회수 261

데이터 베이스 쿼리 실행 시점 관련 문의

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 이전에 데이터베이스에 반영되는 실행 시점은 em.flush() 트랜잭션 커밋 JPQL 쿼리 실행 으로 알고 있습니다. 그런데 11:45초 쯤부터 em.persist(team) 을 실행할때 id 값을 갖고 오기위해 new Member 이전에 insert문이 실행된다면 위의 경우가 아닌 것으로 판단되는데 em.persist 호출해도 쓰기 지연 SQL에 쌓이는 것이 아닌 바로 쿼리를 실행하게 되는 건가요?

  • java
  • jpa
김가가가 댓글 2 좋아요 0 조회수 222

jar build 동작 확인을 위한 Window cmd 이용 중 Build failed with an exception 오류

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] H2 database Ctrl C 후 gradlew clean build 실행 시 아래와 같이 화면이 나타납니다. 이전에 시행했을땐 이런 오류가 떴습니다. (base) C:\study\jpashop\jpashop>gradlew clean build Welcome to Gradle 8.7! Here are the highlights of this release: Compiling and testing with Java 22 Cacheable Groovy script compilation New methods in lazy collection properties For more details see https://docs.gradle.org/8.7/release-notes.html Starting a Gradle Daemon (subsequent builds will be faster) Task :compileJava FAILED FAILURE: Build failed with an exception. What went wrong: Execution failed for task ':compileJava'. error: invalid source release: 21 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 8s 2 actionable tasks: 2 executed Gradle 8.7같은 경우 Java 22와 호환이 되어있는것 같은데 Java21로 설정하고 프로젝트를 진행 했을 때 어떻게 처리해야하는지 궁금합니다.

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
박진재 댓글 1 좋아요 0 조회수 564

Spring Data JPA에서 update 하는 방법

미해결

실전! 스프링 데이터 JPA

검색해보니 Spring Data JPA는 순수 JPA와 다르게 save() 조차 하지 않아도 자동으로 변경감지가 일어난다고하는데, 제가 작성한 코드를 바탕으로 테스트해보니 save()를 하지 않으면 업데이트가 되지 않았습니다. 조금 더 디테일한 설명을 해주실 수 있을까요? save()는 @PostMapping의 postRepository.save (findPost); 부분을 지칭하는 것입니다. @Controller @RequestMapping("/post") @RequiredArgsConstructor @Slf4j public class PostController { private final BoardService boardService; private final BoardRepository boardRepository; private final PostService postService; private final PostRepository postRepository; /** * 게시물 수정 */ @GetMapping("/edit/{id}") public String showEdit(@PathVariable Long id, @SessionAttribute(name = SessionConst.LOGIN_MEMBER, required = false) Member loginMember, Model model) { Post findPost = boardRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("No Post Found."));// findPost 게시물 보여주기 model.addAttribute("findPost", findPost); return "editPost"; } @PostMapping("/edit/{id}") public String editPost(@PathVariable Long id, Post editPost) { Post findPost = boardRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("No Post Found.")); findPost.setTitle(editPost.getTitle()); findPost.setContent(editPost.getContent()); findPost.setCategory(editPost.getCategory()); findPost.setLastModifiedTime(LocalDateTime.now()); postRepository.save(findPost); return "redirect:/board/post/" + id; } } public interface PostRepository extends JpaRepository<Post, Long> { /** * 게시물 저장 */ Post save(Post post); }

  • java
  • spring
  • spring-boot
  • jpa
Jaesang Yoon 댓글 2 좋아요 0 조회수 2540

AuthenticationManager 사용방법에 대해 질문있습니다.

해결됨

스프링 시큐리티 완전 정복 [6.x 개정판]

안녕하세요 강의 잘 보고 있습니다. 다름이 아니라 강의를 보며 궁금한 점이 생겨 이렇게 질문드립니다. 영상및 강의자료에서는 Authentication Manager를 사용할때 CustomFilter를 다루는 부분이 나옵니다. 이때 첫번째 방법(HttpSecurity 사용)은 필터를 Bean으로 등록하는 것이 아닌 직접 필터 객체를 생성하고 Authentication ManagerBuilder를 통해 직접 build한 Authentication Manager에 등록하고 두번째 방법(직접 생성)은 필터를 빈으로 등록하고 Authentication Manager관련 프로세스는 스프링 시큐리티에 위임한다는 느낌을 받았습니다. 이때 이 두가지 방법의 차이는 어떤 것이 있을까요? Authenticaion Manager를 직접 생성하기에 세밀한 설정이 가능하다는 차이가 있고 없고인가요? 스프링 시큐리티의 버전이 변경되면서 필터를 Bean으로 등록해 사용하도록 권장하고 있다고 알고 있습니다. 이러한 관점에서 보았을때는 두번째 방법이 스프링 시큐리티 측에서 권장하는 방법으로 이해해도 될까요?

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
이상민 댓글 1 좋아요 0 조회수 372

참조값(사이드 이펙트) 질문

해결됨

김영한의 실전 자바 - 중급 1편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. 영한님의 설명을 보면 자바 문법상 Address b = a 가 만들어저도 문제가 없다고 하였고, 참조값을 공유해서 사이드 이펙트를 만드는 경우가 있다고 말하였습니다. 여기서 갑자기 궁금해지네요. 여태 까지의 코드를 보면, 사이드 이펙트를 만드는 경우가 없었던 걸로 기억하는데.. 어는 경우 에서야, 사이드 이펙트를 활용하는지. 예시를 알켜 주실수 있으실까요? 답변 부탁 드립니다.

  • java
  • 객체지향
생각하는자 댓글 1 좋아요 0 조회수 309

섹션2 문제와 풀이

해결됨

김영한의 실전 자바 - 중급 1편

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] section2 문제와 풀이를 다음과 같이 풀어보았는데, 결과는 맞지만 제 코드에서 부족한 부분이 있는지, 개선점은 없는지 한번 확인 부탁드립니다!

  • java
  • 객체지향
andy15948 댓글 1 좋아요 0 조회수 235

7강 application.yml에 문제가 있는거 같습니다...

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 아니오 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 현재 구글링 하면서도 진행 해봤지만 다른게 문제인지 h2 console에도 insert 구문이 날라가지 않습니다 ... 현재 제가 놓친게 있을까요 ?... 지금 스프링부트 버전은 3.2.5 버전입니다. 자바 버전도 17로 설정되어 있습니다. 해당 프로젝트 주소 : https://drive.google.com/file/d/1SbgjH5aDY_j_g07r9_Kmz4Uk-uImcC9L/view?usp=drive_link

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
조현민 댓글 1 좋아요 0 조회수 556

concat()이 내부적으로 생성하는 String 인스턴스

미해결

김영한의 실전 자바 - 중급 1편

public class StringImmutable2 { public static void main(String[] args) { String before = "hello"; String after = before.concat(" java"); System.out.println("before = " + before); System.out.println("after = " + after); } } 자바 프로그램 로딩 시점에 문자열 리터럴이 문자열 풀에 보관된다고 알고 있는데요. 위 코드에서 "hello" 뿐만 아니라 " java"도 문자열 리터럴인가요? 그렇다면 " java"도 문자열 풀에 저장되는 것인가요? (제가 자바 기초 지식이 부족한 상태입니다) concat() 내부에서 생성하는 String 인스턴스는 문자열풀에 생성되는 것인가요? 아니면 문자열풀이 아닌 힙 영역에 생성되는 것인가요?

  • java
  • 객체지향
도토리 댓글 1 좋아요 0 조회수 246

jwt를 저장하는 위치에 궁금한 점이 있습니다.

미해결

스프링부트 시큐리티 & JWT 강의

강사님 강의 열심히 잘보고 있습니다. 강사님 강의도 보고 인터넷에 있는 레퍼런스도 많이 찾아보니까 토큰을 만들고 해당 토큰을 SecurityContextHolder 에 담는 방식과 강사님처럼 response.addHeader 로 담는 두가지 방식이 있는거같은데 혹시 두개의 차이점이 무엇인가요?

  • spring
  • spring-security
  • jwt
JongKook 댓글 1 좋아요 0 조회수 323

마지막 단에서 공통 처리할 때의 catch 부모 예외

해결됨

김영한의 실전 자바 - 중급 1편

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 5:50에서 공통 처리 catch를 최상위 예외인 Exception으로 잡았는데 결국 해결할 수 없는 예외들은 언체크 예외들로 구성되어 있으니깐 RuntimeException으로 잡는게 낫지 않나요? 다른 케이스가 있어서 그런건지 궁금해서 질문 남깁니다.

  • java
  • 객체지향
  • 예외
kyk 댓글 1 좋아요 1 조회수 300

스프링JdbcTemplete강의 내용 1:38초부분에서 의존성주입 질문이 있습니다

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

//JdbcTemplateMemberRepository public class JdbcTemplateMemberRepository implements MemberRepository { private final JdbcTemplate jdbcTemplate; public JdbcTemplateMemberRepository(DataSource dataSource) { jdbcTemplate = new JdbcTemplate(dataSource); //SpringConfig @Configuration public class SpringConfig { private final DataSource dataSource; public SpringConfig(DataSource dataSource) { this.dataSource = dataSource; } JdbcTemplate을 사용하도록 스프링 설정 변경하는 부분인데 이전에 객체를 생성해서 직접 주입하면 안좋다고 하셨었는데 jdbc템플릿을 적용하시는 부분에서는 직접 dataSource를 JdbcTemplate를 생성해서 넣으셨습니다. public SpringConfig(DataSource dataSource) { this.dataSource = dataSource; }대신에 JdbcTemplate를 빈에 등록해서 이렇게 사용하는게 이전에 배운내용에 따르면 의존성, 결합성 면에서 나은 코드라 생각했습니다. (@autowired를 사용하게끔 수정해본 코드) //JdbcTemplateMemberRepository public class JdbcTemplateMemberRepository implements MemberRepository { private final JdbcTemplate jdbcTemplate; @Autowired public JdbcTemplateMemberRepository(DataSource dataSource) { jdbcTemplate = new JdbcTemplate(dataSource); //SpringConfig @Configuration public class SpringConfig { private final DataSource dataSource; @Bean public JdbcTemplate jdbcTemplate(DataSource dataSource) { return new JdbcTemplate(dataSource); } } 이렇게 수정해서 사용하라고 설명해주시다가 이 JdbcTemplate강의에서는 직접 주입하시면서 설명해주셨는데, JdbcTemplate빈을 정의해서 주입하는 방식이 아닌 Datasource를 직접 사용한 이유가 있을까요? 뭔가 데이터접근할때는 다른부분이 있어서 이런 방법이 사용된건지 궁금합니다.

  • java
  • spring
  • mvc
  • spring-boot
담이 댓글 3 좋아요 0 조회수 608

PPT 강의 자료는 어디 있을까요...?

해결됨

스프링 시큐리티 완전 정복 [6.x 개정판]

안녕하세요 선생님~! 혹시 PPT 강의 자료는 어디 있을까요...? ㅠㅠ

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
김상욱 댓글 2 좋아요 0 조회수 353

react 와 같은 별개의 프론트가 있는 경우 csrf

미해결

스프링 시큐리티 완전 정복 [6.x 개정판]

이런 경우에는 rest 방식으로 로그인할때, csrf 값을 처리할 수 없을거 같은데요. same-site 방식으로 처리하면 되는걸까요?

  • spring
  • spring-boot
  • spring-security
  • security
  • web-security
비오 댓글 2 좋아요 1 조회수 565

kafka 사용 이유

미해결

실습으로 배우는 선착순 이벤트 시스템

안녕하세요, 궁금한 내용이 생겨 기존에 질문들을 살펴보고 제가 이해한 것이 맞는지 확인차 질문드립니다. redis의 싱글스레드 특성으로 100개 발급에 대한 race condition 해결 --> 그러나 insert 시 DB 처리량에 부하가 발생할 수 있음 kafka 미들웨어를 통해 100개의 쿠폰 저장 이벤트를 보관해두었다가 컨슈머에서 원할때 꺼내어 처리할 수 있는 여지를 주어 처리량 부하를 분산시킬 수 있음 ex) 쿠폰 발급은 당장 안해도 되니, kafka에 이벤트만 잘 발행되어 있다면 DB 작업량이 적은 새벽에 꺼내서 저장해도 됨 이렇게 이해했는데, 맞을까요?

  • java
  • docker
  • spring-boot
  • kafka
  • redis
jyyoon0615 댓글 2 좋아요 2 조회수 461

인기 태그

인프런 TOP Writers

주간 인기글