묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
@Transactional과 synchronized를 같이 써도 동시성 테스트가 통과 돼요
강의 보면 통과가 안되는데 저는 테스트 코드를 돌려보면 통과하게 됩니다. 왜그런건가요??
-
미해결스프링 시큐리티 OAuth2
JWT Verify에 대한 질문이 있습니다.
protected String getJwtTokenInternal(JWSSigner jws, UserDetails user, JWK jwk) throws JOSEException { // JWT token 을 만들기 위해 3가지가 필요함(header, payload, sig) JWSHeader header = new JWSHeader.Builder((JWSAlgorithm) jwk.getAlgorithm()).keyID(jwk.getKeyID()).build(); List<String> authorities = user.getAuthorities().stream().map(author -> author.getAuthority()).collect(Collectors.toList()); JWTClaimsSet payload = new JWTClaimsSet.Builder() .subject("user") .issuer("http://localhost:8080") .claim("username", user.getUsername()) .claim("authority", authorities) .expirationTime(new Date(new Date().getTime() + 1000)) //1초 .build(); SignedJWT signedJWT = new SignedJWT(header, payload); // 서명 signedJWT.sign(jws); //토큰 발행 String jwtToken = signedJWT.serialize(); return jwtToken; } expiration Time 말고는 강사님 코드랑 동일합니다.토큰 만료되는 걸 체크하고 싶어서 테스트 코드를 작성했습니다. 만료시간을 1초로 만들었습니다. @Test @DisplayName("test") void test() throws JOSEException, InterruptedException, ParseException { UserDetails user = userDetailsService.loadUserByUsername("user"); System.out.println(user); String jwtToken = securitySigner.getJwtToken(user, jwk); System.out.println("jwtToken = " + jwtToken); Thread.sleep(7000); SignedJWT signedJWT = SignedJWT.parse(jwtToken); boolean verify = signedJWT.verify(new RSASSAVerifier(jwk)); System.out.println("verify = " + verify); } 근데 위의 테스트 코드를 실행한 결과7초라는 지연을 주었는데도 불구하고verify가 참으로 뜨네요. 어떤게 문제일까요?
-
해결됨쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
docker에 관하여 질문 드립니다.
안녕하세요 우선 끝까지 강의 잘들었습니다!!! docker 부분이 아직 익숙하지 않아 질문드립니다docker를 따라 설치하니 저장소 같은 곳에 이미지가 저장되는 것을 확인하였습니다.해당 이미지를 aws 인스턴스에서 받아서 바로 사용할 순 없는건가요? -> 굳이 git clone으로 프로젝트를 받아와야 하는지 궁금합니다 / docker 저장소에 이미지를 올리고 바로 받아서 실행하면 되는게 아닌가 싶어서 질문드립니다...2.가 만약 틀린거라면 build/libs에 있는 파일이 직접적으로 실행을 시키면서 애플리케이션이 실행되는 것 같은데 이 이미지를 굳이 docker 저장소에 올리는 이유가 궁금합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
jar 파일 access 불가
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예 항상 강의 잘 보고 있습니다.JPA와 DB설정, 동작확인 강의 중jar 빌드해서 동작확인 하는 단계에서 Unable to access jarfile jpashop-0.0.1-SNAPSHOT 라고 뜨네요..해당 경로에 파일은 있는 것으로 확인되는데 어떻게 해결하면 좋을까요?감사합니다
-
미해결스프링 핵심 원리 - 기본편
수정할 수 없는 외부 라이브러리의 초기화, 소멸 메서드 지정방식 질문입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]아래에 같은 질문을 하신 분이 있는데 이해가 안돼서 추가 질문 드립니다. @Bean(initMethod = "init", destroyMethod = "close") public NetworkClient networkClient() { NetworkClient networkClient = new NetworkClient(); networkClient.setUrl("http://hello-spring.dev"); return networkClient; }강의에서 위처럼 빈 등록 초기화, 소멸 메서드를 지정했는데요.NetworkClient 를 외부 라이브러리라고 가정한다면, 우리는 외부 라이브러리를 수정해서 init 메서드와 close 메서드를 작성한 것이 아닌가요? 그래서 어떻게 고칠 수 없는 외부 라이브러리에 적용할 수 있는지 궁금합니다. 이것이 근본적인 궁금증이고 다음은 아래 질문 글을 참고했을 때 궁금한 점 입니다.별도의 클래스를 만들어서 그곳에서 init 메서드와 close 메서드를 작성한다음 빈으로 등록합니다. (별도의 클래스를 LifeConfig라고 하겠습니다)그 다음 외부 라이브러리를 빈으로 등록할 때@Bean(initMethod = "LifeConfig.init", destroyMethod = "LifeConfig.close") 가 아니라 @Bean(initMethod = "init", destroyMethod = "close")이렇게 사용해야 한다는 걸로 이해했습니다. 이게 어떻게 가능한지 궁금합니다. 빈으로 등록했다해도, 어느 빈에 init 메서드와 close 메서드가 있는지 어떻게 알 수 있나요?
-
미해결spring boot actuator 파헤치기
안녕하세요 메트릭 데이터 보관주기 질문입니다!
안녕하세요 좋은 강의 감사드립니다! 혹시 metric 기본 보관주기가 얼마나 되는걸까요!!? 혹은 보관주기를 따로 설정이 가능할까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@ServletComponentScan 작성 이후 서버 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]1. 비슷한 오류에 대해 구글 링크를 올려 주셔서 그 링크를 통해 servlet파일을 받아봤지만 계속 같은 오류가 발생합니다.SDK도 coretto-11로 바꿔봤지만 해결되지 않았습니다.둘 다 gradle에서 IntelliJ로 바꾸었지만 해결되지 않았습니다.-> 하나는 gradle 하나는 IntelliJ 등 다 바꾸면서 시도해보았습니다.@ServletComponentScan 입력 이후부터 오류가 납니다(처음 스프링 부트를 실행했을 떄는 잘 되었습니다.)현재 스프링부트3.1.6버전, 자바 17 입니다.
-
해결됨쥬쥬와 함께 하루만에 시작하는 백엔드 - 스프링, 도커, AWS
DTO, Request, Response 차이점
질문이 너무 짧아서 죄송하지만... 제목 그대로 3가지 쓰임의 차이점을 알고 싶습니다. 언제 어떤것을 사용해야 하는지 잘모르겠네요...
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
gradlew build를 하면 plain 파일만 뜹니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. gradlew build 로 libs 까지 생성하는건 따라왔는데그이후에 hello-spring-0.0.1-SNAPSHOT-plain.jar 하나만 나옵니다.검색해보면 보통 파일 plain이 안붙은 거랑 붙은거랑해서 두개가 나온다고하는데 왜 이거만 나오는지 모르겠습니다
-
미해결스프링 부트 - 핵심 원리와 활용
자동 구성이란 라이브러리 제공시 자동 빈 등록?
자동 구성은 라이브러리 사용자가 빈 등록을 하지 않고build.gradle 의 dependencies 에 코드 한줄 만 작성하는 것으로 해당 라이브러리를 사용할 수 있도록 라이브러리 제공자가 @AutoConfiguration를 사용하여 라이브러리 내에 자동 빈 등록을 해두는 것이라고 이해해도 되는걸가요?
-
해결됨스프링 핵심 원리 - 기본편
TestConfig에 @Configuration을 안 붙여도 되는 이유가 이거 맞나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]package hello.core.singleton; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import static org.junit.jupiter.api.Assertions.*; class StatefulServiceTest { @Test void statefulServiceSingleton() { ApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class); StatefulService statefulService1 = ac.getBean(StatefulService.class); StatefulService statefulService2 = ac.getBean(StatefulService.class); // ThreadA: 사용자A 10000원 주문 int userAPrice = statefulService1.order("userA", 10000); // ThreadB: 사용자B 20000원 주문 int userBPrice = statefulService2.order("userB", 20000); // ThreadA: 사용자A 주문 금액 조회 // int price = statefulService1.getPrice(); System.out.println("price = " + userAPrice); System.out.println(statefulService1); System.out.println(statefulService2); // Assertions.assertThat(statefulService1.getPrice()).isEqualTo(20000); } static class TestConfig { @Bean public StatefulService statefulService() { return new StatefulService(); } } } 원래 코드에서 System.out.println(statefulService1); System.out.println(statefulService2); 이 부분만 제가 추가했습니다. TestConfig에 @Configuration이 없으면, 컨테이너 내부에 등록되는 빈들이 싱글톤을 보장하지 않는다고 알고 있습니다. 그런데 이 코드를 실행한 결과, statefulService1과 statefulService2가 같은 객체라고 나왔습니다. 저는 당연히 다른 객체일 줄 알았거든요. TestConfig에 @Configuration이 없으면 싱글톤을 보장하지 않는다고 알고 있기 때문에.. 이게 왜 그런지 헷갈렸는데 제가 고민해 본 후의 결론은 다음과 같은데, 오류가 있는지 확인해 주시면 감사드립니다. ApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class); 이 코드를 실행하면 TestConfig가 빈으로 등록되지만, TestConfig 내부에 @Bean으로 된 statefulService() 메서드로 반환되는 객체는 싱글톤을 보장하지 않는다.하지만 이 코드에선 statefulService()가 한 번밖에 호출되지 않았기 때문에 컨테이너 내부에 생성된 StatefulService 빈이 하나뿐이다.ac.getBean(StatefulService.class); 이 코드를 여러 번 실행하여 statefulService1, statefulService2, statefulService3 여러 개를 만든다고 해도, 컨테이너 내부의 하나의 객체를 조회한다.이렇게 생각했는데 혹시 잘못된 부분이 있는지 궁금합니다. 즉, 이 코드는 싱글톤을 보장하지 않는 게 맞지만, 내부에 생성된 객체 자체가 1개뿐이고 더 생성된 것이 없기 때문에, 같은 것을 계속 조회했을 뿐이므로 아래 코드를 실행하면 같은 객체를 출력하게 된다. System.out.println(statefulService1); System.out.println(statefulService2); 틀린 부분이 있다면 지적해 주시면 감사드립니다.
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
쿼리에 fetch 쓰는 부분
쿼리에 fetch 쓰는 부분과 Entity 자체에서 FetchType.LAZY 써주는것과 같은 방법으로 볼 수 있을까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
섹션 6 JPA 통합테스트 에러
강의 자료와 동일하게 코드 구성 이후 통합 테스트를 실행시 아래와 같은 에러가 발생합니다.h2 데이터베이스는 구동중인 상태입니다.java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: Member near line 1, column 15 [select m from Member m where m.name = :name]
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
index.html ->Error Page뜨는 이유가 뭘까요
Hello 서블릿 강의를 들으면서 다 따라했습니다. index.html 파일을 만들고 실행하려고 했는데 Error Page가 뜨네요. 빌드가 안됐다 어쩌구 그러시는데 따라하려고 해도 뭘 몰라서 해결을 못하겠습니다.hello까지는 잘됩니다./ 안됩니다.이것도 당연히 안됩니다.
-
미해결Kevin의 알기 쉬운 Spring Reactive Web Applications: Reactor 1부
.contextWrite의 실행시점
안녕하세요예제 코드에서 질문이 있습니다.@SneakyThrows public static void main(String[] args) { String key = "message"; Mono<String> mono = Mono.deferContextual(ctx -> Mono.just("Hello" + " " + ctx.get(key)) .doOnNext(msg -> log.info("context value : {}", msg))) .subscribeOn(Schedulers.boundedElastic()) .publishOn(Schedulers.parallel()) .transformDeferredContextual((mono2, ctx) -> mono2.map(data -> data + " " + ctx.get(key))) .contextWrite(context -> context.put(key, "Reactor")).doOnNext(msg -> log.info("contextWrite value : {}", msg)); mono.subscribe(data -> log.info("data : {}", data)); Thread.sleep(100L); } 설명하시는 내용을 들어보면 코드의 순서와 상관없이.contextWrite()이 먼저 발생하여 context에 {message, Reactor} 값을 저장하고Mono.deferContextual가 실행되어 ctx에서 contextWrite에서 했던 값을 가져오고 있습니다. 이부분이 잘 이해가 안가는데요그전 강의까지는 `.subscribeOn`, `.publishOn` 이런 메서드의 체이닝은 탑다운 방식으로 진행되었었는데Context부터는 순서가 달라 혹시 실행하는 우선순위가 있는지 궁금합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
view 환경설정 8분
model을 입력할때 자꾸 빨간색으로 오류가 뜨네요..어떻게 해야하나요?
-
미해결스프링 프레임워크는 내 손에 [스프2탄]
강사님 감사 인사 드리러 왔습니다.
강사님 덕분에 잘 취업해서 살고 있습니다.취업해보니 강사님의 원리 위주의 강의를 들은 것이 많은 도움이 되고 있습니다.어려운 기술들 보다 Base되는 원리 하나를 잘 습득하는 게 참 중요하다는 걸 많이 느낍니다.뭐가 잘 안되면 블로그나 검색엔진을 사용하기 보다는 강사님 강의하면서 배운 내용을 다시금 봅니다.왜냐면 그 안에 현업에서 쓰는 기본적인 것들이 많이 담겨져 있기 때문입니다.조금 실력이 몇개월 쌓인 뒤에 보니 어려웠던 내용들도 쉬운건데 어렵다고 생각을 해서 어려웠구나 라는 생각도 하게 되네요특히 요약 파일 띄워놓으시고 마우스로 그리면서 설명해주시는 것이 정말 도움 많이!!! 됐습니다.Spring이 아니라 사물인터넷 mosquitto 들으러 인프런에 잠시 왔는데요예정보다 조금은 시간이 많이 흘렀지만 어떤 종류의 강의든 다음 강의를 기대하고 있습니다.중간중간에 답변도 늦지 않게 잘 해주셨던 기억이 있어서 더더욱 감사드립니다.행복한 하루되시고 누군가에게는 긍정적인 큰 영향을 주셨다는 거 기억해주세요.선생님 아니였으면 취업 준비하다가 포기했을 거 같아요.(진심)좋은 하루 되세요^^-선생님 모든 강의를 다 구독한 1人 올림-
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
스프링 이니셜라이저 사용 제보입니다
며칠 전부터 자바 11기반의 2.7.X 버전이 이니셜라이저에 안 뜨길래공식 사이트를 찾아보니 11월 24일 부로 지원이 종료되었다고 뜨네요 이제는 강의 내용처럼 자바 11을 쓰려면build.gradle에 구버전 의존성들을 직접 작성해야 하는 건가요?? 일단은 자바 17, 스프링부트 3.2.0으로 진행 중인 상태입니다
-
해결됨스프링 핵심 원리 - 기본편
isEqulaTo / isSameAs
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]isEqulaTo는 값을 비교 / isSameAs는 참조(주소)값을 비교하는 걸로 알고 있습니다. 허나, 아래 질문게시글의 답변과 같이 객체의 경우, isEqulaTo는 isSameAs와 같이 참조를 비교하는 것을 알 수가 있습니다.그렇다면 아래 예시와 같이 String도 객체인데 왜 이 경우는 참조가 아닌 값을 비교하나요? (이 경우 테스트가 통과됩니다!)String a = new String("aa"); String b = new String("aa"); assertThat(a).isEqualTo(b);
-
해결됨스프링 핵심 원리 - 기본편
static관련 질문드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]"static method에 @Bean을 사용하게 되면 싱글톤 보장을 위한 지원을 받지 못한다" 그 이유에 대해서 자세히 알 수 있을까요? 비슷한 질문글들을 봐도 이유에 대한 정확한 설명은 없는 것 같아서요. 제가 찾아본 바로는 bean의 라이프사이클관리, 의존성 주입, 프록시 등등 있는데 무엇이 정확한 이유인지 잘 모르겠어서 질문남깁니다!!