# Multi Module

21개의 포스트
post-thumbnail

Spring Boot Multi Module 적용하기

신입사원이 된지 어느덧 만4개월이 넘었다.. 회사에선 자사 서비스를 운영하는데 프로젝트가 참 이상하게 구성돼있다. 한 프로젝트 안에 두개의 서비스가 운영되고있고 랜딩페이지나 이상한 잡다한것들이 많다. 그래서 나보고 한번 멀티모듈을 공부 해보라해서 공부하고 정리했다. 일단 멀티 모듈이란 말 그대로 모듈을 사용하는 것이다 모듈이라 함은 내가 이해하기론 여러곳에서 쓸 수 있는 함수 static같은 느낌 같았다. 먼저 우아한녀석들블로그에서 멀티 모듈을 정리한 글이 있어서 그 글을 참고했다. 링크는 맨 하단에 기입해두겠다. Multi Module이란 하나의 단일 프로젝트를 여러 개의 모듈로 분리해서 구성하는 기법. 모듈간 의존성을 최소화하여 유연하고 확장성 있는 애플리케이션을 개발하기 위해 사용됨. Multi Module 적용 전 ![](https://velog.velcdn.com/images/pose1358/post/eb724b04-03a9-455e-97d1-0866

2023년 9월 8일
·
0개의 댓글
·
post-thumbnail

Kotlin Spring으로 다중 모듈 구성 방법

패키지 구성 현재 나의 blog package 구성은 이와같다. 근데 예시 자료를 하나의 프로젝트에서 관리하는게 눈에 잘 안들어와서 예시 자료를 모듈화를 시키려고 한다. settings.gradle.kts 구성 우선 settings.gradle.kts 파일에 들어가면 현재 아래처럼 구성되어 있다. 단일 프로젝트 모듈화 시키기 blog 프로젝트에서 blog 하위에 modules 폴더에 모듈 프로젝트를 생성 시킨다. 여러개 모듈을 생성하기 위해 exam-module도 만들어 보았다. 그러면 총 2개의

2023년 7월 13일
·
0개의 댓글
·
post-thumbnail

[냉부] 멀티 모듈 적응기 (3)

멀티 모듈과 yml, properties 관련 정리 실행되는 곳의 application.yml을 읽는다. 거기서 profiles를 확인한다. active가 뭐로 되어있는지 확인한다. 그리고 application.yml에 include로 어떤 application-xxx.yml가 있는지 확인한다. application-xxx.yml 내부에 '---' 로 나누어진 profiles에 따라 해당 부분이 실행된다. application.yml의 profiles가 "local", "main" 중 local이 되어 있다면 include에 포함된 db, 즉 application-db.yml 내부 '---'로 나누어진 profiles의 "local"과 "main" 중 local을 선택해서 실행된다.

2023년 6월 26일
·
0개의 댓글
·
post-thumbnail

[냉부] 멀티 모듈 적용기 (2)

앞선 포스팅에서 멀티 모듈 4차까지 진행했고 구성도는 다음과 같다. 멀티 모듈 - 5차 그러나 우리는 회의를 통해 서비스의 기능을 확장하기 위해 모듈을 더 추가했다. 모듈 추가의 목적은 RabbitMQ를 통해 비동기 메시지를 사용하는 것과 관리자 웹페이지를 만들어 우리 서비스를 관리하는 것이다. 그래서 우리는 메시지큐 모듈인 mq, 관리자 페이지 모듈인 admin을 추가하게 되었다. > 확장하고자 하는 상세 기능은 다음과 같다. admin에서 이벤트가 발생하면 비동기로 메시지를 보내고 그 메시지를 받아서 batch가 실행되도록 하는 목적 조회에 사용된 RDB 데이터를 redis에 저장할 때 비동기 메시지로 전송하여 저장하도록 하는 목적 (검토 중) ![5차](https://vel

2023년 6월 24일
·
0개의 댓글
·
post-thumbnail

[냉부] 멀티 모듈 적용기 (1)

우선 모듈 분리의 시작은 엔티티 문제였다.. 프로젝트에서 우리는 api 서버(모듈)와 batch 서버(모듈), 2개를 운영하며 두 서버에서 모두 같은 MySQL DB에 접근하는 방식을 취하고 있었다. 또한 우리는 batch 모듈을 데이터 삭제나 알림을 전송할 때 사용하고 만들어진 알림을 api 모듈에서 조회하도록 구현했기 때문에 두 프로젝트에 모두 알림(notification) 엔티티를 지녀야했다. 그런데 이것이 문제의 불씨가 되었다. 문제 상황 문제는 다음과 같았다. 로컬에서 작업하는 팀원 중 누군가가 알림 엔티티를 변경하면 다른 팀원은 수기로 프로젝트의 엔티티를 동기화 해야했다. 하지만 이것이 잘 되지 않았고 application.yml에 spring.jpa.hibernate.ddl-auto 옵션을 update로 설정해두었기 때문에 어느 순간 메인 DB에 쓰기가 발생하였고 DB 내부 값이 꼬이게 되었다. ![초기](https://velog.velcdn

2023년 6월 23일
·
0개의 댓글
·
post-thumbnail

Error running 'app' Unable to determine activity name

새로운 모듈을 추가한 뒤에 앱을 실행하기 위해 run을 해봤는데 다음과 같은 에러가 발생하는 것을 확인할 수 있었다. 처음 보는 에러 였기 때문에 구글 또는 gpt에 검색을 해보았으나, 조금 다른 에러에 대한 답변 또는 원론적인 답변 얻을 수 있었다. 무엇이 문제일지 다시 생각해보았는데 원인은 app 모듈의 build.gradle.kts 의 dependecies 블록에 해당 모듈을 추가하지 않아서 생기는 문제였다... 해당 모듈을 추가 해준 뒤 sync 하고 앱을 실행하면 정상적으로 실행되는 것을 확인할 수 있다. sett

2023년 6월 14일
·
0개의 댓글
·
post-thumbnail

멀티 모듈(Multi Module)

멀티 모듈(Multi Module) 이란? 멀티 모듈이란? 서로 독립적인 프로젝트(인증, 어플리케이션)을 하나의 프로젝트로 묶어 모듈로서 사용되는 구조를 말한다. 멀티 모듈을 사용하면 공통적인 기능을 모아 하나의 모듈로 만드는 것이 가능하다. 즉, 인증과 어플리케이션에서 공통으로 사용되는 Util, Domain, Common 등을 모듈로 분리해 사용할 수 있다. 멀티 모듈 사용법 0. 설계 가장 상위에 존재하는 Root와 코드를 어떻게 해당모듈을 통해 분배할 것 인지를 설계하는 단계 주의할 점 실패한 멀티 모듈 프로젝트의 경우 공통이라는 Common 단어에 사로잡혀 하나의 Common 모듈안에 여러 연관관계를 갖게 되면, 문제점이 발생하게 된다. 리팩토링의 비효율성 : Common 하나의 코드를 수정하기 위해서는 연관관계를 갖는 모든 코드를 수정해야하는 결과를 가지고 올 수 있다. **의존성으로 인한 최적화 실패

2022년 12월 27일
·
1개의 댓글
·
post-thumbnail

Gradle, SrpingBoot, Multi Module 만들기

Gradle을 이용한 Multi Module 만들기 Overview 3개의 hierarchy(계층)를 갖는 멀티 프로젝트를 구성합니다. >- Root Module API Member API Product API Root Module 두가지의 코드를 작성합니다. 프로젝트 전반에 영향을 끼치지만, 비즈니스 로직에는 전혀 관여하지 않는 'Log' 관련 코드. 구조 접근을 테스트할 수 있는 'Welcome Class'를 정의합니다. settings.gradle.kts 프로젝트 이름은 "multi-module-example"으로 생성합니다. settings.gradle.kts를 열람해보시면 아래처럼 한줄이 추가되어있습니다. 해당 파일은 빌드에 관여하는 프로젝트의 hierarchy를 정의하고 선언합니다. IntelliJ같은 툴을 사용해서 멀티 모듈을 구성하다 보면, 우리가 뜻하지 않는 방향으로 진행되는 경우가 있는데요. 그 때마다 `s

2022년 12월 9일
·
0개의 댓글
·

[gradle] 멀티 모듈 프로젝트에서 코어 모듈의 변수 공유하기

프로젝트 구조 1.settings.gradle.kts (부모 프로젝트) 2. build.gradle.kts (shared 모듈) 3. build.gradle.kts (api 모듈) Gradle run 위에서 본 것처럼 dependsOn 함수를 사용하여 task 간에 순서를 정해줄 수 있습니다. 주의할 점은 api-task안에서 수행할 내용은 doFirst 혹은 doLast dsl 안에서 수행해줘야 한다는 것입니다. 위 코드는 아래 github 에서 참조하실 수 있습니다. Github link -> https://github.com/vitamaxDH/gradle-core-variable-share Reference https://docs.gradle.org/current/userguide/moreabouttasks.html#sec:locating_tasks

2022년 12월 2일
·
0개의 댓글
·
post-thumbnail

Gradle, SrpingBoot, Multi Module) Finance API 코드 구조 (v.1.0.0)

v.1.0.0 Major 버전 업 Root Module 설계 변경 Parent Module의 신규 생성 Sub Modules의 컨셉 변경 Minor 버전 업 last depth 모듈 생성 등. 컨셉 하나의 Git Repository는 하나의 도메인만 소유한다. ex) User Domain, Finanace Domain Layer간의 책임과 경계를 명확히 한다. '모듈'은 경계를 넘나들며 참조 하지 말 것. 절대 ! 코드의 붕괴는 명확한 경계가 무너질 때 나타난다. Lay

2022년 12월 1일
·
0개의 댓글
·
post-thumbnail

[프로젝트 셋업] 빈 프로젝트 생성

구성 환경 SpringBoot 2.7.3 IDE: IntelliJ IDEA 2021. 3. 2 (Ultimate Edition) Language: Kotlin Build: Gradle Version Control: GitHub 폴더 구조 다음과 같은 형태로 구성하려고 합니다. root 프로젝트 아래에는 apps, libs, protocols 의 모듈 3개가 존재합니다. apps 모듈은 외부로부터 request 를 받고, response 를 되돌려주는 역할을 수행하게 됩니다. 보통 API 들이 위치하게 되며, spring-batch 등 배치성 어플리케이션도 존재할 수 있습니다. libs 모듈은 내부 비즈니스 로직을 포함하는 모듈입니다. 타 서비스와의 통신을 위한 adapter-http 도 있고, DB 와의 통신을 위한 adapter-persistence 모듈도 있습니다. 핵심 비즈니스

2022년 10월 23일
·
0개의 댓글
·
post-thumbnail

[Android] Refactoring: Gradle을 KTS로 마이그레이션 하기

💡 Kotlin-dsl? skydoves님의 Pokedex 프로젝트를 공부하던 중, Version Catalog라는 방법에 대해 알게 되었습니다. 저는 지금까지 Groovy 기반의 gradle 파일들로 라이브러리를 선언하고, project 단위의 gradle에서 각 라이브러리의 버전을 관리했었는데 Groovy 기반이 아니라 Kotlin 파일로 gradle을 관리할 수 있다는 것을 알게 되었습니다. Android Developer 공식사이트에서도 Groovy -> KTS로 migration하는 방법을 소개하고 있습니다. 그렇게 더 공부하다가 알게 된 것이 Kotlin DSL입니다. DSL? Myungpyo Shim님의 [포스팅](https://myungpyo.medium.com/kotlin-dsl-%EA%B0%84%EB%8B%A8%ED%9E%88-%

2022년 10월 14일
·
0개의 댓글
·
post-thumbnail

[Android] Refactoring: Multi Module (멀티모듈화)

💡 Module? Google Developer 공식문서를 참조하면 > 모듈은 소스파일 및 빌드 설정으로 구성된 모음이며, 이를 통해 프로젝트를 별개의 기능 단위로 분할할 수 있습니다. 안드로이드 프로젝트에는 반드시 하나 이상의 앱 모듈이 존재하며, 그 밖에도 하나 이상의 다른 모듈들이 포함될 수 있습니다. 또한, 하나의 모듈이 다른 모듈을 종속 항목으로 사용할 수 있습니다. 각 모듈을 독립적으로 빌드, 테스트, 디버그 할 수 있습니다. 진행하던 프로젝트 크기가 커지고, 클린아키텍처를 적용함에 있어서 멀티모듈화가 필요해졌습니다. 지금부터는 제가 직접 고민하며 멀티모듈을 적용했던 경험을 적어보겠습니다. 💡 MVVM과 클린아키텍처 |MVVM|Clean Architecture| |:----:|:----:| |![](https://velog.velcdn.com/images/paulus0617/post/3e2cb8c2-ddac-441c-bdd5-03cd722

2022년 10월 14일
·
0개의 댓글
·
post-thumbnail

Spring Multi Module

Multi Module이란 멀티 모듈이란 서로 독립적인 프로젝트를 하나의 프로젝트로 묶어 모듈로서 사용되는 구조를 말합니다. 멀티 모듈을 사용하면 공통적인 기능을 모아 하나의 모듈로 만드는 것이 가능합니다. 공통적으로 사용해야하는 util, domain, Repository 등을 모듈로 분리해서 사용할 수 있습니다. Multi Module Root 생성 Gradle을 사용해 멀티 모듈 프로젝트를 생성하겠습니다.먼저 모듈을 모을 Gradle 프로젝트(루트)를 생성합니다. Name은 자유롭게, 그리고 Group명을 dev.be로, JDK와 Java는 11버전을 선택하

2022년 7월 17일
·
0개의 댓글
·
post-thumbnail

프로젝트 Init

멀티 모듈 깡통 프로젝트 만들기 👉🏻멀티모듈에 대한 설명 멀티 모듈이란 서로 독립적인 프로젝트를 하나의 프로젝트로 묶어서, 각각의 프로젝트를 모듈로 활용하는 프로젝트 구조를 말합니다. 멀티 모듈은 각 모듈들이 독립적인 역할을 하고 있기 때문에, 에러가 나거나 고장이 나면 서로 다른 모듈에 크게 영향을 끼치지 않아서 해당 부분만 수정하면 된다는 장점이 있고, 스프링부트 모듈을 생성 할 때 Spring Initializr를 사용하면 생성된 모듈이 별도의 프로젝트인 것처럼 인식됩니다. 1) gradle init으로 만들기 > 참조 [멀티모듈 프로젝트 구성1](https://github.com/Hom

2022년 7월 8일
·
0개의 댓글
·
post-thumbnail

Multi Module VS MSA

이 두가지를 비교하기 전, 먼저 Multi Module이 무엇인지 알아야 한다. 하지만, 그 전에 Module이라고 자주 언급하며 사용하지만, 이 것이 무엇을 뜻하는지 100% 정의내리고 사용하는사람은 극히 드물다고 생각이 든다. Module >모듈이란, 여러 가지로 정의될 수 있지만, 일반적으로 큰 체계의 구성요소이고, 다른 구성요소와 독립적으로 운영되는 것이다. 즉, 독립적으로 운영될 수 있는 의미를 가진 구성요소라고 할 수 있다. Multi Module Project 그렇다면, 모듈이 여러개인 프로젝트를 멀티 모듈 프로젝트라고 할까? 이는 조금 다른 개념의 접근이라고 할 수 있을것같다. 이 그림을 아무것도 모르는 상태에서 보게 된다면 이해가 안될 수밖에 없다. 필자도 이러한 그림을

2022년 4월 15일
·
0개의 댓글
·

Multi Module Jetpack Compose Recomposition Skippable Issue

안녕하세요. 이번 포스팅에서는 멀티 모듈에서 컴포즈를 사용할 때 주의해야할 사항에 대해서 알아보겠습니다. https://qiita.com/takahirom/items/6907e810d3661e19cfcf 이 포스팅을 보고 작성하게 되었습니다. 요즘 클린 아키텍처를 구성하는 멀티 모듈 프로젝트가 많이 늘었습니다. 더하여, 컴포즈를 도입하는 프로젝트도 많이 늘어났죠. 클린 아키텍처를 구성하면 도메인 레이어에서 모델을 구성하여 프레젠터 레이어에서 해당 모델을 사용하는 경우가 많습니다. 하지만, 프레젠터 레이어에서 컴포즈를 사용할 경우에 숙지해두어야 할 주의사항을 모르고 사용하기 마련입니다. 간단히 말하면, 컴포즈에서 Recomposition이 일어날 때 도메인 레이어에서 사용하는 모델이 파라미터로 들어갈 경우 해당 Composable의 스킵이 일어나지 않게 됩니다. 이러한 경우를 재현하기 위해 다음과 같이 프로젝트를 구성해보았습니다. Domain Layer

2022년 4월 7일
·
1개의 댓글
·

Hilt와 Dagger, JSR-330 (3) - Pure Java/Kotlin Module

안녕하세요, 이번 편에서는 Pure Java/Kotlin 환경에서 Hilt를 적용할 수 없을 때 JSR-330 Annotation을 이용하여 Dependency Injection을 하는 법을 알아보려고 합니다. 이번 시리즈는 저번 시리즈들보다 짧게 다뤄질 예정입니다. 많은 내용은 없거든요. Pure Java/Koltlin 모듈을 사용한 제 프로젝트를 예시로 들면서 알아보도록 하겠습니다. 먼저, 예시로 사용되는 프로젝트는 Multi Module Clean Architecture를 적용한 프로젝트이며, Domain Module을 Pure Java/Kotlin Module로 구성했습니다. Domain Module에서 Dependency Injection을 적용한 것은 UseCase들입니다. 본격적으로 코드를 보여드리겠습니다. 먼저 JSR-330을 사용하기 위해 javax.inject를 넣어줍니다. 다음으로, JSR-330의 @Inject Annotation을 지정해주면

2022년 2월 6일
·
0개의 댓글
·

Android Multi Module Clean Architecture with Hilt, Ktor Client (2)

Ktor Client를 이용한 Android http 통신 이전 포스팅에서는 Clean Architecture 기반의 프로젝트를 구성하고 Hilt를 이용하여 Dependency Injection을 진행해주었었습니다. 이번 포스팅에서는 Ktor를 이용하여 네트워크 통신을 하겠습니다. Ktor란, 코틀린과 마찬가지로 JetBrains사에서 개발된 코루틴 기반의 프레임워크로써 멀티플랫폼 용도로 개발되었습니다. Ktor를 사용하면 코루틴 기반의 Http Client 개발이 가능합니다. 들어가기에 앞서, Ktor는 Engine과 Serializer라는 두 요소를 가집니다. Engine을 통해 멀티플랫폼에서 원하는 dependency를 추가할 수 있고, Serialization을 통해 session data를 직렬화할 수 있습니다. 본 포스팅에서는 Android에서 사용하는 OkHttp 엔진, Gson Serialzer를 사용하겠습니다. Add Dependency 먼저,

2021년 7월 24일
·
0개의 댓글
·

Android Multi Module Clean Architecture with Hilt, Ktor Client (1)

프로젝트 개요 Clean Architecture 기반의 간단한 프로젝트를 만들어보겠습니다. Hilt를 이용한 Dependency Injection, Ktor Client를 이용한 Http 통신을 하겠습니다. https://unsplash.com 의 api를 사용하겠습니다. 본 포스팅에서는 아래와 같은 내용을 다루도록 하겠습니다. Clean Architecutre 적용 Hilt를 이용한 DI 적용 Clean Architecutre 적용 1 Clean Architecutre 라고 하면 가장 먼저 떠오르는 원 이미지입니다. 위의 구조를 우리는 **Presentation Layer에 MVVM 패턴을

2021년 7월 24일
·
4개의 댓글
·