|
1 |
| -프로젝트 마일스톤 |
2 |
| - |
3 |
| -- Java 프로젝트를 Spring 프로젝트로 마이그레이션 |
4 |
| -- 의존성 관리를 IoC Container에 위임하도록 리팩토링 |
5 |
| -- 비즈니스 로직 고도화 |
6 |
| - 기본 요구사항 |
7 |
| - Spring 프로젝트 초기화 |
8 |
| - - [x] Spring Initializr를 통해 zip 파일을 다운로드하세요. |
9 |
| - - [x] 빌드 시스템은 Gradle - Groovy를 사용합니다. |
10 |
| - - [x] 언어는 Java 17를 사용합니다. |
11 |
| - - [x] Spring Boot의 버전은 3.4.0입니다. |
12 |
| - - [x] GroupId는 com.sprint.mission입니다. |
13 |
| - - [x] ArtifactId와 Name은 discodeit입니다. |
14 |
| - - [x] packaging 형식은 Jar입니다 |
15 |
| - - [x] Dependency를 추가합니다. |
16 |
| - - [x] Lombok |
17 |
| - - [x] Spring Web |
18 |
| - - [x] zip 파일을 압축해제하고 원래 진행 중이던 프로젝트에 붙여넣기하세요. 일부 파일은 덮어쓰기할 수 있습니다. |
19 |
| - - [x] application.properties 파일을 yaml 형식으로 변경하세요. |
20 |
| - - [x] DiscodeitApplication의 main 메서드를 실행하고 로그를 확인해보세요. |
21 |
| - |
22 |
| - |
23 |
| ---- |
24 |
| - |
25 |
| -Bean 선언 및 테스트 |
26 |
| -- [x] File*Repository 구현체를 Repository 인터페이스의 Bean으로 등록하세요. |
27 |
| -- [x] Basic*Service 구현체를 Service 인터페이스의 Bean으로 등록하세요. |
28 |
| -- [x] JavaApplication에서 테스트했던 코드를 DiscodeitApplication에서 테스트해보세요. |
29 |
| - - [x] JavaApplication 의 main 메소드를 제외한 모든 메소드를 DiscodeitApplication클래스로 복사하세요. |
30 |
| - - [x] JavaApplication의 main 메소드에서 Service를 초기화하는 코드를 Spring Context를 활용하여 대체하세요. |
31 |
| - |
32 |
| -```java |
33 |
| -// JavaApplication |
34 |
| -public static void main(String[] args) { |
35 |
| - // 레포지토리 초기화 |
36 |
| - // ... |
37 |
| - // 서비스 초기화 |
38 |
| - UserService userService = new BasicUserService(userRepository); |
39 |
| - ChannelService channelService = new BasicChannelService(channelRepository); |
40 |
| - MessageService messageService = new BasicMessageService(messageRepository, channelRepository, userRepository); |
41 |
| - |
42 |
| - // ... |
43 |
| -} |
44 |
| - |
45 |
| -// DiscodeitApplication |
46 |
| -public static void main(String[] args) { |
47 |
| - ConfigurableApplicationContext context = SpringApplication.run(DiscodeitApplication.class, args); |
48 |
| - // 서비스 초기화 |
49 |
| - // TODO context에서 Bean을 조회하여 각 서비스 구현체 할당 코드 작성하세요. |
50 |
| - UserService userService; |
51 |
| - ChannelService channelService; |
52 |
| - MessageService messageService; |
53 |
| - |
54 |
| - // ... |
55 |
| -} |
56 |
| -``` |
57 |
| - |
58 |
| - - [x] JavaApplication의 main 메소드의 셋업, 테스트 부분의 코드를 DiscodeitApplication클래스로 복사하세요. |
59 |
| -```java |
60 |
| -public static void main(String[] args) { |
61 |
| - // ... |
62 |
| - // 셋업 |
63 |
| - User user = setupUser(userService); |
64 |
| - Channel channel = setupChannel(channelService); |
65 |
| - // 테스트 |
66 |
| - messageCreateTest(messageService, channel, user); |
67 |
| -} |
68 |
| -``` |
69 |
| - |
70 |
| -Spring 핵심 개념 이해하기 |
71 |
| -- [ ] JavaApplication과 DiscodeitApplication에서 Service를 초기화하는 방식의 차이에 대해 다음의 키워드를 중심으로 정리해보세요. |
72 |
| -IoC Container |
73 |
| -Dependency Injection |
74 |
| -Bean |
75 |
| - |
76 |
| - |
77 |
| -Lombok 적용 |
78 |
| -- [x] 도메인 모델의 getter 메소드를 @Getter로 대체해보세요. |
79 |
| -- [x] Basic*Service의 생성자를 @RequiredArgsConstructor로 대체해보세요. |
80 |
| - |
81 |
| - |
82 |
| -비즈니스 로직 고도화 |
83 |
| -- [ ] 다음의 기능 요구 사항을 구현하세요. |
84 |
| - |
85 |
| -추가 기능 요구사항 |
86 |
| -시간 타입 변경하기 |
87 |
| -- [ ] 시간을 다루는 필드의 타입은 Instant로 통일합니다. |
88 |
| - - 기존에 사용하던 Long보다 가독성이 뛰어나며, 시간대(Time Zone) 변환과 정밀한 시간 연산이 가능해 확장성이 높습니다. |
89 |
| - |
90 |
| -**새로운 도메인 추가하기** |
91 |
| -- [ ] 공통: 앞서 정의한 도메인 모델과 동일하게 공통 필드(id, createdAt, updatedAt)를 포함합니다. |
92 |
| -- [ ] ReadStatus |
93 |
| - - 사용자가 채널 별 마지막으로 메시지를 읽은 시간을 표현하는 도메인 모델입니다. 사용자별 각 채널에 읽지 않은 메시지를 확인하기 위해 활용합니다. |
94 |
| -- [ ] UserStatus |
95 |
| - - 사용자 별 마지막으로 확인된 접속 시간을 표현하는 도메인 모델입니다. 사용자의 온라인 상태를 확인하기 위해 활용합니다. |
96 |
| - - [ ] 마지막 접속 시간을 기준으로 현재 로그인한 유저로 판단할 수 있는 메소드를 정의하세요. 마지막 접속 시간이 현재 시간으로부터 5분 이내이면 현재 접속 중인 유저로 간주합니다. |
97 |
| -- [ ] BinaryContent |
98 |
| - - 이미지, 파일 등 바이너리 데이터를 표현하는 도메인 모델입니다. 사용자의 프로필 이미지, 메시지에 첨부된 파일을 저장하기 위해 활용합니다. |
99 |
| - - [ ] 수정 불가능한 도메인 모델로 간주합니다. 따라서 updatedAt 필드는 정의하지 않습니다. |
100 |
| - - [ ] User, Message 도메인 모델과의 의존 관계 방향성을 잘 고려하여 id 참조 필드를 추가하세요. |
101 |
| -- [ ] 각 도메인 모델 별 레포지토리 인터페이스를 선언하세요. |
102 |
| -레포지토리 구현체(File, JCF)는 아직 구현하지 마세요. 이어지는 서비스 고도화 요구사항에 따라 레포지토리 인터페이스에 메소드가 추가될 수 있어요. |
0 commit comments