inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

런타임 중, 메소드 인가 맵 등록시, 서비스 Proxy 가 만들어지지 않는 이유의 질문입니다.

해결됨

스프링 시큐리티

좋은강의 감사드립니다. 약간 다른 시도를 해보고 잘 안풀리게되어 질문을 남기게 되었어요. 메소드 권한 부여는 반드시 MapBasedMethodSecurityMetadataSource 생성자를 통해서만 등록이 가능할까요? 초기화가 끝난 이후 런타임에서 addSecureMethod(string, configAttrList) 를 통해 등록하면 프록시 생성이 안되는것 같더라구요.. 그래서 아래와 같은 시도가 있었습니다. 저는 MapBasedMethodSecurityMetadataSource 를 extends 하여 CustomMapBasedMethodSecurityMetadataSource 를 만들어, 생성이 된 이후, 메소드 리소스맵 등록을 super . addSecureMethod () 메서드로 하려는 시도를 했습니다. 이후 @EventListener ( ContextRefreshedEvent . class ) 이벤트 핸들러를 MethodSecurityConfig 에 작성하고, 이벤트 발생 시점에 App컨택스트로 부터 CustomMapBasedMethodSecurityMetadataSource 를 가져와 reload () 를 호출하여 Map 을 통해 메서드 정보 등록이 되도록 구성했습니다 문제는 서버 기동 및 컨트롤러 호출 후, Method Resource 가 등록 과정에 서비스 프록시 가 생성되지 않아 서비스 메서드 가 그대로 호출이 되었는데요, Debug 확인 결과 클래스 명 메소드명 Map 파싱은 문제가 없었습니다. 아래는 서버 기동 후, 커스텀 메소드 메타데이터 소스 를 메모리에서 조회 결과입니다. 위의 과정으로 반드시 생성자를 통해 Map 을 전달 해야만 Proxy 생성이 되는것으로 판단되었습니다 이벤트 리스너를 통해 methodMap 등록을 지연하게 되면 필터링 처리가 안되는 이유가 궁금한데요.. 이런 부분에 대해 조언을 구합니다. 아래는 작성한 Method..Config 와 Method...Source 입니다 MethodSecurityConfig public class MethodSecurityConfig { ... /** * DB 초기화 직후 , METHOD 인가정보 등록 */ @EventListener ( ContextRefreshedEvent . class ) @Transactional public void onContextRefreshed ( ContextRefreshedEvent event ) { ApplicationContext ctx = event . getApplicationContext () ; var customMapBasedMethodSecurityMetadataSource = ctx . getBean ( CustomMapBasedMethodSecurityMetadataSource . class ) ; customMapBasedMethodSecurityMetadataSource . reload () ; } ... } CustomMapBasedMethodSecurityMetadataSource public class CustomMapBasedMethodSecurityMetadataSource extends MapBasedMethodSecurityMetadataSource { private final MethodResourceMapFactoryBean methodResourceMapFactoryBean ; public CustomMapBasedMethodSecurityMetadataSource ( MethodResourceMapFactoryBean methodResourceMapFactoryBean ) { /* 생성자를 통해 methodMap 전달시 작동 */ // super(Map.of( // "io.security.corespringsecurity.aopsecurity_test.AopMethodAuthTestService.methodSecured", // List.of(new SecurityConfig("ROLE_USER")) // )); this . methodResourceMapFactoryBean = methodResourceMapFactoryBean ; } /** * DB 데이터 초기와 직전 로딩 이슈로 , DB 초기화 이후 값을 가져오기위한 리로딩 메서드 */ public void reload () { LinkedHashMap < String , List < ConfigAttribute >> resourceMap = methodResourceMapFactoryBean . getObject () ; for ( Map . Entry < String , List < ConfigAttribute >> resourceEntry : resourceMap . entrySet ()) { String fullPackageClassMethodName = resourceEntry . getKey () ; List < ConfigAttribute > configAttributes = resourceEntry . getValue () ; addSecureMethod ( fullPackageClassMethodName , configAttributes ) ; } } /** * 보안 메서드에 대한 설정을 추가합니다 . 메서드 이름은 여러 메서드를 등록하기 위해 `*` 로 끝나거나 시작할 수 있습니다 . <br /> * 풀패키지 클래스명 + 메서드명 파싱 및 S.Security 에 메서드 정보 추가 <br /> * Key: 풀패키지 클래스명 + 메서드명 (ex: "a.b.Class.*method or method*") <br /> * Value: ConfigAttribute List <br /> * 참고 : super 클래스 private addSecureMethod(name, attr) 메소드 복제 */ private void addSecureMethod ( String name , List < ConfigAttribute > attr ) { int lastDotIndex = name . lastIndexOf ( "." ) ; Assert . isTrue ( lastDotIndex != - 1 , () -> "'" + name + "' is not a valid method name: format is FQN.methodName" ) ; String methodName = name . substring ( lastDotIndex + 1 ) ; Assert . hasText ( methodName , () -> "Method not found for '" + name + "'" ) ; String typeName = name . substring ( 0 , lastDotIndex ) ; Class < ? > type = ClassUtils . resolveClassName ( typeName , ClassUtils . getDefaultClassLoader ()) ; super . addSecureMethod ( type , methodName , attr ) ; } } 읽어주셔서 감사합니다.

  • java
  • spring-boot
  • Spring Security
Truestar 댓글 1 좋아요 0 조회수 403

4분 20초에 동시성에 문제가 있을수 있다고 말씀해주셨는데요.

미해결

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 아니오 [질문 내용] 4분 20초에 실무에서는 동시성을 고려해야 할수 있다고 말씀해주셨는데요. 저코드에서 동시성에 관련된 문제가 어떻게 발생이 되는지 알려주시면 감사하게습니다.

  • 동시성
  • 병렬성
  • java
  • MVC
  • spring
  • spring-boot
이준수 댓글 1 좋아요 0 조회수 418

member_Id, item_id,order_id 가 공유되는거 같은데 따로 할려면 어떻게 해야하나요?

미해결

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

4:33에 order 하나 만들었는데 #3이 되어있어서 확인해보니까 멤버 하나 만들면member_id=1 아이템 하나 만들면 item_id=2 주문 하나 만들면 order_id=3 이런식으로 id가 공유되는거 같은데 @GeneratedValue 때문인가요? 각각 따로 id를 만들어줄려면 어떻게 해야하나요?

  • spring-boot
  • java
  • JPA
  • spring
  • 웹앱
댓글 1 좋아요 0 조회수 214

maria DB table 생성

미해결

안녕하세요. 이번에 새로운 시도를 위해 react, express, mariaDB를 이용하여 개발중인 신입 개발자입니다. 처음으로 백엔드 분야를 시도하는거라 물어볼 사람도 많지 않아 어려움을 겪고 있습니다. 현재 메인페이지에서 새로운 카테고리(ex. test)를 만들면 test라는 테이블이 DB내에서 생성되고, 이후 test내부에서 또다시 카테고리를 만들면 DB내에서 생성 되도록 제작하고 싶습니다. 현재 코드를 이렇게 작성하였지만, 테이블 생성이 안되고 있습니다. 어떻게 하면 좋을까요? app . get ( "/" , ( req , res ) => { res . send ( "안녕" ); const title = "insert_test11" const sqlQuery = "CREATE TABLE (?) ( `user_key` INT NOT NULL AUTO_INCREMENT, `user_id` VARCHAR(45) NULL, PRIMARY KEY (`user_key`))" ; connection . query ( sqlQuery , [ title ], ( err , result ) => { if ( err ) { console . log ( "실패!" ); } else { console . log ( "성공!" ); } }) });

  • mariadb
  • mysql
  • express
  • react
이태희 댓글 0 좋아요 0 조회수 259

헤더에 이미지 추가

미해결

처음 배우는 리액트 네이티브

헤더에 background 로 넣고 싶은 이미지는 어떻게 할 수 있을까요?? 간단에 예제 코드 부탁드려도 될까요??

  • react
  • react-native
  • javascript
김현진 댓글 2 좋아요 0 조회수 676

내부조인 on 사용

해결됨

실전! Querydsl

안녕하세요 영한님 저는 jpa 야생형 로드맵을 수강한 후 토이프로젝트를 진행하고 있는 도중 여쭈어보고 싶은게 생겨서 글을 올리게 되었습니다. 먼저 해당 강의를 통하여 내부조인을 사용하면, where 절에서 필터링 하는 것과 기능이 동일하기 때문에 where절의 의도와 맞게 내부조인에서는 on절이 아닌 where절을 사용하는게 좋다고 이해하였습니다. 아래 사진은 파라미터가 Item의 name에 포함된 경우 해당 Item의 관련된 여러 테이블을 join하여 Shop을 조회하고 싶어서 작성하게 된 코드와 실행했을 때 나타난 쿼리입니다. 처음에는 findByNameContainsV1 메소드를 작성하였지만 Item부터 Shop 사이에 있는 모든 테이블을 조인한 후 where절에서 Item의 name과 같은 Shop을 조회하기 때문에 조금 더 쿼리를 최적화 시킬 수 있다고 생각했습니다. 그래서 findByNameContainsV2 메소드를 작성하게 되었는데요. sql 문법상 join이 where보다 먼저 실행된다고 알고 있었기 때문에 where 대신 on절을 넣어주었습니다. 하지만 테스트를 통하여 on절에도 동적쿼리를 사용할 수 있는지 확인해 보았지만 불가능했습니다. 아직 개발에 대한 지식이 많이 부족해서 성능 최적화에 대해 잘 모르지만 저는 findByNameContainsV2 메소드가 findByNameContainsV1메소드보다 더 성능이 잘 나온다고 생각이 되지만 QueryDSL은 JPA에서 동적 쿼리를 사용하기 위해 실무에서 도입하게 된 것이므로 굳이 고민하지 않아도 되는 것인지, 아니면 실무에서 동적쿼리가 아닌 경우에 findByNameContainsV2 메소드와 같이 코드를 작성해도 되는지 영한님의 의견을 여쭈어 보고 싶습니다.

  • JPA
  • java
현루석이 댓글 1 좋아요 1 조회수 343

프론트엔드 쪽 cache-control

해결됨

프론트엔드 개발자를 위한, 실전 웹 성능 최적화(feat. React) - Part. 2

안녕하세요. fetch나 axios 에서 요청을 보낼 때, cache-control 설정해서 요청하는거랑 서버에서 설정해서 보내주는거랑 무슨 차이인가요?

  • react
  • devtools
abcdeee 댓글 1 좋아요 1 조회수 397

리액트 쿠키 관련 문제

미해결

리액트로 프론트를 개발하고 있고 친구는 스프링 부트로 백엔드를 개발한 후 포스트 맨을 통해서 api를 제공해 줬는데 토큰을 쿠키에서 받아오는 형식입니다. 그런데 제 localhost의 쿠키를 넣으면 401이 뜨고 백엔드 친구의 url 에 토큰 값을 저장해지만 되는데 어떻게 해결 할 수 있을까요.

  • react
  • 리액트
이상운 댓글 0 좋아요 1 조회수 178

질문

미해결

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 5 9 8 7 6 5 5 6 7 8 9 1 2 3 7 8 4 5 3 4 2 6 2 8 4 2 테스트케이스인데 정답이 3 맞나요? 4번학생이 정답아닌가요?

  • 코테 준비 같이 해요!
  • java
댓글 1 좋아요 0 조회수 193

run을 클릭할 때 실행이 되지 않아요

미해결

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

강의 내용 중 run을 실행시키는 부분에서 왼쪽에 화살표 모양이 나타나지 않습니다 상단에 있는 목록 중 run을 눌러 실행을 하면 밑의 이미지와 같은 문구만 나타납니다

  • MVC
  • spring
  • java
  • spring-boot
사랑스러운 랫서팬더 댓글 5 좋아요 5 조회수 2677

DELETE시 params.id 데이터 타입

해결됨

풀스택 리액트 토이프로젝트 - REST, GraphQL (for FE개발자)

// onDelete in MsgList.js ... console.log(typeof id) // number const receivedId = await fetcher("delete", `/messages/${id}`, { params: { userId }, }); // delete handler in messages.js const targetIndex = msgs.findIndex((msg) => msg.id === id); console.log(typeof msg.id, typeof id) // number, string 안녕하세요, 강의에서와는 달리 제 코드에서는 DELETE시 처음부터 서버에서 에러가 발생하여 디버깅 해보니 DELETE 핸들러에서 msg.id는 숫자인데 params.id는 문자열로 들어오고 있습니다. 클라이언트 onDelete에서 보내는 id를 typeof 로 출력해보면 타입이 숫자여서 이해가 어렵습니다. 강의와 똑같이 코드 작성한 것 같은데 어디서 비롯된 문제인지 파악이 어려워 질문 남깁니다. 감사합니다.

  • rest-api
  • react
  • graphql
jh22j9 댓글 2 좋아요 0 조회수 205

Auditing transaction

미해결

실전! 스프링 데이터 JPA

안녕하세요, auditing 강의를 듣고 적용해보았습니다. 게시글을 처음에 만들때 원하는 값들이 잘 들어가지만 게시글을 수정하여 다시 저장할 경우audit 부분에서 createdBy, modifiedBy 를 못가져오면서 transaction 에러를 냅니다..! 혹시 실무에 적용하기 위해 추가로 적용해야 할 부분이 있을까요? 아마 AuditorAwareImpl에서 @Autowired MemberRepository memberRepository; 부분이 이상한 것 같은데...이유는 모르겠습니다 ㅠ_ㅠ public class AuditorAwareImpl implements AuditorAware < Long > { @ Autowired MemberRepository memberRepository; @ Override public Optional < Long > getCurrentAuditor () { Authentication authentication = SecurityContextHolder . getContext (). getAuthentication (); if ( null == authentication || ! authentication. isAuthenticated ()) { return null ; } DefaultOAuth2User principal = ( DefaultOAuth2User ) authentication. getPrincipal (); String email = ( String ) principal. getAttributes (). get ( "email" ); if (email == null ){ return null ; } Member member = memberRepository. findByEmail (email). orElse ( null ); if (member == null ){ return null ; } return Optional . of (member. getId ()); } }

  • audit
  • spring
  • spring-boot
  • JPA
  • java
댓글 1 좋아요 0 조회수 261

면적을 구하는 res를 for문 내에 있는 if문 안에 넣으면 되지 않나요?

해결됨

코딩테스트 전 꼭 알아야 할 개념과 문제(with 자바)

- 안녕하세요 선생님 강의 잘 듣고 있습니다^-^ 덕분에 코테는 벌벌 떨던 제가 BFS랑 DFS에 대해서 이런거였어? 싶을 정도로 쉽게 이해하고 있는 중입니다 감사합니다 ㅎㅎ 다름이 아니라 9:03 초에서 res를 while문 안에 작성하셨는데요 그렇게 되면 큐에 들어온 녀석 갯수만큼 추가 되면서 선생님이 뒤에 말씀하신 것처럼 최초 진입 시점의 갯수도 포함하게 되어서 최초 진입시점에도 grid[x][y] = 0 값을 넣게 되는데요 애초에 들어오고 나서 for문 내의 if문에서 방문했다(visited)라고 하는 조건 내에서 면적을 추가 시켜 주면 그러한 작업이 필요 없을 거 같아서요 아래 예시인데요.. 일단 값은 잘 나오는 지 테스트 해봤는데 이 부분은 어떻게 생각하시는지 궁금합니닷 (혹시 틀렸다면 알려주세요 ㅠㅜ..) private int bfs(int[][] grid, int x, int y) { Queue<int[]> queue = new LinkedList<>(); queue.offer(new int[] {x, y}); //0, 0 int area = 0; while (!queue.isEmpty()) { int[] point = queue.poll(); for (int[] dir : dirs) { int findX = point[0] + dir[0]; int findY = point[1] + dir[1]; if (findX >= 0 && findY >= 0 && findX < m && findY < n && grid[findX][findY] == 1) { grid[findX][findY] = 0; queue.offer(new int[] {findX, findY}); area++; } } } return area; }

  • java
  • 코테 준비 같이 해요!
devJR 댓글 1 좋아요 1 조회수 331

leftjoin을 사용한 이유

미해결

실전! Querydsl

public List<MemberTeamDto> search(MemberSearchCondition condition) { return queryFactory .select(new QMemberTeamDto( member.id, member.username, member.age, team.id, team.name )) .from(member) .leftJoin(member.team, team) .where( usernameEq(condition.getUsername()), teamNameEq(condition.getTeamName()), ageGoe(condition.getAgeGoe()), ageLoe(condition.getAgeLoe()) ) .fetch(); } 이때 leftJoin(member.team, team)을 사용하신 특별한 이유가 있나요? join을 사용하면 안되는 건지 궁금합니다!

  • JPA
  • java
buriburi 댓글 1 좋아요 2 조회수 340

Junit4와 Junit5에서 테이스 차이 질문입니다

미해결

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

Junit5와 Junit4 에서의 회원가입테스트에서 Junit5는 Long savedId = memberService.join(member); 에서 NullPoniterException이 터지게 되는데 Junit4에서는 정상적으로 테스트가 완료됩니다. 야생형코스로 하고있는데 이러한 테스트 결과에서 도저히 이해가 안되서 이렇게 질문 남깁니다...

  • 웹앱
  • spring
  • spring-boot
  • JPA
  • java
댓글 1 좋아요 0 조회수 293

spring MVC와 REST API차이의 개념이 궁금합니다.

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

제가 이해한건 Spring MVC와 REST API 개발의 차이는 VIEW를 반환하는가 아니면 JSON의 데이터를 반환하는가의 차이인데 제가 이해한것이 맞나요??

  • JPA
  • spring-boot
  • java
  • spring
qkrwnstns52 댓글 1 좋아요 3 조회수 1552

next는 파일 확장자

해결됨

[리뉴얼] React로 NodeBird SNS 만들기

같은 자바스크립트여도 리액트인걸 개발자한테 알려주기위해 jsx 를 쓴다고 무료강좌에서 들었던것 같은데 next js 는 확장자를 보통 js로 하나요?

  • next
  • react
  • redux
  • nodejs
  • express
  • react
  • Next.js
쵸잉 댓글 1 좋아요 0 조회수 481

React 관련 궁금한게 있습니다.

미해결

이미지 관리 풀스택(feat. Node.js, React, MongoDB, AWS)

리액트 관련해서 질문이 있습니다. 지금까지는 리액트를 로컬에서만 불러오고 있는데요. 외부에서 접근을하려면 서버에 올려야하잖아요? 이런건 어떻게 aws 서버에 올리는지 궁금합니다. aws와 react 강의니깐 강의에 맞는 질문 같은데 아니면 알려주세요.

  • 리액트
  • express
  • react
  • aws
  • mongodb
  • nodejs
  • react
  • lambda
GODOT 댓글 1 좋아요 0 조회수 201

Collection type으로 Set 대신 List를 사용하는 이유가 있는지요?

해결됨

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 관련 질문: https://www.inflearn.com/questions/216545 추가 내용이 있습니다. 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] Collection type으로 Set 대신 List를 사용하시는 이유가 궁금합니다. 지금까지 나온 Collection들이 모두 unique한 Entity(또는 값 타입)들의 collection이기 때문에, Set을 활용할 경우 중복 확인 관련 부분이 깔끔해지고, 다른 질문의 답변에서 답해주신대로 값 타입 컬렉션에도 row를 모두 날리고 다시 넣는 문제를 막을 수 있어 Set에 대해 좋은 인상을 가지게 되었습니다. 그런데 기본적으로 예제가 List를 사용하여, Set을 사용하였을 때 제가 놓친 문제가 있는지 의문이 들었습니다.

  • java
  • JPA
풀잎 댓글 4 좋아요 11 조회수 2654

웹애플리케이션 계층구조가 mvc를 설명한건가요?

미해결

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

안녕하세요. 자바입문 듣고 스프링 강의를 신청하여 김영한님 강의를 듣는데요. 일반적인 웹애플리케이션 계층구조 설명하시는데 이것이 MVC 패턴 설명하신건지? 아니면 비슷한것인가 궁금합니다. 또한 클래스 의존관계 설명에서 구현체란 단어를 사용하시던데 구현체라는게 무엇인지??

  • spring
  • spring-boot
  • MVC
  • java
sksiq 댓글 1 좋아요 2 조회수 584

인기 태그

인프런 TOP Writers

주간 인기글