전체 글
-
[배달 중계 서비스#6] Zipkin과 OpenTracing개발 일지 2024. 7. 20. 17:24
OpenTracing을 적용하는 이유모놀리식 아키텍처 서버와는 다르게, MSA 아키텍처 구조의 서버는 요청으로 인해 생기는 작업을 하나의 쓰레드가 담당하지 않는 경우가 빈번하다.이로 인해 로그 또한 각 서비스로 분산되기 마련이다.이렇게 분산 된 로그는 OpenTracing의 도움 없이는 추적하기가 굉장히 어렵다.트레이싱 기술을 적용하면 traceId를 통해 검색과 식별을 할 수 있고, 각 서비스들의 호출 순서를 타임라인과 함께 볼 수 있어 에러가 발생한 구간도 식별이 가능하다.더 자세한 내용은 아래의 글에서 확인할 수 있다.https://engineering.linecorp.com/ko/blog/line-ads-msa-opentracing-zipkin LINE 광고 플랫폼의 MSA 환경에서 Zipkin을..
-
[배달 중계 서비스#5] Google Java Format 자동화개발 일지 2024. 7. 19. 15:45
Google Java Format 이란Google에서 Java 코드를 일관되고 읽기 쉽게 작성하기 위해 만든 코딩 스타일 가이드이다.그 목적은 코드의 가독성을 높이고, 팀 간의 코드를 일관성 있게 유지하는 것이다. 코드 스타일 가이드 중에서도 Google Java Format은 다소 엄격하고 제한적인 위치에 있으며,반대로 그러한 이점 덕분에 일관성을 유지하기 쉽기 때문에 대표적으로 사용되고 있다.Google Java Format 사용법대부분의 경우 intellij-java-google-style.xml 파일을 다운 받아 intellij에 로드하는 방식을 사용한다.(검색하면 상단에 나오는 블로그를 쭉 훑어 봐도 모두 이 방식을 소개하고 있다.) 그러나 jetBrain 의 플러그인을 다운 받으면 훨씬 간편하..
-
[배달 중계 서비스#4] Jacoco 도입과 코드 커버리지개발 일지 2024. 7. 18. 22:12
https://tangpoo.tistory.com/172 1. 단위 테스트의 목표1.1 단위 테스트의 현황 : 테스트는 프로젝트가 크고, 오래 진행될 수록 나타나는 엔트로피(무질서)를 제어하는 안전망 역할을 한다. 사실상 일회성으로 사용하는 프로젝트가 아tangpoo.tistory.com더보기코드 커버리지는 좋은 부정지표이자 나쁜 긍정지표이다. ( - 단위테스트 1장 )테스트 커버리지에 대한 나의 생각주변 이야기를 듣다 보면, 생각보다 테스트 커버리지에 대해 기계적인 답을 내놓는 경우가 많다는 생각이 든다. 서비스 계층은 커버리지가 100%를 지향해야 한다.극단적으로 테스트는 모든 프로덕션 코드를 커버해야 한다. 위와 같은 대화는 내가 실제로 현업 개발자 혹은 그 지망생들과 대화하며 직접 들은 내용이다...
-
[배달 중계 서비스#3] Spring Cloud 버전 충돌과 Test Context Load 이야기개발 일지 2024. 7. 16. 00:38
기본적으로 자질구레한 에러 해결 과정은 블로그에 업로드 하지 않고 있지만, 하루의 절반 이상을 상실한 허탈감에 이렇게 글을 작성하게 되었다.@DataRedisTest를 이용해 테스트를 하던 중에 버전 충돌 발생NoClassDefFoundError: org.springframework.util.SocketUtilsutil.SocketUtils는 Spring 5.x 시리즈에서 사용되다가 6.x에서 제거된 클래스다.즉, Spring Boot의 버전과 Spring Cloud의 버전이 맞지 않아 생긴 에러.현재 사용하고 있는 Spring Boot 3.x.x 버전에선 Spring Cloud를 2023.0.0 이상 사용해야 한다.동시에 발견한 사실인데, 더 이상 OpenTracing에 Sleuth + Zipkin을 ..
-
[배달 중계 서비스#0] 타임 라인개발 일지 2024. 7. 12. 14:33
프로젝트 링크 07.02프로젝트 시작프로젝트 목표 설정주제 선정07.04요구 사항 정리ERD 설계기능 마인드맵상태 다이어그램 설계프로젝트 초기화07.05Gradle 파일 설정Integeration 테스트 용 sourceSet과 Jacoco task 설정Issue와 PR 연동 법 확인DTO 패턴을 사용하지 않는 프로젝트에 대한 고민07.06zipkin, sleuth를 위한 Gradle파일 Spring Cloud 의존성 설정Delivery-info YML 파일 설정Delivery-info 구조화MongoDB 연관 관계 연결 법 학습리액티브 프로그래밍 추가 학습.subscribeOn(Schedulers.boundedElastic())subscribeOn : 데이터의 흐름을 시작하는 지점Schedulers : ..
-
[배달 중계 서비스#2] 설계개발 일지 2024. 7. 4. 17:26
요구 사항 정의요구 사항 정의는 보통 클라이언트, 비즈니스 담당자, 소프트웨어 아키텍트등의 외부 직군이 개발자에게 전달하는 문서이다.위에 작성한 요구 사항은 극히 간략화된 요구 사항이다.간략히 작성한 이유는 개발자인 나 혼자서 진행하는 프로젝트이니 Validation 정책과 중복되는 부분을 생략하고자 하는 의도와, 처음부터 완성된 형태의 서비스를 개발하는 것이 목적이 아니기 때문이다.ERD요구 사항을 토대로 테이블을 도출하여 ERD를 설계한다.서비스의 범위가 크지 않고, MSA 아키텍처의 특성 상 굉장히 단순한 구조로 만들 수 있었다.만약 복잡한 구조의 프로젝트여서 테이블을 도출하기 어렵다면, 요구 사항에서 명사를 나열해 보거나와이어 프레임을 만들며 부족했던 정보를 보충할 수 있다.여기서 잠깐 RDBMS..
-
Java 9~17 까지의 변화 정리Java 2024. 7. 3. 20:35
Java 9컬렉션 팩토리 메서드(불변 컬렉션)List.of()Map.of()Set.of()기존의 방식List before = Arrays.asList(1, 2, 3);orList nums = new ArrayList();nums.add(1);nums.add(2);nums.add(3); 위 방식은 내부적으로 불필요한 객체 할당으로 인한 성능 문제,혹은 코드가 길어지는 문제가 있었다.of() 메서드를 통해 간편한 컬렉션 생성이 가능해졌다.이렇게 생성된 객체는 불변 값을 가진다. Arrayscompare(a, b) : 두 배열의 논리적인 순서 비교mismatch(a, b) : 두 배열의 원소가 맞지 않는 첫 index 반환Java 10var 로컬 변수 타입 추론컴파일러가 변수를 초기화하는 시점에 변수의 타입을..
-
[배달 중계 서비스 #1] 개인 프로젝트 시작개발 일지 2024. 7. 2. 17:32
프로젝트 주제 선정이전에 진행했던 eCommerce 프로젝트는 유저의 가입부터 상품 결제까지의 서비스를 제공하는 프로젝트였다. 이후로 더욱 학습을 이어나가면서 개선 할 점이 선명하게 보이게 됐지만,해당 프로젝트를 이어나가기 보다는 새로운 프로젝트를 진행하고자 마음을 먹었다.그러면서도 완전히 새로운 프로젝트 주제 보다는, 이전 프로젝트와 연결고리가 이어져 하나의 거대한 서비스를 구축할 수 있다면 이전의 경험들도 좋은 시너지를 낼 수 있을 것이라 느꼈다. 그렇게 정하게 된 주제는 회원이 상품을 주문한 이후의 프로세스를 담당할배달 중계 서비스이다.배달 중계 서비스는 상품을 주문한 회원, 상품을 파는 상점, 배달 대행 업체간의 상호작용을 중계하는 서비스다. 프로젝트를 통해 이루고자 하는것 이번 프로젝트를 통해..