[6주차/필수과제] 아키텍처 레이어 구성 요소 별 책임이 무엇이라고 생각하시나요? #13
Replies: 27 comments
-
1. 아키텍처
2. 레이어 별 구성요소의 책임
3. 아키텍처 구현시 주의할 점멀티 모듈로 구현하게 되면 각 모듈의 최근에 팟장에게 받은 코드리뷰가 있는데요, 클린 아키텍처를 공부하셨다면 (세미나 때 했죠?) 아시겠지만 도메인에서는 프레임워크와 종속성이 최소화되어야 한다고 합니다. 따라서 도메인에 코드를 작성할 때 안드로이드 프레임워크라던가 다른 써드파티 라이브러리가 사용되지 않도록 주의해야 합니다~! |
Beta Was this translation helpful? Give feedback.
-
1. 아키텍쳐 및 폴더링선택한 아키텍처 클린아키텍처
2. 레이어별 구성요소 책임
3. 아키텍처 구현시 주의할 점클린 아키텍처에서 domain 레이어는 순수한 자바, 코틀린 레이어인 걸 잊지 않으셨으면 좋겠습니다! |
Beta Was this translation helpful? Give feedback.
-
𝟏. 아키텍처 및 폴더링아키텍처: 클린아키텍처
𝟐. 각 레이어 별 구성 요소의 책임2.1. Core 2.2. Data 2.3. Domain 2.4. Presentation 𝟑. 아키텍처 패턴을 적용할 때 어려웠던 점과 해결레이어 구분은 예제를 보면서 나눠봤지만 제대로 알 지 못했던지라 domain에서 외부 라이브러리를 임포트 하기도 했었어요! 코드리뷰를 받으면서 domain은 순수 자바 코틀린 코드로 작성해야하는구나를 알게 되었습니다! |
Beta Was this translation helpful? Give feedback.
-
𝟏. 아키텍처 및 폴더링아키텍처: 클린아키텍처
𝟐. 각 레이어 별 구성 요소의 책임
𝟑. 아키텍처 패턴을 적용할 때 어려웠던 점과 해결이미 viewmodel로 구현되어있고, 아무렇게나 패키징되어 있던 프로젝트를 전체적으로 뜯어고치는데에 있어서 어려움을 겪었습니다.. 어려웠던 점은 저도 모르게 자꾸만 Presentation 계층에서 바로 Data에 접근하려고 했다는 점입니다. |
Beta Was this translation helpful? Give feedback.
-
1. 아키텍처 및 폴더링아키텍처: 클린아키텍처
2. 각 레이어 별 구성 요소의 책임
3. 아키텍처 패턴을 적용할 때 중요하게 생각하는 점domain 계층은 비즈니스 로직을 담기때문에 다른 로직이 섞여들어가지 않도록 하는게 중요합니다. 따라서 다른 계층, 또는 Third Party에서 import 된 것이 있는지 여러번 검토하였습니다. |
Beta Was this translation helpful? Give feedback.
-
𝟏. 아키텍처 및 폴더링
Screen:사용자와 상호작용하는 UI 컴포넌트를 정의. Component:공통적으로 사용하는 UI 요소를 재사용 가능하게 작성.
𝟑. 아키텍처 패턴을 적용할 때 어려웠던 점과 해결 |
Beta Was this translation helpful? Give feedback.
-
아키텍처를 분리하며 제가 가장 중요하게 생각하는 원칙은 모호함이 없어야 한다는 점입니다. 어떤 파일이 여러 패키지에 속할 수 있다면 패키징이 제대로 이루어진 것인지 다시 고민해 볼 필요가 있다고 생각합니다. 또한 data 레이어는 데이터의 원 출처에 접근한다는 역할을 가진만큼, 그 출처가 remote인지 local인지 명확하게 분리하는 것이 중요하다고 생각합니다. 따라서 저는 이를 명확히 하기 위해 local과 remote를 명시적으로 분리하는 것을 선호하며, 이에 맞춰 domain 레이어의 경우, 대부분 비즈니스 로직을 담당합니다. 저는 요즘에는 발생할 수 있는 모든 예외를 domain 레이어에서 구분하여 사용하는데, 커스텀 예외 클래스를 정의하여 비즈니스 로직에 대한 결과를 presentation까지 보내주는 방식을 고안하여 사용하고 있습니다. |
Beta Was this translation helpful? Give feedback.
-
사용한 아키텍처
폴더링
레이어별 구성 요소의 책임 아키텍처 적용 시 신경쓰는 부분, 어려웠던 부분 |
Beta Was this translation helpful? Give feedback.
-
어려웠던 점:
해결방법:
|
Beta Was this translation helpful? Give feedback.
-
1. 아키텍처
2. 레이어 별 구성요소의 책임
3. 아키텍처 구현시 알게된 꿀팁이나 어려웠던점의존성을 가지는 건지 아닌지 헷갈리는 경우가 많았는데 종명님의 조언으로 import문을 보고 각 계층에서 의존성 방향이 잘못되는 경우를 쉽게 알 수 있게 되었습니다. 저는 어려웠던점이 너무 많았지만 그중 제일 고민을 했던 것은 presentation 계층에서 어떻게 dataSource의 의존성을 없앤체로 통신을 할 수 있을지가 고민이었습니다. 저는 예인님의 도움을 받아 원래는 viewmodel의 인자로 repositoryimple을 인자로 받는 usecase를 넣었었다가 repository에서 static repository구현체를 만드는 함수를 선언해 viewmodel의 인자로 |
Beta Was this translation helpful? Give feedback.
-
1. 아키텍처
2. 레이어 별 구성요소의 책임
3. 아키텍처 구현시 주의할 점레이어 간 의존성은 반드시 규칙을 따라야 하며, Presentation Layer가 Data Layer를 직접 참조하지 않도록 주의 |
Beta Was this translation helpful? Give feedback.
-
1. 아키텍처 및 폴더링Clean Architecture
각 레이어 별 구성요소의 책임
주의할 점import 문을 확인하며 레이어 간 의존성 방향이 잘못되지 않았는지 확인하기 |
Beta Was this translation helpful? Give feedback.
-
🏛️ 아키텍처 및 폴더링Clean Architecture를 사용했습니다.
💭 각 레이어 별 구성 요소의 책임1. data데이터 생성, 저장, 변경 방식을 결정하는 규칙 등의 비즈니스 로직을 포함하는 레이어로 Repository Pattern을 이용해 여러 개의 데이터소스를 각각 포함할 수 있는 Repository interface를 구현했습니다. 파일, 네트워크 소스, 로컬 DB와의 소통과 같은 데이터 작업을 위해 앱과 시스템 간의 다리 역할을 하는 DataSource를 해당 레이어에 구현했습니다. 2. domain복잡한 비즈니스 로직이나 여러 ViewModel에서 재사용되는 간단한 비즈니스 로직의 캡슐화를 진행하는 레이어입니다. 하나의 기능을 담당하는 비즈니스 로직을 캡슐화하기 위해 UseCase를 사용했으며, 이는 실제 비즈니스 로직을 포함하는 부분입니다. 프레젠터나 뷰모델로부터 전달된 요청을 처리하고 데이터를 가공하여 반환합니다. 또한 Data layer와의 의존성을 분리하기 위해 Repository를 해당 레이어에서 구현했습니다. Repository는 외부 데이터 원본과의 상호 작용을 담당하는 부분으로 데이터를 가져오고 저장하는 작업을 수행합니다. 앱 내의 핵심 데이터 구조인 Entity를 domain > model에 구현했으며, 이는 DB나 네트워크를 통해 가져온 데이터를 객체로 변환한 상태입니다. 3. presentationUI Layer. 화면에 데이터를 "표시"하는 기능을 담당하는 레이어입니다. 사용자와 상호작용 또는 외부 입력으로 인해 데이터가 변할 때마다 반영하도록 업데이트 되어야 하는 부분입니다. 화면에 데이터를 렌더링하는 UI 요소인 Screen과 데이터를 보유하고 이를 UI에 노출, 비즈니스 로직을 처리하는 state holder로 분리됩니다.(ex. ViewModel) 주요 원칙
🤔 아키텍처 패턴을 적용 시 중점적으로 생각하는 부분요즘 특히 신경쓰는 부분은 아키텍처 패턴을 "얼머나 엄격하게 적용해야 하는가"입니다. 저번 세미나 때 토론했듯, 패키징 방식이나 구현 위치/방법 등은 개발자의 취향, 고려하는 확장 기술이나 기능의 범위에 따라 다릅니다.
사실 클린 아키텍처라는 건 "따라야 하는 스타일"이 아니라 "지향해야 할 규칙"이라는 말이 기억에 남는데요. 언제나 팀원들과 아키텍처에 대해 확실히 이해하고 우리만의 컨벤션을 정한 뒤 프로젝트를 수행하는 것이 좋겠구나.. 를 최근에 많이 느꼈서요! |
Beta Was this translation helpful? Give feedback.
-
아키텍쳐
레이어별 구성요소의 책임
어려웠던 점
|
Beta Was this translation helpful? Give feedback.
-
data domain feature 데이터 정제 책임의 명확한 분리 아키텍처 구현시 주의할 점
|
Beta Was this translation helpful? Give feedback.
-
🗂️ 1. 아키텍처 및 폴더링
💪🏻 2. 각 레이어 별 구성 요소의 책임
⭐️ 3. 아키텍처 패턴을 적용할 때 중요하게 생각하는 점Domain 레이어가 하는 일이 무엇인지, 어떤 점에 유의하여 의존성 관리를 해야 하는지가 매우 중요하다고 생각합니다. 이에 따라 많이들 하는 실수 중 하나인, Repository에서는 절대 dto를 바로 사용하면 안 된다는 점이 중요한 것 같습니다. 반드시 mapper 함수를 통해 model을 생성하여, Repository에서는 이 model을 활용해야 합니다. (model은 Domain 레이어의 entity 폴더 안에 위치시켰습니다.) |
Beta Was this translation helpful? Give feedback.
-
아키텍처
레이어별 구성요소 책임data: 아키텍처 적용간 중요하게 생각하는 점
|
Beta Was this translation helpful? Give feedback.
-
아키텍처 : 클린 아키텍처
각 레이어 별 구성 요소의 책임Domain Layer애플리케이션의 핵심 비즈니스 로직을 수행합니다. 애플리케이션의 비즈니스 규칙과 정책을 정의하고, 도메인 모델(Entity)과 비즈니스 유스케이스(Use Case)를 포함합니다. 도메인 레이어는 데이터 레이어나 프레젠테이션 레이어와의 직접적인 연결이 없어야 하며, 순수하게 비즈니스 로직만을 담당해야 합니다. Data Layer데이터 관련 모든 처리를 담당합니다. 데이터 소스로부터 데이터를 가져오고, 적절한 형태로 변환하여 도메인 레이어에 제공합니다. Network Layer네트워크 요청을 처리하는 로직을 포함합니다. API 호출을 관리하고, 네트워크 응답을 파싱하여 데이터 레이어에 전달합니다. Presentation Layer사용자 인터페이스와 상호작용을 관리합니다. MVI 패턴을 통해 상태, 이벤트, 사이드 이펙트를 관리하고, 사용자로부터의 입력을 처리하여 해당 이벤트를 모델로 전달합니다. 아키텍처 패턴을 적용하며 어려웠던 점과 이를 어떻게 해결했는지 경험안드로이드 경험이 많지 않았기 때문에 적용 시에 어떤 방식이 좋을지 고민이 많았어서 다른 사람들의 코드를 많이 참고하고 또한 공부하면서 진행했던것 같습니다. 나중에는 다른 잘하는 분들 처럼 저만의 커스텀된 패턴 구조 및 아키텍처를 사용하면 좋을 듯 싶습니다. 아직 해결했진않고 해결해 나가야될 문제 같습니다 ㅎㅎㅎ..🤣 |
Beta Was this translation helpful? Give feedback.
-
1. 폴더링org,sopt.and 2. 각 레이어 별 구성 요소의 책임core : 모든 레이어에서 사용되는 부분을 넣었습니다. 공통으로 쓰이는 컴포넌트를 여기에 넣었습니다. 3. 아키텍처 적용간 중요하게 생각하는 점저는 mapper를 만드는 것을 참 좋아하는데요..^^.. mapper를 활용하면 의존성을 명확히 분리할 수 있어 유지보수성이 향상될 뿐만 아니라, RepositoryImpl 클래스의 가독성 또한 크게 개선되는 장점떄문에 꼭 만들게 되는 것 같습니다. 이번 합동 세미나에서 아키텍처 패턴과 폴더 구조를 설정하는 과정에서 이러한 의존성 분리가 왜 중요한지, 그리고 이를 통해 어떤 이점이 있는지 더욱 깊이 이해할 수 있었습니다. |
Beta Was this translation helpful? Give feedback.
-
1. 폴더링
2. 각 레이어 별 구성 요소의 책임이전에 정리해둔 내용이 있어 이 내용으로 대체하겠습니다. 3. 아키텍처 적용간 중요하게 생각하는 점의존성도 물론 중요하고 각각의 역할을 충실히 하는 것도 중요하지만 제가 가장 중요하게 생각하는 부분은 |
Beta Was this translation helpful? Give feedback.
-
1. 폴더링 2. 각 레이어 별 구성 요소 책임 3. 아키텍처 패턴을 적용하며 어려웠던 점과 해결방법 |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
𝟏. 여러분이 사용하신 아키텍처가 무엇이며 어떤 식으로 폴더링 하였는지를 정리해주세요.클린 아키텍처
𝟐. 각 레이어 별 구성 요소의 책임이 무엇이라고 생각하며 아키텍처를 적용하셨는지 정리해주세요.core - 여러 패키지에서 사용되는 코드 𝟑. 아키텍처 패턴을 적용할 때 본인이 중점적으로 생각하는 부분이나 신경쓰는 부분이 있다면 공유해주세요.저는 domain layer가 다른 layer에 의존하지 않도록 많이 신경을 쓰는 것 같아요 |
Beta Was this translation helpful? Give feedback.
-
1. 클린 아키텍처
2. 각 레이어 별 구성 요소의 책임3. 신경쓰는 부분/어려웠던 점/해결한 경험각 레이어 계층 간의 관계, 그리고 한 레이어 계층 내부에서 요소들의 관계를 이해하고 또 각각의 역할을 이해하는 것이 어려웠습니다. |
Beta Was this translation helpful? Give feedback.
-
요기까지 필수 과제 마감! |
Beta Was this translation helpful? Give feedback.
-
1. 적용 아키텍쳐 및 폴더링
2. 각 레이어 별 구성 요소의 책임
3. 아키텍쳐 패턴 적용 시 중점적으로 생각하는 부분, 신경 쓰는 부분클린 아키텍쳐를 적용하는만큼 domain layer에 굉장히 신경을 많이 써야하지 않나 싶습니다. (깜빡했습니다 ,,! 지각 제출 죄송합니다 😭) |
Beta Was this translation helpful? Give feedback.
-
1. 적용 아키텍쳐클린 아키텍쳐
2. 각 레이어 별 구성 요소의 책임Data 레이어는 서버 통신과 데이터 처리를 담당하며, DTO 매핑을 통해 데이터를 Domain으로 전달합니다. 3. 어려웠던 점처음 클린 아키텍처를 적용하는 데 많은 시간이 걸렸습니다. 각 계층 간 책임 분리를 이해하고 구현하는 것이 어려웠고, 특히 코드의 흐름을 파악하는 데 시간이 많이 소요되었습니다. 하지만 결국 구조를 이해하고 책임을 분리하면서 코드 재사용성과 유지보수성이 높아졌음을 실감하게 되었습니다. (토론 과제 미제출을 잊고 있었네요ㅠㅠ 오늘 확인해서 바로 제출했습니다.. 죄송합니다 🥹) |
Beta Was this translation helpful? Give feedback.
-
🎤 토론 과제 - 아키텍처 레이어 구성 요소 별 책임이 무엇이라고 생각하시나요?
𝟏. 여러분이 사용하신 아키텍처가 무엇이며 어떤 식으로 폴더링 하였는지를 정리해주세요.
𝟐. 각 레이어 별 구성 요소의 책임이 무엇이라고 생각하며 아키텍처를 적용하셨는지 정리해주세요.
𝟑. 아키텍처 패턴을 적용할 때 본인이 중점적으로 생각하는 부분이나 신경쓰는 부분이 있다면 공유해주세요. 만약 없다면 아키텍처 패턴을 적용하며 어려웠던 점과 이를 어떻게 해결했는지 경험을 공유해주세요.
Beta Was this translation helpful? Give feedback.
All reactions