전체 글

스프링부트, 아키텍쳐, 알고리즘
문제 상황 항해99 실전 6주 WebFlux 기반의 팀프로젝트가 끝난 이후, 급하게 개발한 부분들이 신경쓰여서 팀원 한분과 프로젝트 디벨롭을 결심했고, 가장 먼저 눈에 띈 부분은 예외 처리 로직이였습니다. 기존 예외 처리 로직 기존 아래와 같은 방식으로 예외를 처리하고있었는데. if (!signupRequestDto.getPassword().equals(signupRequestDto.getPassword2())) { return Mono.error(new ResponseStatusException(HttpStatus.BAD_REQUEST, "비밀번호가 일치하지 않습니다.")); } client에게 보여질 Exception을 handle 하는 로직이 서비스 클래스 단에서 이루어지고 있는 것이 불편했다. 예..
항해 팀 프로젝트 중 세미나 성격으로 발표해야할 일이 생겨서 자세하게 주석으로 설명했기에 따로 설명은 하지 않고 flow대로 포스팅합니다. WebFlux Controller Test MemberChannelControllerTest 주석 있는 버전 @WebFluxTest(controllers = MemberChannelController.class) // 1. 어떤 컨트롤러 클래스를 테스트할건지? @AutoConfigureWebTestClient // 2. @WithMockUser를 사용하기 위해서 class MemberChannelControllerTest { @Autowired private WebTestClient webTestClient; // 3. WebFlux 환경에서 가상의 요청을 만들 수 ..
@ModelAttribute 먼저 @ModelAttribute 어노테이션이 붙은 매개변수를 client에게서 요청받아서 처리하려는 경우 아래와 같은 특징이있다. 객체에 데이터를 바인딩할 수 있는 생성자혹은 Setter메서드가 하나는 필요하다. Query String (w-xxx-url-encoded)방식이나 Form 형식 데이터가 아니면 null을 반환한다. 스프링 내부적으로 @ModelAttribute 어노테이션이 붙은 Controller에 전달될 매개변수 RequestDto 객체에 에 client의 요청 데이터 값을 bind하기 위해서 ModelAttributeMethodProcessor 클래스가 RequestDto객체를 어떻게 생성하는지 살짝만 보면, ModelAttributeMethodProces..
@Slf4j 사용했는데도 cannot find symbol log 오류가 발생한다면? 새로 스프링부트 프로젝트를 생성한 후 아래 사진과 같은 오류를 겪었다. 구글링 10초만에 해결방법을 찾았으나 시원하지 않았다. 해결 방법은 아래처럼 직접 LoggerFactory.getLogger() 를 호출하여 log 변수를 직접 선언한것. @Component public class LoggingFilter implements WebFilter { private static final Logger log = LoggerFactory.getLogger(LoggingFilter.class); @Override public Mono filter(ServerWebExchange exchange, WebFilterChain c..
· 항해99
기대하던 항해 실전프로젝트(6주)가 시작되었고, 항해99 17기 최고 아웃풋으로 남겠다는 다짐과 함께 Challenging한 주제를 잡고 꾸역꾸역 해내자 라는 마음가짐으로 팀원들과 어려운 주제를 잡고 가기로 했다. 주제는 트위치와 같은 라이브 스트리밍 방송 송출/시청 플랫폼 개발 이였는데, 운명적이게도 주제를 선정하고 4일 뒤 쯤에 트위치가 한국에서 망 사용료를 감당하지 못해 사업을 철수하겠다는 기사가 났다. 먼저 벌써부터 많은 트래픽이 발생될 예정이고, "실시간" 스트리밍이 되어야하기때문에 대용량 트래픽에 대해서 빠르게 대응할 수 있도록 아키텍쳐를 설계해야했다. MSA를 경험해보고싶은 마음과 현실적인 솔루션인 SOA 아키텍쳐가 혼용된 애매한 아키텍쳐 구조를 시작으로, 필요없는 부분은 버리고, 나눌 필요..
서병렬
서병렬 개발