본문 바로가기

공부 기록

(319)
ㄷㄷㄷ: Domain Driven Design과 적용 사례공유 / if(kakao)2022 https://youtu.be/4QHvTeeTsj0 레거시 서버 - 모놀리식 - 기술 부채 - 유지보수의 어려움 - 기능의 고착화 Domain Driven Design(도메인 주도 설계) - 도메인의 모델과 로직에 집중 - 유비쿼터스 랭귀지, 보편적 언어 사용 => 업무 용어 통일 - 소프트웨어 엔티티와 도메인 간 개념의 일치 Bounded Context : 범위를 구분해놓은 하위 도메인 개념 Context Map : Bounded Context 간의 관계를 보여준다. Aggregate : 라이프사이클이 같은 도메인을 한데 모아놓은 집합 DDD의 대표적인 아키텍처 - Layered Architecture : User Interface > Application > Domain > Infrastructure..
DDD (Domain-Driven Design)시작하기 https://youtu.be/td5VRmxntmw 도메인 ---(추상화)---> 모델 ---(실체화)---> 소프트웨어 도메인 모델 : 도메인 개념을 추상화한 것. 도메인을 이해하기 위한 개념 모델. 개발을 위해서는 구현 모델 필요 도메인 오브젝트 : 도메인 모델을 소프트웨어에서 동작할 수 있도록 나타낸 것 DDD란? 모델이 그 가치를 잊지 않고, 소프트웨어 개발에 기여하도록 도메인을 잘 표현한 모델을 만들고, 개발을 하면서도 변화를 반영할 수 있도록 하는 것
정렬, 집계 함수, 그룹핑 ORDER BY(정렬) 조회 결과를 특정 attribute(s) 기준으로 정렬하여 가져오고 싶을 때 사용한다. 오름차순 정렬은 ASC(default 정렬 방식), 내림차순 정렬은 DESC로 표기한다. SELECT * FROM EMPLOYEE ORDER BY dept_id (ASC), salary DESC; dept_id 순으로 정렬하되, dept_id 그룹 별로는 salary 내림차순으로 정렬된다. aggregate function(집계 함수) 여러 tuple들의 정보를 요약해서 하나의 값으로 추출하는 함수 대표적으로 COUNT, SUM, MAX, MIN, AVG 함수가 있다. (주로) 관심있는 attribute에 사용된다. NULL 값들은 제외하고 요약 값을 추출한다. SELECT COUNT(*) FR..
Join JOIN 두 개 이상의 table들에 있는 데이터를 한 번에 조회하는 것. implicit join & explicit join implicit join : WHERE 절에 join condition을 명시하는 방식. old한 방식이며 가독성이 떨어진다. SELECT D.name FROM employee AS E, department AS D WHERE E.id = 1 and E.dept_id = D.id; explicit join : from 절에 JOIN 키워드와 함꼐 joined table들을 명시하는 방식. SELECT D.name FROM employee AS E (INNER) JOIN department AS D ON E.dept_id = D.id WHERE E.id = 1; inner joi..
카프카, 레빗엠큐, 레디스 큐의 큰 차이점! 이벤트 브로커와 메시지 브로커에 대해 알아봅시다. https://youtu.be/H_DaPyUOeTo 메시지 브로커 - 메시지를 받아서 적절히 처리하고 나면 즉시, 또는 짧은 시간 내에 삭제되는 구조, 레디스 큐와 래빗엠큐가 대표적 이벤트 브로커 - 이벤트 또는 메시지라고도 불리는 레코드를 하나만 보관, 인덱스를 통해 개별 액세스를 관리한다. - 업무상 필요한 시간 동안 이벤트를 보존할 수 있다.(삭제를 하지 않는다.) - 메시지 브로커의 역할을 할 수 있다. - 카프카, 키네시스(AWS)가 대표적
[Spring] @Data 어노테이션 @Data - 롬복의 어노테이션 - 모든 필드에 대한 Getter, Setter, equals(), hashCode(), toString() 메서드, 기본 생성자, 모든 필드를 포함한 생성자를 생성 @Data를 사용하지 않았을 때 import java.util.Objects; public class Member { private String name; private int age; public Member() {} public Member(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = na..
[Spring] Filter Filter - 웹 어플리케이션에서 관리되는 영역 - 스프링부트 Framework에서 클라이언트의 요청/응답에 대해 최초/최종 단계의 위치에 존재하므로 요청/응답의 정보를 변경하거나 스프링에 의해 데이터가 변환되기 전의 순수한 클라이언트의 요청/응답 값을 확인할 수 있다. - 유일하게 ServletRequest, ServletResponse의 객체를 변환할 수 있다. - 주로 스프링 프레임워크의 요청/응답 로깅이나 인증과 관련된 로직들을 해당 필터에서 처리한다. => 서비스 비즈니스 로직과 분리시킨다. Filter 사용하기 Filter를 상속 받은 GlobalFilter.java import jakarta.servlet.*; import jakarta.servlet.annotation.WebFilter;..
[따배쿠] 5-2. 쿠버네티스 Pod - livenessProbe를 이용해서 Self-healing Pod 만들기 https://youtu.be/-NeJS7wQu_Q Liveness Probe - 파드가 계속 실행할 수 있음을 보장 - 파드의 spec에 정의 - 아래와 같이 추가할 수 있다. spec: containers: ... livenessProbe: # 추가 httpGet: path: / port: 80 livenessProbe 매커니즘 httpGet probe : 지정한 IP 주소, 포트, path에 HTTP GET 요청을 보내 해당 컨테이너가 응답하는지 확인. 반환 코드가 200이 아니면 오류, 컨테이너 재시작 tcpSocket probe : 지정된 포트에 TCP연결을 시도, 연결되지 않으면 컨테이너 재시작 exec probe : exec 명령을 전달하고 명령의 종료 코드가 0이 아니면 컨테이너 재시작 L..