SW/마이크로서비스

마이크로서비스 : Spring Boot 프로젝트 생성 : 방법, 구현, 예제

얇은생각 2020. 5. 27. 07:30
반응형

Spring Boot Project 생성

실제 소스코드를 구현하기 위해 Spring Boot 프로젝트를 생성하고 Maven에 의존성, 즉 Dependency를 추가합니다. 이렇게 프로젝트를 만들고 개발을 위한 설정이 끝나면 구현을 위한 소스코드 패키지의 구조를 정의하고, 이후 하나씩 구현을 진행합니다.

Spring Boot 프로젝트는 New - Starter Project를 선택하면 New Spring Starter Project 화면이 출력되는데, 이 화면의 Name, Location, Group, Artifact를 화면과 같이 입력합니다. 그리고 Next 버튼을 누르면 프로젝트의 Dependency를 추가하는 화면으로 전환되는데, Spring Boot Version을 선택합니다.

프로젝트에서 사용할 Web, Rest Repositories, JPA, H2를 선택하고, Finish를 눌러 프로젝트를 생성합니다. 그러면 Package Explorer 창에 화면과 같이 앞에서 생성한 Spring Boot Maven 프로젝트 하나가 생성됩니다. 생성한 프로젝트의 경로에 있는 pom.xml 파일을 확인해 보면 프로젝트의 설정정보들이 들어있습니다.

특히 프로젝트에서 사용하기 위해 선택했던 Web, Rest Repositories, JPA, H2 정보가 Dependency에 추가 되어 있습니다. 이 pom 파일에 개발환경을 구축할 때 별도로 설치했던 Lombok 정보를 Dependency에 추가합니다. 애플리케이션의 Main인 AccountApplication.java 파일을 확인합니다. 이렇게 해서 STS에서 마이크로서비스 개발을 위한 프로젝트를 생성합니다.

 

마이크로서비스 : Spring Boot : API 테스트, 데이터베이스 변경 : 방법, 개요, 구현

 

앞에서는 STS에서 제공하는 위젯을 활용해서 프로젝트를 생성했습니다. 또 다른 방법으로 Spring.io 사이트를 통해서도 프로젝트를 생성할 수 있습니다. Group, Artifact, Dependency 칸에 앞에 설정했던 정보를 동일하게 입력합니다. Generate Project를 클릭하면 STS에서 생성했던 것과 동일한 프로젝트가 생성되고 다운로드 해서 사용할 수 있습니다.

 

 

마이크로서비스 내부 Package 구조 정의

마이크로서비스 : Spring Boot : API 테스트, 데이터베이스 변경 : 방법, 개요, 구현

 

헥사고날 아키텍처를 통해 비지니스 로직이 가장 중요합니다. 이 비즈니스 로직의 결과를 브라우저에 표현하는 기술이나 데이터베이스에 저장하는 기술들이 비즈니스 로직에 영향을 미치지 않도록 하는 것이 좋은 설계입니다. 그러기 위해서 계층형 아키텍처를 데이터 액세스 계층과 프리젠테이션 계층의 변경이 비즈니스 로직 계층에 영향을 주지 않도록 구성합니다.

각 계층은 인터페이스를 통해 연계될 수 있도록 구성합니다. 이 구조를 기반으로 앞에서 만든 Spring Boot 프로젝트에 화면과 같이 소스코드 패키지를 구성합니다. 패키지 구조에 대해 설명을 드리면, 소스코드 패키지 구조는 상위에 Domain과 Application 패키지가 있습니다.

Domain 패키지는 Model, Repository, Service 패키지로 구성됩니다. Model 패키지는 Entity, Value Object 그리고 Domain Event를 정의하는 곳으로 도메인주도설계 그리고 JPA와 같은 기술이 적용됩니다. Repository 패키지는 데이터 저장소를 관리하는 기능의 Interface가 정의됩니다. Service 패키지에는 비즈니스 로직의 흐름 처리나 트랜잭션을 처리하는 코드가 구현됩니다.

Application의 SP 내의 Web 패키지는 서비스의 퍼블리싱을 담당하는 곳, 즉 다른 마이크로서비스에 제공할 API를 정의하는 곳으로 다른 마이크로서비스는 RestController에 정의된 API를 호출해서 사용하게 됩니다. Es의 listener는 Event를 구독하는 기능의 코드가 구현됩니다.

 

 

비즈니스 로직 계층 구현

그럼 작은 도메인 모델을 구현해 보도록 하겠습니다. 도메인 모델에서 Account라는 객체 이름은 Account-Domain-Model 안에 Account라는 이름의 클래스로 생성합니다.
Account 객체 안의 각 Attribute는 Account 클래스의 멤버 변수로 타입과 이름을 그대로 사용해서 구현합니다.
보통 이렇게 클래스를 생성하면 생성자와 Getter, Setter 등을 만들어줘야 하는데,
실습환경에서는 Lombok을 사용해서 이런 것들을 자동으로 생성해 주므로 별도로 생성자나 함수를 만들지 않아도 됩니다. 따라서 화면과 같이 어노테이션을 추가합니다.

 

 

데이터 액세스 계층 구현

OR 매핑은 데이터 저장소를 먼저 고려하지 않습니다. Business Logic에 필요한 객체가 무엇인지를 먼저 고려하여 비즈니스를 처리하는 흐름을 구현한 뒤 나중에 저장소를 결정합니다. Object에 Mapping하여 데이터를 처리하는 방식으로 따라서 Business Logic 층이 Domain Model 구조로 설계된 경우 유용한 방식입니다.

따라서 본 실습은 Spring-DATA-JPA를 이용해서 객체 관점에서 DB에 접근하는 형태로 어플리케이션을 구현하며, 그 구현기술로 하이버네이트를 적용합니다. 데이터 액세스 계층 구현을 위해 JPA Repository를 생성해 보겠습니다.

 

마이크로서비스 : Spring Boot : API 테스트, 데이터베이스 변경 : 방법, 개요, 구현

 

Account-Domain-Repository에서 마우스 오른쪽 버튼을 클릭하고, 출력되는 화면에서 New 그리고 Interface를 선택하면 New Java Interface 화면이 출력됩니다. Package 위치가 잘 설명되어 있는지 확인하고 Name에 AccountRepository를 입력합니다.

Interface를 추가하기 위해 Add 버튼을 눌러 출력된 Extended Interface Selection 창에서 화면과 같이 Spring Data JPA를 사용하기 위한 인터페이스를 선택해서 추가합니다. 이 모든 설정과 입력이 끝나면 Finish를 눌러 AccountRepository를 생성합니다.

AccountRepository Interface에 화면과 같이 어노테이션을 추가합니다. 이 RepositoryRestResource 어노테이션을 추가하면 별도 구현 없이 내부적으로 REST API가 만들어지게 됩니다.

 

 

프리젠테이션 계층 구현

프로젝트를 Build를 수행합니다. Build는 Run As의 Maven Install을 선택해서 실행시킵니다. 오류 없이 Build가 끝나면 Boot Dashboard 창에 Build가 정상적으로 끝나서 실행할 수 있는 애플리케이션 목록에 추가됩니다. STS에는 별도 웹 서버 설치 없이 바로 Build된 애플리케이션을 시작할 수 있습니다. 그럼 방금 Build했던 Shop-Account를 선택해서 시작시켜보겠습니다.

서버가 정상적으로 시작되면 웹브라우저를 통해 localhost:8080/Accounts로 접근할 수 있습니다. REST API가 자동을 생성된 것을 볼 수 있습니다. Spring Data Jpa에서 제공하는 Repository Interface의 선언만으로 REST API가 생성된 것입니다.

개발할 때 Spring Data JPA와 REST를 사용하게 되면 Controller와 Service의 코드 작성 없이 Domain의 클래스와 Repository 인터페이스만 작성하는 것만으로 REST API를 자동으로 생성할 수 있습니다. 또한 DDL, DML 등의 SQL 쿼리를 직접 작성하지 않아도 되며, 심지어 DB Table도 자동으로 생성해주게 됩니다. 따라서 프로젝트를 Build를 통해 Account에 대한 GET, POST, PUT 등의 메서드가 자동 생성됩니다.

반응형