모듈식 모놀리스와 헥사고날 아키텍처로 구성된 Nearby 서버 구조 분석하기
·
Back-end/Architecture
아키텍처 선택 이유SOPT에서 세미나, 솝커톤, 합동 세미나 모두 모두 레이어드 아키텍처를 사용해왔다. 하지만 이번 AppJam에서는 새로운 구조를 직접 경험하고, 기존 방식과 어떤 차이가 있는지 알아보고 싶었다.처음에는 어떤 아키텍처가 있고 어떤 걸 선택해야 하는지 또 각 아키텍처가 어떤 특징을 가지는지 충분히 알지 못 하였다. 이후 서버 리드가 제안한 모듈식 모놀리스와 헥사고날 아키텍처의 도입 배경을 듣고, 새로운 구조를 학습할 좋은 기회라고 생각해 해당 아키텍처를 적용하게 되었다.아키텍처를 이해하고 프로젝트 구조를 파악하는 과정에서 가장 많은 도움을 받은 글은 다음 글이었다.미리 회고하자면아키텍처를 선택한 이후 가장 큰 문제는 이를 실제 코드로 구현하는 방법이었다. 팀 내에 모듈식 모놀리스와 헥사고..
Appjam 전 간단한 프로젝트를 연습하려고 했었다...
·
Back-end
사실... Appjam 합숙 전에 모든걸 다 끝내고 들어가려 했으나 못 했고 회고식아니면 나중에라도 더 구체화 시켜서 올려보려고 한다... 아래 있는 글들은 우선 먼저 적어놨던거라도 올리고자 이렇게 적게 되었다.https://github.com/guswnsj0112/spring-auth-board계기이번 SOPT 38기 AppJam에서 운 좋게 Server로 참여 할 수 있게 되었다. 하지만 가장 큰 문제가 있었다. 바로 내가 백엔드를 올해 처음한다는 점이였다. 물론 파트장님께서는 세미나 때 친철하고 잘 알려주셨긴 했지만 학기 중 시간 관리를 못 했던 나에게는 아직 미숙한 부분이 많이 보였다. 그래서 Appjam 시작 전까지는 인증/인가, 엔터티 등 다양한걸 공부해서 가려고 한다.구조우선 서버 리드님과 ..
DDD(Domain-Driven Design)란? 핵심 개념과 계층형 아키텍처
·
CS/Architecture
DDD(Domain-Drvien Design, 도메인 주도 설계) 란?도메인 모델을 기반으로 복잡한 소프트웨어 시스템을 설계하고 개발하는 방법론도메인(Domain)소프트웨어가 해결하고자 하는 문제 영역→ 도메인이 무엇인지 보다는 도메인에 포함되는 것이 무엇인가 정의를 내리는게 더 중요!예를 들어 여행 애플리케이션은 예약, 결제, 여행 일정, 회원 관리 등의 하위 도메인으로 나눌 수 있다. 예약 도메인 안에는 예약 요청, 확정, 취소와 같은 상태와 행위가 존재할 수 있다.이처럼 여러 도메인들이 상호작용하며, 비즈니스 도메인별로 나누어 설계하는 것을 도메인 주도 설계라고 한다.도메인과 객체의 차이점객체(Object)객체는 프로그램에서 특정 개념을 표현하기 위해 상태와 행동을 하나로 묶은 단위이다.객체는 현실..
객체 간의 결합도(Coupling)와 응집도(Cohesion)의 관계
·
CS/Architecture
결합도와 응집도는 소프트웨어 구조 품질을 설명하는 가장 기본적인 두 축이다.결합도 → 모듈 간 의존의 강도를 의미응집도 → 하나의 모듈 내부에서 책임이 얼마나 잘 모여 있는지를 나타냄모듈소프트웨어를 각 기능별로 나누어진 소스 단위모듈은 문맥에 따라 함수, 클래스, 패키지, Gradle 모듈처럼 서로 다른 크기의 소프트웨어 구성 단위를 의미할 수 있다. 결합도와 응집도는 이러한 여러 수준에서 모두 판단할 수 있다.모듈화문제가 복잡하고 큰 문제라면, 이 문제를 작은 부분으로 쪼개나가는 것모듈의 효율성결합도가 낮고 응집도가 높을 수록 모듈화의 효율성이 높다객체지향 언어인지 절차지향 언어인지와 관계없이, 모듈 내부의 관련 기능은 함께 모으고 모듈 사이의 불필요한 의존은 줄이는 것이 좋은 설계의 기본 방향이다.이..
Nginx는 왜 등장했을까? Apache 구조의 한계와 이벤트 기반 웹 서버 이해하기
·
Back-end/DevOps
이번 프로젝트에서 Nginx를 쓰게 되었고 본격적인 프로젝트를 시작하기 전에 왜 Nginx를 사용하는지 정리해보려고 한다"웹 서버는 대부분 Apache나 Nginx를 사용한다. 그 이유가 뭘까?"Nginx 소개Nginx는 고성능의 오픈 소스 웹 서버 소프트웨어로 많은 웹 서버와 리버스 프록시로 널리 사용가볍고 확장 가능한 구조와 높은 처리량이 특징가상 호스팅, 로드 밸런싱, SSL/TLS 암호화, URL 리다이렉션 등 다양한 기능을 제공Nginx 란?Nginx는 다목적 비동기 웹 서버 소프트웨어로, 많은 웹 서버와 리버스 프록시로 널리 사용된다. 주요 목적은 클라이언트 요청을 받아 정적 및 동적 콘텐츠를 처리하여 웹 서비스를 제공하는 것이를 통해 웹 서버의 응답 시간과 처리량을 향상 시킬 수 있다.웹서버..
[Spring, Docker] 모듈식 모놀리스에서 Docker 배포하기
·
Back-end/Spring
우선 모듈식 모놀리스로 아키텍처를 가져갔다면 전통적인 모놀리식과 다르게 여러 개의 모듈이 있을 것이다. 하지만 모듈러식 모놀리스는 여러 모듈로 코드를 나누더라도, 최종적으로는 실행 모듈인 app에서 하나의 JAR 파일을 만들어 배포한다.우선 app 모듈에서 배포를 할 예정이라 app → Tasks → bootJar 를 클릭해줬다.app/build/libs 의 경로에 .jar로 끝나는 파일이 생성된다.이제 Dockerfile을 성해준다. (확장자 x)Dockerfile 생성하기방법은 두 가지가 있다1.jar 있는 곳에 Dockerfile 두기.jar 파일이 있는 곳에 Dockerfile을 생성하는 방법모듈식 모놀리스에서 생기는 단점1. Dockerfile이 build/libs 안에 들어감2. build 폴..
[Docker] Docker 입문: 이미지, 컨테이너, Registry, Docker Engine 정리
·
Back-end/DevOps
개발할 때는 잘 실행되던 애플리케이션이 서버에 배포하자마자 오류가 나는 경우가 있다.운영체제, 라이브러리 버전, 실행 환경이 다르기 때문⇒ Docker는 이런 환경 차이를 줄이기 위해 등장한 컨테이너 기반 플랫폼이다.Docker란?‘컨테이너화’를 사용하여 응용 프로그램의 배포, 확장 및 관리를 자동화할 수 있는 오픈 소스 플랫폼이다코드, 실행 시간, 시스템 도구 및 라이브러리를 포함하여 응용 프로그램을 실행하는 데 필요한 모든 것을 가볍고 격리된 환경으로 포함한다.응용 프로그램과 해당 종속성을 표준화된 단위로 패킺앟여 다양한 환경에서 일관되게 배포하고 실행하기 쉽게 만들어준다.사용 이유Docker를 사용하는 가장 큰 이유는 environment disparity(환경 격차)라는 문제를 해결하는 것이다.내..
SpringDoc Swagger에서 PathVariable Parameters가 비어 있을 때: Gradle -parameters 옵션 문제 해결기
·
Back-end/Trouble Shooting
문제 상황모듈식 모놀리스로 전환 후 Swagger API를 사용하여 API 명세를 손쉽게 하려고 세팅했었다. 하지만 Parameters 를 인식하지 못 하는 상황이 발생하게 되었다코드 뜯어보기우선 코드를 살펴보자면 저자는 Controller와 인터페이스를 사용한 Swagger API를 명확히 나눴다@RestController@RequiredArgsConstructor@RequestMapping("/api/posts")public class PostController implements PostAPI { private final PostService postService; @PostMapping public Long createPost( @Valid @RequestBod..
[LeetCode] 1. Two Sum (JAVA)
·
CS/Algorithm
문제문제 링크고민 했던 상황배열 안에서 어떻게 해야 짝을 찾을 수 있을까? i,j 를 써서 j는 난수 인덱스로 지정해서 target 에 맞춰야하나? 라고 생각했었다나의 코드class Solution { public int[] twoSum(int[] nums, int target) { int sum = 0; int[] result = new int[2]; for(int i = 0; i 최선의 경우: O(1)예: nums[0] + nums[1]이 바로 target인 경우최악의 경우: O(n²)예: 정답이 맨 마지막 조합에 있거나, 거의 끝까지 탐색해야 하는 경우평균적으로도: O(n²)다른 사람들의 코드와 비교했을 때 딱히 좋은 성능은 아니였다.다른 사람들의 코드는 ..
모듈러 모놀리스(modular monolith) 아키텍처가 뭘까?
·
Back-end/Architecture
탄생 배경MSA의 장점을 가지고 다른 기업에서 적용시키다 보니 아래와 같은 문제들이 나타나게 되었다.MSA의 부작용네트워크 통신/ 장애 포인트 증가분산 트랜잭션으로 묶기가 힘들어짐모니터링, 배포 운영의 복잡도 증가특히, 팀이 작을 수록 아래와 같은 문제점이 발생함팀이 작을 때쓸데 없이 나눈 서비스 수가 오히려 불편함만 가져옴즉, 서비스 수 > 감당 가능한 팀 수조직이 도메인 경계를 구분하지 않는 소규모 팀이라고 할 때 서비스는 나뉘어지는 이상한 구조가 나올 수 있다Conway’s Law - 조직이 아키텍쳐를 결정복잡성이 증가할 수 록 소규모 팀에서는 발목이 잡히는 경우 발생모듈러 모놀리스모놀리식과 모듈식 설계 패러다임의 측면을 결합한 아키텍처 접근단일 배포 단위를 유지하면서 내부를 도메인 경계로 명확히 ..