묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 시큐리티
20:00 부분에 공격자가 갑자기 어떻게 JSESSIONID를 가지고있는건가요?
PPT 설명이 다 끝나고 실습에 들어가는데 갑자기 JSESSIONID를 공격자가 로그인을 하지않았는데도 가지고 있을수가 있는건가요??혹시 로그인 과정을 했다고 가정하시고 생략하신건가요?? 그리고 Session ID를 이미 가지고 있는데 Login 페이지를 접근한다는것 자체가 조금 말이 안되는 상황인것 같은데 이 부분에 대해서는 다른 강의에서 다루고 있나요? 혹시 생략하신거라면, 어떠한 방식(자막, 공지, etc..)으로든 알려주시면 감사할것 같습니다. 듣는 수강생 입장에서는 "뜬금없이 갑자기 로그인이 되어있네"라는 생각을 할 수밖에 없는것 같습니다. 그렇게되면 그 전에 로그인을 했는데 내가 놓친건가?라고 다시보게되고 저같은 경우에는 왠만해선 질문을 안하려는 성격이여서 계속 제가 놓쳤다고 생각하고 시간을 쓰기때문에 이렇게 뭔가 결국 생략했다라는걸 알게되면 매우 허탈합니다. 그래서 이게 Interrupt가 걸리고 강의에 집중하는데 힘이듭니다.이런 부분이 한두군데가 아니여서 이렇게 말씀드립니다. 부탁드리겠습니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
스프링 빈이란 것은
스프링빈 파트 부분을 듣다 보니처음에는 진짜 뭔소린지 하나도 모르겠고스프링스프릴ㅇㅇ스프링빈 컨테이너 막 혼동이 와서 정신줄 잡고 듣고있는데그러면 결국 스프링 빈은 객체 인가요?
-
해결됨실전! 스프링 데이터 JPA
dto와 영속성 관리
안녕하세요 스프링 부트 시리즈를 거의 다 들었는데요,엔티티를 영속성 컨텍스트에서 관리하면 1차 캐시가 생겨서 2번째 조회할 때는 db가 아니라 영속성 컨텍스트에서 가져온다고 알고있는데요그래서 공부하면서 스프링 데이터 jpa랑 querydsl로 회원 조회, 수정, 삭제 등 공부하면서 api 호출로 값을 받을 때 dto를 통해서 받는 로직을 짜고 테스트를 했습니다.member1을 읽은 뒤에 db에서 강제로 이름을 member2로 바꾸고 다시 호출했는데 member2로 잘 읽어 오더라고요 member1을 읽어와서 영속성 컨텍스트에 이미 올라있는 정보를 바로 가져올 줄 알았는데 제 예상이 틀렸습니다.이게 엔티티를 직접 조회한게 아니라 dto를 통해 조회해서 그런건가요? 아니면 혹시 제가 뭘 잘못알고 있는 걸까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
h2데이터 베이스에 데어터가 들어오지 않습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.java 17에 스프링 부트는 3.1.0 버전을 사용중이고h2 데이터 베이스는 최신 버전을 다운 받았습니다.스프링부트 3.0버전 이상은 h2 2.1.214버전 이상 사용하는게 맞나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
궁금한점
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]영한님 강좌에서 사용했던 소스코드나 교재 내용들 혹시 블로깅 해도되나요?
-
미해결스프링 부트 - 핵심 원리와 활용
server 프로젝트에대해 문의드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요. servlet에서 처음 프로젝트강의하는거보다가 궁금한게 있어서 질문드립니다.server프로젝트에 mybatis를 연계를 하고싶은데.방법이 있을까요?기존에 이클립스에서 스프링을하다보니..web.xml파일은 어디에 설정해줘야하는지 궁금합니다. 두서없는글이지만 읽어주셔서 감사합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문 등록 파라미에 대해서 질문드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]상품 주문시에만 파라미터를 @requestParam으로 받으셨는데 특별한 이유가 있는지 궁금합니다.
-
미해결[초급] 맛보자! 코틀린과 스프링으로 API 호출하기
use-new-id-generator-mappings
use-new-id-generator-mappings: false 가 더이상 지원하지 않는다고 하는데 대체해야할까요?
-
해결됨스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
MockMvc.perform(get("/api/s/hello")); 구문 에러납니다
안녕하세요 선생님 유튜브에 이어 인프런에서도 잘 보고 있습니다.|다름이 아니라 SecurityConfigTest에서이번 강의의 첫 테스트 코드를 작성하고 있는데, ResultActions resultActions = mvc.perform(get("/api/s/hello"));코드에서 get()이라는 매서드에서 빨간 줄이 뜹니다. 그러니까 자동완성으로도 get()이라는 매서드는 뜨지 않고, More Action에도 적절한 답이 없습니다. 보면 매서드를 스태틱 임포트한 것 같은데.. 혹시 제가 이상한건가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
java -jar hello-spring-0.0.1-SNAPSHOT.jar 설치완료 후
안녕하세요맥 m1 쓰고있는데요터미널에서 java -jar hello-spring-0.0.1-SNAPSHOT.jar 설치 마치고 어떻게 저장하나요?
-
미해결실전! 스프링 데이터 JPA
h2 데이터 베이스 연결하는데 오류가 있습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]h2 데이터베이스를 연결하는 도중에 오류가 발생해서 질문드립니다 처음에 jdbc:h2:~/datajpa 이렇게 해서 연결을 성공해서 jdbc:h2:tcp://localhost/~/datajpa 이렇게 url을 입력을 해서 진행을 했는데 connen timed out이 발생을 합니다 datajpa.mv.db 생성된것도 확인을 하고 gitbash로 권한도 바꿔줬습니다!
-
미해결스프링 부트 - 핵심 원리와 활용
AppInitV1Servlet 사용시 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용] 안녕하세요, AppInitV1Servlet 를 사용할때, 02 pdf. 21쪽 HandlesTypes 를 사용하지도 않았는데, 어떻게 AppInitV1Servlet이 등록 된 것인가요..? MyContainerInitV2에서는 서블릿컨테이너 초기화 시점에, @HandlesTypes(AppInit.class)를 통해 지정해 주어set<Class<?>> c.... 를 통해 넣는 것은 이해가 되는데,이 과정이 자동으로 일어난것인가요?자동으로 일어났다고 보기에, Appinit은 직접 만든 인터페이스여서 이해가 되지 않습니다... 설명 부탁드립니당
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
h2 database 접속 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]jdbc:h2:~/test로는 접속이 잘되고 home에 test.mv.db 가 있는 것 까지 확인했습니다. 이후에 jdbc:h2:tcp://localhost/~/test 로 접속하려고 하니 다음과 같이 연결 거부가 뜹니다. 어떻게 해결해야 할까요 ?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
강의를 다 듣고난 후 YAML 설정파일 관련 궁금한 부분이 있습니다.
각 마이크로서비스 내에서도 application.yml을 두고,config service으로 부터 읽어오는 설정파일을 지정할 수 있다는 부분을 강의를 통해 배웠습니다. 1) 제가 궁금한 부분은 애플리케이션 내부 설정파일과 config service가 읽어오는 설정파일에 적는 정보는 어떤 기준으로 나뉘나요? 즉, 어떠한 정보를 애플리케이션 내부 설정파일에 두며, 어떤한 정보는 애플리케이션 내부 보다는 config-service로 부터 읽어들이는 설정파일에 정보를 두게되는 기준이 있으실까요?2) 또 다른 궁금점은 꼭 필요한 설정을 제외하고는 대부분의 설정 정보를 config-service로부터 읽어오는 설정파일에 넣어놔도 괜찮나요?? 감사합니다.
-
미해결스프링 부트 - 핵심 원리와 활용
Jar 파일로 서버 실행 시키키 VS IDE에서 서버 실행시키기
안녕하세요. 지금까지 영한님의 강의를 잘 들어온 수강생입니다. 지금까지 들었던 강의들을 기반으로 현재 프로젝트를 진행하고 있는데, 프로젝트를 진행하던 중 도저히 이유를 알수가 없는 문제가 생겨서 해당 질문이 강의의 내용과 무관함에도 불구하고, 질문을 올리게 되었습니다.문제 상황은 다음과 같습니다.프로젝트를 IntelliJ 상에서 실행하는 경우에 특정 HTTP 요청이 정상적으로 처리가 되는데, 동일한 소스코드를 기반으로 IntelliJ에 있는 Gradle의 bootJar로 Jar 파일을 생성한 뒤, 터미널에서 "java -jar 파일이름.jar" 커맨드를 통해 서버를 실행시키면 위에서 보낸 요청과 동일한 요청이 정상적으로 처리가 되지 않습니다.동일한 소스 코드에 단지 IDE 상에서 실행시키느냐, bootJar로 Jar 파일을 만들어 실행시키느냐 그 차이만 존재하는데, 한쪽은 제대로 동작하고, 다른 한쪽은 제대로 동작하지 않으니 도대체 무슨 이유로 동작하지 않는건지 모르겠습니다.혹시 의심해볼만한 부분이 있다면 알려주시면 감사하겠습니다.
-
해결됨Spring Boot JWT Tutorial
JWT secretKey ECDSA error
[코드](https://github.com/YuYoHan/JWT)ECDSA signing keys must be PrivateKey instances.이런 오류가 뜨는데 JwtProvider입니다. @Slf4j @Component public class JwtProvider implements InitializingBean { private static final String AUTHORITIES_KEY = "auth"; private final String secret; private final long tokenValidityInMilliseconds; private Key key; public JwtProvider(@Value("${jwt.secret_key}") String secret, @Value("${jwt.access.expiration}") long tokenValidityInMilliseconds ) { this.secret = secret; this.tokenValidityInMilliseconds = tokenValidityInMilliseconds * 1000; } // 여기서 InitializingBean를 상속받고 이 메소드를 오버라이드한 이유는 // Bean이 생성이 되고 생성자를 통해서 secret 값을 Base64 Decode해서 key 변수에 할당하기 위함이다. @Override public void afterPropertiesSet() throws Exception { byte[] keyBytes = Decoders.BASE64.decode(secret); this.key = Keys.hmacShaKeyFor(keyBytes); } // 유저 정보를 가지고 AccessToken, RefreshToken을 생성하는 메서드 public TokenDTO createToken(Authentication authentication) { // 권한 가져오기 String authorities = authentication.getAuthorities().stream() .map(GrantedAuthority::getAuthority) .collect(Collectors.joining(",")); long now = (new Date()).getTime(); // Access Token 생성 Date accessTokenExpire = new Date(now + this.tokenValidityInMilliseconds); String accessToken = Jwts.builder() .setSubject(authentication.getName()) .claim(AUTHORITIES_KEY, authorities) .setExpiration(accessTokenExpire) .signWith( key, SignatureAlgorithm.ES512) .compact(); // Refresh Token 생성 Date refreshTokenExpire = new Date(now + this.tokenValidityInMilliseconds + 86400); String refreshToken = Jwts.builder() .setSubject(authentication.getName()) .claim(AUTHORITIES_KEY, authorities) .setExpiration(refreshTokenExpire) .signWith(key, SignatureAlgorithm.ES512) .compact(); return TokenDTO.builder() .grantType("Bearer") .accessToken(accessToken) .refreshToken(refreshToken) .build(); } // JWT 토큰을 복호화하여 토큰에 들어있는 정보를 꺼내는 코드 // 토큰으로 클레임을 만들고 이를 이용해 유저 객체를 만들어서 최종적으로 authentication 객체를 리턴 // 인증 정보 조회 public Authentication getAuthentication(String token) { // 토큰 복호화 메소드 Claims claims = parseClaims(token); if(claims.get("auth") == null) { throw new RuntimeException("권한 정보가 없는 토큰입니다."); } // 클레임 권한 정보 가져오기 Collection<? extends GrantedAuthority> authorities = Arrays.stream(claims.get(AUTHORITIES_KEY).toString().split(",")) .map(SimpleGrantedAuthority::new) .collect(Collectors.toList()); // UserDetails 객체를 만들어서 Authentication 리턴 User principal = new User(claims.getSubject(), "", authorities); return new UsernamePasswordAuthenticationToken(principal, token, authorities); } private Claims parseClaims(String token) { try { return Jwts.parserBuilder() .setSigningKey(key) .build() .parseClaimsJws(token) .getBody(); } catch (ExpiredJwtException e) { return e.getClaims(); } } // 토큰의 유효성 검증을 수행 public boolean validateToken(String token) { try { Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token); return true; } catch (io.jsonwebtoken.security.SecurityException | MalformedJwtException e) { log.info("잘못된 JWT 서명입니다."); } catch (ExpiredJwtException e) { log.info("만료된 JWT 토큰입니다."); } catch (UnsupportedJwtException e) { log.info("지원되지 않는 JWT 토큰입니다."); } catch (IllegalArgumentException e) { log.info("JWT 토큰이 잘못되었습니다."); } return false; } } 강의랑 같은데 오류가 발생하네요 ㅠㅠ
-
미해결스프링 시큐리티 OAuth2
Authorization required for Client Registration Id
안녕하세요. 강의를 보다가 한 가지 궁금한게 있는데요!springsecurityconfig 클래스에서 어노테이션을 @Configuration@EnableWebSecurity 2개를 붙이게 되면 Authorization required for Client Registration Id: keycloak 에러가 발생하고 있는데, 이때는 yml파일에 설정해놓은 부분들을 다시 다 bean으로 등록을 해야하는걸까요..?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
빌드 이후에 libs가 생기지 않아요..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. build successful이 뜨고 나서 libs가 없습니다..
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
JdbcMemberRepository와JdbcTemplateMemberRepository 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. build.gradle입니다찾아보니https://www.inflearn.com/questions/589975/jdbcmemberrepository-%EC%97%90%EB%9F%AC해당 결과와 똑같은 증상인 것 같은데 해결방안을 찾지 못했습니다.
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
DTO에 관해서 질문드립니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]DTO를 만들때강의에서는 하나의 클래스에서 inner 클래스로 DTO를 만드셨는데 실제 실무에서도 이러한 방식으로 하는지 궁금합니다. 그리고 컨트롤러에서 람다와 스트림을 통해서 데이터 정제 하는 로직은 컨트롤러에서 처리해도 상관이 없는지 궁금합니다.