[TIL 22일 차] Sprint Mission3 - 디스코드: MessageService 고도화와 ReadStatusService, UserStatusService, BinaryContentService 구현
오늘의 성취
- 개발 진행 상황
MessageService고도화- DTO를 활용해
create,findAll,update,delete메소드 고도화
- DTO를 활용해
ReadStatusService구현- DTO를 활용해
create,find,findAllByUserId,update,delete메소드 구현
- DTO를 활용해
UserStatusService구현- DTO를 활용해
create,find,findAll,update,updateByUserId,delete메소드 구현
- DTO를 활용해
BinaryContentService구현- DTO를 활용해
create,find,findAllByIdIn,delete메소드 구현
- DTO를 활용해
@ConditionalOnProperty(name = "discodeit.repository.type", havingValue = "file")prefix: 프로퍼티 앞부분name: 프로퍼티 이름havingValue: 일치해야 할 값
프로젝트 요구사항
// ...
4) MessageService 고도화
- 고도화
create- 선택적으로 여러 개의 첨부파일을 같이 등록할 수 있습니다.
- DTO를 활용해 파라미터를 그룹화합니다.
findAll- 특정
Channel의 Message 목록을 조회하도록 조회 조건을 추가하고, 메소드 명을 변경합니다.findallByChannelId
- 특정
update- DTO를 활용해 파라미터를 그룹화합니다.
- 수정 대상 객체의 id 파라미터, 수정할 값 파라미터
- DTO를 활용해 파라미터를 그룹화합니다.
delete- 관련된 도메인도 같이 삭제합니다.
- 첨부파일(
BinaryContent)
- 첨부파일(
- 관련된 도메인도 같이 삭제합니다.
- 의존성
- 같은 레이어 간 의존성 주입은 순환 참조 방지를 위해 지양합니다. 다른 Service 대신 필요한 Repository 의존성을 주입해보세요.

5) ReadStatusService 구현
create- DTO를 활용해 파라미터를 그룹화합니다.
- 관련된
Channel이나User가 존재하지 않으면 예외를 발생시킵니다. - 같은
Channel과User와 관련된 객체가 이미 존재하면 예외를 발생시킵니다.
findid로 조회합니다.
findAllByUserIduserId를 조건으로 조회합니다.
update- DTO를 활용해 파라미터를 그룹화합니다.
- 수정 대상 객체의
id파라미터, 수정할 값 파라미터
- 수정 대상 객체의
- DTO를 활용해 파라미터를 그룹화합니다.
deleteid로 삭제합니다.
- 의존성
- 같은 레이어 간 의존성 주입은 순환 참조 방지를 위해 지양합니다. 다른 Service 대신 필요한 Repository 의존성을 주입해보세요.

6) UserStatusService 고도화
create- DTO를 활용해 파라미터를 그룹화합니다.
- 관련된
User가 존재하지 않으면 예외를 발생시킵니다. - 같은
User와 관련된 객체가 이미 존재하면 예외를 발생시킵니다.
findid로 조회합니다.
findAll- 모든 객체를 조회합니다.
update- DTO를 활용해 파라미터를 그룹화합니다.
- 수정 대상 객체의
id파라미터, 수정할 값 파라미터
- 수정 대상 객체의
- DTO를 활용해 파라미터를 그룹화합니다.
updateByUserIduserId로 특정User의 객체를 업데이트합니다.
deleteid로 삭제합니다.
- 의존성
- 같은 레이어 간 의존성 주입은 순환 참조 방지를 위해 지양합니다. 다른 Service 대신 필요한 Repository 의존성을 주입해보세요.

7) BinaryContentService 구현
create- DTO를 활용해 파라미터를 그룹화합니다.
findid로 조회합니다.
findAllByIdInid목록으로 조회합니다.
deleteid로 삭제합니다.
- 의존성
- 같은 레이어 간 의존성 주입은 순환 참조 방지를 위해 지양합니다. 다른 Service 대신 필요한 Repository 의존성을 주입해보세요.

8) 새로운 도메인 Repository 구현체 구현
- 지금까지 인터페이스로 설계한 각각의 Repository를 JCF, File로 각각 구현하세요.

4. 심화 요구사항
4-1. Bean 다루기
-
Repository 구현체 중에 어떤 구현체를 Bean으로 등록할지 Java 코드의 변경 없이
application.yaml설정 값을 통해 제어해보세요.# application.yaml discodeit: repository: type: jcf # jcf | filediscodeit.repository.type설정값에 따라 Repository 구현체가 정해집니다.- 값이
jcf이거나 없으면 JCF*Repository 구현체가 Bean으로 등록되어야 합니다. - 값이
file이면 File*Repository 구현체가 Bean으로 등록되어야 합니다.
- 값이
-
File*Repository 구현체의 파일을 저장할 디렉토리 경로를
application.yaml설정 값을 통해 제어해보세요.# application.yaml discodeit: repository: type: jcf # jcf | file file-directory: .discodeit
GitHub Repository 주소
https://github.com/JungH200000/10-sprint-mission/tree/sprint3
Leave a comment