코드 작성API 게이트웨이와 주울 구현스프링 부트 애플리케이션이 주울 게이트웨이로 동작하게 하려면 메인 클래스에 @EnableZuulProxy 애노테이션을 추가하기만 하면 된다. 주울은 프로퍼티 파일에서 라우팅을 구성할 수 있어 매우 쉽고 간편하다. 참고)책이 워낙 오래돼서(2019년이면 벌써 5년 전...) 책 속 예제를 적용하기 위해 이런저런 수정을 해줘야 했다! 일단 마이크로서비스 아키텍처를 이해하는 게 중요해서, 자바와 스프링 부트 버전을 낮춰서 예제가 일단 돌아갈 수 있게 변경해 주었다. 스프링 부트 3에서는 Zuul 대신 Spring Cloud Gateway를 사용하는 방법을 추천하고 있다. 스프링 부트 2로 변경하고, 해당 버전에 맞는 Spring Cloud 버전을 설정해 주었다. Gradl..
오늘!!! 아기다리고기다리던 키크론 키보드가 도착해서, 그 키크론 키보드로 작성해 보는 글~~~ 이것저것 알아보면서 알게 된 것들이 많은데, 시간이 지나면 까먹을 것 같아서 기억이 남아있을 때 기록해보려고 한다. 키보드 히스토리갑자기 키보드에 꽂혔던 이유는, 지금 사용하고 있는 키보드가 오타가 너무 많이 나고 사용감이 진짜 개구렸기 때문... 사실 사용감이 좋지 않은 건 알고 산거라서 별로 타격은 없었고ㅋㅋㅋ 캐릭터 블루투스 키보드 치고는 진짜 생각보다 괜찮아서(반전) 꽤 오랫동안 사용하긴 했었다. 집에 마땅한 대체품이 없기도 했었고, 좋아하는 캐릭터가 가미된 키보드라 덕후의 마음으로 사용했다. 다만 손가락에 닿는 플라스틱 촉감이 조금 별로였고, 최근 블로그 글을 자주 작성하게 되면서 오타에 예민해진 것..
소개이전 장은 끝났지만 아직 마무리하지 못한 일이 있다. 세 번째 사용자 스토리를 완성하고, 사용자가 게임 진행 상황을 볼 수 있게 하는 작업이다. 이 작업을 아직 끝내지 않은 이유는 더 나은 마이크로서비스 아키텍처를 구축하기 위해서이다. 이를 위해서는 시스템 UI를 새로운 서비스로 뽑아내서 독립적인 부분으로 만들고, 기존의 곱셈, 게임화 서비스와 상호작용을 하도록 만들어야 한다. UI를 따로 두고 마이크로서비스와 통신한다면 환경은 더욱 복잡해진다. 하지만 이게 마이크로서비스이다! 장점도 있지만 그만큼 복잡해진다. 이번 장에서는 두 개의 서비스를 호스트명과 포트로 호출하는 UI부터 시작한다. 그러면 서비스끼리 강하게 결합되어 인프라를 확장해도 시스템은 확장할 수 없으며 유지 관리가 매우 어려운 시스템이 ..
게임화 마이크로서비스 살펴보기개요새로운 프로젝트를 생성한다.+ JPA 의존성도메인 추가게임 도메인 모델은 다음과 같이 구성된다.ScoreCard: 주어진 사용자가 주어진 시간에 획득한 점수의 모델Badge: 게임에서 사용하는 모든 배지의 목록BadgeCard: 특정 사용자가 특정 시간에 획득한 배지LeaderBoardRow: 리더보드(다른 사용자와 종합 점수가 표시)에서의 위치GameStats: 주어진 사용자의 점수와 배지, 하나의 게임 결과 또는 점수와 배지 합산에 사용될 수 있음카드(점수와 배지)는 획득한 시간 정보를 포함한다. 게임 결과는 하나 이상의 ScoreCard와 하나 이상의 BadgeCard를 포함한다. 리포지토리 추가엄밀히 말하면 저장해야 할 모델은 사용자의 점수와 얻은 배지이다. 하나의..
작은 일체형 접근법앞서 하나로 배포 가능한 애플리케이션을 완성했다. 이 애플리케이션은 작은 일체형이지만, 처음부터 전체 시스템을 설계하고 그 안에서 서로 다른 컨텍스트 또는 바운디드 컨텍스트(bounded contexts)를 정의한 후 동시에 개발을 진행할 수도 있었을 것이다. bliki: Bounded ContextDon't try to build a single, unified model for a large domain. Instead DDD advises us to divide such a domain into many bounded contexts with explicit relationships between them.martinfowler.com이런 전략이 좋을 수도 있다! 처음부터 여러 ..
2. 3 계층 스프링 부트 애플리케이션 2 by happyprogfrog · Pull Request #3 · happyprogfrog/mallang작업 내용 새로운 요구사항 구현 데이터 모델 생성, 엔티티 구현 리포지토리를 만들어 데이터 저장 특정 사용자의 최근 5개의 답안을 조회하여 제공하는 작업 진행 새로운 엔드포인트 노출 js 파github.com 사용자 스토리 2최근에 제출한 답안을 보고 싶어요! 그러면 시간이 지나면서 제 두뇌가 얼마나 말랑해졌는지 알 수 있겠죠? 요구사항을 보니, 사용자의 답안을 유지하기 위한 데이터 스토리지가 필요함을 알 수 있다. 다음 단계에 따라 요구사항을 달성해 보자!MultiplicationResultAttempt 클래스의 인스턴스를 모두 저장한다. 그렇게 하면 나중에..
2. 3 계층 스프링 부트 애플리케이션 1 by happyprogfrog · Pull Request #2 · happyprogfrog/mallang작업 내용 도메인 설계, 비즈니스 로직 레이어, 프레젠테이션 레이어, 프론트엔드 개발 TIL @SpringBootTest를 남용하지 말 것 TDD 흐름 블로그 글 링크 [개인프로젝트/말랑말랑] 2. 3 계층 스프링 부트github.com 다층 아키텍처다층 아키텍처(multi-tier architecture)는 애플리케이션을 여러 계층으로 나눈 아키텍처이다. 운영 환경에 적합하기 때문에 대부분의 상용 애플리케이션이 다층 아키텍처로 설계되어 있다. 그중 계층을 3개로 나눈 3 계층 구조는 가장 인기 있는 아키텍처로서 웹 애플리케이션을 설계할 때 많이 사용된다.클라..
개요Java에서 Random().nextInt() 메서드는 Java의 java.util.Random 클래스에 속한 메서드로, 주어진 범위 내에서 임의의 정수를 생성하는 데 사용된다. Random 클래스는 난수 생성기를 제공하여 다양한 난수를 생성할 수 있게 해 준다. nextInt() 메서드의 사용법은 크게 두 가지로 나눌 수 있다. nextInt() 메서드 - 매개변수 없음이 메서드는 범위 제한 없이 임의의 정수를 생성한다. 생성된 정수는 int 자료형의 모든 범위 내에서 무작위로 선택된다.import java.util.Random;public class Main { public static void main(String[] args) { Random random = new Rando..
1. TDD 실습으로 손 풀기 by happyprogfrog · Pull Request #1 · happyprogfrog/mallang작업 내용 개발할 애플리케이션의 요구사항과 테스트 주도 개발 접근법을 알아봄 TDD로 간단한 스프링 부트 애플리케이션을 만들어봄 TIL TDD, BDD, Mock 객체 개념 복습 블로그 글 링크 [개인프로젝github.com 요구사항사용자가 매일 계산 능력을 훈련하는 애플리케이션사용자가 페이지에 접속할 때마다 두 자릿수 곱셈을 보여준다.사용자가 계산한 결과와 닉네임을 입력한 후 데이터를 전송하면, 화면에 결과(성공 또는 실패)가 나타남간단한 게임 요소계산 결과가 맞을 때마다 얻는 점수로 사용자들의 순위를 결과 페이지에 보여줌 개발방식애자일 방식 기반으로 사용자 스토리(Us..