ํฐ์คํ ๋ฆฌ ๋ทฐ
[movie PJ_day2] DOM์ ํ์ฉํ ๋ฐ๋๋ผ ์ฝ๋ฉ๐ฆ
์ฑ._. 2025. 1. 24. 19:59ํ๋ฃจ ์ข ์ผ ๋ถ์ก๊ณ ์์ผ๋ฉด์ ์๊ฒ ๋ ๊ฒ๋ค๊ณผ ํธ๋ฌ๋ธ ์ํ โ๏ธ
๊ณผ์ ์ํ ์์์ ๋ฐ๋ผ ์๊ฒ ๋ ๊ฒ๊ณผ ํธ๋ฌ๋ธ ์ํ ๋ถ๋ถ์ ์์ธํ ์ ์ด๋๊ฒ ๋ค.
๊ณผ์ ์ํ ์์
1. <script type="module"> ์ค์ ๐ก
2. html์ css ์ฐ๊ฒฐ โ๏ธ
3. css๋ก ๋ฉ์ธ ํ๋ฉด header, card ํํ ๋ง๋ค๊ธฐ
4. fetch์ ulr ๋ด์ en-US -> ko-KR๋ก ๋ณํ & url ํ๊ธํ โ๏ธ
5. ํด๋ฆญ ์ ๋์ค๋ ์นด๋ html ๋ง๋ค๊ธฐ --> ์ถํ ์ฌ์ฉ ์์
6. fetch๋ก api ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ -> ์จ๋ฒ ํ๋ก์ ํธ&์น๊ฐ๋ฐ ์ข ํฉ๋ฐ 3์ฃผ์ฐจ ์ฐธ๊ณ โจ๐ก
6-1. ์ํ ํ ๊ฐ์ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐโจ- (์ ์ฒด)data์ (๋ฌธ์์ด)’results’์ 0๋ฒ์งธ ๊ฐ
6-2. forEach๋ก ํ๋์ฉ ์ฐ์ด๋ด๊ธฐ
7. ๊ฐ์ ธ์จ ๊ฐ์ ์นด๋์ ๋์ ํ๊ธฐ ๐ก
8. ์ฌ์ง ์นด๋๋ค์ grid ๋ ์ด์์ ์คํ์ผ๋ง ๐ก
9. ์ฌ์ง ๊ฐ์ ธ์ค๊ธฐ(DOM ํ์) ๐ก
10. temp_html = ``
์๊ฒ ๋ ๊ฒ
1. Script ํ๊ทธ์ type์ด module์์ ๋ช ์ํ๊ธฐ
1-1. ๋ชจ๋ํ๋?
โธ ์ํํธ์จ์ด๋ฅผ ์์ ๋จ์์ธ ๋ชจ๋๋ก ๋ถ๋ฆฌํ์ฌ ๊ฐ๋ฐํ๋ ๋ฐฉ๋ฒ
โธ ๋ชจ๋์ ํน์ ๊ธฐ๋ฅ์ ์ํํ๋ ์์ ์ฝ๋ ๋ธ๋ก์ด๋ฉฐ ๋ชจ๋๋ผ๋ฆฌ ์ํธ์์ฉํ๋ฉด์ ์ ์ฒด ์ํํธ์จ์ด ์์คํ
์ ๊ตฌ์ถํจ
1-2. ๋ชจ๋ํ์ ํ์์ฑ?
โธ ๊ฐ๋ฐ ์๋๋ฅผ ๋์ด๊ณ ๋น์ฉ์ ์ ๊ฐํ ์ ์๋ค.
โธ ์ ์ฒด ์ฝ๋์ ์ํฅ์ ์ต์ํํ์ฌ ์ ์ง๋ณด์ ์ฉ์ด
โธ ๊ฐ๋ฐ์๊ฐ์ ๋จ์ถํ๊ณ ํจ์จ์ฑ์ ๋์ผ ์ ์์
โธ ๊ฐ ๋ชจ๋์ ํน์ ๊ธฐ๋ฅ์ ๋ด๋นํ๋ฏ๋ก ์ฝ๋์ ์๋๋ฅผ ์ดํดํ๊ธฐ ์ฝ๊ณ ๊ฐ๋
์ฑ์ด ์ข์์ง
โธ ๋น ๋ฅด๊ฒ ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ์์ ๊ฐ๋ฅ
โธ ํ์์ ๋ฐ๋ผ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋ ๊ธฐ์กด ๊ธฐ๋ฅ์ ๋ณ๊ฒฝํ๋ ์์
์ด ๋น๊ต์ ๊ฐ๋จํด์ง
โธ ๊ฐ ๋ชจ๋์ ๋
๋ฆฝ์ ์ผ๋ก ํ
์คํธ๋๋ฏ๋ก ์ ์ฒด ์์คํ
์ ํ์ง์ ๋์ผ ์ ์๋ค.
โธ ๋๊ท๋ชจ ํ๋ก์ ํธ์์์ ๋ถ์
์ด ์ฉ์ดํจ.
์ถ์ฒ:https://gyaeh-coding.tistory.com/123
6-1. ์ํ ํ ๊ฐ์ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
- (์ ์ฒด)data์ (๋ฌธ์์ด)’results’์ 0๋ฒ์งธ ๊ฐ

![]() |
![]() |
6-2. forEach๋ก ํ๋์ฉ ์ฐ์ด๋ด๊ธฐ
function popularMovie() {
const url = "https://api.themoviedb.org/3/movie/popular?api_key=${key}&language=ko-KR&page=1";
fetch(url).then(res => res.json()).then(data => {
let rows = data['results'];
rows.forEach(a => {
let title = a['title'];
let vote_aver = a['vote_average'];
console.log(title, vote_aver);
});
})
};
popularMovie();

7. ๊ฐ์ ธ์จ ๊ฐ์ ์นด๋์ ๋์ ํ๊ธฐ (-> DOM ํ์ฉ์ผ๋ก ๋ณ๊ฒฝ)
- $('#mvtitle').text(title); ์ ์๋ฌด๋ฆฌ ์ ๋ ฅํด๋ ์ฝ์ ์ฐฝ์์ $๊ฐ ์ธ์์ด ์ ๋์๋ค.

Api ์ ๋ณด Html ์ฐ๊ฒฐํ๊ธฐ๋ฅผ ์ฐพ๋ ์ค ์ด๊ฑธ ๋ณด๊ณ jquery ์ฐ๊ฒฐ ๋งํฌ๋ฅผ ๋ณต์ฌํ๋๋
(์ถ์ต ์จ๋ฒ ๋ง๋ค๊ธฐ์์ ๊ฐ์ ธ์ด)


์ํ ์ ๋ชฉ๊ณผ ํ์ ์ด ๋ด๋ค.
ํ.์ง.๋ง
์ด๊ฒ์ jQuery๋ฅผ ์ด์ฉํด์ ๊ฐํธํ๊ฒ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ!
ํ์ง๋ง ์ง๊ธ์ ๋ฐ๋๋ผ์๋ฐ์คํฌ๋ฆฝํธ๐ฆ๋ก ์์ ์ฝ๋ฉ์ ์ํด ์๋ต..
——> DOM์ ํ์ฉํ๊ธฐ !!!
document.querySelector("#id๊ฐ")
์ด๋ฐ ์์ผ๋ก ~
8. ์ฌ์ง ์นด๋๋ค์ grid ๋ ์ด์์ ์คํ์ผ๋ง
https://studiomeal.com/archives/533 ์ฐธ๊ณ ํ์ฌ
์ด๋ฒ์์ผ๋ง๋ก CSS Grid๋ฅผ ์ตํ๋ณด์
studiomeal.com
(์ ๋ง ์ ๋ฆฌ๊ฐ ์ ๋์ด์๋ค! ์ข ์ข ์ฐธ๊ณ ํ๋ ์ค)
.Cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
grid-gap: 20px;
}
์์ฑ ์๋ฃ!
9. ์ฌ์ง ๊ฐ์ ธ์ค๊ธฐ
- ์ฌ์ง์ด .jpg ํ์ผ์ด๋ผ ๊ฐ์ ธ์ค๊ธฐ ๊ณค๋…
——> ํด๋น ์ฌ์ดํธ๋ฅผ ์ฐพ์๋ณด๊ธฐ(๊ณต์ ๋ฌธ์!!)
TMDB > Guides > IMAGES > Basics > Example ๋งํฌ!!!

~w500 ๊น์ง ๋ณต์ฌํ์ฌ js ๋น ๊ณณ์ ๋ณ์๋ก ํ ๋นํ๊ธฐ
(์ ๊ณต๋๋ ์ด๋ฏธ์ง ํ์ผ์ด /๋ถํฐ ์์ํ๊ธฐ ๋๋ฌธ)
+) JSON์ด๋,
JavaScript Object Notation์ ์ฝ์๋ก,
key์ value ์์ผ๋ก ์ด๋ฃจ์ด์ง ํํ์ object ์ด๋ค.
ํํ => "key": "value"
+) vscode ํ์ฅํ๋ก๊ทธ๋จ Prettier ์ค์น ๋ฐ ์ค์
-> ์ ์ฅ ์ ์ฝ๋๊ฐ ์ผ์น์ ์ผ๋ก ์กฐ์ ๋จ
+) innerHTML
innerHTML ์์ฑ์
HTML ์์์ ๋ด๋ถ HTML ์ฝํ
์ธ ๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ค์ ํ๋ค.
์ฆ, ๋ด์ฉ์ ๊ทธ๋๋ก(๊ณต๋ฐฑ ํฌํจ) ๋ฌธ์์ด๋ก ๊ฐ์ ธ์ค๊ฑฐ๋ ์ค์ ํ ์ ์๋ค.
[HTML]
<div id="example">
<!-- ์ฃผ์์
๋๋ค. -->
์ผ๋ฐ ํ
์คํธ์
๋๋ค.
<p>์๋
ํ์ธ์</p>
<span>์ฌ๊ธฐ๋ ์์์
๋๋ค.</span>
</div>
[JavaScript]
const element = document.getElementById("example");โจ
console.log(element.innerHTML);
[์ถ๋ ฅ๊ฐ]

์ถ์ฒ: https://codingeverybody.kr/์๋ฐ์คํฌ๋ฆฝํธ-element-innerhtml-property/
ํธ๋ฌ๋ธ ์ํ
2. html์ css ์ฐ๊ฒฐ
๋จ๊ณ 1. <div>์ class ์ง์
๋จ๊ณ 2. Css ํ์ผ ๋ด ํด๋์ค๋ช
์์ ‘.’ ์ถ๊ฐ์์ฑ (.ํด๋์ค๋ช
/ํ๊ทธ๋ช
์ผ๋ก ํ ์์๋ ์๋ต)
๋จ๊ณ 3. Html ํ์ผ์ <link rel="stylesheet" href="style.css"> ์ถ๊ฐ
=> ์ ์ฉ ์ฑ๊ณต
https://grace-go.tistory.com/28 ์ฐธ๊ณ
4. fetch์ ulr ๋ด์ en-US -> ko-KR๋ก ๋ณํ & api ํ๊ธํ
4-1. - ์ํ ์ ๋ณด๋ฅผ ํ๊ธ๋ก ๊ฐ์ ธ์ค๊ธฐ:โจfetch์ ulr ๋ด์ en-US -> ko-KR๋ก ๋ณํ


4-2. api ์ ๋ณด ํ๊ธํ
[์ํฉ] url์ ๊ตฌ๊ธ์ ์ ๋ ฅํ๋ ๋์ค์ง ์์

์๋ 1. '?'๋ค์ api_key=${key} ๋ฅผ ์ถ๊ฐ
( https://velog.io/@ncookie/IMDB-TMDB-API-์ฌ์ฉ๋ฒ-์ ๋ฆฌ )์ฐธ๊ณ -> ์คํจ

์๋ 2. Language ~ ์ญ์ -> ์ ๋์ค์ง๋ง ์๋ฌธ

์๋ 3. ?language~ ์ถ๊ฐ -> ์คํจ

ํด๊ฒฐ ๋ฐฉ๋ฒ ๋ฐ ์ต์ข
ํ์
<์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ>
์ฟผ๋ฆฌ(Query)๋ '๋ฌธ์' ๋๋ '๋ฌผ์ํ'๋ผ๋ ๋ป์ ๊ฐ์ง๊ณ ์๋๋ฐ์. ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ(Query Parameter)๋ URL ๋ค์ ๋ฌผ์ํ(?)์ ํจ๊ป ๋ถ๋ ํค-๊ฐ(Key-Value) ์์
๋๋ค. ์ฌ๋ฌ ๊ฐ์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๋ฌํ๋ ค๋ฉด ํ๋ผ๋ฏธํฐ ์ฌ์ด์ ์ฐํผ์๋(&)๋ฅผ ์ถ๊ฐํด์ ํ๋์ ๋ฌธ์์ด(string)๋ก ์ ๋ฌํ์ธ์. ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ก๋ ๋ฌธ์์ด๋ฟ๋ง ์๋๋ผ ์ซ์, ๋ฆฌ์คํธ ๋ฑ ๋ค์ํ ํํ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ ์ ์์ด์.

https://api.themoviedb.org/3/movie/popular?api_key=${key}&language=ko-KR&page=1
์ถ์ฒ:https://docs.tosspayments.com/resources/glossary/query-param
'Forntend > Trouble Shooting' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Pokemon PJ_Day 3]Dynamic Route์ QueryString (0) | 2025.02.06 |
|---|---|
| [Pokemon PJ_Day 2] ์กฐ๊ฑด๋ถ ์คํ์ผ๋ง, Array.from, ์ด๋ฒคํธ ๋ฒ๋ธ๋ง ๋ฐฉ์ง (0) | 2025.02.05 |
| [โ๏ธ] ๋ฆฌ์กํธ live server ์ฐ๊ฒฐํ๋ ๋ฒ (0) | 2025.01.21 |
| Live Server ์ค๋ฅ ๋ฐ ํด๊ฒฐ๋ฐฉ๋ฒ - vscode ์ด๊ธฐํ(๋ ๋ฌด์์) (0) | 2025.01.19 |
| ๋ถ๋งํฌ ๊ธฐ๋ฅ ๊ตฌํํ๊ธฐ(1) - ์ด๋ฒคํธ ์์ (0) | 2025.01.15 |

