본문 바로가기

SpringFramework

(36)
Spring Cloud - (6장) 마이크로서비스 간의 커뮤니케이션 다양한 커뮤니케이션 스타일 마이크로 서비스 간의 다양한 커뮤니케이션 스타일을 식별하고 그것을 2차원으로 분류가 가능하다. 1] 동기식/비동기식 커뮤니케이션 프로토콜로 나눌 수 있다. - 동기식은 Restful API 등 HTTP 프로토콜로 진행 - 비동기식은 Rabbit MQ, Apache Kafka와 같은 메시지 기반 마이크로 서비스를 통해 구현할 수 있다. 2] 단일 메시지 혹은 다수의 수신기 여부에 따라 다양한 커뮤니케이션 타입을 나눈다. - 일대일 커뮤니케이션에서는 각 요청이 정확히 하나의 서비스 인스턴스에 의해 처리 - 일대다 커뮤니케이션에서는 각 요청이 다수의 다른 서비스에 의해 처리 스프링 클라우드를 사용한 동기식 통신 1. RestTemplate는 클라이언트가 RESTful 웹서비스를 사용..
Spring Cloud - (5장) 컨피그를 사용한 분산 컨피규레이션 분산 컨피규레이션? 애플리케이션의 컨피규레이션을 팻 JAR 파일 안에 제공하게되면, 마이크로서비스 인스턴스를 다시 컴파일하거나 다시 배포해야 하는 문제가 발생하는데, 분산 컨피규레이션을 사용하면 이러한 문제가 해소 - 클라우드 네이티브 환경에서 가장 인기 있는 표준 - 분산 시스템에서 외부 컨피규레이션을 위해 서버 측과 클라이언트 측을 지원 - 전체 환경에 걸쳐 애플리케이션을 위한 외부 속성을 관리하는 중앙의 단일 저장소를 두어서 사용 사용예) VCS(버전관리 시스템) 파일 시스템 볼트(Vault) - 서버는 단지 HTTP와 자원 기반(Restful API) 인터페이스를 노출하는 것이 전부이며, JSON 혹은 YAML, 속성 형태로 반환 (+ 암호화 복호화 수행 지원) HTTP API 자원의 소개 컨피그..
Spring Cloud - (4장) 서비스 디스커버리 유레카와 통합을 위한 스프링 클라우드 라이브러리 구성 - 서버 API - 등록된 서비스 목록 수집을 위한 API - 새로운 서비스를 네트워크 위치 주소와 함께 등록하기 위한 API - 클라이언트 API - 마이크로서비스 애플리케이션에 의존성을 포함해 사용함 - 애플리케이션 등록과 등록해제(시작과 종료)를 담당하고, 유레카 서버로부터 주기적으로 최신 서비스 목록을 받아옴 서버측 유레카 서버 실행 - 의존성 추가 - org.springframework.cloud.spring-cloud-starter-eureka-server - (OR) org.springframework.cloud.spring-cloud-starter-netflix-eureka-server - 메인 애플리케이션 클래스에 유레카 서버 활성화 ..
Spring Cloud - (3장) 스프링 클라우드 개요 + 주요 프로젝트 스프링 클라우드(Spring Cloud) - 분산/버전관리, 서비스 등록 및 검색 가능, 라우팅, 서비스간 호출, 부하분산, 회로차단기, 분산메시지 등의 기능을 사용할 수 있는 도구. (스프링 부트와 스프링클라우드 버전에 유의하여 사용해야 함) 12-팩터 앱(The Twelve-Factor App) - 확장 가능하고 쉽게 클라우드 플랫폼에 배포할 수 있다 - 지속 배포 프로세스에 따라 배포되는 SaaS(Software as a Service)를 개발하는 방법론 - 스프링 부트 & 스프링 클라우드는 12-팩터 룰에 부합하는 애플리케이션 만드는 기능 & 요소 제공 (?) SaaS(Software as a Service란? : 서비스 사업자가 인터넷을 통해 소프트웨어를 제공하고 사용자가 인터넷상에서 이에 원격..
Spring - PSA PSA(Portable Service Abstraction) : 환경의 변화와 관계없이 일관된 방식의 기술 접근 환경을 제공하려는 추상화 구조. 추상화 계층을 사용하여 어떤 기술을 내부에 숨기고 개발자에게 편의성을 제공해주는 것을 추상화(Service Abstraction)라고 한다. (이하 추상화) - 하나의 추상화로 여러 서비스를 묶어둔 것을 PSA(Portable Service Abstraction)이라고 한다. - Spring의 대표적인 핵심가치 3가지(Ioc, AOP, PSA)중 하나의 개념이다. => Ioc와 AOP 정리내용 확인: https://xggames.tistory.com/13 - Spring은 다양한 기술에 추상화(Service Abstraction)을 제공하고 있다. Web MVC..
Spring Cloud - (1장) 마이크로서비스를 위한 스프링 & 소개 마이크로서비스란? IT 시스템 아키텍처 접근 방식 중 하나로, 비즈니스 요구사항을 구현한 하나의 애플리케이션을 느슨하게 연결된 여러 애플리케이션으로 쪼개는 것을 말함. 그래서.. 마이크로서비스의 장점은? 1] 대규모의 복잡한 애플리케이션을 지속해서 배포하는 능력이 있다. 2] 소스 코드 규모가 상대적으로 작아서 프로젝트에 새로 참여하는 개발자가 이해하기 쉽다. 3] 분리. 복잡한 엔터프라이즈 시스템을 대룰 때 서브시스템에 따라 시스템을 나누는데 계속 하위 시스템을 만들다보면 개발자가 조직에 새로운 들어온 직원인 경우에는 더욱 이해하기 어려워지는 문제를 해결할 수 있다. 이전까지는 마이크로 서비스 환경을 지원하는 안정적인 프레임워크가 많지 않았는데, 스프링 클라우드에서는 - 서비스 레지스트리 - 컨피규레이..
Spring - 스케줄러 중복실행 이슈분석 Spring 프레임워크에는 linux에서 제공하는 배치(일정주기 혹은 특정시간에 자동실행)와 같은 라이브러리를 제공한다. 이를 스프링 스케줄러라고 한다. 배치프로그램은 실무에서 필수적으로 굉장히 많이 쓰이며 스프링에서는 간단하게부터 시작해서 스프링 배치 프레임워크와 연계하여 안정적인 대용량처리 프로그램을 작성할 수 있다. (스케줄러와 스프링 배치는 같은 개념이 아니다! 스케줄러로 스프링 배치를 수행한다) 스프링 스케줄러 Spring 프레임워크 (spring-boot-starter) 내에 기본적으로 포함되어있으므로 의존성 추가는 필요하지 않다. (Quarts를 사용하는 경우에는 의존성추가 필요. 하지만 이번 글에서는 다루지 않는다) 기본적인 사용방법이다. import net.javacrumbs.shedlo..
Spring - Mybatis 샵(#)과 달러($)의 차이 Mybatis 프레임워크를 사용할 때 XML파일에 쿼리문을 작성한다. 그리고 쿼리문을 작성할때 필요 인자들을 보내주고, 쿼리 바인딩을 사용하여 인자들을 매핑한다. 매핑을 할 때 샵(#)과 달러($)를 사용하는데, 두개의 차이는 무엇일까? SELECT user_id, user_name, user_age, user_email, user_phone FROM users WHERE user_name = #{user_name} SELECT user_id, user_name, user_age, user_email, user_phone FROM users WHERE user_name = ${user_name} 샵(#)으로 쿼리바인딩 파라미터가 String 형태로 들어와 자동적으로 싱글쿼터가 붙어서 [user_name ..
Spring - Mybatis FrameWork 여러 스키마 적용하기 MyBatis FrameWork 개념 및 설정 Spring - Mybatis FrameWork 개념 및 설정 MyBatis란? : 자바 오브젝트와 SQL사이의 자동 매핑 기능을 지원하는 ORM 프레임워크이다. Hibernate나 JPA처럼 새로운 DB프로그래밍 패러다임을 익혀야하는 부담 없이 SQL 쿼리를 그대로 사용한다. 따라 xggames.tistory.com Spring의 Mybatis에서 기본적으로 DataBase 설정 및 주요 컴포넌트의 역할에 대해서 알아본 적이 있다. 그렇다면 스키마가 여러개인 경우에는 어떻게 설정해야할까? application.yml spring: my-lab-db1: datasource: jdbc-url: jdbc:mysql://localhost:3306/my_lab_db..
QueryDSL 상위버전 설정 및 예제 QueryDSL build.gradle 설정 buildscript { ext { set('querydsl.version', '5.0.0') // 상위버전 } } plugins { id 'org.springframework.boot' version '2.5.5' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } dependencies { implementation 'com.querydsl:querydsl-jpa' implementation 'com.querydsl:querydsl-core' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.import..