Skip to content

Netfilx2/Backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

61 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

1

URL : http://2netflix.s3-website.ap-northeast-2.amazonaws.com/

๐Ÿ™Œ ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

๋„ทํ”Œ๋ฆญ์Šค ํด๋ก  ์ฝ”๋”ฉ

๐Ÿ—“ ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„

2022๋…„ 08์›” 19์ผ ~ 2022๋…„ 8์›” 25์ผ (1์ฃผ)

โš’๏ธ ํ”„๋กœ์ ํŠธ ์•„ํ‚คํ…์ฒ˜

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

๐Ÿ˜Ž ๋ฐฑ์—”๋“œ ํŒ€์› ์†Œ๊ฐœ

์ด๋ฆ„ ๊นƒํ—ˆ๋ธŒ ์ฃผ์†Œ
๋ฐ•๋ฏผ์ค€ https://github.com/pmjn1025
๋ฅ˜์ง€์šฐ https://github.com/ryujiwoo184
ํ•œ๋™ํ›ˆ https://github.com/hdonghun

๐Ÿ“š ์™€์ด์–ด ํ”„๋ ˆ์ž„ / API ๋ช…์„ธ์„œ

์—ฌ๊ธฐ๋ฅผ ๋ˆŒ๋Ÿฌ์ฃผ์„ธ์š”

๐Ÿ“š ๋Œ€์‹œ๋ณด๋“œ

์—ฌ๊ธฐ๋ฅผ ๋ˆŒ๋Ÿฌ์ฃผ์„ธ์š”

ํ”„๋กœ์ ํŠธ์˜ ํŒจํ‚ค์ง€ ๊ตฌ์„ฑ

โ”œโ”€โ”€ ๐Ÿ—‚backend

โ”œโ”€โ”€ member

      |   โ”œโ”€โ”€ controller

  |    |   โ””โ”€โ”€  MemberContorller

  |   โ”œโ”€โ”€ domain

  |    |   โ””โ”€โ”€  Member

  |   โ”œโ”€โ”€ service

  |    |   โ””โ”€โ”€  MemberService

 |   โ”œโ”€โ”€ repository

 |    |   โ””โ”€โ”€  MemberRespository

โ”œโ”€โ”€ movie

  |   โ”œโ”€โ”€ controller

  |    |   โ””โ”€โ”€  MovieContorller

  |   โ”œโ”€โ”€ domain

  |    |   โ””โ”€โ”€  Movie

  |   โ”œโ”€โ”€ service

  |    |   โ””โ”€โ”€  MovieService

  |   โ”œโ”€โ”€ repository

  |    |   โ””โ”€โ”€  MovieRespository  
 
 ...

โœจ ํ•ต์‹ฌ ๊ธฐ๋Šฅ

  1. ๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž…

     : JWT๋ฅผ ์ด์šฉํ•˜์—ฌ ๋กœ๊ทธ์ธ๊ณผ ํšŒ์›๊ฐ€์ž…์„ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
    
     : ์•„์ด๋””์™€ ๋‹‰๋„ค์ž„์˜ ์ค‘๋ณตํ™•์ธ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
    
     : OAuth 2.0์„ ์ด์šฉํ•˜์—ฌ ์นด์นด์˜ค ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
    
  2. CRUD

     : ๊ฐ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์˜ํ™”/๋“œ๋ผ๋งˆ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
     
    
     : ์ข‹์•„์š” ๐Ÿ‘ ๋ฐ ์ฐœํ•˜๊ธฐ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    
  3. API

     : ์˜ํ™” ์˜คํ”ˆAPI๋ฅผ ๊ฐ€์ ธ์™€, ์‚ฌ์šฉํ•˜์—ฌ ๋„ทํ”Œ๋ฆญ์Šค ๋ฉ”์ธ ํŽ˜์ด์ง€์—์„œ ๋ณด์—ฌ์ฃผ๋Š” ๊ฑฐ ๊ฐ™์€, ์˜ํ™”,๋“œ๋ผ๋งˆ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
    

๐Ÿ”ฅ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

1. ๊ธฐ๋Šฅ๋ณ„๋กœ ๊ณ„์ธต๊ตฌ์กฐ๋ฅผ ํ†ตํ•œ ๋ช…ํ™•ํ•œ ํ”„๋กœ์ ํŠธ ์‹œ๊ฐํ™”

ํ•ด๊ฒฐ๋ฐฉ์•ˆ

  - ๊ธฐ์กด์˜ ํ”„๋กœ์ ํŠธ์— ํŒจํ‚ค์ง€ ๊ตฌ์„ฑ์— ๊น”๋”ํ•˜์ง€ ๋ชปํ•˜๊ณ , ์ฐพ๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ •๋ฆฌ๊ฐ€ ์ž˜ ๋˜์ง€ ์•Š์€ ๊ฒƒ์„ ๋А๋ผ๊ณ , 
ํ”„๋กœ์ ํŠธ๋ฅผ ๊ณ„์† ์ง„ํ–‰ํ•˜๋ฉด์„œ ํŒจํ‚ค์ง€๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ•  ๊ฒƒ์ธ๊ฐ€์— ๊ณ ๋ฏผ์ด ์ƒ๊ฒผ๋‹ค. ํ”„๋กœ์ ํŠธ์˜ ํŒจํ‚ค์ง€ ๊ตฌ์„ฑ์€ ๊ณ„์ธต๋ณ„, ๊ธฐ๋Šฅ๋ณ„ ๊ตฌ์„ฑ์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. 

1.๊ธฐ๋Šฅ๋ณ„๋กœ ๋‚˜๋ˆ„๊ณ  ๊ณ„์ธต๋ณ„๋กœ ๋‚˜๋ˆ„๊ธฐ 
- ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ๊ณผ ์—ญํ• ์— ๋”ฐ๋ผ์„œ ํŒจํ‚ค์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 
์˜ˆ๋ฅผ ๋“ค์–ด Member์˜ ์ •๋ณด๋ฅผ ๊ด€์—ฌํ•˜๋Š” ํŒจํ‚ค์ง€๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค๋ฉด, memberํŒจํ‚ค์ง€ ์•ˆ์— domain, service, dto, repository๊ฐ€ ํฌํ•จ๋˜์–ด ๊ตฌ์„ฑ๋˜๊ฒŒ ๋œ๋‹ค. 
ํ”„๋กœ์ ํŠธ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ํŒจํ‚ค์ง€ ์•ˆ์˜ ํด๋ž˜์Šค ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋Šฅ๋ณ„ ๊ตฌ์„ฑ์ด ์žฌ์‚ฌ์šฉ์„ฑ์ด ์ข‹๊ณ  Package Principle์„ ์ž˜ ์ง€ํ‚ค๊ธฐ๋Š” ์ด์ ์ด ์žˆ์–ด, ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์ •๋ฆฌ๋ฅผ ํ•˜์˜€์Œ.

image


2. ์ข‹์•„์š” ๊ธฐ๋Šฅ

ํ•ด๊ฒฐ๋ฐฉ์•ˆ

  - - ERD๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑํ–ˆ์ง€๋งŒ ์—ฐ๊ด€๊ด€๊ณ„, oneTomany์™€ manyToOne์— ๋Œ€ํ•œ ๊ฐ๊ฐ ์ดํ•ด๊ฐ€ ๋ถ€์กฑํ•ด, ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Œ

image


OneToMany(1 : N) ๋ฅผ ์‚ฌ์šฉ์‹œ : ์ฐธ์กฐ๊ฐ’ Like๊ฐ€ ์—ฌ๋Ÿฌ movie์— ์ ์šฉ๋œ๋‹ค ์ƒ๊ฐํ•ด OneToMany๋ฅผ ์ ์šฉ์‹œ์ผœ๋ด„
โ‡’ ์—ฐ๊ด€๊ด€๊ณ„ ์žฌํ™•์ธ ๋ฐ ์ˆ˜์ • ํ›„ ์žฌ์‹คํ–‰์‹œ ๋น„๋””์˜ค ์ „์ฒด์— ์ข‹์•„์š” ์นด์šดํŠธ ์ฆ๊ฐ€

ManyToOne(N : 1) ์‚ฌ์šฉ : ์—ฌ๋Ÿฌ movie๋ฅผ ์ข‹์•„์š” ํ•  ์ˆ˜ ์žˆ๊ณ  ๊ณ ์œ  ๊ณ„์ •์œผ๋กœ ํ•˜๋‚˜์˜ ์˜ํ™”์—๋งŒ ์ข‹์•„์š” ๊ฐ€๋Šฅ

โ‡’ ์–ด๋–ค ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ƒ๋Œ€ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋ฐ”๋ผ๋ณด๋А๋ƒ์— ๋”ฐ๋ผ ๋‹ค์ค‘์„ฑ์ด ๋‹ค๋ฅธ๊ฒŒ ๋จ



3. Pagination์‹œ nullpointException ๋ฐœ์ƒ

ํ•ด๊ฒฐ๋ฐฉ์•ˆ

์ตœ์ดˆ ๋ฌธ์ œ ๋ฐœ์ƒ
  • Spring์œผ๋กœ ํŽ˜์ด์ง•์„ ๊ณต๋ถ€ํ•˜๋˜ ์ค‘ ๊ธฐ๋ณธ์˜ˆ์ œ๋ฅผ ์‘์šฉํ•˜์—ฌ ๋‚ด ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•œ ํ›„ ์„œ๋ฒ„ ์‹œ์ž‘์‹œ ๋ฐ”๋กœ nullpointException ๋ฐœ์ƒ.
  • A.ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ
    • ํด๋ผ์ด์–ธํŠธ์— internal server error 500 ๋ฐœ์ƒ
  • B. ์„œ๋ฒ„์ƒํƒœ
    • videoRepository.findAll(pageable)์—์„œ null๋ฐœ์ƒ.
  • c. ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ •๋ณด
    • DB์—๋Š” ์˜ํ™”๋ฐ์ดํ„ฐ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ €์žฅ๋˜์–ด์žˆ์Œ.
    • Videoํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์€ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•จ.

Trouble Shooting

์›์ธ ํƒ์ƒ‰ ๊ณผ์ •

  1. ํด๋ผ์ด์–ธํŠธ๋Š” ๋‹น์—ฐํžˆ 500error๊ฐ€ ๋ฐœ์ƒ ํ•  ์ˆ˜ ๋ฐ–์— ์—†์Œ.
  2. DB์— ์ •์ƒ์ ์œผ๋กœ ์ €์žฅ๋˜๊ณ  ๊ด€๋ จ๊ธฐ๋Šฅ์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ
  3. ์„œ๋ฒ„๋‚˜ ๊ธฐํƒ€ ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ๋ถ€๋ถ„์—์„œ ์ด์ƒํ•œ์ ๊ณผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ
  4. videoRepository.findAll(pageable) ๋ถ€๋ถ„์—์„œ๋งŒ nullpointException ์ด ๋ฐœ์ƒํ•จ.
  • ๋”ฐ๋ผ์„œ ๋‚ด๊ฐ€ ๊ฐ€์ ธ์˜จ ์˜ˆ์ œ ์ฝ”๋“œ๊ฐ€ ์ž˜๋ชป๋œ ์ฝ”๋“œ๋ผ๊ณ  ํŒ๋‹จํ•จ.
 @GetMapping("/video/pagination")
    public ResponseEntity MoviePagination(final Pageable pageable) {
        Page<Video> videos =
        videoRepository.findAll(pageable);
        return new ResponseEntity<>(posts,HttpStatus.OK);
    }
@Repository
public interface VideoRepository extends JpaRepository<Video, Long> {

   }

์›์ธ ํŒŒ์•…

  1. DB์—์„œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ ์ „๋ถ€๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
  2. ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญ๋ฐ›์€ ๊ธฐ์ค€์œผ๋กœ ๋ถ„๋ฅ˜ํ•œ๋‹ค(Sort) --> null์ด๋จ.
  3. ๋ถ„๋ฅ˜ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„์ฆˆ๋‹ˆ์Šค๋กœ์ง์—์„œ ๋ฐ›์•„์„œ ๋‹ค์‹œ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์ „์†กํ•œ๋‹ค.
  4. ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ํŽ˜์ด์ง•ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ตํ•œ๋‹ค.
  • 2๋ฒˆ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•จ.

๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ์ด์œ .

image

  • JpaRepository๋ฅผ ์ƒ์†๋ฐ›์€ Repository๋Š” ํŽ˜์ด์ง•๊ด€๋ จ Repository๋„ ์ƒ์†๋ฐ›์•„์„œ db์—์„œ ๊ฐ€์ ธ์˜ฌ๋•Œ ํŽ˜์ด์ง•ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฅ˜ํ•ด์„œ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ทธ๋Ÿฐ๋ฐ ๋‚˜๋Š” Pageable๋งŒ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ์ด Pageable๋งŒ ์‚ฌ์šฉํ–ˆ์ง€ ํ•ด๋‹น ๋ถ„๋ฅ˜๋‚ด์šฉ์„ ๋‚ด๊ฐ€ ์ง€์ •ํ•˜์ง€ ์•Š์•˜๋˜ ๊ฒƒ์ด๋‹ค.

image

  • ๋”ฐ๋ผ์„œ ํ•ด๋‹น ๋ถ„๋ฅ˜๋œ ๋‚ด์šฉ์„ ์ง€์ •ํ•˜์ง€ ์•Š์•˜์œผ๋‹ˆ null์ด ๋˜๊ณ  nullpointException์ด ๋ฐœ์ƒํ•œ ๊ฒƒ์ด์—ˆ๋‹ค.

๋ฌธ์ œ ํ•ด๊ฒฐ

  • Pageable์˜ ๊ฐ’์„ ์ง€์ •ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ๊ฐ ๋ฐ์ดํ„ฐ๊ฐ’์„ ์š”์ฒญ๋ฐ›์Œ
@GetMapping("/video/pagination")
    public ResponseDto<?> getPaging(
            @RequestParam("page") int page,
            @RequestParam("size") int size,
            @RequestParam("sortBy") String sortBy,
            @RequestParam("isAsc") boolean isAsc

    ) {
        page = page - 1;
        return pagingService.getPagenation(page, size,sortBy,isAsc);
    }

โ€ข ์ฐธ๊ณ  : @RequestParam("sortBy") String sortBy ์ด๋ถ€๋ถ„ DESC๋‚˜ ASC์™€ ๊ฐ™์ด OrderBy๊ฐ€ ์•„๋‹ˆ๋ผ id, title๊ณผ ๊ฐ™์€ ๋ถ„๋ฅ˜๊ธฐ์ค€์ด๋‹ค.

 @Transactional
    public ResponseDto<?> getPagenation(int page, int size, String sortBy, boolean isAsc) {

        Sort.Direction direction = isAsc ? Sort.Direction.ASC : Sort.Direction.DESC;
        Sort sort = Sort.by(direction, sortBy);
        Pageable pageable = PageRequest.of(page, size,sort);
        Page<Video> videos = videoRepository.findAll(pageable);

        List<VideoResponseDto> videoResponseDtoList = new ArrayList<>();

        for (Video video : videos){

            videoResponseDtoList.add(
                    VideoResponseDto.builder()
                            .id(video.getId())
                            .title(video.getTitle())
                            .poster_path(video.getPosterPath())
                            .overview(video.getOverview())
                            .first_date(video.getRelease_date())
                            .grade(video.getPopularity())
                            .youtubePath(video.getYoutubePath())
                            .backdrop_path(video.getBackdrop_path())
                            .homepage(video.getHomepage())
                            .likeCnt(video.getLikeCnt())
                            .build()
            );

        }

        return ResponseDto.success(videoResponseDtoList);

    }

โ€ข ๋งˆ์ง€๋ง‰์œผ๋กœ Repository์—์„œ๋„ ์ •์˜ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์•ผ ํ•ด๋‹น๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋ถ„๋ฅ˜ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ด์ค€๋‹ค.

@Repository
public interface VideoRepository extends JpaRepository<Video, Long> {

    Page<Video> findAll(Pageable pageable);
}

ํ•ด๊ฒฐ

ํฌ์ŠคํŠธ๋งจ์—์„œ http://localhost:8080/video/pagination?page=1&size=3&sortBy=id&isAsc=true

{
    "statusCode": 200,
    "msg": "OK",
    "data": [
        {
            "id": 2,
            "title": "๋“œ๋ž˜๊ณค๋ณผ ์Šˆํผ: ์Šˆํผ ํžˆ์–ด๋กœ",
            "poster_path": "https://image.tmdb.org/t/p/w500/uohymzBVaIYjbnoQstbnlia6ZPJ.jpg",
            "overview": "2018๋…„์— ๊ฐœ๋ด‰ํ•œ ์— ์ด์€  ์‹œ๋ฆฌ์ฆˆ์˜ ๋‘ ๋ฒˆ์งธ ์˜ํ™”",
            "first_date": "2022-06-11",
            "grade": 7195.285,
            "youtubePath": "https://www.youtube.com/embed/GD8nCSr54PA?autoplay=1&mute=1",
            "backdrop_path": "https://image.tmdb.org/t/p/w500/ugS5FVfCI3RV0ZwZtBV3HAV75OX.jpg",
            "homepage": "https://www.2022dbs-global.com",
            "likeCnt": 0
        },
        {
            "id": 9,
            "title": "ํ† ๋ฅด: ๋Ÿฌ๋ธŒ ์•ค ์ฌ๋”",
            "poster_path": "https://image.tmdb.org/t/p/w500/bZLrpWM065h5bu1msUcPmLFsHBe.jpg",
            "overview": "์ด๋„ˆํ”ผ์Šค๋ฅผ ์œ„ํ•ด ์ž์•„ ์ฐพ๊ธฐ ์—ฌ์ •์„ ๋– ๋‚œ ์ฒœ๋‘ฅ์˜ ์‹  ํ† ๋ฅด. ๊ทธ๋Ÿฌ๋‚˜, ์šฐ์ฃผ์˜ ๋ชจ๋“  ์‹ ๋“ค์„ ๋ชฐ์‚ดํ•˜๋ ค๋Š” ์‹  ๋„์‚ด์ž ๊ณ ๋ฅด์˜ ๋“ฑ์žฅ์œผ๋กœ ํ† ๋ฅด์˜ ์•ˆ์‹๋…„ ๊ณ„ํš์€ ์‚ฐ์‚ฐ์กฐ๊ฐ ๋‚˜๋ฒ„๋ฆฐ๋‹ค. ํ† ๋ฅด๋Š”์ƒˆ๋กœ์šด ์œ„ํ˜‘์— ๋งž์„œ๊ธฐ ์œ„ํ•ด, ํ‚น ๋ฐœํ‚ค๋ฆฌ, ์ฝ”๋ฅด๊ทธ, ๊ทธ๋ฆฌ๊ณ  ์ „ ์—ฌ์ž์นœ๊ตฌ ์ œ์ธ๊ณผ ์žฌํšŒํ•˜๊ฒŒ ๋˜๋Š”๋ฐ. ๊ทธ๋…€๊ฐ€ ๋ฌ ๋‹ˆ๋ฅด๋ฅผ ํœ˜๋‘๋ฅด๋Š” ๋งˆ์ดํ‹ฐ ํ† ๋ฅด๊ฐ€ ๋˜์–ด ๋‚˜ํƒ€๋‚˜ ๋ชจ๋‘๋ฅผ ๋†€๋ผ๊ฒŒ ํ•œ๋‹ค. ์ด์ œ, ํŒ€ ํ† ๋ฅด๋Š” ๊ณ ๋ฅด์˜ ๋ณต์ˆ˜์— ์–ฝํžŒ ๋ฏธ์Šคํ„ฐ๋ฆฌ๋ฅผ ๋ฐํžˆ๊ณ  ๋” ํฐ ์ „์Ÿ์„ ๋ง‰๊ธฐ ์œ„ํ•œ ์ „ ์šฐ์ฃผ์  ์Šค์ผ€์ผ์˜ ๋ชจํ—˜์„ ์‹œ์ž‘ํ•˜๋Š”๋ฐ...",
            "first_date": "2022-07-06",
            "grade": 7623.514,
            "youtubePath": "https://www.youtube.com/embed/Go8nTmfrQd8?autoplay=1&mute=1",
            "backdrop_path": "https://image.tmdb.org/t/p/w500/p1F51Lvj3sMopG948F5HsBbl43C.jpg",
            "homepage": "https://www.marvel.com/movies/thor-love-and-thunder",
            "likeCnt": 0
        },
        {
            "id": 15,
            "title": "ํ”„๋ ˆ์ด",
            "poster_path": "https://image.tmdb.org/t/p/w500/eicYAopFKOL3orcNTJZ4TGtZQQ1.jpg",
            "overview": "300๋…„ ์ „ ์•„๋ฉ”๋ฆฌ์นด, ์šฉ๋งนํ•œ ์ „์‚ฌ๋ฅผ ๊ฟˆ๊พธ๋Š” ์›์ฃผ๋ฏผ ์†Œ๋…€ ๋‚˜๋ฃจ๋Š” ๊ฐ‘์ž‘์Šค๋Ÿฌ์šด ๊ณฐ์˜ ์Šต๊ฒฉ์œผ๋กœ ์ ˆ์ฒด์ ˆ๋ช…์˜ ์œ„๊ธฐ์— ๋†“์ธ ์ˆœ๊ฐ„, ์ •์ฒด๋ฅผ ์•Œ ์ˆ˜ ์—†๋Š” ์™ธ๊ณ„ ํฌ์‹์ž ํ”„๋ ˆ๋ฐํ„ฐ๋ฅผ ๋ชฉ๊ฒฉํ•˜๊ฒŒ ๋œ๋‹ค.  ์ž์‹ ๋ณด๋‹ค ๊ฐ•ํ•œ ์ƒ๋Œ€๋ฅผ ํ–ฅํ•œ ๋ฌด์ž๋น„ํ•œ ์‚ฌ๋ƒฅ์„ ์‹œ์ž‘ํ•œ ํ”„๋ ˆ๋ฐํ„ฐ. ์ตœ์ฒจ๋‹จ ๊ธฐ์ˆ ๊ณผ ๋ฌด๊ธฐ๋กœ ์ง„ํ™”๋œ ์™ธ๊ณ„ ํฌ์‹์ž ํ”„๋ ˆ๋ฐํ„ฐ์˜ ์œ„ํ˜‘์ด ์ ์  ๋‹ค๊ฐ€์˜ค๊ณ  ๋‚˜๋ฃจ๋Š” ๋ถ€์กฑ์„ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด ์ž์‹ ๋งŒ์˜ ๊ธฐ์ง€์™€ ๋ฌด๊ธฐ๋กœ ์ƒ์กด์„ ๊ฑด ์‚ฌํˆฌ๋ฅผ ์‹œ์ž‘ํ•˜๋Š”๋ฐโ€ฆ",
            "first_date": "2022-08-02",
            "grade": 5763.164,
            "youtubePath": "https://www.youtube.com/embed/wZ7LytagKlc?autoplay=1&mute=1",
            "backdrop_path": "https://image.tmdb.org/t/p/w500/7ZO9yoEU2fAHKhmJWfAc2QIPWJg.jpg",
            "homepage": "https://www.20thcenturystudios.com/movies/prey",
            "likeCnt": 0
        }
    ]
}

Retrospection

  • ํŽ˜์ด์ง•์˜ ๊ตฌ์กฐ ๋ฐ ์ž‘๋™๋ฐฉ์‹ ์ฐธ๊ณ 


๐Ÿ“– ์ƒˆ๋กœ ์ ์šฉํ•ด๋ณธ ๊ธฐ์ˆ 

  • Pagination
  • themoviedb์˜คํ”ˆAPI
  • ๋„ค์ด๋ฒ„ ๊ฒ€์ƒ‰ API
  • ์นด์นด์˜ค์†Œ์…œ๋กœ๊ทธ์ธ

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages