일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Action Pattern
- zipkin
- saga pattern
- 스레드
- MSA
- Resilinece4j
- Serial GC
- 체인 패턴
- 멀티스레드
- Spring Cloud Netfilx Eureka
- 생산자 소비자 패턴
- spring cloud
- java 정렬
- Spring Boot Actuator
- The law of Demeter
- 디자인 패턴
- JPA
- 스프링 배치
- spring batch
- Java
- Parallel Old GC
- 알고리즘
- TypeScript
- 타입스크립트
- 배치
- Transaction Pattern
- thread
- 사가 패턴
- 디자인패턴
- 키클락
- Today
- Total
목록Backend/기타 (13)
PSD( Private-Self-Development )
사용 배경신규 프로젝트를 진행하며,Auth 서비스를 일일히 구현하는 대신, 오픈 소스 Auth 서비스를 사용해보았다. 키클락 이란?인증 및 세션, 엑세스, 권한 관리를 해주는 ( IAM, SSO )오픈 소스 라이브러리 서버Red Hat 에서 주도 개발 키클락의 장점OAuth2.0 지원다양한 언어 지원( java, python, js, 안드로이드 등 )외부 사용자 저장소 지원 ( AD, LDAP 등 )토큰 기반 보안개발자 가 구현하는 것 보다 검증된 보안 서비스인 키를록을 사용하는것이 좀더 간단하게 보안성을 향상 시킬 수 있는 방법이다.확장성도 가지고 있다. (서버 하나 더 띄우는듯? 세션은 어캐??) 구현사용 스택java 21 + Spring boot 3.2.5 + securityAWS EC2( 우분투..
사용한 이유msa 와 DDD, 헥사고날 아키택처를 적용하다 보니 하나의 프로젝트에 여러 레이어가 존재하고 이게 불필요하게 붙어있다고 생각하여 큰 프로젝트 내부에 여러 프로젝트로 나누어 이들간의 의존성 주입으로 서로를 참조하도록 수정 최상단 프로젝트의 xml shared domain application infrastructure presentation container 21 3.3.5 .. com.test shared ${project.version} ... local true test/test-api:${project.version} AWS ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.a..

개발 아키택처의 방향성의존성 문제 해결비즈니스 로직 과 인프라 로직을 분리 하여, 비즈니스 로직에만 집중하고자 한다.이전에는 하나의 뭉텅이로 만들어 놓던 이전의 로직을 각각의 역할 및 레이어로 분리하여, 유지 보수성 향상을 얻는다.이러한 방향성을 실현하기 위한 것이클린 아케텍처 이고, 이러한 클린 아케텍처를좀더 구현성을 강화 한 것이 헥사고날 아키텍처 이다. 클린 아키텍처?추상화된 레이어를 통해 의존성을 역전 시켜 인프라를 수정해도 비즈니스 로직은 수정하지 않아도 되도록 구현하는 아키텍처유즈케이스 추상화 레이어를 통해 전체적인 흐름을 제어의존성은 외부 -> 내부 로만 존재Entities (엔터프라이즈 비즈니스) Use Cases(어플리케이션 비즈니스) Interface Adapters Frameworks..
Docker ?컨테이너 가상화 서비스컨테이너 가상화를 실행하고 이를 제어하는 어플리케이션 OS 가상화Host OS 위에 Guest OS 전체를 가상화자유도가 높으나, 시스템 부하가 많고 느림컨테이너 가상화Host OS 의 리소스를 적게 사용하며, 필요한 프로세스 만 실행최소한의 라이브러리와 도구만 사용한다.가볍고 빠르다 Container ImageContainer 실행에 필요한 설정 값Image 를 가지고 실체화 한 것이 Container Docker 안에 Local 이라는 저장소에 이미지들을 보관하고 이를 필요할 때 실행 구현하여 Container 를 운영한다. Dockerfiledocker image 를 생성하기 위한 스크립트 파일자체 DSL(Domain-Specific Language) 문법 사용F..
최소 지식 복잡하게 얽혀 있는 서브 시스템의 어떤 부분을 수정할 경우 관련된 다른 부분도 수정해야 하는 경우가 있다. 이때, 어느 하나를 수정하기 위해서 관련된 많은 정보를 알고 있어야 한다. 이처럼 어떤 작업을 할 때 많은 지식이 있어야 한다면 코드를 수정하기 힘들어진다. 이는 곧 진입 장벽이 되며, 이전 회사의 코드 또한 같은 문제를 가지고 있었다. 때문에 최소 지식만 적용해 객체의 사용 작용을 설정해야 한다. HOW 1. 객체의 메서드 호출 시 단순화하자. 불필요한 객체의 생성 루틴과 재호출을 코드에 삽입하여 코드의 비가독성과 복잡성을 증가시키지 말자. 2. 4가지 규칙을 잘 지키는 객체를 만들자 자기 자신만의 객체 사용 메서드에 전달된 매개변수 사용 메서드에서 생성된 객체 사용 객체에 속하는 메서..
Nginx 란? 트래픽이 많은 웹사이트의 서버(was)를 도와주는 비동기 이벤트 기반 구조의 웹서버 프로그램 Nginx 의 특징 적은 자원을 사용해 고성능을 발휘한다. 요청에 의한 정적 파일(HTML, CSS, Javascript, image 등) 을 응답해주는 웹서버 로드 벨런서의 역할도 수행 웹 클라이언트와 was 서버 사이에 위치한다. 캐싱 지원 ( http 프로토콜을 사용하여 전달하는 콘텐츠를 캐싱, 한 번 서버에서 응답받은 것을 스스로 보관하고 클라이언트에 전달 ) 콘텍스트 스위칭 의 비용이 적다. 동적 설정 변경 지원 단점 개발자가 직접 모듈을 만들기 까다롭다.(확장성이 좋지 못하다.) 기존 Apache 서버와의 차이점 (사용 이유) 기존에 사용하던 apache 서버는 요청이 들어오면 커넥션 ..
DDD 란? 도메인(Domain) 주도 설계는 도메인 패턴을 중심으로 소프트웨어를 설계를 하는 방식 도메인 ? 도메인 이란 소프트웨어가 풀고자하는 현실 세상의 문제 를 의미한다. 예를 들어, 은행 어플이라면 은행 업무 관련 기능이 도메인 로직 이고 그 외에 목록 조회 DB 연결, 네트워크 통신 과 같은 로직은 어플리케이션 서비스 로직 이다. DDD 의 특징 도메인 그 자체와 도메인 로직 에 초점을 맞춘다. 보편적이고 통일된 언어의 사용 -> 도메인 전문가와 소프트웨어 개발자 간 원할한 커뮤니케이션을 위함 소프트웨어 엔티티와 도메인 컨셉트 를 서로 밀접하게 관리, 개발 한다. 모듈간 의존성 최소화, 응집성 최대화 왜 DDD 설계 방식을 사용하는가? 소프트웨어의 복잡성을 최소화 하고, 요구사항을 쉽게 반영하..
단위 테스트( Unit Test ) 란? 응용프로그램에서 테스트 가능한 가장 작은 소프트웨어( Java에서는 주로 클래스 )를 실행하여 예상대로 동작하는지 확인하는 테스트이다. 이러한 테스트 방식은 테스트 주도 개발 개념( TDD )과 합쳐지면 더 강력해진다. 테스트 주도 개발( TDD ) 이란? 테스트 주도 개발이란 테스트 위주의 반복 테스트를 이용한 소프트웨어 방법론이다 기존 방식과의 차이점 일반 개발 방식 요구사항 분석, 설계, 개발, 테스트, 배포 의 개발 절차를 가지게 되는데 여러 잠재적 문제점을 가지고 있다. 소비자의 요구사항이 처음부터 명확하지 않을 수 있다. 개발자가 이해하고 구현한 내용과 소비자의 요구사항이 다를 수 있다. 완벽한 설계가 사실상 불가능하다. 전체 기능을 한번에 테스팅하기 ..