
API를 웹에 문서화형식으로 출력하는 방법 API에서 제공하는 컨트롤러, 요청 파라미터 필드, 응답 필드에 대한 내용들의 가이드, 명세서를 만들 때 사용하는 라이브러리로 Swagger를 사용한다. 라이브러리 의존성 추가 springdoc 설정 추가 application.yml에 설정을 추가한다. default-consumes-media-type: request media type의 기본값 default-produces-media-type: response media type의 기본값 swagger-ui.operations-sorter: 태그 내 각 API의 정렬기준 swagger-ui.tags-sorter: 태그 정렬 기준 swagger-ui.path: Swagger HTML 문서 경로 swagger-u..

원하는 포맷에 맞게 응답값을 전달할 수 있는 ExceptionHandler 어노테이션을 사용한 Exception 핸들링에 대해 알아본다. commonHandleExcetion 메서드는 모든 Exception에 대한 데이터 처리를 구현한 로직이다. handleValidationExceptions 메서드는 유효성 체크에 대한 Exception 데이터 처리를 구현한 로직이다. 유효성 체크시 에러가 발생하면 MethodArgumentNotValidException 예외가 발생하여 잡아서 처리할 수 있다. 에러 발생 시 에러 메세지가 trace에 전부 출력됐던 내용을 응답 코드값 "500", 에러 메세지가 json 데이터 응답값으로 전달된다. @ExceptionHandler @Controller, @RestCon..

API에서 파라미터로 들어오는 상수값에 대한 유효성체크 로직 구현 물품 유형코드가 음식이면 'F', 옷이면 'C'라는 고정 코드값으로 들어온다고 결정되면 데이터 베이스에 코드값으로 넣어도 되지만 Enum 객체로도 만들어서 사용할 수 있다 코드값을 체크하는 hasItemCd 메서드로 현재 입력된 코드값이 상수값으로 정의된 코드값인지 검사하는 역할을 맡는다. 컨트롤러에서 URL로 들어오는 path 값에 ItemType을 추가해 코드값을 넣어주고 해당 코드값이 유효한지 검사하는 로직을 추가해준다. DTO, Domain에 ItemType 추가 서비스 로직에 itemType을 담는 로직 추가 현재의 로직은 컨트롤러에 또 다른 유효성 체크 로직이 계속 늘어날 수 있어 받아오는 파라미터 별로 어노테이션으로 체크하는 ..

build.gradle에 validation 의존성 추가 id 값이 없을 경우 유효성검사에 걸려 등록이 되지 않도록 @NotBlank 어노테이션 설정을 한다. Controller 등록 메서드에 @Valid 어노테이션을 추가해주면 요청으로 넘어온 입력값에 대한 유효성검사를 실시하게 된다. id 입력값을 뺀 후 요청보냈더니 400 Bad Request 에러가나며 등록하지 못하였다. @Valid 어노테이션은 JSR-303 표준스펙으로 빈 유효성 검사기(Bean Validator)를 이용해 객체의 제약 조건을 검증하는 어노테이션이다. Spring에서 어댑터 객체인 LocalValidatorFactoryBean이 검증처리를 진행하는데 dependency에 'spring-boot-starter-validation'..

인텔리제이에 MSA 프로젝트를 구성해 보았다. Empty Project로 부모 프로젝트를 생성하고 모듈을 추가하여 SpringInitializr로 스프링 부트 프로젝트를 추가한다. https://wakestand.tistory.com/632 인텔리제이 프로젝트 여러개 여는 방법 인텔리제이(IntelliJ) 에서는 이클립스와 다르게 한 워크스페이스에서 여러 프로젝트를 열 수 없는 것 같아 보이는데 위 이미지를 보면 알겠지만 인텔리제이에서도 여러 프로젝트를 한 워크스페 wakestand.tistory.com 그리고 프로젝트와 모듈 모두 자바 버전을 맞춰준다. https://inpa.tistory.com/entry/IntelliJ-%F0%9F%92%BD-%EC%9E%90%EB%B0%94-JDK-%EB%B2%8..

DevOps란 운영자와 개발자의 작업절차의 생명주기를 표현한 것. 운영을 하면서 나온 개선건에 대해 계획하고 개발자가 개발 후 테스트 하고 배포하고 운영을 하면서 또 다른 개선건을 찾게되면 반복적으로 이루어지는 절차 과정이라 할 수 있다. 생산성을 올리기위해 특정 단게에서 자동화하는 기업이 있다. 보통 테스트와 배포같은 경우는 Jenkins나 GitLab에서 해주기도 한다. https://www.inflearn.com/course/java-msa-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%8B%A4%EC%8A%B5/dashboard Java 마이크로서비스(MSA) 프로젝트 실습 - 인프런 | 강의 Java SpringCloud와 여러 오픈소스를 연동하여 마이크로서비스를 구축..

마이크로서비스 아키텍처 장단점 장점 서비스간 코드 간섭이 없다. 원하는 서비스를 무중단 스케일링할 수 있다. 서비스별 백업 복구가 쉽다. 서비스간 영향도가 적어 배포를 쉽게 할 수 있다. 단점 여러 서비스들에 대해 파악하는데 복잡하다. 서비스 분리를 어떻게 하느냐에 따라 속도가 저하될 수 있다. 트랜잭션 처리가 원하는대로 되지 않는다. -서비스간 코드 간섭이 없다. 모놀리스 아키텍처 특정 소스 변경시, 변경된 소스를 참조하고 있는 기능들에대한 영향도 파악이 필요하다. 마이크로서비스 아키텍처 특정 소스 변경시, 변경 소스가 소속된 서비스내 참조되고 있는 기능들에 대한 영향도만 파악하면 된다. 하지만 이런 경우 각 서비스가 사용하는 Util 소스가 동일하면 분리를 하는게 맞을지 고민이 필요하다. Util의 ..

아키텍처란? 데브옵스, 클라이언트 등에 서비스를 제공하기위해 프로그램 개발 목적을 어떻게 설계할 것인지 표현한 기술 소프트웨어 아키텍처 N-계층 아키텍처 애플리케이션에 고유의 기능들을 여러 계층으로 나눈 아키텍처(ex. MVC 패턴) 모놀리스 아키텍처 모든 UI, 비지니스 로직을 하나의 어플리케이션으로 패키징한 아키텍처 마이크로서비스 아키텍처 규모 작은 분산된 서비스로, 대규모 애플리케이션을 분리함으로써 비지니스 로직의 복잡성 문제를 해결하고 각 서비스마다 책임이 명확해지도록 진행된 아키텍처 4계층은 Spring 웹개발시 사용했던 MVC 패턴과 동일하다. 계층별로 나뉘는 장점은 각 계층별 기능범위가 확실하다는 것이다. Controller는 데이터를 받아오는 것과 응답을 주는 것 Service는 비지니스 ..
MSA(Micro Service Architecture) 클라우드 상에서 하나의 작은 서비스 단위로 개발하여 변경이나 조합, 재활용이 가능하도록 구성한 아키텍처 기존의 하나의 큰 서비스 형태였던 모놀리틱 아키텍쳐는 구조가 단순하여 개발이 용이하고 END-TO-END 테스트가 용이하다는 장점이 있지만 시스템의 규모가 커질수록 더욱 복잡해지고 이에 따라 코드의 이해와 분석이 어려워진다. 작은 수정에도 전체를 빌드/배포 해야하는 단점이 있다. MSA는 서비스의 개발이 빠르고 출시 시간이 단축되며 서비스별로 독립적인 배포가 가능하다는 장점이 있다. 또한 독립된 하나의 모듈에서 발생한 장애는 전체 어플리케이션에 크게 영향을 미치지 않고 모듈간 의존도가 낮아 서로 다른 기술 스택을 사용할 수 있다. 단점으로는 트랜..

formLogin 인증처리 방식이나 Ajax 인증처리 방식은 크게 다르지 않고 동일하게 필터를 기반으로 처리를 진행한다. 필터가 사용하는 각각의 클래스들도 역할은 조금 차이나지만 전반적인 처리 과정은 거의 동일하다. formLogin 인증은 동기적인 방식으로 인증처리하고 Ajax 인증은 비동기적인 방식으로 처리하는 점이 다르다. 동기 (Synchronous)와 비동기(Asynchronous) 동기는 직렬적으로 작업을 처리하는 방식으로 서버에 요청을 보낸 후 응답을 받아야만 다음 동작이 진행되는 방식이다. A 작업이 모두 진행될 때까지 B작업은 대기하게 된다. 비동기는 병렬적으로 작업을 처리하는 방식으로 서버에 요청을 보낸 후 응답의 여부와 상관없이 다음 작업이 진행된다. A 작업을 진행되면 B 작업이 실..