묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
Service 단 Test Code 작성 요령
안녕하세요~ 예전에 TC 를 작성하면서 발생한 궁금점들이 이번 강의를 통해서 다시 한번 생기게 되어서 질문 올리게 되었습니다!!UserSerivce 를 Test 하기 위해 UserRepository 모킹주입을 하였습니다. 이 때, stub 을 사용하여 모킹 객체의 동작을 정의해주는데, 제가 예전에 이렇게 했을 때 (강의 예제와 같은) UserRepository 의 동작을 일괄적으로 관리하기 위해 @BeforeEach 를 사용하였습니다. |이렇게 했더니 실제로 많은 일을 수행하는 Repository 에 들어가는 when 절이 정말 많아지고 BeforeEach 가 매우 길어져서(필요한 연관 객체들 User 와 연관된 A,B,C 등의 Entity 모두 그 때 그 때 생성해주는 코드까지 다 결합되어 있었음), 이게 과연 맞는가? 싶은 생각이 들었습니다. 해당 강의를 통해서 그냥 그렇게 하는게 맞았었나보네 싶은데 , 보통 그렇게 BeforeEach 혹은 각 TC 코드가 길어져도 이렇게 Test 하는게 관례적인 모습일까요?그간 물어볼 사람이 없어서 못 물어봤는데 이렇게 질문드릴 수 있게 되어서 다행입니다 ㅠ
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
완강 하였습니다. CI CD는
https://github.com/codingspecialist/JUNIT5-Security-Lecture 여기 나와있는 deploy.yml은 그대로 써도 되는걸까요?
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
Fetch join 테스트에서
join을 사용하면 주체인 Transaction만 select 되고 account가 나중에 따로 조회되는 말도 안되는 쿼리도 n+1의 경우인걸까요??
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
security에서 비밀번호 검증을 자동으로 해주는 걸까요?
안녕하세요 security에서 username이랑 password를 db에서 자동으로 비교해주나요?만약 소셜 로그인만 존재하는 페이지는 비밀번호를 db에 저장하지 않는데, 이 경우엔 어떤 식으로 처리해야 할까요?소셜로그인에서 로그인 성공 시 username을 받아와서 다시 security로 api호출을 해 주는 방식으로 로그인 하려고 했는데, 비밀번호가 없으니 어떻게 해야할지 모르겠습니다,,!!
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
@AuthenticationPrincipal 사용이 가능한 이유가
처음에 로그인시 헤더에 jwt 토큰이 저장되고 securityContextholder, 시큐리티 세션에 저장된 loginUser가 stateless 설정에 의해 삭제 되지계좌등록 컨트롤러에 @AuthenticationPrincipal로 세션에 저장된 loginUser를 사용이 가능한 이유가 JwtAuthrizaitionFilte에서 아래 코드로 securityContextholder에 인증이나 권한체크용으로 저장 되기 떄문에 사용이 가능한걸까요? 맞는거같은데 확실해지고자 여쭤봅니다...Authentication authentication = new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities()); //강제로 authentication 객체를 생성 SecurityContextHolder.getContext().setAuthentication(authentication); //강제 로그인
-
해결됨스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
cors 테스트 addExposedHeader("Authorization); 안해줘도 토큰 값이 받아집니다.
SecurityConfig에 아래 코드를 추가해야 configuration.addExposedHeader("Authorization");JwtToken 값을 받을 수 있다고 하셨는데요.해당 라인을 추가 안해도 JwtToken 값이 찍히고 로컬 스토리지와 세션 스토리지에 토큰값이 들어가지네요. 굳이 추가 안해도 되는건가요?
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
컨트롤러에서 api/admin 으로 왔을 때 처리하는 원리가 궁금해요
안녕하세요 초보 개발자 입니다. 강의 너무 잘 듣고 있어요! 궁금한 점이 있어서 질문 드립니다.security 필터를 다 거치고 Controller에서 주소가 api/admin이면 Authentication객체의 role이 ADMIN인지 확인 한다고 하셨는데, securityConfig의 antMatchers("/api/admin/**").hasRole("" + UserEnum.ADMIN) 이부분에서 설정 했다고 생각합니다. 궁금한 점이 꼭 Authentication객체에서 ADMIN을 가지고 있는 변수의 이름이 꼭 role이여야만 가능 한걸까요? security에서 api/admin이 나오면 Authentication객체 내부에서 role이란 이름을 가진 변수를 찾아보는 걸까요? 아니면 해당사항을 설정한 사항이 따로 있었을까요?답변 감사합니다!
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
사용자로 하여금 어떻게 JWT를 헤더에 포함하게 하나요?
jwt 부분을 다 듣고 아래 테스트 수업 듣는 중입니다.사용자 로그인 시에 우리가 jwt를 발급하고,사용자가 매 요청마다 이걸 가져오면 검증하는 건이해가 됐습니다.그러다 문득 궁금해진 게, 저희가 테스트할 때는포스트맨을 통해 헤더의 Authorization에 토큰을직접 넣어주었습니다. 하지만 실제 어플리케이션에선사용자가 직접 이 작업을 하지는 않죠.그렇다면 사용자 요청 헤더의 Authorization에 토큰을포함해야 하는 건 서버 측에서 해야할 일 같은데이에 대한 강의는 없는 것 같습니다. 혹시 자세하게는아니라도 대충 어떠하게 흘러가는 지 알려주실 수있을까요??
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
로그인 인증 실패 시 예외처리하는 주체는 어느 것인가요?
기존에는 SecurityConfig 클래스의SecurityFilterChain에서 아래의 코드가로그인 실패 시 응답을 처리하는 주체였습니다. http.exceptionHandling() // 인증 예외 설정 .authenticationEntryPoint((request, response, authenticationException)->{ // 예외 가로채기\ CustomResponseUtil.fail(response, "로그인을 진행해주세요", HttpStatus.UNAUTHORIZED); });그러다 JwtAuthenticationFilter를 만들면서attemptAuthentication() 매서드가 실패 시 아래의unsuccessfulAuthentication()가 실행되게끔 했구요.@Override protected void unsuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response, AuthenticationException failed) throws IOException, ServletException { CustomResponseUtil.fail(response, "로그인 실패", HttpStatus.UNAUTHORIZED); } 그래서 헷갈려서 실험해보니 기존의 SecurityFilterChain의 것은 주석처리해도 아무런상관이 없고, unsuccessfulAuthentication()가 동작하더라구요.이 두 코드의 차이는 정확히 어떤 것일까요?
-
해결됨스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
(해결완료) MockMvc를 이용한 테스트가 안됩니다.
※※※※※ 해결완료 ※※※※※mvc.perform()의 get이나 post 같은 매서드 타입을스태틱임포트 해야하는데이 때 선택지가 3개 있습니다.이 중 MockMvcRequestBuilders의 post()를임포트 하니까 해결이 됐습니다.RequestBuilder로 캐스팅을 해주지 않아도 되구요그리고, 이래저래 해보면서 MockMvc 말고도MockMvcBuilder 객체를 이용해서 build().perform()으로 시작해 똑같이 코드를 작성하면 테스트가 정상적으로 실행됩니다!※※※※※ 해결완료 ※※※※※SecurityConfig 테스트 강의에도 질문을 드렸는데..답이 없길래 그냥 넘어갔는데 여기서도 쓰여다시 질문드립니다.MockMvc를 이용해서 테스트를 진행할 때,@Test @DisplayName("회원가입 테스트") void join_test() throws Exception { // given JoinRequestDto joinRequestDto = JoinRequestDto.builder() .username("minsu") .password("1234") .email("minsu@gmail.com") .fullname("김민수") .build(); String requestBody = objectMapper.writeValueAsString(joinRequestDto); System.out.println("requestBody = " + requestBody); // when ResultActions resultActions = mvc.perform((RequestBuilder) post("/api/join").content(requestBody).contentType(MediaType.APPLICATION_JSON)); // then }위 부분에서 문제가 생기는 부분은 아래 코드인데요// when ResultActions resultActions = mvc.perform((RequestBuilder) post("/api/join").content(requestBody).contentType(MediaType.APPLICATION_JSON));먼저 content를 설정할 수 있는 api?가 없고요.해당 구문을 RequestBuilder로 캐스팅해야빨간줄이 사라집니다. 그러니까 perform()이 파라미터로 RequestBuilder를 받게 돼있습니다.gradle은 아래와 같습니다.plugins { id 'java' id 'org.springframework.boot' version '2.7.12' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'io.com' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'com.auth0:java-jwt:4.2.1' compileOnly 'org.projectlombok:lombok' developmentOnly 'org.springframework.boot:spring-boot-devtools' runtimeOnly 'com.h2database:h2' runtimeOnly 'com.mysql:mysql-connector-j' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.security:spring-security-test' } 그리고 테스트쪽 라이브러리는 아래와 같습니다.Gradle: org.junit.jupiter:junit-jupiter:5.8.2Gradle: org.junit.jupiter:junit-jupiter-api:5.8.2Gradle: org.junit.jupiter:junit-jupiter-engine:5.8.2Gradle: org.junit.jupiter:junit-jupiter-params:5.8.2Gradle: org.junit.platform:junit-platform-commons:1.8.2Gradle: org.junit.platform:junit-platform-engine:1.8.2Gradle: org.mockito:mockito-core:4.5.1Gradle: org.mockito:mockito-junit-jupiter:4.5.1
-
해결됨스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
MockMvc.perform(get("/api/s/hello")); 구문 에러납니다
안녕하세요 선생님 유튜브에 이어 인프런에서도 잘 보고 있습니다.|다름이 아니라 SecurityConfigTest에서이번 강의의 첫 테스트 코드를 작성하고 있는데, ResultActions resultActions = mvc.perform(get("/api/s/hello"));코드에서 get()이라는 매서드에서 빨간 줄이 뜹니다. 그러니까 자동완성으로도 get()이라는 매서드는 뜨지 않고, More Action에도 적절한 답이 없습니다. 보면 매서드를 스태틱 임포트한 것 같은데.. 혹시 제가 이상한건가요?
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
AOP/필터/인터셉터 질문
안녕하세요 강사님. 본 강의에서 BindingResult를 처리하기 위해 아래와 같이 AOP를 적용하셨습니다.제가 궁금한 점은 다음과 같습니다.위의 AOP 적용을 위한 validationAdvice는 구체적으로 언제 (joinPoint 전 or 후 ?) 실행되는지 궁금합니다. joinPoint의 전후제어라고 설명해주셨는데, joinPoint의 전에 실행되는 것인지 후에 실행되는 것인지가 궁금합니다. 예를 들어, 사용자가 컨트롤러 Post or Put 요청 시 유효성 검사를 통과하지 못한 에러가 bindingResult에 담깁니다. 그리고 위의 AOP validationAdvice 코드 내부는 이미 BindingResult에 에러가 담긴 이후의 코드를 실행하도록 되어있습니다. 이때의 로직 흐름은 다음과 같은 실행 순서로 보면 될까요? 만약 맞다면, joinPoint의 후에 실행되는 것으로 보면 될까요?"컨트롤러 진입 및 실행할 Post or Put 메서드 탐색 -> 해당 api 메서드 호출을 위해 http body의 데이터들을 ReqDto 객체로 변환 -> 유효성 검사 실패로 인한 bindingResult에 담김 -> 해당 api 호출 실패 -> 해당 api 호출이 실패로 끝났으므로 이후 AOP validationAdvice 호출 (joinPoint 후처리) -> Exception 발생 위와 같이 BindingResult 처리를 AOP 대신 필터나 인터셉터를 적용하여서는 해결할 수 없을까요 ?? 필터와 인터셉터는 여러 차이가 있지만 대표적으로 호출 순서에 차이가 있다고 알고 있습니다. 디스패처 서블릿 이전에 필터가 실행되며, 디스패처 서블릿 이후에 인터셉터가 실행되는 것으로 알고 있습니다. 위에 작성한 코드처럼 AOP 적용 위치는 개발자가 지정할 수 있는 것으로 보여집니다. 실제 컨트롤러가 호출되기 전에 필터나 인터셉터 호출되므로 BindingResult 검사를 할 수 없어서 AOP로 적용하신 것인지 궁금합니다.만약 해결할 수 있다면, AOP로 적용한 이유가 궁금합니다. 추가적으로, Jwt Filter에서 필터를 이용하여 구현하셨습니다. UsernamePasswordAuthenticationFilter와 같이 이미 제공해주는 시큐리티가 있어서 그것을 활용하여 보다 편리하게 구현할 수 있는 것 같습니다. 그러나, 필터 대신 AOP나 인터셉터로도 Jwt 서버를 구현하는 것이 가능한지 궁금합니다. 좋은 강의를 듣다보니 자연스레 질문이 많아지는 것 같습니다.정말 많이 배우고 있습니다. 감사합니다 !
-
해결됨스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
saveAccount_test (JWT 검증 및 시큐리티 세션 생성) 질문
안녕하세요, 강사님. "계좌등록 컨트롤러 테스트" 강의에서 AccountController Test 코드 작성 시, 아래와 같이 saveAccount_test()에 궁금한 점이 있습니다.위의 테스트 코드에서 @WithUserDetails(value = "ssar", setupBefore = TestExecutionEvent.TEST_EXECUTION) 어노테이션을 선언해줘야 하는 이유를 설명해주셨습니다. 그리고 request가 JWT 토큰이 없다고 하더라도 아래의 doFilterInternal 메서드를 실행하며 if문을 통과하지 못하더라도 chain.doFilter를 통해, 결국 컨트롤러단까지 간다고 말씀해주셨습니다.위의 doFilterInternal 메서드 작성 시, if - else 문으로 작성하지 않은 이유가 테스트를 수월하게 할 수 있기 때문이라고 말씀해주셨습니다. 제가 궁금한 점은, 실무에서도 위의 코드처럼 JWT 토큰이 없는 request를 바로 차단하지 않고 컨트롤러단까지 흘려보내는지 여부가 궁금합니다. 제가 아직 시큐리티 측면을 잘 모르기 때문에 하는 질문이라고 생각해주시면 감사하겠습니다. 실제 배포/운영 환경에서는 테스트 코드를 편리하게 짜는 것보다 보안이 더 중요한 요소라고 생각되기에, JWT 토큰이 없는 request를 바로 차단할 수 있다면 즉시 차단하고 컨트롤러단까지 흘려보내지 않는 것이 더 안전하지 않을까 하는 생각이 들었습니다. 감사합니다.
-
해결됨스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
정규표현식 실습
안녕하세요 강사님. 정규표현식 실습 강의에서 궁금한 점이 있습니다. 한글만 가능하도록 정규표현식을 작성하는 것을 "^[가-힣]+$" 라고 말씀해주셨습니다. 궁금한 점은 "[가-힣]+" 라고 작성하면 한글 외의 글자가 들어와도 true라고 반환하는 케이스가 어느 경우인지 입니다. "[가-힣]+" 라고 작성해도 띄어쓰기와 ""일때도 모두 false를 반환합니다. 즉, "^[가-힣]+$" 대신에 "[가-힣]+" 라고 할 경우 어떠한 케이스들을 걸러내지 못하는지 궁금합니다. 감사합니다.
-
해결됨스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
순수 EntityManager vs Spring Data JPA 테스트
프로젝트를 하면서 궁금한 점이 생겨 질문드립니다.@AutoConfigureMockMvc와 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK) 만 적용한 상태로 테스트 코드를 작성했습니다. 그리고 @Autowired를 통해 순수 EntityManager를 주입받아서 직접 영속성을 관리하는 레포지토리가 있습니다. 그런데 직접 EntityManager를 주입받은 Repository 빈은 테스트 주입 시 EntityManager가 없다는 오류가 발생합니다. 하지만 Spring Data JPA의 JpaRepository를 상속받은 인터페이스를 @Autowired로 주입받으면 이는 문제없이 테스트가 동작합니다. 혹시 어떤 차이점이 있는지 알 수 있을까요? @Repository public class UserRepository { @PersistenceContext private EntityManager em; public User save(final User user) { em.persist(user); return user; } public Optional<User> findByEmail(final String email) { List<User> users = em.createQuery("select u from User u where u.email=:email", User.class) .setParameter("email", email) .getResultList();return users.isEmpty() ? Optional.empty() : Optional.of(users.get(0)); } } public interface UserJpaRepository extends JpaRepository<User, Long> { public Optional<User> findByEmail(final String email); } @ActiveProfiles("test") @AutoConfigureMockMvc @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK) class AjaxEmailPasswordAuthenticationFilterTests extends DummyObject { @Autowired private ObjectMapper objectMapper; @Autowired private MockMvc mockMvc; @Autowired private UserJpaRepository userJpaRepository; @Autowired private PasswordEncoder passwordEncoder; @BeforeEach void setup() { userJpaRepository.save(User.builder() .email("test@gmail.com") .username("test") .password(passwordEncoder.encode("1234")).build()); } @DisplayName("이메일 기반 회원가입 유저 로그인") @Nested class LoginByEmailTests { @DisplayName("로그인 성공") @Test void success_test() throws Exception { //given String url = Endpoint.Api.LOGIN_WITH_EMAIL; EmailLoginUserRequestDto requestDto = EmailLoginUserRequestDto.builder() .email("test@gmail.com") .password("1234") .build(); //when ResultActions resultActions = mockMvc.perform( post(url) .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(requestDto)) ); //then resultActions .andExpect(status().isOk()) .andExpect(jsonPath("$.id").exists()) .andExpect(jsonPath("$.redirectUrl").exists()); } } }
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
oauth, jwt관련하여 질문입니다.
안녕하세요 jwt,시큐리티 / ci/cd 강의에 이어서 계속해서 수강하고 있는 학생입니다. 좋은 강의 퀄리티 덕분에 어려운 개념들을 쉽게 정리할 수 있었습니다. 정말 감사드립니다.Spring security 서버(백엔드)가 Web page가 아닌 Mobile app과 연동하는 REST API 서버로 구현하는 방법에 대해 질문이 있습니다. 조사한 방법은 총 2가지인데요,공통 : 회원 테이블에 provider와 provider_id칼럼이 등록되어있습니다.1안https://www.inflearn.com/questions/537402/react-ios-android-등-spring-boot-가-api-서버일-경우-oauth2-연동-방법안드로이드/ios에서 oauth서버로 인증을 진행한뒤 정보를 그대로 스프링으로 던짐(액세스 토큰 포함)스프링서버에서는 액세스 토큰을 활용해 해당 OAuth 제공자에서 제공하는 API를 사용하여 검증provider와 provider_id가 유효할 경우에만 내부 회원 db에서 조회 후 jwt토큰 발급카카오공식 답변에서는 액세스 토큰을 직접 보내면 안된다하더라고요https://devtalk.kakao.com/t/oauth2/128079그러면 결국 프론트에서 인증 진행 후 정보를 받아 provider와 providerid만을 보내야하는 이야기인데 (2안)2안안드로이드/ios에서 oauth서버로 인증을 진행한뒤 http에 provider와 provider_id만 담아서 스프링 서버로 전송스프링 서버에서는 provider와 provider_id만을 가지고 내부 회원 db에서 조회 후 jwt토큰 발급2안의 경우 proivder와 provider_id를 무차별 조합해서 뚫는게 가능하지 않을까 싶어요 질문은 다음과 같습니다.oauth와 jwt를 활용해서 서버를 구축할 때 2안으로 구현하는게 맞는지 (서버에 provider와 provider_id만 보내기)1-1. 만약 아니라면 어떤 방식으로 구현해야하는지2안이 맞다면 provider와 provider_id를 무차별적으로 조합해서 보내면 쉽게 뚫리는 것이 아닐지액세스 토큰을 직접 보내 서버에서 검증하게 될 경우(1안)은 왜 위험한지가 궁금합니다.
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
BCryptPasswrdEncoder를 @Spy로 사용한 이유
안녕하세요.강의 잘 들으면서 공부중입니다! 회원가입 Service 테스트 작성하는것을 보다@Spy와 @Mock의 정확한 차이가 궁금하여 질문드립니다. (언제 사용해야 할지)BCryptPasswordEncoder는 @Spy를 사용한 이유가 있을까요?@Mock을사용하면 안되는건가요? 반대로 UserRepository는 @Spy를사용하면 안되는 걸까요?? 항상 좋은 강의 잘 듣고있습니다.감사합니다
-
해결됨스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
deleteAccount 테스트 오류
마지막 강을 들으면서 전체 테스트를 돌려보니 deleteAccount 테스트만 오류가 발생했습니다.에러 로그를 확인해보니Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint ["FKDDVHOIEDLDMC0I8PA6JUY4X69: PUBLIC.TRANSACTION_TB FOREIGN KEY(DEPOSIT_ACCOUNT_ID) REFERENCES PUBLIC.ACCOUNT_TB(ID) (CAST(1 AS BIGINT))"; SQL statement:delete from account_tb where id=? [23503-214]]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statementorg.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint ["FKDDVHOIEDLDMC0I8PA6JUY4X69: PUBLIC.TRANSACTION_TB FOREIGN KEY(DEPOSIT_ACCOUNT_ID) REFERENCES PUBLIC.ACCOUNT_TB(ID) (CAST(1 AS BIGINT))"; SQL statement:delete from account_tb where id=? [23503-214]]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statementat app//org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)account의 delete 쿼리가 실행될 때 transaction_tb의 외래키 때문에 무결성 오류가 발생한 것으로 보입니다.Transaction 엔티티에서 @ManyToOne 부분에 cascade 설정을 해줘야 할까요?
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
Preflight Request 네트워크 탭에 노출되지 않음
엣지랑 크롬으로 테스트해봤는데 Preflight 헤더가 보이지 않습니다. 검색해보니 OPTIONS 요청은 네트워크 탭에 보이지 않게 되었다고 하는 글들이 많은데 어떻게 보이게 하는지 알고 싶습니다.https://stackoverflow.com/questions/57410051/chrome-not-showing-options-requests-in-network-tab이 flag 옵션도 현재는 보이지 않네요.
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
@Transactional -> @Sql로 변경 시 영속성 컨텍스트 초기화 관련입니다.
@Trarnsactional로 @BeforeEach-@Test-@AfterEach가 묶여서 영속성 컨텍스트로 관리되던 게 @Sql로 변경되면 @BeforeEach에서 em.clear()할 필요도 없어지는 게 맞는 거죠? 다른 특이사항이 있다면 말씀해주시면 감사하겠습니다. account.checkOwner()에서 user.getUsername() 추가 후 쿼리 확인 결과 select user 쿼리가 나가는 것도 확인했습니다.