일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 파일조회
- nestjs decorator
- 셀렉트어드민
- jest
- Connection pool
- SW마에스트로
- SROOM
- guard
- 오블완
- YouTube Data API
- mailerservice
- fine-grained
- API 개발
- 어드민 페이지
- 책임부과
- coarse-grained
- NestJS
- 권한검증
- 추상 클래스
- monorepo
- Mock
- 자바
- 오브젝트
- java
- API 설계
- 티스토리챌린지
- typeorm
- nestjs library
- 멀티테넌시
- nestjs libraries
- Today
- Total
목록전체 글 (17)
독산구너

1. vo와 entity, dto 구분 기존 id (식별자) 없는 entity를 사용하였다. 이로인해 어떤 필드가 정의되어 있는지, 어디서 수정되었는지, 어디서 생성되었는지 알 수 없는 문제가 발생한다. 위 코드는 youtube 로부터 VideoVo 객체를 받아 video (entity)를 리턴하는 메서드이다. db에 저장하기 전까지 videoId 가 없으므로 videoId는 정의하지 않고 다른 필드를 채웠다. 리팩토링 식별자 (id) 가 없이 모든 속성값이 같으면 같은 객체인 VO (value object) 를 생성했다. Video, Playlist, Quiz, Summary, Course, CourseVideo 등의 vo가 생성되었으며, 이를 entity로 바꾸거나 entity에서 vo로 매핑하는 과..

글의 목적 '스룸' 프로젝트에서 Dto, Vo, Entity를 구분하여 사용함으로써 각 객체의 역할을 정의하고자 합니다. DTO란? Data Transfer Object, 계층간 데이터 전송을 위해 사용되는 객체입니다. 특징 1. Getter, Setter만 가지며, 오직 통신 용도로만 쓰여 로직을 포함하지 않습니다. 스룸에서의 쓰임 controller와 service의 데이터 전송, service와 repository(대부분 entity를 전달하지만 특정 형태의 데이터를 받아오는 경우)사이의 데이터 전송, 각 service간의 데이터 전송에서 쓰입니다. VO란? value object, 불변객체로써, 모든 속성값이 같으면 같은 객체입니다. 특징 1. equals(), hashCode()를 재정의하여 모..
이 글의 목적 - '스룸' 프로젝트의 리팩토링 과정을 설명하고자 합니다. - '스룸' 프로젝트의 공동 개발자들에게 재설계한 객체 협력 구조를 설명하고, 피드백 받고자 합니다. 설계 원칙 '코드로 이해하는 객체지향 설계, 오브젝트' 를 읽고 데이터 중심 설계가 아닌 객체 지향 설계를 하여 '스룸' 프로젝트 BE 소스코드를 리팩토링 하고자 합니다. 많이 부족하지만, 다음과 같은 기준을 두고 설계를 해보았습니다. 1. 책 오브젝트에서는 객체들에게 적절한 책임을 부과하고 객체간의 협력관계를 가지게 하는것은 어려우며, 데이터 중심 설계로 먼저 코딩한 뒤, 이를 바꾸는 방식도 괜찮다고 하였습니다. 이미 모든 서비스 로직이 마련되어 있으니, 최대한 객체의 데이터가 아닌 책임과 역할에 집중하고자 합니다. 2. 객체보다..
이 글의 목적 - '스룸' 프로젝트의 BE 구조 리팩토링의 필요성을 설명하고자합니다. 리팩토링을 하게 된 과정 '스룸' 프로젝트를 진행하는 '4m9d' 팀의 SW마에스트로 백엔드 담당 멘토님께 BE repo 코드 피드백을 받았습니다. 내용은 다음과 같습니다. - service에서 하는 일이 너무 많다. - 의존관계가 복잡하다. 이상하다. - private과 public 인 경우를 구별해라 - 자바 공부를 해라 이러한 피드백을 자바 스프링을 사용하여 개발을 하는 과정에서 '객체지향적인 코드를 작성하지 않았다'라는 의미로 받아들였고, 조영호 저자인 '코드로 이해하는 객체지향 설계, 오브젝트' 를 읽고 이를 프로젝트에 적용하여 리팩토링 하게 되었습니다. '오브젝트' 의 내용 간략하게 책 '오브젝트' 의 내용을..

SROOM 프로젝트에서는 다음 화면과 같이 youtube 에 있는 영상, 재생목록을 키워드로 검색하고, 상세정보를 불러와 학습 코스에 등록하는 기능이 존재합니다. 이때 정보를 불러오기 위해 Youtube Data API 를 사용하는데, 이곳에서 제공하는 api는 다음과 같습니다. 출처 : https://developers.google.com/youtube/v3/docs [search] -> 키워드 검색결과를 가져오는 api 입니다. GET https://www.googleapis.com/youtube/v3/search 이때, 쿼리 파라미터로 여러 값이 입력될 수 있습니다. (이외에도 여러 파라미터가 존재합니다) - q : 검색된 키워드 - part : 필요한 정보 (snippet, id, kind .....

SROOM 프로젝트에서는 다음 화면과 같이 youtube 에 있는 영상, 재생목록을 키워드로 검색하고, 상세정보를 불러와 학습 코스에 등록하는 기능이 존재합니다. 이때 정보를 불러오기 위해 Youtube Data API 를 사용하는데, 이곳에서 제공하는 api는 다음과 같습니다. 출처 : https://developers.google.com/youtube/v3/docs [search] -> 키워드 검색결과를 가져오는 api 입니다. GET https://www.googleapis.com/youtube/v3/search 이때, 쿼리 파라미터로 여러 값이 입력될 수 있습니다. (이외에도 여러 파라미터가 존재합니다) - q : 검색된 키워드 - part : 필요한 정보 (snippet, id, kind .....

SROOM 프로젝트에서는 애자일 방법론 중 스크럼 방식을 도입해 프로젝트를 진행합니다. Jira, Confluence를 사용해 스크럼을 효율적으로 진행하고자 합니다. 이번 글에서는 스프린트 플래닝을 다루고자 합니다. 스프린트 플래닝 스프린트 플래닝에서는 해당 스프린트에서 진행할 백로그를 선택 또는 생성하고, 스프린트 목표를 설정합니다. SROOM 프로젝트를 진행하는 4m9d 팀에서는 스프린트 주기를 2주로 설정하였습니다. 스프린트 플래닝은 Confluence에 작성합니다. 멘토가 제안하는 아이템의 경우 진행 아이템은 스크럼 마스터를 맡아주신 멘토님이 제안하는 아이템입니다. 장기 Task 아이템은 현재 스프린트를 포함해서 장기적으로 이루어져야 할 Task에 대한 아이템입니다. 예를들어 기획심의 준비를 위해..