Spring Cloud로 MSA 환경 구축해보기

본 포스팅을 하게 된 이유 현재 많은 기업에서 MSA를 사용하고 있습니다. 그렇기에 신입으로 취업하게 되면 막연하게 회사에 들어가서 학습하는 것보다는, “미리 공부를 하고 실무에 뛰어들면 업무에 원활하지 않을까?” 라는 생각이었고, 이를 위해 조만간 진행할 개인 프로젝트에서 MSA를 적용하여 구축해보자는 마음에 공부하게 되었습니다. MSA **MSA(Microservice Architecture)**는 애플리케이션을 여러 개의 독립적인 마이크로서비스로 나누어 개발하고 배포하는 아키텍처 스타일입니다. 각 마이크로서비스는 하나의 기능에 집중하고, 다른 서비스들과 독립적으로 동작하며 독립적으로 배포될 수 있습니다. 마이크로서비스들은 서로 API나 메시지 큐를 통해 통신하며 각각의 서비스는 자신만의 데이터 저장소와 로직을 관리합니다. ...

2024년 9월 30일 PM08:42 · PolarBear

N+1 문제 및 MultipleBagFetchException 해결하기

배경 예전에 했었던 팀 프로젝트 코드를 복기하기 위해 로컬에서 프로젝트를 돌려봤습니다. 먼저 서버를 구동시키고 포스트맨으로 회원가입, 로그인부터 시작해서 일정 생성, 조회 등등을 해봤습니다. 그런데 일정 한 건을 조회하는 api를 포스트맨으로 돌려보고 서버 로그를 보니 무려 5번의 쿼리가 작동 했습니다. 해당 api는 팀 프로젝트 당시 제가 맡은 구현파트가 아니라 다른 팀원분께서 구현을 하셨었습니다. 일정 한 건을 조회하는데 5개의 쿼리가 작동하는 것을 개선할 수 있지 않을까 생각하여 팀원분이 작성하신 코드를 보며 리팩토링을 해보기로 결심했습니다. ...

2024년 9월 20일 PM09:01 · PolarBear

Spring에서 OAuth Client로 네이버 로그인 구현하기

OAuth 2.0 OAuth 2.0은 표준화된 규칙과 절차를 정의한 프로토콜입니다. 애플리케이션 간의 인증 및 권한 부여를 위한 상호 작용을 명확하게 규정하고 클라이언트(사용자가 이용하는 서비스 애플리케이션)가 자원 소유자(사용자)의 자원에 접근할 수 있도록 허용하는 방법을 정의합니다. 주로 간편 로그인을 할 때 사용됩니다.(ex. 카카오 로그인, 네이버 로그인 등) 역할 Resource Owner - 자원을 소유하고 있는 사람입니다. 서비스 애플리케이션을 사용하는 실제 사용자입니다. Client - 서비스 애플리케이션 서버입니다. 리소스 서버(구글, 네이버 등)로 Resource Owner의 인증 인가를 요청 하기때문에 리소스 서버의 입장에서 보는 관점으로 클라이언트입니다. Resource Server & Authorization Server - 인증 서버 및 리소스 서버입니다. 인증 서버는 인증 및 인가에 대하여 처리하고 리소스 서버는 저장되어 있는 리소스 오너의 정보를 응답해줍니다. 내부 동작 A. 사용자가 네이버 소셜 로그인을 시도 ...

2024년 9월 3일 PM07:31 · PolarBear

API Versioining을 하는 여러가지 방법

API Versioning 의 필요성 하위 호환성 유지 API를 사용하는 사용자는 특정 API 인터페이스에 의존하게 됩니다. 만약 API가 변경되거나 새로운 기능이 추가되면서 기존의 인터페이스가 변경된다면 하위 호환성을 유지하지 않으면 기존 클라이언트에서 오류가 발생할 수 있습니다. 버전 관리를 통해 이전 버전의 API를 유지하면서 새로운 기능을 추가한 버전을 제공할 수 있습니다. 점진적인 기능 개선 API는 시간이 지남에 따라 개선되고 확장됩니다. 새로운 기능을 추가하거나 성능을 개선하거나 보안을 강화하는 등의 작업이 필요할 때 버전 관리를 통해 단계적으로 새로운 버전을 릴리스할 수 있습니다. 이를 통해 클라이언트는 자신에게 필요한 시점에 새 버전을 선택적으로 사용할 수 있습니다. 기존 클라이언트 지원 다양한 사용자가 API를 사용하고 있으며 이들 중 일부는 최신 버전으로 쉽게 업그레이드할 수 없는 경우가 많습니다. API 버전 관리를 통해 기존 클라이언트가 계속해서 안정적으로 동작할 수 있도록 지원할 수 있습니다. API 수명 주기 관리 모든 API는 수명 주기가 있으며, 버전 관리를 통해 API의 수명 주기를 체계적으로 관리할 수 있습니다. 이는 API의 기능이 오래된 경우 폐기하고, 새로운 기능으로 전환할 수 있도록 도와줍니다. 비즈니스 요구사항 반영 비즈니스 환경이 변화하면서 새로운 요구사항이 발생할 수 있습니다. API 버전 관리를 통해 이러한 요구사항을 반영한 새로운 버전을 릴리스하면서도 기존 비즈니스 논리를 보호할 수 있습니다. API Versioning 종류와 그 방법 API 버저닝 방법에는 API URL을 활용하거나 params, 요청 헤더, accept 헤더 4가지 방법이 있습니다. ...

2024년 9월 2일 PM05:47 · PolarBear

JUnit5 유효성 검증 테스트 중 오류

개인 프로젝트를 진행중, 유저의 전화번호 필드 검증 테스트를 하는데 오류가 발생했다. @Import(ValidationConfig.class) class UserRepositoryTest extends TestcontainersConfiguration { @Autowired private UserRepository userRepository; @Autowired Validator validator; @BeforeEach void setUp() { userRepository.deleteAll(); } @Test @DisplayName("DB에 유저 save 실패 - 전화번호 기입 시 \"-\" 기호 미기입") void saveFailByWrongTel() { // given User user = User.builder() .nickname("sonny") .tel("01011112222") // 하이픈 미기입 .pw("1234") .email("asdfas142@naver.com") .visibility(VisibilityStatus.FRIENDS_ONLY) .build(); // when Set<ConstraintViolation<User>> violations = validator.validate(user); // then assertThat(violations).isNotEmpty(); assertThat(violations).anyMatch(violation -> violation.getMessage().equals("전화번호 형식은 XXX-XXXX-XXXX이어야 합니다.")); } } 위와 같은 테스트코드인데, User 엔티티의 tel(전화번호) 필드에 ...

2024년 7월 26일 AM09:39 · PolarBear