본문 바로가기

자바 심화

(25)
MSA - 기초 2 MSA MSA - 기초 1개요추후 MSA를 사용한 프로젝트를 진행하기 앞서 MSA가 무엇이고 어떻게 사용하는지에 대해 배워보려고 한다.다만, MSA에 대한 이론부터 완벽하게 익히고 들어가기에는 너무 오래 걸리기 때문에eleunadeu.tistory.com 개요이전에 작성했던 MSA 기초에 이어서 SpringCloud의 주요 모듈의 사용법에 대해 배운 내용을 정리할 것이다. Spring Cloud 주요 모듈 및 사용 방법서비스 등록 및 디스커버리(Eureka)서비스 디스커버리(Service Discovery)분산 시스템에서 서비스 간 통신을 위해 각 서비스의 위치(주소와 포트)를 동적으로 찾을 수 있도록 하는 메커니즘이다.이를 통해 서비스들이 고정된 주소에 의존하지 않고, 확장성과 장애 복구를 유연하게 처..
MSA - 기초 1 개요추후 MSA를 사용한 프로젝트를 진행하기 앞서 MSA가 무엇이고 어떻게 사용하는지에 대해 배워보려고 한다.다만, MSA에 대한 이론부터 완벽하게 익히고 들어가기에는 너무 오래 걸리기 때문에 간단한 이론과 사용법을 배운 후 추후 필요한 부분에 대해 추가적인 학습을 진행하도록 할 것이다.MSA(Microservices Architecture)?마이크로서비스 아키텍처(MSA)는 애플리케이션을 여러 개의 독립적인 작은 서비스로 나누어 개발, 배포, 운영하는 소프트웨어 아키텍처 스타일로 각 서비스는 고유한 비즈니스 기능을 담당하며 서로 독립적으로 배포되고 관리될 수 있다. 특징독립성각 서비스는 독립적으로 개발, 배포 확장 가능한 서비스의 변경이 다른 서비스에 영향을 최소화함단일 책임 원칙각 서비스는 특정 비즈..
클린 코드 -2 클린 코드 1개요Java 단기심화 과정에서 첫 번째 팀 프로젝트가 마무리 되었다. 처음으로 모놀리식이 아닌 다른 아키텍처 구조(싱글 모듈 헥사고날)를 사용하다 보니 적응하는데 많은 어려움을 겪으면서 기eleunadeu.tistory.com 개요어제 작성한 클린 코드 1에 이어 클린 코드를 작성하기 위한 나머지 원칙들에 대해 배우고 프로젝트 리팩토링에 적용해 보는 과정을 가질 것이다. 클린 코드를 작성하기 위한 원칙7. 클래스의 최소화클래스 역시 함수와 마찬가지로 간결하게 작성하는 것이 중요하다. 함수는 물리적 크기를 측정했다면 클래스는 몇 개의 역할 또는 책임을 갖는지를 척도로 활용하며, 단일 책임 원칙(SRP)에 따라 1가지 책임만을 가져야 한다. 요약 글만으로는 이해하기 해당 부분에 대해 좀 더 찾아..
클린 코드 1 개요Java 단기심화 과정에서 첫 번째 팀 프로젝트가 마무리 되었다. 처음으로 모놀리식이 아닌 다른 아키텍처 구조(싱글 모듈 헥사고날)를 사용하다 보니 적응하는데 많은 어려움을 겪으면서 기능 개발에 많은 시간을 투자하지 못했고, 겨우 겨우 완성한 기능 코드를 리팩토링할 시간도 없었다. 그래서 다음 프로젝트까지 어느 정도 시간이 있기 때문에 클린 코드에 관한 글을 보면서 최대한 클린 코드의 형태를 지키도록 내가 맡은 부분을 리팩토링하는 것으로 클린 코드에 대해 배워볼 것이다. 얼마나 적용할 수 있을지는 모르겠지만 앞으로 꾸준하게 연습해 나가면 자연스럽게 되지 않을까 생각한다. Clean Code?클린 코드란 쉽게 이해할 수 있고, 유지보수하기 쉬우며, 확장 가능하도록 작성된 코드를 의미한다.클린 코드는 개..
페이지네이션 Offset vs Cursor 개요팀 프로젝트에서 주문관리 시스템을 개발했는데 각종 정보에 대한 조회 기능이 필요했고, 프로젝트 요구사항에 QueryDSL 등을 활용한 pagination이 필요했다. Pagination(페이지네이션)?대량의 데이터를 효율적으로 나누어 제공하는 방법으로, 주로 웹 애플리케이션에서 한 번에 적절한 양의 데이터를 클라이언트에 제공하기 위해 사용된다.이는 사용자가 데이터를 탐색하거나 검색 결과를 스크롤할 때 유용하다. 페이지네이션은 offset 기반과 cursor 기반 2가지가 있다. Offset 기반 페이지네이션개념: 요청 시 특정 위치(offset)부터 지정한 개수(limit)의 데이터를 가져오는 방식SELECT * FROM table LIMIT 10 OFFSET 20 (20번째부터 10개 데이터 반환)..
결제 기능 구현 개요주문 배달 관리 시스템에서 주문/결제 부분을 개발하게 되었고 주문에 대한 결제를 어떤 식으로 구현할 지에 대해 고민해 보았다. 1. 주문이 생성되면 해당 주문의 정보를 토대로 결제 정보를 만들고 저장한다.고객의 주문이 들어오면 해당 주문을 가지고 Payment(결제 정보)를 구현하고 DB에 저장했다.Payment에는 주문 식별값(order_id), UUID(외부로 노출할 Unique 컬럼), 결제 비용(amount), 결제 상태(대기, 완료, 취소, 실패), 결제 종류(카드, 외부 결제 등)이 저장된다.2. 결제 상태를 활용하기.초기 API 명세서를 만들 때 결제 관련 API는 하나로 만들고 주문 부분부터 개발을 시작했다.결제 상태(대기, 완료, 취소, 실패)에는 여러 가지가 있는데 주문 API가 하..
PostgreSQL 기초 개요프로젝트에서 평소 사용하던 MySQL 대신 PostgreSQL을 DB로 사용하도록 요구 사항이 있었기 때문에 PostgreSQL에 대한 간단한 사용법을 배우기로 했다. PostgreSQL?객체-관계형 데이터베이스 시스템(ORDBMS)으로 다른 RDBMS와는 다르게 비관계형 및 관계형 데이터 유형을 모두 지원한다. POSTGRES는 1970년대 초에 시작된 오픈 소스 SQL 관계형 데이터베이스 프로젝트인 INGRES의 후속으로 1986년에 처음 개발되어 1994년 SQL에 대한 지원을 추가한 후 PostgreSQL이 탄생했다. 기능 및 제한RDBMS가 제공하는 기본적 기능인 트랜잭션과 ACID(Atomicity, Consistency, Isolation, Durability) 외에도 많은 기능을 지원하..
아키텍처(Architecture) 개요프로젝트를 구성함에 있어 아키텍처는 필수 요소이며 개발에는 다양한 아키텍처가 활용된다.이번 팀 프로젝트를 진행함에 있어 기존에 사용하던 모놀리식 아키텍처가 아닌 유사 헥사고날 아키텍처 구조를 사용해 프로젝트를 구성하게 되어 적응에 어려움을 겪었고, 왜 이런 어려운 구조를 사용해야 하는지 간단하게 배워보려고 한다. Architecture 란?영어 단어로 '건축학'이라는 뜻으로 내용을 풀어서 살펴보면 다음과 같다.시스템 구성 및 동작 원리를 나타내는 것구성 요소 간의 관계 및 시스템 외부 환경과의 관계를 묘사하는 것시스템 구성 요소에 대한 설계 및 구현을 지원하는 수준을 기술하는 것요구 사양 및 시스템 수명 주기를 고려하는 것시스템의 전체적인 최적화를 목표로 하는 것 좋지 않은 디자인을 가진 소프트웨어는..