Skip to content

Team-Coverflow/Backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿš€ ๊ธฐ์ˆ  ์Šคํƒ

image

๐Ÿš€ ํ”„๋กœ์ ํŠธ ์•„ํ‚คํ…์ฒ˜

image

โœˆ ๊ธฐ๋ณธ

  • ํด๋ž˜์Šค ์„ ์–ธ๋ถ€์™€ ํ•„๋“œ ์‚ฌ์ด์— ๊ณต๋ฐฑ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•œ๋‹ค.

  • ์–ด๋…ธํ…Œ์ด์…˜์€ ํด๋ž˜์Šค ํ˜น์€ ๋ฉ”์„œ๋“œ์™€ ๊ฐ€์žฅ ๊ด€๋ จ๋œ ๊ฒƒ์„ ์„ ์–ธ๋ถ€์™€ ๊ฐ€๊น๊ฒŒ ํ•œ๋‹ค.

  • ๊ฐ์ฒด ํ•„๋“œ, ๋ฉ”์„œ๋“œ ํŒŒ๋ผ๋ฏธํ„ฐ, ๋ณ€์ˆ˜ ๋“ฑ ์žฌํ• ๋‹น์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ’์ด๋ฉด final์„ ๋ถ™์ธ๋‹ค.

  • ํŒจํ‚ค์ง€๋ช…์€ ๋‹จ์ˆ˜๋กœ ํ•œ๋‹ค.

  • DTO๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ 3๊ฐœ ์ด์ƒ์ผ ๊ฒฝ์šฐ ์ƒ์„ฑํ•œ๋‹ค.

  • ์ƒ์„ฑ์ž ์„ ์–ธ ์ˆœ์„œ

1. ๊ธฐ๋ณธ ์ƒ์„ฑ์ž
2. ๋ชจ๋“  ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›๋Š” ์ƒ์„ฑ์ž
3. ์ดํ›„ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋งŽ์€ ์ƒ์„ฑ์ž๊ฐ€ ์ƒ๋‹จ์— ์˜ค๋„๋ก ์„ ์–ธ

โœˆ Class

  • ๊ธฐ๋Šฅ๋“ค์˜ ์˜์กด์„ฑ์„ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•ด ์œ ์ง€/๋ณด์ˆ˜๋ฅผ ์œ„ํ•ด ๋„๋ฉ”์ธ ๋‹จ์œ„๋กœ ํŒจํ‚ค์ง€๋ฅผ ๋‚˜๋ˆˆ๋‹ค.

  • application์€ service, domain์€ entity/repository, presentation์€ controller ๊ฐ์ฒด๋“ค์„ ํฌํ•จํ•œ๋‹ค.

  • dto์™€ exception์€ ํŠน์ • ๋„๋ฉ”์ธ ํ•˜์œ„์—์„œ ๊ตฌํ˜„ํ•œ๋‹ค.

src
  โ”” main
    โ”” java
      โ”” com
        โ”” coverflow
          โ”” config
          โ”” member
            โ”” application
              โ”” MemberService.java
            โ”” domain
              โ”” Member.java
              โ”” MemberRepository.java
            โ”” dto
              โ”” request
              โ”” response
            โ”” exception
              โ”” InvalidMemberException.java
            โ”” presentation
              โ”” MemberController.java
          โ”” board
            โ”” application
            โ”” ...
          โ”” ...
  • ๊ฐ์ฒด ๋„ค์ด๋ฐ์€ ๋‹ค์Œ์„ ๋”ฐ๋ฅธ๋‹ค.
Entity(๋„๋ฉ”์ธ) + Controller/Service/Repository/...

โœˆ Method

Presentation Layer

  • CUD๋Š” save, update, delete๋กœ ํ†ต์ผํ•œ๋‹ค.

  • ๋‹จ์ผ๊ฑด์— ๋Œ€ํ•œ Read์˜ ๊ฒฝ์šฐ์—๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋”ฐ๋ผ ์ •ํ•œ๋‹ค. findById(final long Id)

  • ๋ณต์ˆ˜๊ฑด์— ๋Œ€ํ•œ Read์˜ ๊ฒฝ์šฐ ๋ฉ”์„œ๋“œ ๋„ค์ž„์— ๋„๋ฉ”์ธ ๋ณต์ˆ˜๋ช…๊ณผ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋Œ€ํ•ด์„œ ์ž‘์„ฑํ•œ๋‹ค. findByMemberId(final long memberId)

  • Read๋ฅผ ํ•  ๋•Œ URL์ด /me๋กœ ๋๋‚˜๋Š” ๊ฒฝ์šฐ My๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฉ”์„œ๋“œ ๋„ค์ด๋ฐ์œผ๋กœ ์ž‘์„ฑํ•œ๋‹ค. url : /api/category/me -> findMyCategories(final long MemberId)

Service Layer

  • CUD๋Š” ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์„œ๋“œ์™€ ๋„ค์ด๋ฐ์„ ํ†ต์ผํ•œ๋‹ค.

  • Read์˜ ๊ฒฝ์šฐ์—๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋”ฐ๋ผ ๋„ค์ด๋ฐ์„ ์ •ํ•œ๋‹ค. findByIdAndMemberId(final long Id, final long memberId)

  • ๊ฒ€์ฆ ๋กœ์ง์„ Repository์—์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค. existCategory(final long Id)

  • ๋ถˆ๊ฐ€ํ”ผํ•˜๊ฒŒ ๊ฒ€์ฆ ๋กœ์ง์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ validate๋กœ ์‹œ์ž‘ํ•˜๊ณ  ๊ฒ€์ฆํ•˜๋ ค๋Š” ๋กœ์ง์— ๋Œ€ํ•ด์„œ ์ ๋Š”๋‹ค. validateExistCategory(final long Id)

Repository Layer

  • Spring Data JPA๊ฐ€ ์ง€์›ํ•˜๋Š” ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋„ค์ด๋ฐ ๋ฐฉ์‹๊ณผ ํ†ต์ผํ•œ๋‹ค. [Spring Data JPA ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ]

  • ์กฐํšŒ์— ๊ด€ํ•œ ๋ฉ”์„œ๋“œ๋Š” find์œผ๋กœ ์‹œ์ž‘ํ•œ๋‹ค.

โœˆ DTO

  • DTO(Data Transfer Object)๋Š” Request์™€ Response๋กœ ๋‚˜๋ˆ„์–ด ์ œ์ž‘ํ•œ๋‹ค. SignUpRequest, SignUpResponse

โœˆ Test Code

  • ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ๋ช…์€ ์˜์–ด๋กœ, @DisplayName์„ ํ•œ๊ธ€๋กœ ์ž‘์„ฑํ•œ๋‹ค.

  • ํ…Œ์ŠคํŠธ๊ฐ€ ์–ด๋ ค์šด ์™ธ๋ถ€ ์„œ๋น„์Šค๋Š” Test Double์„ ์ ์šฉํ•œ๋‹ค.

  • Test Fixture๋Š” Inner Class๋ฅผ ํ™œ์šฉํ•œ ๋ฉ”์„œ๋“œ ์ฒด์ด๋‹์„ ์ ๊ทน ํ™œ์šฉํ•œ๋‹ค.

  • ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค์˜ bean์ฃผ์ž…์€ ํ•„๋“œ ์ฃผ์ž…์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • given, when, then ์ฃผ์„์„ ๋ช…์‹œ์ ์œผ๋กœ ๋ถ™์ธ๋‹ค. ์ƒ๋žตํ•˜์ง€ ์•Š๋Š”๋‹ค.

    • given, when, then ์ ˆ์„ ๋‚˜๋ˆ„๊ธฐ ๊ณค๋ž€ํ•œ ๊ฒฝ์šฐ given, when & then์ฒ˜๋Ÿผ & ์œผ๋กœ ํ•ฉ์ณ์„œ ์ž‘์„ฑํ•œ๋‹ค.
      // given & when
      // when & then
      // given & when & then
      
  • ์˜ˆ์™ธ ์ผ€์ด์Šค์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ ๋„ค์ด๋ฐ์€ ~ ํ•˜๋ฉด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.๋กœ ํ†ต์ผํ•œ๋‹ค.

 @Test
 @DisplayName("์—†๋Š” ์ด๋ฏธ์ง€๋ฅผ ์กฐํšŒํ•˜๋ฉด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.")
 void failIfNotExistsImage() {
     // given
     // when & then
 }
  • ์ž‘์€ ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ @Nested๋ฅผ ์‚ฌ์šฉํ•ด ํด๋ž˜์Šค๋กœ ๊ทธ๋ฃนํ™”ํ•œ๋‹ค.
 @Nested
 @DisplayName("์นดํ…Œ๊ณ ๋ฆฌ ์ƒ์„ฑ ์‹œ")
 class createCategory{

     @Test
     @DisplayName("์นดํ…Œ๊ณ ๋ฆฌ ์ƒ์„ฑ์— ์„ฑ๊ณตํ•œ๋‹ค.")
      void success() {
          // given
          // when
          // then
      }
 }