본문 바로가기

전체 글252

GiftFunding) TroubleShooting - Member API 컨트롤러 테스트 중 401 에러 아직 RestDocs는 만들지 않은 상태로 회원가입 성공 컨트롤러 테스트를 작성하였다. 코드는 아래 @WebMvcTest(value = MemberController.class, excludeFilters = { @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = SecurityConfig.class), @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = JwtAuthenticationFilter.class) } ) @AutoConfigureRestDocs class MemberControllerTest { @MockBean private MemberServiceImpl.. 2024. 4. 18.
GiftFunding) Service 테스트 코드 작성하기 테스트를 만들 서비스 클래스에서 Ctrl + Shift + T 를 눌러서 테스트 파일을 생성한다. 컨트롤러 테스트에서는 상단에 @WebMvcTest(XxxController.class)를 붙여주었고 @Autowired를 이용해 Mockmvc나 ObjectMapper를 주입받았다. 이것들은 이미 만들어진 Bean을 주입받아서 사용한다. -> @WebMvcTest가 MockMvc를 빈으로 등록해줘서 @Autowired를 통해사용이 가능한 것. * Autowired 스프링 컨테이너에 등록한 빈에게 의존관계주이이 필요할 때, DI(의존성 주입)을 도와주는 어노테이션. 스프링 컨테이너에 빈을 모두 등록한 후, 의존성 주입 단계가 이루어짐. 이 때 @Autowired 어노테이션이 부여된 메서드가 실행되며 필요한 인.. 2024. 4. 17.
GiftFunding) RestDocs + Swagger 적용하기(feat. Controller 테스트 코드 작성) RestDocs란 ? Spring Rest Docs는 Spring MVC를 사용하는 REST API를 문서화하는데 도움을 줌. Spring Rest Docs는 Spring MVC의 테스트를 실행하면서 생성된 응답을 기반으로 문서를 생성. API Spec과 문서화를 위한 테스트 코드가 일치하지 않으면 테스트 빌드를 실패하게 되어 테스트 코드로 검증된 문서를 보장할 수 있음. 테스트 코드에서 명세를 작성하기 때문에 비즈니스 로직의 가독성에 영향을 미치지 않음. Spring Rest Docs는 Asciidoctor를 사용하여 문서를 생성. 스프링 프로젝트 팀에서는 Swagger보다 Asciidoctor를 사용하는 것을 권장. Swagger는 어노테이션을 운영코드에 추가해야 함 -> 가독성이 떨어지고 운영코드에.. 2024. 4. 13.
GiftFunding) 인증이 필요한 컨트롤러 메소드에 대해 @WithMockUser로 테스트 @AuthenticationPrincipal MemberDetailService의 loadUserByUsername 메서드가 return한 객체를 파라미터로 받아 사용할 수 있도록 해주는 어노테이션. @PostMapping("/request") @RedissonLock public ResponseEntity friendRequest( @RequestBody FriendRequest.Request request, @AuthenticationPrincipal UserAdapter userAdapter) { return ResponseEntity.ok(friendService.request(request, userAdapter)); } 나의 경우에는 친구요청을 걸 때 로그인 한 사용자의 정보를 받아오기 위해 .. 2024. 4. 8.
GiftFunding) Refactoring (1) - Redis docker Compose로 띄우기 기존엔 Redis를 직접 실행해서 띄웠는데 번거로워서 docker에 Redis를 설치해놓고 실행시키기로 했다. 오랜만에 프로젝트를 띄우니 오류가 났다. 빌드를 다시 해주고 Redis Server를 일단 콘솔로 킨 다음에 회원가입, 로그인 부분을 진행해보았는데 아래와 같은 오류가 났다. * Trouble Shooting JWT strings must contaiob exactly 2 period characters. Found:0 더보기 2024-03-31 21:12:11.268 ERROR 18684 --- [io-8080-exec-10] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in c.. 2024. 3. 31.
AOP로 동시성 이슈 해결 - 중복 거래 방지 지난 번 포스팅에서 Redissson Client와 Embedded Redis를 기본 설정 해봤다. 이번엔 이것들을 바탕으로 현재 만들고 있는 프로젝트의 계좌에 Lock을 걸어서 동시성 이슈가 발생하지 않게 한다. 동시성 이슈란 ? 동일한 자원에 대해 둘 이상의 스레드가 동시에 제어할 때 나타나는 문제. 지역 변수에 대해서는 스레드마다 다른 메모리 영역을 할당 받기 때문에 발생하지 않지만 인스턴스 필드 또는 static과 같은 공용 필드에 접근에 대해서 발생한다. 동시성 문제란 동일한 자원에 대해서 접근한다고 무조건 발생하는 것이 아닌⇒ 즉, 변경하지 않고 읽기만 하면 발생하지 않음. 동시에 접근한 자원에 대해서 변경이 일어나는 경우 발생하는 문제 진행 과정 1. 커스텀 어노테이션 AccountLock을.. 2024. 3. 28.
Redisson Client, Embedded Redis 기본 설정 및 테스트 스프링 부트 스타터 레디스에는 Lettuce 라이브러리를 사용 (Spring-Boot-Starter-Redis) Lettuce는 Netty 기반의 비동기 방식으로 Jedis보다 사용이 권장됨. 그러나 스핀락 방식을 활용하고 있기 때문에 락 만료시간에 대한 정책이 필요하다.(순회 횟수 제한, 시간으로 제한 etc...) 스핀락 방식 : 계속해서 Lock을 획득하기 위해 순회하는 방식. 만약 lock을 획득한 스레드나 프로세스가 lock을 정상적으로 해제해주지 못 한다면 다른 스레드에서는 계속 lock을 획득하기 위해 시도하느라 실행되는 애플리케이션에 장애가 될 수 있음. => 이를 위해 락 만료시간에 대한 정책이 필요 + 또한 Lock을 획득하기 위해 순회하는 동안 계속해서 레디스에 요청을 보내게 되는데 .. 2024. 3. 19.
기술 면접 대비 정리 - 1.5 가상메모리 사용자가 프로그램을 실행하면 OS는 디스크에 저장된 데이터를 메모리로 로드한다. 하지만 메모리 공간은 한정되어 있고, 사용자는 동시에 많은 프로그램을 실행하고 싶어 한다. 이런 메모리 공간의 한계를 극복하기 위해 가상메모리라는 개념이 등장했다. 1.5.1 가상 메모리 가상 메모리는 프로세스의 일부만 메모리에 로드하고, 나머지는 디스크에 둔 상태로 프로세스를 실행하는 방식이다. 이 방식은 프로세스 전체가 메모리에 올라오지 않아도 프로세스를 실행하는데 문제가 없다는 점에서 착안했다. ㅅㅏ용자에게는 프로세스 전체가 메모리에 로드된 것처럼 보이지만, 실제로는 전체가 로드된 것이 아니어서 가상 메모리라고 한다. 다음 그림과 같이 프로세스 일부를 로드하고, 프로세스의 나머지 영역은 디스크에 두면 더 많은 프로세스를.. 2024. 3. 10.
기술 면접 대비 정리 - 1.4 메모리 관리 전략 다수의 프로세스를 실행하려면 한정된 메모리 공간에 많은 프로세스를 로드할 수 있어야 한다. 그래서 메모리 공간을 더 효율적으로 활용하기 위한 여러 방안이 고안되었다. 연속 메모리 할당, 페이징, 세그먼테이션 등의 작동 방식과 장단점을 이해하고 있어야 이후의 가상 메모리를 더 쉽게 이해할 수 있다. 1.4.1 논리 메모리와 물리 메모리 CPU가 프로세스를 처리할 때 보는 주소 값과 실제 메모리의 주소 값은 다르다. 프로세스가 보는 메모리 영역 논리 메모리 영역(logical memory address space) / 가상 메모리 영역(virtual memory) 실제로 사용되는 메모리 영역 물리 메모리 영역 CPU가 프로세스를 실행하며 보는 주소 값 : 논리주소 / 가상주소 실제 메모리에서 사용되는 주소 .. 2024. 3. 3.
728x90