본문 바로가기

반응형

전체 글

Test-DrivenDevelopment : 테스트 주도 개발 테스트 주도 개발 도서를 읽으면서 TDD 개발 방법론을 익히고자 한다. 1부 화폐예제를 읽고 PG 결제 시스템의 결제 승인, 취소, 복합결제 기능을 샘플로 구현하면서 책에서 익힌 방법들을 적용해보았다. 카드결제, 계좌결제, 간편결제 객체는 Paymt라는 부모 객체를 상속받으며 주문서비스(OrderService)에서 PaymtType 인터페이스에 정의되어 있는 승인, 취소, 복합결제 기능을 간략하게 구현했습니다. 화폐의 통화 개념과 비슷하게 결제별 타입을 결제수단을 통해 카드, 계좌, 간편으로 구분되도록 했으며, 승인과 취소는 결제 금액을 +, - 처리하도록 구현했고 리스트로 여러결제를 받아 전체 결제금액을 세팅함으로써 복합결제 기능을 대신 표현했습니다. 책 설명과 동일하게 동치 비교 테스트, 결제승인, .. 더보기
MSA 가상머신, 컨테이너 VM VS 도커 VM은 각 게스트 OS가 따로 있어 커널, 라이브러리 전부 포함 성능 손실이 발생할 수 있고 이미지가 매우 커 배포, 부팅 속도가 오래걸린다. 그에 반면 컨테이너는 호스트 OS를 같이 쓰기 때문에 손실 위험성이 적으며 배포, 부팅속도가 매우 빠르다 개발 환경 그대로 다른 서버로 복제가 용이하며 컨테이너에는 애플리케이션 구동을 위한 라이브러리와 실행파일만 존재함으로 용량도 매우 작다. 도커는 컨테이너 생성시 필요한 요소들 도커 이미지에 모아두는데 이미지 내용은 여러개의 계층으로 된 바이너리 파일이다. 도커 컨테이너는 도커 이미지로 생성되며 격리된 시스템 자원과 네트워크를 사용할 수 있는 독립된 공간을 의미한다. Dockerfile로 이미지 생성을 자동화 할 수 있으며 빌드 명령어, 컨테이너.. 더보기
MSA 관심사 - 내부/외부 아키텍처 MSA는 여러 서비스간의 연계를 통해 시스템을 구축하는 SOA의 범주에 있다고 볼 수 있다. (SOA :통합 DB를 쓰면서 엔터프라이즈 서비스에서 모든 동작과 서비스를 제공하는 시스템을 의미함) MSA와 SOA의 가장 큰 차이는 저장소를 같이 쓰는지 각자 쓰는지이다. MSA를 구성하기 위해선 많은 시스템을 구축해야 된다. 각각의 레벨에서 기본적으로 구성해야되는 요소들이 패턴화되어 있고 각 영역의 패턴에 맞춰 사용할 플랫폼을 결정하면 된다. 보통 마이크로서비스 아키텍처를 정의할때 아래의 화면처럼 많이들 표현하고 있다. 마이크로서비스 빌드부터 시스템 구성에 대한 흐름을 아래 화면을 통해 살펴볼 수 있다. [참고자료 및 강좌] https://www.inflearn.com/course/%EC%8B%A4%EB%A.. 더보기
MSA 아키텍처 스타일 이벤트 기반 아키텍처 스타일 MSA의 기본이며 많이 사용되는 아키텍처는 이벤트 기반 아키텍처 스타일이다. 이벤트 기반 아키텍처 스타일은 확장성이 뛰어나고 고성은 애플리케이션 개발에 널리 쓰이는 비동기 분산 아키텍처다. 동기랑 비동기의 차이는 업무 처리 속도이다. 예를 들어 커피숍에 1명이 주문과 커피내리는 행위를 다 한다고 생각하면 1시간 동안 처리할 수 있는 주문량은 매우 적을 것이다. 하지만 주문자와 바리스타를 따로 고용하여 서로 맡은 업무만 처리하도록 하면 훨씬 많은 양의 주문를 받을 수 있고 손님이 몰릴때 상황에 맞게 주문자를 늘리거나 바리스타를 늘려 모든 주문량을 소화할 수 있게 확장할 수도 있을 것이다. 이벤트 기반 아키텍처는 다른 아키텍처에 내장이 가능한다. 그 예로 이벤트 기반 마이크로서비.. 더보기
MSA 개념 마이크로서비스 개념이 나오게 된 배경 서비스 변경 빈도가 잦아지면서 변화된 비즈니스 환경에 민첩하게 대응할 수 있는 구조의 필요성이 높아지면서 그런 구조를 갖춘 아마존의 비즈니스 환경에 대한 관심을 갖게 되었다. 현재 아마존은 MSA 환경 덕분에 요구사항에 즉각적으로 대응할 수 있으며 그 서비스 변경 속도는 대략 11초 밖에 소요되지 않는다. MSA에 가장 기본이 되는 개념은 클라우드 인프라이다. 물리서버는 인프라를 구축하는데 많은 비용과 시간을 투자해야 된다. 하지만 클라우드 인프라는 신규 또는 구축되어 있는 인프라를 구성을 빠르게 진행할 수 있다. 그리고 클라우드 인프라의 또다른 장점은 사용량에 따라 리소스 확보가 가능하다는 점이다. 서버의 리소스를 확장하는 방법에는 두가지가 있다. 수직 확장, 수평.. 더보기
자바 플레이그라운드 with TDD, 클린코드 강좌 후기 Day 3 대표적으로 테스트하기 어려운 코드 1. 내부 API : Random, Shuffle, 날짜 2. 외부 세계 : 외부 Rest API, 데이터베이스 API 테스트 힘든 코드 리펙토링 방법 테스트하기 힘든 코드로 랜덤 값으로 자동자 이동에 대한 단위테스트 케이스를 예시로 보면서 어떻게 작성함으로써 테스트 코드 작성이 가능한지 설명해주셨다. 먼저 아래와 같은 코드는 테스트를 실행할때마다 다른 랜덤 값으로 실행됨으로 결과를 예측하기 어렵고 테스트가 성공한게 맞는지 판단하기 어렵다 다음과 같은 방법으로 코드를 개선할 수 있다. 1. Car 클래스의 move 메소드를 protected 접근자 제한으로 변경 아래와 같이 test 클래스에서 move 메소드를 오버라이딩함으로써 테스트가 가능하다. 2. Car 클래스의 .. 더보기
자바 플레이그라운드 with TDD, 클린코드 강좌 후기 Day 2 학습 목표 : TDD 기반으로 프로그래밍법 메소드 분리 + 클래스를 분리 & 점진적으로 리팩토링하는 경험을 학습하고자 한다. 경험할 객체지향 생활 체조 원칙 규칙 1: 한 메서드에 오직 한 단계의 들여쓰기만 한다. 규칙 2: else 예약어를 쓰지 않는다. 규칙 3: 모든 원시값과 문자열을 포장한다. 규칙 5: 줄여쓰지 않는다(축약 금지). 규칙 8: 일급 콜렉션을 쓴다. Clean Code 가이드 의미 있는 이름 의도를 분명히 밝혀라 그릇된 정보를 피하라 서로 흡사한 이름을 사용하지 않도록 주의한다. 유사한 개념은 유사한 표기법을 사용한다. 의미 있게 구분하라 인터페이스 클래스와 구현 클래스 인터페이스 이름은 접두어를 붙이지 않는 편이 낫다고 생각한다. 오히려 인터페이스를 ShapeFactory로 이름.. 더보기
자바 플레이그라운드 with TDD, 클린코드 강좌 후기 Day 1 학습 목표 : 넥스트스텝 강좌 중 TDD 교육을 들으면서 앞으로 매주 코딩 연습을 하고자 한다. 2️⃣ 숫자야구게임 구현 기능 요구 사항 기본적으로 1부터 9까지 서로 다른 수로 이루어진 3자리의 수를 맞추는 게임이다. 같은 수가 같은 자리에 있으면 스트라이크, 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 포볼 또는 낫싱이란 힌트를 얻고, 그 힌트를 이용해서 먼저 상대방(컴퓨터)의 수를 맞추면 승리한다. e.g. 상대방(컴퓨터)의 수가 425일 때, 123을 제시한 경우 : 1스트라이크, 456을 제시한 경우 : 1볼 1스트라이크, 789를 제시한 경우 : 낫싱 위 숫자 야구 게임에서 상대방의 역할을 컴퓨터가 한다. 컴퓨터는 1에서 9까지 서로 다른 임의의 수 3개를 선택한다. 게 임 플레이어는 컴퓨.. 더보기

반응형