[Sprint Mission3]

1. ํ”„๋กœ์ ํŠธ ๋งˆ์ผ์Šคํ†ค

  • Java ํ”„๋กœ์ ํŠธ๋ฅผ Spring ํ”„๋กœ์ ํŠธ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
  • ์˜์กด์„ฑ ๊ด€๋ฆฌ๋ฅผ IoC Container์— ์œ„์ž„ํ•˜๋„๋ก ๋ฆฌํŒฉํ† ๋ง
  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ณ ๋„ํ™”

2. ๊ธฐ๋ณธ ์š”๊ตฌ์‚ฌํ•ญ

2-1. Spring ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐํ™”

  • Spring Initializr๋ฅผ ํ†ตํ•ด zip ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜์„ธ์š”.
    • ๋นŒ๋“œ ์‹œ์Šคํ…œ์€ Gradle - Groovy๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ์–ธ์–ด๋Š” Java 17๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • Spring Boot์˜ ๋ฒ„์ „์€ 3.4.0์ž…๋‹ˆ๋‹ค.
    • GroupId๋Š” com.sprint.mission์ž…๋‹ˆ๋‹ค.
    • ArtifactId์™€ Name์€ discodeit์ž…๋‹ˆ๋‹ค.
    • packaging ํ˜•์‹์€ Jar์ž…๋‹ˆ๋‹ค
    • Dependency๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
      • Lombok
      • Spring Web
  • zip ํŒŒ์ผ์„ ์••์ถ•ํ•ด์ œํ•˜๊ณ  ์›๋ž˜ ์ง„ํ–‰ ์ค‘์ด๋˜ ํ”„๋กœ์ ํŠธ์— ๋ถ™์—ฌ๋„ฃ๊ธฐํ•˜์„ธ์š”. ์ผ๋ถ€ ํŒŒ์ผ์€ ๋ฎ์–ด์“ฐ๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • application.properties ํŒŒ์ผ์„ yaml ํ˜•์‹์œผ๋กœ ๋ณ€๊ฒฝํ•˜์„ธ์š”.
  • DiscodeitApplication์˜ main ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•ด๋ณด์„ธ์š”.


2-2. Bean ์„ ์–ธ ๋ฐ ํ…Œ์ŠคํŠธ

  • File*Repository ๊ตฌํ˜„์ฒด๋ฅผ Repository ์ธํ„ฐํŽ˜์ด์Šค์˜ Bean์œผ๋กœ ๋“ฑ๋กํ•˜์„ธ์š”.
  • Basic*Service ๊ตฌํ˜„์ฒด๋ฅผ Service ์ธํ„ฐํŽ˜์ด์Šค์˜ Bean์œผ๋กœ ๋“ฑ๋กํ•˜์„ธ์š”.
  • JavaApplication์—์„œ ํ…Œ์ŠคํŠธํ–ˆ๋˜ ์ฝ”๋“œ๋ฅผ DiscodeitApplication์—์„œ ํ…Œ์ŠคํŠธํ•ด๋ณด์„ธ์š”.
    • JavaApplication์˜ main ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฉ”์†Œ๋“œ๋ฅผ DiscodeitApplicationํด๋ž˜์Šค๋กœ ๋ณต์‚ฌํ•˜์„ธ์š”.
    • JavaApplication์˜ main ๋ฉ”์†Œ๋“œ์—์„œ Service๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ Spring Context๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋Œ€์ฒดํ•˜์„ธ์š”.

      // JavaApplication
      public static void main(String[] args) {
          // ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ดˆ๊ธฐํ™”
          // ...
          // ์„œ๋น„์Šค ์ดˆ๊ธฐํ™”
            UserService userService = new BasicUserService(userRepository);
          ChannelService channelService = new BasicChannelService(channelRepository);
          MessageService messageService = new BasicMessageService(messageRepository, channelRepository, userRepository);
      
          // ...
      }
      
      // DiscodeitApplication
      public static void main(String[] args) {
              ConfigurableApplicationContext context = SpringApplication.run(DiscodeitApplication.class, args);
          // ์„œ๋น„์Šค ์ดˆ๊ธฐํ™”
              // TODO context์—์„œ Bean์„ ์กฐํšŒํ•˜์—ฌ ๊ฐ ์„œ๋น„์Šค ๊ตฌํ˜„์ฒด ํ• ๋‹น ์ฝ”๋“œ ์ž‘์„ฑํ•˜์„ธ์š”.
            UserService userService;
          ChannelService channelService;
          MessageService messageService;
      
          // ...
      }
      
      
    • JavaApplication์˜ main ๋ฉ”์†Œ๋“œ์˜ ์…‹์—…, ํ…Œ์ŠคํŠธ ๋ถ€๋ถ„์˜ ์ฝ”๋“œ๋ฅผ DiscodeitApplicationํด๋ž˜์Šค๋กœ ๋ณต์‚ฌํ•˜์„ธ์š”.

      public static void main(String[] args) {
          // ...
          // ์…‹์—…
          User user = setupUser(userService);
          Channel channel = setupChannel(channelService);
          // ํ…Œ์ŠคํŠธ
          messageCreateTest(messageService, channel, user);
      }
      
      
    • ์ฐธ๊ณ : ์ด์ „ JavaApplication

      public class JavaApplication {
          static User setupUser(UserService userService) {
              User user = userService.create("woody", "woody@codeit.com", "woody1234");
              return user;
          }
      
          static Channel setupChannel(ChannelService channelService) {
              Channel channel = channelService.create(ChannelType.PUBLIC, "๊ณต์ง€", "๊ณต์ง€ ์ฑ„๋„์ž…๋‹ˆ๋‹ค.");
              return channel;
          }
      
          static void messageCreateTest(MessageService messageService, Channel channel, User author) {
              Message message = messageService.create("์•ˆ๋…•ํ•˜์„ธ์š”.", channel.getId(), author.getId());
              System.out.println("๋ฉ”์‹œ์ง€ ์ƒ์„ฑ: " + message.getId());
          }
      
          public static void main(String[] args) {
              // ์„œ๋น„์Šค ์ดˆ๊ธฐํ™”
              // TODO Basic*Service ๊ตฌํ˜„์ฒด๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜์„ธ์š”.
              UserService userService;
              ChannelService channelService;
              MessageService messageService;
      
              // ์…‹์—…
              User user = setupUser(userService);
              Channel channel = setupChannel(channelService);
              // ํ…Œ์ŠคํŠธ
              messageCreateTest(messageService, channel, user);
          }
      }
      


2-3. Spring ํ•ต์‹ฌ ๊ฐœ๋… ์ดํ•ดํ•˜๊ธฐ

  • JavaApplication๊ณผ DiscodeitApplication์—์„œ Service๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฐฉ์‹์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ๋‹ค์Œ์˜ ํ‚ค์›Œ๋“œ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ •๋ฆฌํ•ด๋ณด์„ธ์š”.
    • IoC Container
    • Dependency Injection
    • Bean
    • ํ•ด๋‹น ๋‚ด์šฉ์€ PR์— ์ฒจ๋ถ€


2-4. Lombok ์ ์šฉ

  • ๋„๋ฉ”์ธ ๋ชจ๋ธ์˜ getter ๋ฉ”์†Œ๋“œ๋ฅผ @Getter๋กœ ๋Œ€์ฒดํ•ด๋ณด์„ธ์š”.
  • Basic*Service์˜ ์ƒ์„ฑ์ž๋ฅผ @RequiredArgsConstructor๋กœ ๋Œ€์ฒดํ•ด๋ณด์„ธ์š”.

3. ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ

3-1. ์‹œ๊ฐ„ ํƒ€์ž… ๋ณ€๊ฒฝํ•˜๊ธฐ

  • ์‹œ๊ฐ„์„ ๋‹ค๋ฃจ๋Š” ํ•„๋“œ์˜ ํƒ€์ž…์€ Instant๋กœ ํ†ต์ผํ•ฉ๋‹ˆ๋‹ค.
    • ๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๋˜ Long๋ณด๋‹ค ๊ฐ€๋…์„ฑ์ด ๋›ฐ์–ด๋‚˜๋ฉฐ, ์‹œ๊ฐ„๋Œ€(Time Zone) ๋ณ€ํ™˜๊ณผ ์ •๋ฐ€ํ•œ ์‹œ๊ฐ„ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•ด ํ™•์žฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.


3-2. ์ƒˆ๋กœ์šด ๋„๋ฉ”์ธ ์ถ”๊ฐ€ํ•˜๊ธฐ

  • ๋„๋ฉ”์ธ ๋ชจ๋ธ ๊ฐ„ ์ฐธ์กฐ ๊ด€๊ณ„๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

  • ๊ณตํ†ต: ์•ž์„œ ์ •์˜ํ•œ ๋„๋ฉ”์ธ ๋ชจ๋ธ๊ณผ ๋™์ผํ•˜๊ฒŒ ๊ณตํ†ต ํ•„๋“œ(id, createdAt, updatedAt)๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  • ReadStatus
    • ์‚ฌ์šฉ์ž๊ฐ€ ์ฑ„๋„ ๋ณ„ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ฝ์€ ์‹œ๊ฐ„์„ ํ‘œํ˜„ํ•˜๋Š” ๋„๋ฉ”์ธ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋ณ„ ๊ฐ ์ฑ„๋„์— ์ฝ์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • UserStatus
    • ์‚ฌ์šฉ์ž ๋ณ„ ๋งˆ์ง€๋ง‰์œผ๋กœ ํ™•์ธ๋œ ์ ‘์† ์‹œ๊ฐ„์„ ํ‘œํ˜„ํ•˜๋Š” ๋„๋ฉ”์ธ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ์˜จ๋ผ์ธ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ๋งˆ์ง€๋ง‰ ์ ‘์† ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ํ˜„์žฌ ๋กœ๊ทธ์ธํ•œ ์œ ์ €๋กœ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•˜์„ธ์š”.
      • ๋งˆ์ง€๋ง‰ ์ ‘์† ์‹œ๊ฐ„์ด ํ˜„์žฌ ์‹œ๊ฐ„์œผ๋กœ๋ถ€ํ„ฐ 5๋ถ„ ์ด๋‚ด์ด๋ฉด ํ˜„์žฌ ์ ‘์† ์ค‘์ธ ์œ ์ €๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค.
  • BinaryContent
    • ์ด๋ฏธ์ง€, ํŒŒ์ผ ๋“ฑ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋„๋ฉ”์ธ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€, ๋ฉ”์‹œ์ง€์— ์ฒจ๋ถ€๋œ ํŒŒ์ผ์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ์ˆ˜์ • ๋ถˆ๊ฐ€๋Šฅํ•œ ๋„๋ฉ”์ธ ๋ชจ๋ธ๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ updatedAt ํ•„๋“œ๋Š” ์ •์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • User, Message ๋„๋ฉ”์ธ ๋ชจ๋ธ๊ณผ์˜ ์˜์กด ๊ด€๊ณ„ ๋ฐฉํ–ฅ์„ฑ์„ ์ž˜ ๊ณ ๋ คํ•˜์—ฌ id ์ฐธ์กฐ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”.
  • ๊ฐ ๋„๋ฉ”์ธ ๋ชจ๋ธ ๋ณ„ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ ์–ธํ•˜์„ธ์š”.

  • ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๊ตฌํ˜„์ฒด(File, JCF)๋Š” ์•„์ง ๊ตฌํ˜„ํ•˜์ง€ ๋งˆ์„ธ์š”. ์ด์–ด์ง€๋Š” ์„œ๋น„์Šค ๊ณ ๋„ํ™” ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค์— ๋ฉ”์†Œ๋“œ๊ฐ€ ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ์–ด์š”.


3-3. DTO ํ™œ์šฉํ•˜๊ธฐ

1) UserService ๊ณ ๋„ํ™”

  • ๊ณ ๋„ํ™”
    • create
      • ์„ ํƒ์ ์œผ๋กœ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ™์ด ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      • DTO๋ฅผ ํ™œ์šฉํ•ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ทธ๋ฃนํ™”ํ•ฉ๋‹ˆ๋‹ค.
        • ์œ ์ €๋ฅผ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ, ํ”„๋กœํ•„ ์ด๋ฏธ์ง€๋ฅผ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ ๋“ฑ
      • username๊ณผ email์€ ๋‹ค๋ฅธ ์œ ์ €์™€ ๊ฐ™์œผ๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค.
      • UserStatus๋ฅผ ๊ฐ™์ด ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • find, findAll
      • DTO๋ฅผ ํ™œ์šฉํ•˜์—ฌ:
        • ์‚ฌ์šฉ์ž์˜ ์˜จ๋ผ์ธ ์ƒํƒœ ์ •๋ณด๋ฅผ ๊ฐ™์ด ํฌํ•จํ•˜์„ธ์š”.
        • ํŒจ์Šค์›Œ๋“œ ์ •๋ณด๋Š” ์ œ์™ธํ•˜์„ธ์š”.
    • update
      • ์„ ํƒ์ ์œผ๋กœ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      • DTO๋ฅผ ํ™œ์šฉํ•ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ทธ๋ฃนํ™”ํ•ฉ๋‹ˆ๋‹ค.
        • ์ˆ˜์ • ๋Œ€์ƒ ๊ฐ์ฒด์˜ id ํŒŒ๋ผ๋ฏธํ„ฐ, ์ˆ˜์ •ํ•  ๊ฐ’ ํŒŒ๋ผ๋ฏธํ„ฐ
    • delete
      • ๊ด€๋ จ๋œ ๋„๋ฉ”์ธ๋„ ๊ฐ™์ด ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
        • BinaryContent(ํ”„๋กœํ•„), UserStatus
  • ์˜์กด์„ฑ
    • ๊ฐ™์€ ๋ ˆ์ด์–ด ๊ฐ„ ์˜์กด์„ฑ ์ฃผ์ž…์€ ์ˆœํ™˜ ์ฐธ์กฐ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ์ง€์–‘ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ Service ๋Œ€์‹  ํ•„์š”ํ•œ Repository ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•ด๋ณด์„ธ์š”.


2) AuthService ๊ตฌํ˜„

  • login
    • username, password๊ณผ ์ผ์น˜ํ•˜๋Š” ์œ ์ €๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
      • ์ผ์น˜ํ•˜๋Š” ์œ ์ €๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ: ์œ ์ € ์ •๋ณด ๋ฐ˜ํ™˜
      • ์ผ์น˜ํ•˜๋Š” ์œ ์ €๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ: ์˜ˆ์™ธ ๋ฐœ์ƒ
      • DTO๋ฅผ ํ™œ์šฉํ•ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ทธ๋ฃนํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜์กด์„ฑ
    • ๊ฐ™์€ ๋ ˆ์ด์–ด ๊ฐ„ ์˜์กด์„ฑ ์ฃผ์ž…์€ ์ˆœํ™˜ ์ฐธ์กฐ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ์ง€์–‘ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ Service ๋Œ€์‹  ํ•„์š”ํ•œ Repository ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•ด๋ณด์„ธ์š”.


3) ChannelService ๊ณ ๋„ํ™”

  • ๊ณ ๋„ํ™”
    • create
      • PRIVATE ์ฑ„๋„๊ณผ PUBLIC ์ฑ„๋„์„ ์ƒ์„ฑํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
      • ๋ถ„๋ฆฌ๋œ ๊ฐ๊ฐ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ DTO๋ฅผ ํ™œ์šฉํ•ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ทธ๋ฃนํ™”ํ•ฉ๋‹ˆ๋‹ค.
      • PRIVATE ์ฑ„๋„์„ ์ƒ์„ฑํ•  ๋•Œ:
        • ์ฑ„๋„์— ์ฐธ์—ฌํ•˜๋Š” User์˜ ์ •๋ณด๋ฅผ ๋ฐ›์•„ User ๋ณ„ ReadStatus ์ •๋ณด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
        • name๊ณผ description ์†์„ฑ์€ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.
      • PUBLIC ์ฑ„๋„์„ ์ƒ์„ฑํ•  ๋•Œ์—๋Š” ๊ธฐ์กด ๋กœ์ง์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
    • find
      • DTO๋ฅผ ํ™œ์šฉํ•˜์—ฌ:
        • ํ•ด๋‹น ์ฑ„๋„์˜ ๊ฐ€์žฅ ์ตœ๊ทผ ๋ฉ”์‹œ์ง€์˜ ์‹œ๊ฐ„ ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
        • PRIVATE ์ฑ„๋„์ธ ๊ฒฝ์šฐ ์ฐธ์—ฌํ•œ User์˜ id ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
    • findAll
      • DTO๋ฅผ ํ™œ์šฉํ•˜์—ฌ:
        • ํ•ด๋‹น ์ฑ„๋„์˜ ๊ฐ€์žฅ ์ตœ๊ทผ ๋ฉ”์‹œ์ง€์˜ ์‹œ๊ฐ„ ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
        • PRIVATE ์ฑ„๋„์ธ ๊ฒฝ์šฐ ์ฐธ์—ฌํ•œ User์˜ id ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
      • ํŠน์ • User๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” Channel ๋ชฉ๋ก์„ ์กฐํšŒํ•˜๋„๋ก ์กฐํšŒ ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•˜๊ณ , ๋ฉ”์†Œ๋“œ ๋ช…์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. findAllByUserId
      • PUBLIC ์ฑ„๋„ ๋ชฉ๋ก์€ ์ „์ฒด ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
      • PRIVATE ์ฑ„๋„์€ ์กฐํšŒํ•œ User๊ฐ€ ์ฐธ์—ฌํ•œ ์ฑ„๋„๋งŒ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
    • update
      • DTO๋ฅผ ํ™œ์šฉํ•ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ทธ๋ฃนํ™”ํ•ฉ๋‹ˆ๋‹ค.
        • ์ˆ˜์ • ๋Œ€์ƒ ๊ฐ์ฒด์˜ id ํŒŒ๋ผ๋ฏธํ„ฐ, ์ˆ˜์ •ํ•  ๊ฐ’ ํŒŒ๋ผ๋ฏธํ„ฐ
      • PRIVATE ์ฑ„๋„์€ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
    • delete
      • ๊ด€๋ จ๋œ ๋„๋ฉ”์ธ๋„ ๊ฐ™์ด ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
        • Message, ReadStatus
  • ์˜์กด์„ฑ
    • ๊ฐ™์€ ๋ ˆ์ด์–ด ๊ฐ„ ์˜์กด์„ฑ ์ฃผ์ž…์€ ์ˆœํ™˜ ์ฐธ์กฐ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ์ง€์–‘ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ Service ๋Œ€์‹  ํ•„์š”ํ•œ Repository ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•ด๋ณด์„ธ์š”.


4) MessageService ๊ณ ๋„ํ™”

  • ๊ณ ๋„ํ™”
    • create
      • ์„ ํƒ์ ์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฒจ๋ถ€ํŒŒ์ผ์„ ๊ฐ™์ด ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      • DTO๋ฅผ ํ™œ์šฉํ•ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ทธ๋ฃนํ™”ํ•ฉ๋‹ˆ๋‹ค.
    • findAll
      • ํŠน์ • Channel์˜ Message ๋ชฉ๋ก์„ ์กฐํšŒํ•˜๋„๋ก ์กฐํšŒ ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•˜๊ณ , ๋ฉ”์†Œ๋“œ ๋ช…์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. findallByChannelId
    • update
      • DTO๋ฅผ ํ™œ์šฉํ•ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ทธ๋ฃนํ™”ํ•ฉ๋‹ˆ๋‹ค.
        • ์ˆ˜์ • ๋Œ€์ƒ ๊ฐ์ฒด์˜ id ํŒŒ๋ผ๋ฏธํ„ฐ, ์ˆ˜์ •ํ•  ๊ฐ’ ํŒŒ๋ผ๋ฏธํ„ฐ
    • delete
      • ๊ด€๋ จ๋œ ๋„๋ฉ”์ธ๋„ ๊ฐ™์ด ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
        • ์ฒจ๋ถ€ํŒŒ์ผ(BinaryContent)
  • ์˜์กด์„ฑ
    • ๊ฐ™์€ ๋ ˆ์ด์–ด ๊ฐ„ ์˜์กด์„ฑ ์ฃผ์ž…์€ ์ˆœํ™˜ ์ฐธ์กฐ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ์ง€์–‘ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ Service ๋Œ€์‹  ํ•„์š”ํ•œ Repository ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•ด๋ณด์„ธ์š”.


5) ReadStatusService ๊ตฌํ˜„

  • create
    • DTO๋ฅผ ํ™œ์šฉํ•ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ทธ๋ฃนํ™”ํ•ฉ๋‹ˆ๋‹ค.
    • ๊ด€๋ จ๋œ Channel์ด๋‚˜ User๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
    • ๊ฐ™์€ Channel๊ณผ User์™€ ๊ด€๋ จ๋œ ๊ฐ์ฒด๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๋ฉด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
  • find
    • id๋กœ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
  • findAllByUserId
    • userId๋ฅผ ์กฐ๊ฑด์œผ๋กœ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
  • update
    • DTO๋ฅผ ํ™œ์šฉํ•ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ทธ๋ฃนํ™”ํ•ฉ๋‹ˆ๋‹ค.
      • ์ˆ˜์ • ๋Œ€์ƒ ๊ฐ์ฒด์˜ id ํŒŒ๋ผ๋ฏธํ„ฐ, ์ˆ˜์ •ํ•  ๊ฐ’ ํŒŒ๋ผ๋ฏธํ„ฐ
  • delete
    • id๋กœ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
  • ์˜์กด์„ฑ
    • ๊ฐ™์€ ๋ ˆ์ด์–ด ๊ฐ„ ์˜์กด์„ฑ ์ฃผ์ž…์€ ์ˆœํ™˜ ์ฐธ์กฐ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ์ง€์–‘ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ Service ๋Œ€์‹  ํ•„์š”ํ•œ Repository ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•ด๋ณด์„ธ์š”.


6) UserStatusService ๊ณ ๋„ํ™”

  • create
    • DTO๋ฅผ ํ™œ์šฉํ•ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ทธ๋ฃนํ™”ํ•ฉ๋‹ˆ๋‹ค.
    • ๊ด€๋ จ๋œ User๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
    • ๊ฐ™์€ User์™€ ๊ด€๋ จ๋œ ๊ฐ์ฒด๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๋ฉด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
  • find
    • id๋กœ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
  • findAll
    • ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
  • update
    • DTO๋ฅผ ํ™œ์šฉํ•ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ทธ๋ฃนํ™”ํ•ฉ๋‹ˆ๋‹ค.
      • ์ˆ˜์ • ๋Œ€์ƒ ๊ฐ์ฒด์˜ id ํŒŒ๋ผ๋ฏธํ„ฐ, ์ˆ˜์ •ํ•  ๊ฐ’ ํŒŒ๋ผ๋ฏธํ„ฐ
  • updateByUserId
    • userId ๋กœ ํŠน์ • User์˜ ๊ฐ์ฒด๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  • delete
    • id๋กœ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
  • ์˜์กด์„ฑ
    • ๊ฐ™์€ ๋ ˆ์ด์–ด ๊ฐ„ ์˜์กด์„ฑ ์ฃผ์ž…์€ ์ˆœํ™˜ ์ฐธ์กฐ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ์ง€์–‘ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ Service ๋Œ€์‹  ํ•„์š”ํ•œ Repository ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•ด๋ณด์„ธ์š”.


7) BinaryContentService ๊ตฌํ˜„

  • create
    • DTO๋ฅผ ํ™œ์šฉํ•ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ทธ๋ฃนํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • find
    • id๋กœ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
  • findAllByIdIn
    • id ๋ชฉ๋ก์œผ๋กœ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
  • delete
    • id๋กœ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
  • ์˜์กด์„ฑ
    • ๊ฐ™์€ ๋ ˆ์ด์–ด ๊ฐ„ ์˜์กด์„ฑ ์ฃผ์ž…์€ ์ˆœํ™˜ ์ฐธ์กฐ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ์ง€์–‘ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ Service ๋Œ€์‹  ํ•„์š”ํ•œ Repository ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•ด๋ณด์„ธ์š”.


8) ์ƒˆ๋กœ์šด ๋„๋ฉ”์ธ Repository ๊ตฌํ˜„์ฒด ๊ตฌํ˜„

  • ์ง€๊ธˆ๊นŒ์ง€ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์„ค๊ณ„ํ•œ ๊ฐ๊ฐ์˜ Repository๋ฅผ JCF, File๋กœ ๊ฐ๊ฐ ๊ตฌํ˜„ํ•˜์„ธ์š”.


4. ์‹ฌํ™” ์š”๊ตฌ์‚ฌํ•ญ

4-1. Bean ๋‹ค๋ฃจ๊ธฐ

  • Repository ๊ตฌํ˜„์ฒด ์ค‘์— ์–ด๋–ค ๊ตฌํ˜„์ฒด๋ฅผ Bean์œผ๋กœ ๋“ฑ๋กํ• ์ง€ Java ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ ์—†์ด application.yaml ์„ค์ • ๊ฐ’์„ ํ†ตํ•ด ์ œ์–ดํ•ด๋ณด์„ธ์š”.

    # application.yaml
    discodeit:
      repository:
        type: jcf # jcf | file
    
    • discodeit.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
    

Leave a comment