본문 바로가기

프로젝트23

GiftFunding) Redisson을 이용한 동시성 이슈 제어 기본적으로 웹 환경에서는 동시에 여러 요청들이 들어올 수 있고, 스프링 같은 멀티스레드 환경에서는 여러 스레드가 한 자원을 공유할 수 있어 데이터 정합성 문제가 발생할 수 있다. - 친구요청 (A->B)  친구요청 건(A) 사용자 조회 -> 친구 요청을 받은(B) 사용자 조회 -> 친구 테이블에서 A->B가 친구인지 / 친구 요청을 걸었는지 조회 -> 친구 테이블에서 B->A가 건 요청이 있는지 조회 -> 모든 예외에 걸리지 않으면 친구 테이블에 A->B에게 요청을 건 정보를 저장. ex)  B->A요청이 진행되고 있는 상태에서 A->B 요청이 실행되면 전자 요청이 없는 것으로 조회가 되기 때문에 A->B요청이 정상적인게 되어버림.Redis를 활용한 분산락을 사용해 동시성 제어를 할 수 있다.분산락: 분.. 2024. 5. 30.
GitHub Actions vs Jenkins 개인 프로젝트의 CI/CD를 적용하기 위해 tool들을 조사해보았다. CI / CD 기본 개념 (tistory.com) CI / CD 기본 개념 CI (Continuous Integration) : 지속적인 통합 -> 빌드와 테스트 자동화 모든 개발이 끝난 후 코드 품질을 관리하는 고전적인 방식의 단점을 해소하기 위해 나타난 개념 새로운 코드 변경 사항이 정기적 soni-developer.tistory.com GitHub Actions와 Jenkins의 자료를 가장 많이 찾아볼 수 있었다. 그래서 이 두 개의 차이점을 비교해서 어떤 것을 적용할지 고민해보았다. Jenkins 자유도 + 유연성 GitHub Actions 설정 간편 서버 설치 필요 클라우드에서 동작, 어떤 설치도 필요 없음. 작업이 동기적으.. 2024. 4. 23.
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.
Keyword) Github organization repository와 상호작용(push, fetch, pull) * 기본 용어 정리 - fetch : remote repository -> local repository - merge : local repository -> working directory - pull : remote repository -> working directory (fetch + merge) [pull이 일어나는 상황] 원격 저장소는 여러 프로젝트 개발 인원들이 동시에 사용 다른 개발자가 변경상태를 push해 원격 저장소에 반영한다면 내 입장에서 원격 저장소에 변경이 생겼으니 내려받아서 같은 상태를 유지 해야함. fetch를 이용해서 팀 remote repository(upstream)의 변경사항을 내 remote repository에 가져옴. merge를 이용해서 내 remote repos.. 2024. 1. 1.
협업 프로젝트 Keyword) Github Organization Repository 초기 설정 (fork, clone, upstream) 드디어 부트캠프의 마지막 과정인 협업 프로젝트에 들어섰다. 이전에 나 혼자만 github 형상 관리를 하던 것에서 이젠 팀원들과 하게 되었다. 정신 바짝 차리고 잘못 올리지 않게 주의해야겠다. 1. [Fork 복제] 팀 Remote Repository ➡️ 내 Remote Repository 일단 팀장님이 만들어놓은 remote repository에서 fork를 누르면 아래와 같은 화면이 뜬다. 리포지토리 이름을 입력하고 아래 체크박스의 체크를 해제했는데 이는 팀장님이 만들어놓은 main을 포함한 develope 브랜치를 갖고올 수 있게 한다. (체크 할 경우 main 브랜치만 가져오게 됨) 2. [Clone] 내 Remote Reposiotry ➡️ 내 Local Repository 통상적인 Local.. 2023. 12. 29.
728x90