본문 바로가기

Backend

DDD(Domain Driven Design)란? 📒 DDD(Domain Driven Design) ✔ 도메인을 중심으로 나누어 설계하는 디자인 방법론이다. ◼ 도메인의 모델과 로직에 집중한다. ◼ 단일화된, 보편화된(통일화된) 언어를 사용한다. ◼ 분석 모델과 설계, 개발 모델의 개념이 일치한다. 💥 DDD의 탄생 배경 ◼ DDD가 나오게 된 이유는 설계자와 개발자 둘 사이의 언어 장벽을 해결하기 위함으로, 설계자와 개발자 모두 도메인 관점에서 문제를 바라보게 하기 위해서이다. ◼ 복잡한 도메인 문제를 해결하고 유지보수 가능한 소프트웨어를 만들기 위해서 고안되었다. 💥 Domain이란? 사전적으로 '영역', '집합'을 의미하고, 실질적으로는 우리가 소프트웨어로 해결하고자 하는 문제의 영역을 의미한다. 예를 들어, 온라인 음식 주문이라는 문제를 소프트웨.. 더보기
[Spring] Rest-Docs 연결 Spring-Rest-Docs 테스트 코드를 기반으로 Restful API 문서 작성을 돕는 도구 Asciidoctor를 사용하여 HTML 등 다양한 포맷으로 문서를 자동 출력할 수 있다. API Spec과 문서화를 위한 테스트 코드가 일치하지 않으면, 테스트 빌드를 실패하게 되어 테스트 코드로 검증된 문서임을 보장할 수 있다. Swagger @ApiOperation 등 코드에는 영향을 주지 않지만, Swagger를 위해서 지속적으로 추가 코드를 작성해야 한다. 명세를 위한 코드들이 너무 많아 가독성이 떨어질 수 있다. 구조가 변경되었을 때, 명세도 같이 변경하지 않으면 초기 명세와 달라질 가능성이 존재한다. 프로젝트를 진행하면서, API 문서 자동화를 위해 Swagger와 Spring-Rest-Docs.. 더보기
[Spring] 알림 기능에 SSE 적용하기 * 주기적으로 Client에서 데이터를 가져와야 하는 경우 사용할 수 있는 방법 Polling 일정 주기를 가지고 서버의 API를 호출하는 방법 실시간으로 데이터가 업데이트 되지 않는다는 단점 존재 불필요한 요청이 발생하기 때문에 서버 부하 발생 호환성이 좋다는 장점을 가짐 Long-Polling 서버로 요청이 들어올 경우, 일정 시간 동안 대기 했다가 요청한 데이터가 업데이트 된 경우 서버에서 웹 브라우저로 응답을 보냄 연결이 된 경우 실시간으로 데이터가 들어올 수 있다는 장점이 존재 Polling보다 개선된 형태이지만, 데이터의 업데이트가 빈번한 경우 Polling과 유사하다는 단점이 존재 SSE (Server-Sent Event) 서버에서 웹 브라우저로 데이터를 보냄. 웹 브라우저에서 서버 쪽으로 .. 더보기
[Spring] Logback 설정 애플리케이션 운영을 하기 위해서는 Log가 반드시 필요하고 Spring에서 Logback 설정을 통해 운영 하기 위한 Log를 관리할 수 있다. Logback Slf4j(Simple Logging Facade for Java) 인터페이스를 구현하는 구현체이다. 한마디로, Logging Framework이다. Appender 종류 ConsoleAppender: 콘솔에 log 출력 FileAppender: 파일 단위로 log 저장 RollingFileAppender: 설정 옵션(시간 등...)에 따라 log를 여러 파일로 나누어 저장 SMTPAppender: log를 메일로 전송하여 기록 DBAppender: log를 DB에 저장 실습 1. logback-spring.xml 파일 생성 logback-spri.. 더보기
[Slf4j] Slf4j란? Slf4j Slf4j는 다양한 Logging Framework(logging, logback, log4j)의 추상화를 제공하며 컴파일 시, 하나의 Logging Framework와 바인딩 해준다. * 로그 레벨 : TRACE > DEBUG > INFO > WARN > ERROR 장점 다양한 Logging Framework를 라이브러리만 추가해서 바인딩할 수 있다. -> Logging Library 변경 시 로그 엔진을 쉽게 변경할 수 있다. String 연산의 편의성 log.info("log message : " + name); 다음과 같이 코드를 작성하게 되면 String 연산 후 Logging Level을 확인하여 출력 여부를 확인한다. -> 불필요한 CPU 연산 사용 log.info("log mes.. 더보기