묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨토비의 스프링 6 - 이해와 원리
토비님 ! BigDecimal 관련 링크를 못찾겠어요
테스트와 DI(1)에서 10:50초에 말씀하셨던BigDecimal과 관련된 읽어보면 좋은 링크를 걸어주신다고 하셨는데 참고 자료에서 못찾겠습니다 ☹ 그래서 혹시 다른 곳에 링크가 있는지 여쭤봅니다 !!
-
미해결스프링 시큐리티 OAuth2
jwt decoder 토큰 검증 시 질문
마지막 강의에서 이불러 인가서버 access token을 1초만에 만료 시키는 설정을 하고 리소스 서버로 expire 엔드 포인트를 호출 하였는데 여기서 bearer 인증 필터를 거치는데 여기서 jwt 토큰을 decoder로 검증할 때 토큰이 만료되어 검증이 실패하지 않나요? 강의에서는 바로 컨트롤러 엔드 포인트까지 도달 하고 클라이언트까지 응답이 갔습니다.
-
미해결Practical Testing: 실용적인 테스트 가이드
BaseEntity 에서의 abstract 사용이유
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요.BaseEntity에 abstract를 사용하는 이유에 대해 궁금합니다.강의 중에 흐르듯이 듣기는 했지만, 조금 더 자세히 이유에 대해 파악하고자 질문드립니다. 아니면, 강의에서 내에 말씀해주신 인스턴스를 굳이 만들필요없기 때문이 전부인지 궁금합니다.감사합니다
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
낙관적 락 테스트 실패
안녕하세요 낙관적 락을 활용해서 조회수 증가 동시성 테스트를 하고 있습니다! 영상처럼 동일하게 로직을 작성해서 테스트 하는데 동시성 처리가 전혀 안되는 상태라 질문 드립니다ㅜㅜ아래는 Board 엔티티입니다!import jakarta.persistence.*; import lombok.Getter; @Getter @Table(name = "board") @Entity public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; @Column(name = "view") private long view; @Version private Long version = 0L; public Board(String title, long view) { this.title = title; this.view = view; } public void increaseView() { this.view += 1; } public Board() { } } 서비스 로직입니다! Catch 부분을 전혀 타지 않는 상태인거 같습니다 @Transactional public void increaseViewCountOpticLock(final long boardId) throws InterruptedException { while (true) { try { Board board = boardRepository.findByIdWithOptimistLock(boardId); board.increaseView(); // 조회수 증가 boardRepository.save(board); // 저장 break; // 성공 시 루프 탈출 } catch (ObjectOptimisticLockingFailureException e) { log.info("========================="); Thread.sleep(50); } } } import jakarta.persistence.LockModeType; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Lock; import org.springframework.data.jpa.repository.Query; import org.tkdgus.concurrdemo.entity.Board; public interface BoardRepository extends JpaRepository<Board, Long> { default Board getBoardById(long boardId) { return findById(boardId).orElseThrow(IllegalArgumentException::new); } @Lock(LockModeType.OPTIMISTIC) @Query("SELECT b FROM Board b WHERE b.id = :boardId") Board findByIdWithOptimistLock(long boardId); } DB는 MySQL이고 트랜잭션 격리 수준이나 이런건 다 기본 설정 그대로입니다! @Test @DisplayName("낙관적 락 동시성 테스트") void increaseViewCountOptimisticLock() throws InterruptedException { long boardId = 1L; int concurCnt = 100; ExecutorService executorService = Executors.newFixedThreadPool(32); CountDownLatch latch = new CountDownLatch(concurCnt); for (int i = 0; i < concurCnt; i++) { executorService.submit(() -> { try { boardService.increaseViewCountOpticLock(1L); } catch (InterruptedException e) { throw new RuntimeException(e); } finally { latch.countDown(); } }); } latch.await(); BoardDto afterBoard = boardService.findBoard(boardId); assertThat(afterBoard.view()).isEqualTo(concurCnt); }위 테스트 코드로 테스트 하면 100이 아니라 항상 10으로 나오는데 원인을 도저히 모르겠습니다ㅜㅜ
-
해결됨스프링 시큐리티 OAuth2
클라이언트에서 userinfo 엔드포인트 호출 시 질문
안녕하세요강의 초반에 oauth2Login api를 사용하여클라이언트에서 token 요청 후 scope email, profile 이렇게 userinfo 엔드포인트 요청 시인가 서버에서 해당 요청을 받아서 리소스 서버에게 토큰 검증을 맡기고 검증을 성공하게 되면 리소스 서버에 저장된 사용자 정보를 바로 클라이언트에게 전송하나요? 아니면 다시 인가서버로 전송하나요?만약 scope에 openid가 포함이 안되어 있다면 인가 서버에서토큰 검증을 수행 후 사용자 정보를 안주는 거 같은데 우리가 보통 사용하는 google, 카카오 네이버 이런 거는 포함 안 시켜도 줬는데.. 또 강의 초반에는 키클록을 사용했는데 이건 키클록 구현과는 좀 틀린가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
ServletApplication 관련 오류
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.ServletApplication을 Run을 하고 Stop버튼을 누르게 되면 이런 화면의 오류가 나옵니다. 그런데 프로그램에 동작에 문제는 있지 않습니다. 혹시 정지를 누르게 되면 왜 이런 오류가 나는 걸까요?
-
미해결스프링 핵심 원리 - 기본편
테스트 할 때 왜 다른 파일의 오류에 영향을 받는건가요??
[질문 내용]RateDiscountPolicyTest를 할 때 10퍼센트로 할인율이 변경되었으니 Order.java 파일의 calculatePrice도 변경되어야 할 줄 알고 주석처리를 했는데 관련 없는 파일에서 오류가 나서 테스트 실행이 안 됩니다. calculatePrice를 주석 처리하고, 저 코드를 쓰는 모든 코드들을 주석처리 하니 오류가 안나고 테스트가 잘 돌아갑니다. 원래 테스트를 할 때 테스트와 관련 없는 파일의 오류가 있으면 테스트가 작동되지 않는 건가요?
-
미해결스프링 핵심 원리 - 기본편
프로젝트 빌드가 안되는 이유가 뭘까요??
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]현재 맥 OS를 사용하고 있습니다. 강의를 듣는 도중 인터페이스로 변경하면서 테스트를 진행했을때, 객체 주입이 안된 상태이기 때문에 NullpointException이 발생해야하는데 변경사항이 아닌 이전 버전으로 실행되가주고 테스트 성공으로 뜹니다. 이걸 해결하기 위해서는 변경사항이 있을때마다 프로젝트를 재빌드해야하는데 데스크톱에서는 바로 반영되가주고 빌드를 매번 할필요가 없는데 해결방안이 있을까요?
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
api/v1/members 404 에러 질문입니다.
[질문 내용] 왜 404 에러가 뜨는지 모르겠네요 ㅠㅠ도움 요청합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Test의 application.yml을 지웠을 때
[질문 내용]OrderServiceTest에서 테스트 메서드를 실행하면서 H2 DB에 쿼리가 들어가는지 확인하기 위해 Test 폴더 안에 resources를 지우고 상품주문 테스트 메서드 안에 RollBack(value = false), em.flush()를 통해서 실제 데이터가 들어가는것을 확인하였습니다. 그런데 다시 원래대로 돌리는 과정에서 Test폴더 안에 resource를 만들고 해당 테스트의 application.yml를 돌려났음에도 불구하고 실행했음에도 H2 DB 안에 데이터는 그대로 남더라고요. 그래서 RollBack(value = false), em.flush()를 지우고 다시 실행해도 계속 데이터가 남는데 어떻게 해결하면 좋을까요?
-
미해결스프링 핵심 원리 - 기본편
인터페이스와 구현체 생성 순서
[질문 내용]안녕하세요. 이미 로드맵 1회독을 마치고 TDD관련 공부를 하다가 객체지향과 DI,IoC의 개념에 대해 복기하기 위해서 강의를 듣던중 궁금한 부분이 생겨 질문을 남깁니다. 아직 개발 경력이 짧은 대학생임을 감안해주시면 감사하겠습니다. 인터페이스와 구현체를 분리하는 것의 중요성에 대해서는 잘 인지하였지만, 구현체를 작성하기 전 인터페이스를 먼저 작성하는 것에 대해서 의문이 생깁니다. 실제 몇몇 프로젝트 진행 경험 상으로, 파라미터나 메서드의 설계에 있어서 구현을 하면서 그 스펙이 변하는 경우가 매우 많았습니다. 그래서 구현을 먼저 하고 인터페이스를 그에 맞추어 생성하는 경우가 잦게 있었는데, 이런 경우에는 기능 설계가 충분하게 되지 않은 채로 개발에 시작한 잘못의 결과인가요? 실무 개발이나 프로젝트에서 인터페이스 개발 -> 구현체 개발 의 순서가 일반적인 경우일까요? TDD관련한 개념에서도 인터페이스를 먼저 작성한 후 해당 메서드를 이용하여 TDD를 작성 -> 메서드의 기능이 검증 된 후에 구현을 하는 것으로 배웠습니다. 하지만 아무리 고민하여도 구현체를 먼저 작성하는 것이 개발 과정을 최적화하는 방법이라는 생각이 들어 질문 남깁니다. 정리하자면, 구현체 개발 후 인터페이스를 구현체에 맞게 작성하여 사용하는 방법이 잘못된 순서인지 여쭤보고 싶습니다.
-
해결됨대기업 근무하며 경험한 Redis를 야무지게 사용하는 방법 [실습]
출시 예정 강의 질문
안녕하세요. 비록 아직 강의를 수강하지는 못하였지만,다음 출시 예정으로 생각하시는 강의에 대해 문의가 있어 이렇게 글을 남기게 되었습니다 ,, 혹시 강사님께서 카프카 관련 주제로 강의 출시 계획이 있으실지 문의 남기겠습니다. 감사합니다.
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
테스트 fixture
안녕하세요 강사님.코틀린을 배우는데 좋은강의 만들어주셔서 감사합니다. 테스트를 위한 fixture 코드 부분에 대해 의견 여쭤보고 싶습니다.강의에선 직접 엔티티 내부에 테스트를 위한 fixture 함수를 만들어 주셨는데, 팀 내부 의사결정에 따라 두어도 괜찮을 수도 있을 것 같지만 만약 테스트용 코드는 분리해야 한다고 하면아래처럼 테스트 코드 패키지쪽에 fixture 생성을 위한 유틸파일을 만들고, 테스트 코드에서만 Book.fixture(...) 같은 형태로 사용할 수 있도록 엔티티에 비어있는 companion object를 만든 뒤 확장함수를 작성하는 형태로 해도 괜찮을지 의견 여쭤보고 싶습니다.!테스트코드용 유틸 생성 User, Book 등의 엔티티에 비어있는 동행객체 선언엔티티별 Companion 확장함수 작성테스트 코드에서 엔티티.fixture() 형태로 사용
-
해결됨대기업 근무하며 경험한 Redis를 야무지게 사용하는 방법 [실습]
multiSet에서 key 입력 의미
multiSetData에서 키 저장시 key:1, key:2가 저장이 되는데 키 입력시 test_one은 별 의미가 없지 않나요?아니면 원래 의도가 test_one:1, test_one:2 인지 궁금합니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
프로젝트 세팅시 궁금한점.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]프로젝트 세팅시 intellij project structure에서 jdk 17로 맞추는데, 왜 굳이 Build and run using과 Run tests using을 Gradle로 설정하나요??? 결국 Gradle로 설정하면 앞에서 project structure jdk 굳이 맞추는 의미가 없지 않나요??? 현업에서도 주로 이렇게 사용하나요??
-
해결됨스프링 핵심 원리 - 기본편
스프링 빈 등록
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.강사님과 같이 기존에 AppConfig를 놔두고, AutoAppConfig를 만들어서 excludeFilters를 해주었는데요. coreApplicationTests-contextLoads()를 돌릴때에 이런 오류가 뜹니다. (1). 저는 이 오류가 AppConfig에서 빈을 수동으로 넣어줄떄에 첫번쨰 메소드인 MemberService에서 MemberServiceImpl을 생성하면서 반환할떄에 memberRepository를 빈중에서 무엇을 넣어줄지 모르겠다에 대한 오류로 이해했는데요 잘 이해한게 맞나요?(2) 잘 이해했다면 저도 강의에서와같이 MemoryMemberRepository클래스에 @component해줘서 빈이 자동으로 등록되고, autowired로 의존관계도 자동으로 주입된거 같은데. 그렇다면 memberrepository에 사용할 빈을 고를떄에 수동으로 등록된 빈 memberRepository와 자동으로 등록된 memorymemberrepository중에 무엇을 고를지 몰라서 이런 오류가 생기는건가요?? Appconfig에서 memberRepository에서 @Bean없애주면 오류안나서 이렇게 이해했습니다.강사님은 오류가 안뜨는데 전 왜뜰까요ㅜ
-
해결됨대기업 근무하며 경험한 Redis를 야무지게 사용하는 방법 [실습]
윈도우에서 작업 질문
redis 설치까지는 다 끝냈습니다. 윈도우에서는 어떻게 작업하나요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
스프링 빈 자동주입 질문
안녕하세요. 제가 알기론 자동주입은 스프링 빈 클래스에서만 되는걸로 알고 있습니다.근데 아래 소스를 보시면 ExtendsController 클래스에는 @Component 어노테이션이 붙지않아서스프링 빈으로 관리되지않습니다. 근데 HomeController 에서 이를 상속받으면 ExtendsController 클래스에 CommonLoginc 이 자동주입이 됩니다. 그리고 home api 의 this.say 메서드가 NullpointException 오류가 나지않고 정상 호출됩니다.이건 무슨 원리로 되는건지 알 수 있을까요? package com.info.springboot.controller; import com.info.springboot.model.ExtendsController; import com.info.springboot.model.Sample; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HomeController extends ExtendsController { @GetMapping("/home") public String home(){ this.say(); return "home"; } } package com.info.springboot.component; import org.springframework.stereotype.Component; @Component public class CommonLogic { public void logging(){ System.out.println("logging 입니다."); } }package com.info.springboot.model; import com.info.springboot.component.CommonLogic; import org.springframework.beans.factory.annotation.Autowired; public class ExtendsController { @Autowired private CommonLogic common; public void say(){ common.logging(); System.out.println("ExtendsController 입니다."); } }
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
스프링부트 재기동 이후에도 세션이 유지되는 이유
안녕하세요, 개인 프로젝트를 하는데,로그인 상태에서 서버를 재기동해도 로그인이 풀리지 않습니다. 이것이 문제라기 보다는 이 현상이 발생한 이유를 알고 싶습니다.세션 관련해서 아무 설정을 한 것이 없어서 왜 이런 현상이 나타나는지 질문드립니다.서버가 세션 저장소를 기본 저장소인 톰캣 메모리가 아니고, 다른 곳을 사용하는 건 아닌가 추측을 하는데요.이 외에 의심해 볼 만한 부분이나, 현재 서버가 세션 저장소를 어디를 쓰고 있는지 알 수 있는 방법 알려주시면 감사하겠습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
h2 whitelabel error page 500
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]관련 질문 찾아보고 코드를 변경해봐도 똑같이 에러가 떠서 진행을 못하고 있습니다.. 회원 가입을 누르고 이름을 등록하면 아래와 같은 에러가 발생합니다. 버전도 확인을 했는데 뭐가 문제일까요..코드 첨부하겠습니다.. 도와주세요https://drive.google.com/file/d/1EJGRw6FzdUtj0AZh5mVd7DNqwo_HFhx_/view?usp=drive_link