👩🏻‍💻 Programming/SpringBoot 41

WebFlux의 개념과 사용법

0. 목차 WebFlux, 넌 누구냐 Reactive Programming WebFlux 개념 WebFlux란? WebFlux의 등장 배경 WebFlux 사용의 권장되는 환경 WebFlux가 무조건 좋은가? Spring MVC vs WebFlux Mono vs Flux 1. WebFlux, 넌 누구냐 2024년부터 팀원분과 새로운 프로젝트를 진행하게 됐다. 이미 어느정도 기본 셋팅이 이루어진 프로젝트였는데, 이 프로젝트에서는 WebFlux로 외부 API를 호출하고 있었다. WebFlux는 들어만봤지 실제로는 사용한 적이 없었는데, 대략적으로 전통적인 Spring MVC에 비해 스레드를 상대적으로 덜 사용한다 정도까지만 알고 있었다. 제대로 사용하기 전에 왜 이 프로젝트에서는 WebFlux를 사용했는지, ..

NPE(Null Pointer Exception)를 방지하는 방법

NPE(Null Pointer Exception)란? Null Pointer Exception의 줄임말로, null인 객체를 참조하려고 할 때 발생하는 Exception이다. 좀더 정확히 말하자면 java의 데이터 타입중 기본 타입(primitive type)과 참조 타입(reference type)이 있다. 기본 타입의 대표 예시로는 int가 있고, 참조 타입의 대표 예시로는 String이 있다. 참조 타입은 객체의 생성 이전에는 할당된 메모리 주소가 없는 null을 참조하는 변수이며, 이때 할당된 주소가 없는 null 상태의 변수를 가지고 작업을 진행하다면 NPE를 맞딱뜨리게 된다. 간과하기 쉬운 예외 물론 NPE를 처리 안한다고 당장 서비스가 안돌아가는건 아니다. 하지만 매번 불필요한 NPE로 st..

@JsonUnwrapped의 개념과 사용법

JsonUnwrapped란? 객체 내부의 프로퍼티(Property), 다시말해 객체 내부의 변수가 unwrapped 상태로 직렬화가 이루어져야할때 사용되는 어노테이션이다. 이해하기 쉽게 아래 예시를 봐보자. Department.java package com.logicbig.example; public class Department { private String deptName; private String location; ............. } Employee.java package com.logicbig.example; import com.fasterxml.jackson.annotation.JsonUnwrapped; public class Employee { private String name; ..

@SpringBootTest, @AutoConfogureMockMvc, 그리고 @WebMvcTest

JUnit과 단위테스트 SpringBoot에서 JUnit를 사용하여 테스트 코드를 작성할때, 대표적으로 @SpringBootTest와 @WebMvcTest를 사용하는 경우가 많다. 처음에는 둘의 차이를 간단하게 @SpringBootTest는 모든 빈을 가져와서 속도가 느리고 @WebMvcTest는 필요한 빈만 가져와서 속도가 빠르다 정도로 이해를 했지만, 정확히 개념을 이해하지 못하고 사용한 탓에 테스트 케이스 작성 실패를 겪은적이 있었다. 내가 쓴 테스트 케이스가 어떤 상황에서, 무엇을 목적으로 돌아가는 테스트 케이스인지를 보다 정확히 이해하기 위해 개념을 정리한다. @SpringBootTest + @AutoConfigureMockMvc 1) 특징 - 프로젝트 내부에 있는 스프링 빈을 모두 등록하여 테..

스프링 기본 정리 - 객체지향 원리 적용

프레임워크 vs 라이브러리 프레임워크 : 내가 작성한 코드를 제어하고 대신 실행해주면 프레임워크에 해당 (ex : JUnit) 라이브러리 : 내가 작성한 코드가 직접 제어의 흐름을 담당한다면 라이브러리에 해당 (ex : Java 객체 -> Json으로 바꾸는 라이브러리) 스프링으로 관리되는 예제 코드 @Configuration // 설정정보 (ex : 이게 설정파일임을 알리며, Bean을 등록한다는것을 의미함) public class AppConfig { @Bean public MemberService memberService(){ return new MemberServiceImpl(memberRepository()); } @Bean public MemberRepository memberRepositor..

SpringBoot에서 Naver API 연동하기

주제 네이버 API를 연동하여 localhost에서 원하는 음식을 파는 지역의 정보를 출력해보자. Naver API 선택 및 이해 1. 먼저 아래 링크로 접속하여 사용하고자 하는 네이버 API를 선택한다. 지역 - Search API 지역 NAVER Developers - 검색 API 지역 검색 개발가이드 검색 > 지역 네이버 지역 서비스에 등록된 각 지역별 업체 및 상호 검색 결과를 출력해주는 REST API입니다. 비로그인 오픈 API이므로 GET으로 호출 developers.naver.com 내 경우에는 지역 API를 선택했다. 2. API 생성을 신청한다. 어플리케이션 이름은 마음대로 적고, 사용 API의 경우 기본적으로 본인이 선택한 항목이 지정되어있을테니 굳이 건들일 필요는 없다. 비로그인 오..

Spring Boot와 Exception 처리

Exception 처리란? Spring Boot에서 에러가 발생할 경우 보통은 White Label 페이지를 보여준다. 추가적으로 400, 404와 같은 에러코드를 보여주는데, 이것만으로는 어디서 어떤 문제가 발생했는지 파악하는데 충분하지 않을 수 있다. 때문에 Web Application 입장에서는 이러한 에러를 한 곳에서 + 어디서 무슨 문제가 발생했는지 알려주면 보다 쉽게 에러를 처리할 수 있다. 대표적으로 Spring Boot에서 제공하는 Exception 처리 Annotation은 아래와 같다. @ControllerAdvice (@RestControllerAdvice) Global 예외 처리 및 특정 Package / Controller 예외 처리 * REST API를 사용한다면 RestCont..

DNS 매핑 및 웹 서버 연동

DNS & HOST DNS는 도메인 네임 시스템, 즉, 도메인 이름을 뜻한다. 예를들어 네이버는 www.naver.com이 DNS이다. IP를 기억하기 쉽게 하기 위해 사람에게 친숙한 영단어로 도메인 네임을 구축한다. (DNS) www.naver.com -> (IP) 220.95.233.172 HOST는 쉽게 말하면 컴퓨터 한 대를 뜻하는데, 예를들어 스케일 아웃 방식으로 여러대의 서버를 구축하고 업로드 API를 10개 구축했을때, 업로드 API 01, 02, 03 ... 이런식으로 운영이 될 것이다. 이때 IP만으로 여러개의 API를 관리하면 번거로우므로, HOST도 같이 활용하는 것이다. test1.api.org test2.api.org test3.api.org ... DMZ Zone 내부에서는 이렇..

블루그린배포와 서버 부하분산을 위한 네트워크

스케일업 - 스케일아웃 = 블루그린배포 스케일업은 단일 서버(하드웨어) 장비의 성능을 증가시키는 것이다. 스케일아웃은 동일한 사양의 새로운 서버(하드웨어) 장비를 추가하는 것이다. 요약하면 스케일업은 Quality를, 스케일아웃은 Quantity를 증가시키는 것이다. 블루그린 배포는 기존에 운영중인 소스와, 향후 업데이트될 버젼의 소스를 나누는 방식이다. 예를 들어 로드 밸런서를 활용해 2개의 버젼(구버젼, 신버젼)을 배포한다. 신버젼을 테스트 한 뒤, 문제가 없다고 판단될 경우 구 버젼의 트래픽을 신버젼으로 보내면 된다. 서버 부하 분산을 위한 네트워크 서버 부하가 발생할 경우, 분산을 진행하기 위해 네트워크에 대해 잘 알고 있어야 한다. * 서버 : 무언가 제공하는 대상 * 부하 : load (= 짐..