분류 전체보기

· Book
7. 아키텍처 요소 테스트하기 테스트 피라미드 비용이 많이 드는 테스트는 지양하고 비용이 적게 드는 테스트를 많이 만들어야 한다. 만드는 비용이 적고, 유지보수하기 쉽고, 빨리 실행되고, 안정적인 작은 크기의 테스트들에 대해 높은 커버리지를 유지해야 한다는 것이다. 💡 좋은 테스트의 속성(FIRST) F(Fast) : 빠르게 동작해라. I(Isolated) : 고립시켜라. R(Repeatable): 반복 가능해야 한다. S(Self-validating) : 스스로 검증 가능해야 한다. T(Timely): 적시에 사용해야 한다. 단위 테스트(Unit) 하나의 클래스를 인스턴스화하고 해당 클래스의 인터페이스를 통해 기능들을 테스트한다. 테스트 중인 클래스가 다른 클래스에 의존한다면 의존되는 클래스들은 moc..
· Book
6. 영속성 어댑터 구현하기 의존성 역전 코어의 서비스가 영속성 어댑터에 접근하기 위해 포트를 사용한다. 애플리케이션에 의해 호출될 뿐, 애플리케이션을 호출하지 않는다. 여기서 포트는 사실상 애플리케이션 서비스와 영속성 코드 사이의 간접적인 계증이다. 자연스럽게 런타임에도 의존성을 애플리케이션 코어에서 영속성 어댑터로 향한다. 영속성 어댑터의 책임 입력을 받는다. 입력을 데이터베이스 포맷으로 매핑한다. 입력을 데이터베이스로 보낸다. 데이터베이스 출력을 애플리케이션 포맷으로 매핑한다. 출력을 반환한다. 핵심은 영속성 어댑터의 입력 모델이 영속성 어댑터 내부에 있는 것이 아니라 애플리케이션 코어에 있기 떄문에 영속성 어댑터 내부를 변경하는 것이 코어에 영향을 미치지 않는다는 것이다. 포트 인터페이스 나누기 ..
· Book
5. 웹 어댑터 구현하기 의존성 역전 인커밍 어댑터는 애플리케이션 서비스에 의해 구현된 인터페이스인 전용 포트를 통해 애플리케이션 계층과 통신한다. 웹 어댑터(incomming adpter)란? 외부로부터 요청을 받아 애플리케이션 코어를 호출하고 무슨 일을 해야 할지 알려준다. 이때 제어 흐름은 웹 어댑터에 있는 컨트롤러에서 애플리케이션 계층에 있는 서비스로 흐른다 여기서 의존성 역전이란? 애플리케이션 계층은 웹 어댑터가 통신할 수 있는 특정 포트를 제공하고, 서비스는 이 포트를 구현하고, 웹 어댑터는 이 포트를 호출할 수 있다. 그럼 왜 어댑터와 유스케이스 사이에 또 다른 간접 계층을 넣어야 하는가? 애플리케이션 코어가 외부 세계와 통신할 수 있는 곳에 대한 명세가 포트이기 때문이다. 포트를 적절한 곳..
· Book
4. 유스케이스 구현하기 도메인 모델 구현하기 한 계좌에서 다른 계좌로 송감하는 유스케이스를 구현한다. Account 엔티티 모델링 입금과 출금을 할 수 있는 계좌를 의미 package com.book.cleanarchitecture.buckpal.account.domain.vo; public class AccountId { private final Long value; public AccountId(Long value) { this.value = value; } public Long getValue() { return value; } } package com.book.cleanarchitecture.buckpal.account.domain; import com.book.cleanarchitecture...
· Backend/Java
자바의 접근제어자(public, protected, private, private-package) 접근제어자란? 객체지향에서는 정보 은닉(data hiding)라는 개념이 있습니다. 사용자가 굳이 알 필요가 없는 정보를 사용자로부터 숨겨야 한다는 개념입니다. 최소한의 정보만으로 사용자가 프로그램을 사용할 수 있다는 장점이 있습니다. 즉, 개발자가 개발을 할 때 최소한의 메서드, 클래스만 알고 개발을 진행할수 있다는 점과 동일할 수 있습니다. 총 4가지의 접근 제어자를 자바에서는 지원해주는데 아래와 같습니다. public protected private-package(default) private 접근을 제어하는것이기 때문에 여기서 중요한건 접근을 어디까지 제어할것인가 입니다. 접근 범위 접근 제어자 같은..
· Book
3. 코드 구성하기 계층으로 구성하기 buckapl |--- domain | |----- Account | |----- Activity | |----- AccountRepository | |----- AccountService |--- persistence | |----- AccountRepositoryImpl |--- web | |----- AccountController 문제점 계층으로 코드를 구성하면 기능적인 측면들이 섞이기 쉽다. 애플리케이션의 기능 조각(functional slice)이나 특성(feature)을 구분 짓는 패키지 경계가 업다. 서로 연관되지 않은 기능들끼리 예상하지 못한 부수효과를 일으킬 수 있는 클래스들의 엉망진창 묶음으로 변모할 가능성이 크다. 애플리케이션이 어떤 유스케이스들..
· Book
2. 의존성 역전하기 단일 책임 원칙 정의 하나의 컴포넌트는 오로지 한 가지 일만 해야 하고, 그것을 올바르게 수행해야 한다. 컴포넌트를 변경하는 이유는 오직 하나뿐이어야 한다. 만약 컴포넌트를 변경할 이유가 오로지 한 가지라면 컴포넌트는 딱 한 가지 일만 하게 된다. 만약 컴포넌트를 변경할 이유가 한 가지라면 우리가 어떤 다른 이유로 소프트웨어를 변경하더라도 이 컴포넌트에 대해서는 전혀 신경 쓸 필요 없다. 현실은 컴포넌트 간의 의존성을 통해 너무나도 쉽게 변경할 이유라는 것이 전파된다. 어떤 컴포넌트의 의존성 각각은 이 컴포넌트를 변경하는 이유 하나씩에 해당한다. 전이 의존성(transitive dependency, 프로그램이 참조하고 있는 컴포넌트로부터 전의된 의존성)이라고 하더라도 말이다. 컴포넌..
· Book
1. 계층형 아키텍처의 문제는 무엇일까? 잘 만들어진 계층형 아키텍처는 선택의 폭을 넓히고 변화하는 요구사항과 외부 요인에 빠르게 적응할 수 있게 해준다. 바로 이게 아키텍처의 전부다. 전통적인 구조 맨 위의 웹 계층(UI)에서는 요청을 받아 도메인 혹은 비즈니스 계층에 있는 서비스로 요청을 보낸다. 서비스에서는 필요한 비즈니스로직을 수행하고, 도메인 엔티티의 현재 상태를 조회하거나 변경하기 위해 영속성 계층(Data Access)의 컴포넌트를 호출한다. 우리가 만드는 애플리케이션의 목적은 무엇인가? 우리는 보통 비즈니스를 관장하는 규칙이나 정책을 반영한 모델을 만들어서 사용자가 이러한 규칙과 정책을 더욱 편리하게 활용할 수 있게 한다. 이때 우리는 상태(state)가 아니라 행동(behavior)을 중..
React의 defaultValue vs value 🧐 Input의 값을 어떻게 변수에 저장할까!? Vue.js에서는 v-model 이라는 속성으로 쉽게 input의 값을 변수에 저장해서 사용할 수 있었다. React를 하면서 v-model과 같이 Input값을 어떻게 변수를 저장할 수 있을지를 찾아본 결과 defaultValue와 value 라는 속성값이 나왔고, 둘의 차이를 비교해보기로 하였다. 참고로, onChange 이벤트를 이용해 직접 할당을 해줘야 하는 다른 점이 있지만, 지금 글과는 주제는 조금 다르기 때문에 아래 코드만 간단히 살펴보는것으로 하겠습니다. const [value, setValue] = useState(initialValue); const onChange: ChangeEvent..
5 Secret features of JSON.stringify() (JSON.stringify()의 5가지 비밀 기능) JavaScript 개발자들은 JSON.stringify() 메서드로 대부분 디버깅에 사용합니다. 그러나 console.log() 가 있어도 무슨 소용이 있을까요? // 사용자 객체 초기화 const user = { “name” : “Prateek Singh”, “age” : 26 } console.log(user); // [object Object] console.log 로는 원하는 결과를 인쇄하는 대 도움되지 않습니다. [object Object] 란 객체에서 문자열로의 기본 변환이기 때문에 이렇게 출력됩니다. 그래서 우리는 JSON.stringify() 를 사용해 변환한 다음 콘..
Seyun(Marco)
'분류 전체보기' 카테고리의 글 목록 (9 Page)