개발 일지
-
[실시간 채팅 서비스#4] API-Gateway개발 일지 2024. 10. 17. 13:27
API-Gateway API-Gateway는 MSA가 떠오르며 그와 함께 필요성에 의해 탄생한 솔루션이다.API서버 앞단에서 모든 API 서버들의 엔드포인트를 단일화하여 묶어주고, API에 대한 인증/인가 기능에서 부터 메세지에 따라서 여러 서버로 라우팅 하는 고급기능 까지 많은 기능을 담당할 수 있다. API-Gateway는 다양한 활용 방법이 존재한다.이 글에서 모두 설명하지는 않고, 실제로 Potatalk 프로젝트에서 적용한 방식과 그 외의 기능을 간략히 소개한다.API 서버들의 엔드포인트를 단일화 MSA 아키텍처는 각각의 마이크로서비스 마다 별도의 엔드포인트에서 실행된다.API-Gateway를 적용하지 않을 경우, 클라이언트는 그러한 마이크로서비스의 정보를 확인해야 하는 번거로움이 있다.API-G..
-
[실시간 채팅 서비스#3] WebSocket + STOMP + Pub/Sub으로 실시간 채팅 구현개발 일지 2024. 10. 7. 20:42
WebSocket WebSocket은 HTTP와 같은 통신 규약이다.단방향 연결을 지원하는 HTTP와 호환되어, 실시간 양방향 연결을 지원한다.실시간으로 데이터 교환이 빠르게 이루어지는 서비스에서 주로 사용된다. WebSocket만으로도 저수준의 채팅 서비스를 개발하는 것은 가능하다.하지만 메시징 패턴(Pub/Sub)이나 고수준 핸들링을 구현할 클래스는 부재하다.간단히 말하면 채널이 단 한 개만 존재하며, 서버가 세부적인 핸들링을 구현하기 어렵다. STOMP STOMP는 위와 같은 WebSocket의 부족한 점을 보충해 주는 메세지 브로커이다.클라이언트에게 진입점을 제공하여 채널을 구독(SubScribe)하거나 그 채널에 메시지를 발행(Publish)하는 과정을 관리하고, 발행된 메시지를 구독자들에게 전..
-
[실시간 채팅 서비스#0] 타임라인개발 일지 2024. 9. 20. 15:01
프로젝트 링크 이번엔 다소 느슨하게 프로젝트를 진행할 예정이었던지라 타임라인을 올릴 생각이 없었지만, 지난 1달간 생각 이상으로 꾸준히 진행한 것이 뿌듯하여 업로드를 한다.1차적인 기능은 완성되었으나 API-Gateyway를 통한 인증/인가와 코드 리팩터링, 테스트 범위 확대 등 해야할 것들이 많이 남았다.개인적으로 타임라인은 계속 갱신하겠지만, 이 글이 갱신될지는 앞으로의 내 부지런함에 달렸다... 08.19주제 선정프로젝트 초기 구상도기능 목록 설계기능 마인드맵ERD 설계유저 플로우 차트 설계08.20WebSocket, STOMP, Pub/Sub 기술 이해WebSocket 통신 구조 학습 및 설계프로젝트 구조화08.21API 다이어그램 설계(1/3)Member-Service 회원가입 API 구현08...
-
[실시간 채팅 서비스#2] 설계개발 일지 2024. 9. 1. 16:56
요구 사항카카오톡 같은 경우 번호나 아이디를 알고 있다면 친구가 아니더라도 1:1 채팅방을 생성할 수 있으며, 요청-승인 과정도 필요하지 않다.디스코드와 같은 경우 아이디를 알고 있더라도 설정에 따라 친구 요청-승인이 필요하다.상대적으로 카카오톡은 개방적이고, 디스코드는 보수적인 정책을 띄고 있다고 볼 수 있다.이런 성격은 단체 채팅방에서도 느낄 수 있다.카카오톡은 초대자가 주도적으로 채팅방에 초대를 하면, 피대상자는 선택의 여지 없이 채팅방에 입장한다.디스코드는 초대를 받더라도 피대상자가 승인/거절을 선택할 수 있다.만약 카카오톡과 같은 개방적인 설계를 한다면 난이도가 쉬워지고 유저 플로우가 간단해 지겠지만, 내 성격 상 디스코드와 같이 피대상자가 주도적인 애플리케이션이 더 마음에 들었기에 위와 같이 ..
-
[실시간 채팅 서비스#1] 개인 프로젝트 시작개발 일지 2024. 8. 21. 15:46
프로젝트 주제선정이번 프로젝트의 주제는 오래 전부터 관심 있었던 실시간 채팅 애플리케이션이다.해당 주제에 관심을 갖게 된 계기는 다음과 같다.채팅 서비스를 경험하지 못한 사람을 찾기 힘들 정도로 대중적인 서비스이다.주 기능이 아니더라도, 많은 도메인에서 보조 기능으로서 사용될 수 있다.아직 미경험인 Pub/Sub 통신 구조를 경험하기에 적합한 도메인이다.이번 프로젝트 또한 가벼운 범위의 애플리케이션으로 설계 할 것이며, 채팅과 회원 기능을 제외한 부가 기능은 아직까지 생각하고 있지 않다. 이전 프로젝트와 마찬가지로 MSA 구조를 채택해 지속적인 성장과 확장이 가능하도록 만들 것이다.범용성이 넓은 도메인인 만큼, 이전 프로젝트들과의 통합도 긍정적으로 보고 있다.프로젝트를 통해 이루고자 하는 것실시간 통신설..
-
[배달 중계 서비스#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%를 지향해야 한다.극단적으로 테스트는 모든 프로덕션 코드를 커버해야 한다. 위와 같은 대화는 내가 실제로 현업 개발자 혹은 그 지망생들과 대화하며 직접 들은 내용이다...