
- ๊ธฐํ์๋
- ์กฐ์์๊ฐ
- ํ๋ก์ ํธ ํ๊ฒฝ ๋ฐ ์งํ ์ผ์
- ์ค๊ณ๋ฐฉ์
1) ERD
2) Flow Chart- ์ฃผ์์ฝ๋ ์ค๋ช
- ์๊ฐ
์ฒ์ ํ์๋ค์ด๋ ๋ง๋์ ์ฃผ์ ๋ฅผ ์ ํ๋๊ฒ ์๊ฐ์ด ์ข ์ค๋๊ฑธ๋ ธ๋ค.
๊ฐ์ ๊ณตํต์ ๋ ์ฐพ์๋ณด๊ณ ๊ฐ์ธํ๋ก์ ํธ ํ๊ฒ๋ ๋ดค๋๋ฐ ๋ง๋
ํ ์ฃผ์ ๊ฐ
๋์ค์ง ์์๋๋ฐ ์ฐ์ฐํ ๋ค๋ค ์ํ๋ฅผ ์ข์ํ๋ค๋๊ฑธ ์๊ฒ๋์
๊ทธ๋ผ ์ํ์ถ์ฒ ์ฌ์ดํธ๋ฅผ ๋ง๋ค์ด๋ณด์!!
ํด์ ์ด๋ฒ ํ๋ก์ ํธ์ ์ฒซ๊ฑธ์์ ๋ผ๊ฒ ๋ฌ๋ค.
์ฐ๋ฆฌ๋ ์ด ์ธ์์ ๋ชจ๋ ์ํ์ ๋ณด๋ฅผ ์๋ ค์ค์์๋ ์ฌ์ดํธ๋ฅผ ๋ง๋ค๊ธฐ๋กํ๊ณ
์์ฑ ํผ๋์ ํด๋ก ์ฌ์ดํธ๋ฅผ ์ ํํ๊ฒ ๋ฌ๋ค.
ํ๋ก์ ํธ๋ช
์ ์์ฑ ํผ๋ค์์ ๋ผ์์ ๋ง์ถ ์ค๋ฆฌ๋ผ์ฐจ ํผ๋์๋ก ์ ํ๋ค.!!
์ฐธ์ฌ์ธ์ : 7๋ช


๋ด๊ฐ ๋งก์ ์์
- ํ์๊ฐ์ ๊ตฌํ
- ํ๋ก ํธ์์
- PPT
- ๋ฐํ

๊ธฐ๊ฐ : 22.10/26 ~ 22.11/17






// -------------------------------id ๊ฐ ๋ณ์
let elInputUsername = document.querySelector('#user_name')
let elInputId = document.querySelector('#user_id')
let elInputPassword = document.querySelector('#user_pw')
let elInputPasswordretype = document.querySelector('#user_repw')
let elJoinbutton = document.querySelector('#joinbutton')
let idChkButton = document.querySelector('#idChkButton')
// ------------------------------- ์ฑ๊ณต, ์๋ฌ ๋ฉ์ธ์ง ๋ณ์
let elNameSuccess = document.querySelector('.name-success')
let elIdFailuremessage = document.querySelector('.idFailure-message')
let elIdSuccessmessage = document.querySelector('.idSuccess-message')
let elIdOverlapmessage = document.querySelector('.idOverlap-message')
let elPwSuccessmessage = document.querySelector('.pwSuccess-message')
let elPwFailuremessage = document.querySelector('.pwFailure-message')
let elMissmatchmessage = document.querySelector('.pwMissmatch-message')
let elMatchmessage = document.querySelector('.pwMatch-message')
// ------------------------------- ํ์๊ฐ์
๋ฒํผ ๋นํ์ฑํ
elJoinbutton.disabled = true;
// -------------------------------๊ฐ ์์ญ๋ง๋ค true๊ฐ์ ์ ๋ฌํด์ค flag๋ณ์ ์ ์ธ
let flagName = false;
let flagId = false;
let flagPw = false;
let flagRePw = false;
let flagIdChk = false;
//------------------------------- ์ด๋ฆ์ด ์ ํจ์ฑ์ฒดํฌ
elInputUsername.onkeyup = function() {
var regName = /^[๊ฐ-ํฃ]{2,10}$/;
if (regName.test(elInputUsername.value)) {
elNameSuccess.classList.add('hide')
flagName = true;
}
else {
elNameSuccess.classList.remove('hide')
flagName = false;
}
}
//------------------------------- ์์ด๋๊ฐ ์ ํจ์ฑ์ฒดํฌ
elInputId.onkeyup = function() {
var regId = /^[a-z]+[a-z0-9]{5,19}$/g;;
if (regId.test(elInputId.value)) {
elIdFailuremessage.classList.add('hide')
flagId = true;
}
else {
elIdFailuremessage.classList.remove('hide')
flagId = false;
}
}
//------------------------------- ์์ด๋๊ฐ ์ค๋ณตํ์ธ ์ ํจ์ฑ์ฒดํฌ
function checkId(userid){
if( userid == "" ){
} else {
let xhr = new XMLHttpRequest();
xhr.open("POST", "/join/idcheck.jsp?userid="+ userid, true);
xhr.send();
xhr.onreadystatechange = function(){
if( xhr.readyState == XMLHttpRequest.DONE && xhr.status == 200 ){
//alert( xhr.responseText );
if( xhr.responseText.trim() == "ok" ){
flagIdChk = true;
elIdSuccessmessage.classList.remove('hide')
elIdOverlapmessage.classList.add('hide')
} else {
flagIdChk = false;
elIdOverlapmessage.classList.remove('hide')
elIdSuccessmessage.classList.add('hide')
}
button();
}
}
}
}
//------------------------------- ๋น๋ฐ๋ฒํธ ์ ํจ์ฑ์ฒดํฌ
elInputPassword.onkeyup = function() {
var regPw = /^(?=.*\d)(?=.*[a-zA-Z])[0-9a-zA-Z]{8,16}$/;
if (regPw.test(elInputPassword.value)) {
elPwFailuremessage.classList.add('hide')
flagPw = true;
}
else {
elPwFailuremessage.classList.remove('hide')
flagPw = false;
}
}
//------------------------------- ๋น๋ฐ๋ฒํธํ์ธ ์ ํจ์ฑ์ฒดํฌ
elInputPasswordretype.onkeyup = function() {
if (elInputPassword.value == elInputPasswordretype.value) {
elMissmatchmessage.classList.add('hide')
flagRePw = true;
}
else {
elMissmatchmessage.classList.remove('hide')
flagRePw = false;
}
// ์ํฐํค ํ์ด์ง์ฒ๋ฆฌ
if (window.event.keyCode == 13) {
$().ready(function () {
$(function () {
Swal.fire({
title: '์ ๋ง๋ก ํ์๊ฐ์
์ ํ์๊ฒ ์ต๋๊น?',
text: "๋ค์ ๋๋๋ฆด ์ ์์ต๋๋ค. ์ ์คํ์ธ์.",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: '์น์ธ',
cancelButtonText: '์ทจ์'
}).then((result) => {
if (result.isConfirmed) {
document.signUp.submit();
}
else{
window.location.reload();
}
})
});
});
};
}
//------------------------------- keyup
elInputUsername.addEventListener('keyup', button)
elInputId.addEventListener('keyup', button)
elInputPassword.addEventListener('keyup', button)
elInputPasswordretype.addEventListener('keyup', button)
//------------------------------- ์์ด๋, ๋น๋ฐ๋ฒํธ, ๋น๋ฐ๋ฒํธ ํ์ธ, ์ ํ๋ฒํธ ๊ฐ์ ๋ชจ๋ ์
๋ ฅํ์์ ๋, ํ์๊ฐ์
๋ฒํผ์ด ํ์ฑํ ๋๋ ํจ์
function button() {
if (flagName && flagId && flagPw && flagRePw && flagIdChk) {
elJoinbutton.disabled = false; // ๋ฒํผ ํ์ฑํ
} else {
elJoinbutton.disabled = true; // ๋ฒํผ ๋นํ์ฑํ
}
}
// ํ์๊ฐ์
์ปจํ์ฐฝ
$().ready(function () {
$("#joinbutton").click(function () {
Swal.fire({
title: '์ ๋ง๋ก ํ์๊ฐ์
์ ํ์๊ฒ ์ต๋๊น?',
text: "๋ค์ ๋๋๋ฆด ์ ์์ต๋๋ค. ์ ์คํ์ธ์.",
// icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
// cancelButtonColor: '#d33',
confirmButtonText: '์น์ธ',
cancelButtonText: '์ทจ์',
}).then((result) => {
if (result.isConfirmed) {
document.signUp.submit();
}
else{
window.location.reload();
}
})
});
});
์ฐ๋ฆฌ ํ๋ก์ ํธ์ ํต์ฌ์ด๋ผ ์๊ฐํ ์ ์๋ ์ํ API์ด๋ค.
์ฐ๋ฆฌ ์ฌ์ดํธ๊ฐ ์ํ์ถ์ฒ ์ฌ์ดํธ์ธ ๋งํผ ๋ง์ ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ฐ
์ผ์ผํ ๋ค ์ํ๋ฐ์ดํฐ๋ฅผ ๋ฃ์์ ์์ผ๋ ์ํAPI๋ฅผ ์ฐพ๋ค๊ฐ TMDB๋ผ๋ API๋ฅผ ์๊ฒ๋ฌ๋ค.
์ฐ๋ฆฌ๊ฐ TMDB๋ฅผ ์ด๋ป๊ฒ ์ผ๋์ง ๊ณผ์ ์ ๊ธฐ๋กํด๋ณด๊ฒ ๋ค.
TMDB๋งํฌ : https://www.themoviedb.org/
์ ๋งํฌ์์ ํ์๊ฐ์ ํ API์ธ์ฆํค๋ฅผ ๋ฐ๊ธ๋ฐ์ ํ
https://developers.themoviedb.org/3/movies/get-movie-details
์ ๋งํฌ์์ movie๋ฅผ ํด๋ฆญ ํ

๋ด๊ฐ ์ํ๋ ์ ๋ณด๋ฅผ ํด๋ฆญํ ๋ค ์ฌ์ฉํ๋ฉด ๋๋๋ฐ
์ธ๊ธฐ์ํ ๋ฐ์ดํฐ์ธ Get Popular๋ก ์๋ฅผ ๋ค์ด ๋ณด๊ฒ ๋ค.

Get Popular๋ฅผ ํด๋ฆญํ๋ฉด ์ ํ๋ฉด์ด ๋์ค๋๋ฐ Try it out ํญ์์
๊ฐ ์ ๋ณด๋ค์ ์
๋ ฅํ๋ฉด ๋ฐ์ SEND REQUEST๋ถ๋ถ์ ์๋์ผ๋ก ์
๋ ฅ๋๋ฉด์
URL์ด ๋ง๋ค์ด์ง๊ฒ ๋๋ค.
{"page":1,"results":[{"adult":false,"backdrop_path":"/bQXAqRx2Fgc46uCVWgoPz5L5Dtr.jpg","genre_ids":[28,14,878],"id":436270,"original_language":"en","original_title":"Black Adam","overview":"๊ธฐ์์ ๊ฐ์ฅ ๋ฒ์ฑํ๊ณ ์๋ํ ๊ณ ๋ ๊ตญ๊ฐ์์ง๋ง ํ์ฌ๋ ๊ตญ์ ๊ตฐ์ฌ ์กฐ์ง ์ธํฐ๊ฐฑ์ ๋
์ฌ ๊ตญ๊ฐ๋ก ์ ๋ฝํ ์นธ๋คํฌ. ์ธํฐ๊ฐฑ์ ๋์ ํผํด ๊ณ ๋ ์ ๋ฌผ์ ์ฐพ๋ '์๋๋ฆฌ์๋'๋ ์ฐ์ฐํ 5000๋
๋์ ์ ๋ค์ด ์๋ '๋ธ๋ ์๋ด'์ ๊นจ์ฐ๊ฒ ๋๋ค. ์์ฒญ๋ ๊ดด๋ ฅ๊ณผ ์คํผ๋, ๋ฐฉํ ๋ฅ๋ ฅ๊ณผ ์์ ์์ฌ์ ๊ณ ๊ณต๋นํ, ๋ฒ๊ฐ๋ฅผ ์๋ ๋ฅ๋ ฅ๊น์ง. ์จ๋ชธ์ด ๋ฌด๊ธฐ์ธ '๋ธ๋ ์๋ด'์ ์์ ์ ์์ ๋ง์์๋ ์ธํฐ๊ฐฑ๋ค์ ๋ชจ์กฐ๋ฆฌ ์ธ์ด๋ฒ๋ฆฌ๊ณ ์นธ๋คํฌ ๊ตญ๋ฏผ๋ค์ ์ด์ ์ด๊ดํ๋ค. ํํธ, ๊ทธ์ ํญ์ฃผ๋ฅผ ๋ง๊ธฐ ์ํด ํธํฌ๋งจ, ๋ฅํฐ ํ์ดํธ, ์ํฐ ์ค๋งค์
, ์ฌ์ดํด๋ก ์ผ๋ก ๊ตฌ์ฑ๋ ํ์ด๋ก ๊ตฐ๋จ '์ ์คํฐ์ค ์์ฌ์ด์ดํฐ'๊ฐ ์นธ๋คํฌ์ ๋ํ๋๋๋ฐ...","popularity":17030.072,"poster_path":"/mEdMHGy1FfCUc7PskFO0tibm8jp.jpg","release_date":"2022-10-19","title":"๋ธ๋ ์๋ด","video":false,"vote_average":7.3,"vote_count":1996},{"adult":false,"backdrop_path":"/kmzppWh7ljL6K9fXW72bPN3gKwu.jpg","genre_ids":[14,28,35,80],"id":1013860,"original_language":"en","original_title":"R.I.P.D. 2: Rise of the Damned","overview":"","popularity":6521.435,"poster_path":"/g4yJTzMtOBUTAR2Qnmj8TYIcFVq.jpg","release_date":"2022-11-15","title":"R.I.P.D.:์.์์ด.ํผ.๋. 2","video":false,"vote_average":6.8,"vote_count":162},{"adult":false,"backdrop_path":"/kpUre8wWSXn3D5RhrMttBZa6w1v.jpg","genre_ids":[35,10751,14],"id":338958,"original_language":"en","original_title":"Disenchanted","overview":"๋ํ ๊ฐ์ ์ถ์ ์ํด ๋ด์์ ๋ ๋ ๋จผ๋ก๋น์ด๋ผ๋ ์กฐ์ฉํ ๊ต์ธ๋ก ์ด์ฌํ ์ง์ ค. ๊ทธ๋ฌ๋ ๊ทธ๋
๊ฐ ๊ฟ๊พธ๋ ์์ํ ํ๋ณต์ ์ฐพ์ ์ ์์ ์๋ฌ๋ผ์์์ ๋ง๋ฒ์ ์ฌ์ฉํ๊ฒ ๋๊ณ , ์ด๋ก ์ธํด ๋ง์ ์ ์ฒด๊ฐ ๋ํ ์ ์ธ๊ณ๋ก ๋ณํด ๋ฒ๋ฆฐ๋ค. ์ด์ ์์ ๊ณผ ๊ฐ์กฑ์ ์ง์ ํ ํ๋ณต์ ์ํด ์๊ณ๊ฐ ์์ ์ ๊ฐ๋ฆฌํค๊ธฐ ์ ๊น์ง ์ด ๋ชจ๋ ๊ฒ์ ๋๋๋ ค๋์์ผ ํ๋๋ฐ. ์ง์ ค์ ๊ทธ๋
๊ฐ ๊ทธํ ๋ก ์ํ๋ ์์ํ ํ๋ณต์ ์ฐพ์ ์ ์์๊น?","popularity":3475.144,"poster_path":"/9MSqVj9ulOAK5TqQFjtAMuj2dTk.jpg","release_date":"2022-11-16","title":"๋ง๋ฒ์ ๊ฑธ๋ฆฐ ์ฌ๋ 2","video":false,"vote_average":7.4,"vote_count":380},{"adult":false,"backdrop_path":"/au4HUSWDRadIcl9CqySlw1kJMfo.jpg","genre_ids":[80,28,53],"id":829799,"original_language":"en","original_title":"Paradise City","overview":"","popularity":3860.261,"poster_path":"/xdmmd437QdjcCls8yCQxrH5YYM4.jpg","release_date":"2022-11-11","title":"ํ๋ผ๋ค์ด์ค ์ํฐ","video":false,"vote_average":5.3,"vote_count":17},{"adult":false,"backdrop_path":null,"genre_ids":[28,27,53],"id":988233,"original_language":"en","original_title":"Hex","overview":"","popularity":3709.629,"poster_path":"/xFJHb43ZAnnuiDztxZYsmyopweb.jpg","release_date":"2022-11-01","title":"Hex","video":false,"vote_average":3.8,"vote_count":5},{"adult":false,"backdrop_path":"/xDMIl84Qo5Tsu62c9DGWhmPI67A.jpg","genre_ids":[28,12,878],"id":505642,"original_language":"en","original_title":"Black Panther: Wakanda Forever","overview":"๊ตญ์์ด์ ๋ธ๋ ํฌ์์ธ ํฐ์ฐฐ๋ผ์ ์ฃฝ์ ์ดํ ์๋ง์ ๊ฐ๋๊ตญ์ผ๋ก๋ถํฐ ์ํ์ ๋ฐ๊ฒ ๋ ์์นธ๋ค. ๋ผ๋ชฌ๋ค, ์๋ฆฌ ๊ทธ๋ฆฌ๊ณ ๋ํค์, ์ค์ฝ์, ์๋ฐ์ฟ ๋ ๊ฐ์ ์ฌ๋ช
๊ฐ์ ๊ฐ๊ณ ์์นธ๋ค๋ฅผ ์งํค๊ธฐ ์ํด ์ธ๋ก์ด ์ธ์์ ์ด์ด๊ฐ๋ค. ํํธ, ๋น๋ธ๋ผ๋์ ํจ๊ถ์ ๋๋ฌ์ผ ๋ฏธ์คํฐ๋ฆฌํ ์๋ชจ์ ํจ๊ป ๊น์ ํด์ ์์ ๋ชจ์ต์ ๋๋ฌ๋ธ ์ต๊ฐ์ ์ ๋ค์ด๋จธ์ ํ๋ก์นธ์ ์ ์ฌ๋ค์ ์์นธ๋ค๋ฅผ ํฅํด ๋ฌด์ฐจ๋ณ ๊ณต๊ฒฉ์ ํผ๋ถ๊ธฐ ์์ํ๋๋ฐโฆ","popularity":2952.936,"poster_path":"/3PCRWLeqp5y20k6XVzcamZR3BWF.jpg","release_date":"2022-11-09","title":"๋ธ๋ ํฌ์: ์์นธ๋ค ํฌ์๋ฒ","video":false,"vote_average":7.5,"vote_count":1039},{"adult":false,"backdrop_path":"/aQOWnw3HydsCQZ10O0wvxFOaWc3.jpg","genre_ids":[36,28,18],"id":551271,"original_language":"en","original_title":"Medieval","overview":"","popularity":2563.793,"poster_path":"/4njdAkiBdC5LnFApeXSkFQ78GdT.jpg","release_date":"2022-09-08","title":"๋ฏธ๋๋ฒ","video":false,"vote_average":7.2,"vote_count":185},{"adult":false,"backdrop_path":"/yNib9QAiyaopUJbaayKQ2xK7mYf.jpg","genre_ids":[18,28,10752],"id":966220,"original_language":"uk","original_title":"ะกะฝะฐะนะฟะตั. ะัะปะธะน ะฒะพัะพะฝ","overview":"","popularity":2573.447,"poster_path":"/66mrr3AK6grmkfGJ1wlCP8dkzjM.jpg","release_date":"2022-05-03","title":"ะกะฝะฐะนะฟะตั. ะัะปะธะน ะฒะพัะพะฝ","video":false,"vote_average":7.4,"vote_count":128},{"adult":false,"backdrop_path":"/olPXihyFeeNvnaD6IOBltgIV1FU.jpg","genre_ids":[27,9648,53],"id":882598,"original_language":"en","original_title":"Smile","overview":"๊ธฐ๊ดดํ ๋ฏธ์๋ฅผ ์ง์ผ๋ฉฐ ์์ ์ ๋ ์์์ ๋ชฉ์จ์ ๋๋ ํ์๋ฅผ ๋ชฉ๊ฒฉํ ์ ์ ๊ณผ ์์ฌ โ๋ก์ฆโ. ๊ทธ๋ ์ดํ๋ก โ๋ก์ฆโ์ ์ผ์์ ์ค๋ช
ํ ์ ์๋ ๋์ฐํ ์ผ๋ค์ด ์๋ฐ๋ผ ๋ฐ์ํ๋ค. ์ผ์์ ๋ฎ์น ๊ณตํฌ์ ๋ฐ๋ฒ๋ฅ์น๋ โ๋ก์ฆโ๋ ์ด์ ์๋ ์์ ๊ณผ ๊ฐ์ ์ผ์ ๊ฒช์ ์ฌ๋๋ค์ด ์์๊ณ ๊ทธ๋ค ๋ชจ๋ ๋์ฐํ ์ฃฝ์์ ํผํ ์ ์์๋ค๋ ์ฌ์ค์ ์๊ฒ ๋๋ค. ์์๊ฐ๊ฐ ๋ค๊ฐ์ค๋ ์ฃฝ์์์ ๋ฒ์ด๋๊ธฐ ์ํด ์ฌํฌ๋ฅผ ๋ฒ์ด๋ ๋ก์ฆ๋ ์๊ณ ์ถ๋ ๊ณผ๊ฑฐ์ ๋ง์ฃผํ๊ฒ ๋๋๋ฐโฆ","popularity":2425.949,"poster_path":"/8ncuVFt4e0M2NTTsoPtbxfWN5dO.jpg","release_date":"2022-09-23","title":"์ค๋ง์ผ","video":false,"vote_average":6.8,"vote_count":922},{"adult":false,"backdrop_path":"/gVecEIEZLZg3pV5CACXAB48I6au.jpg","genre_ids":[80,18,9648,53],"id":862965,"original_language":"en","original_title":"Emily the Criminal","overview":"","popularity":2785.674,"poster_path":"/iZvzMpREGiqDQ5eYbx8z70qPgst.jpg","release_date":"2022-08-12","title":"์๋ฐ๋ฆฌ ๋ ํฌ๋ฆฌ๋ฏธ๋","video":false,"vote_average":6.9,"vote_count":202},{"adult":false,"backdrop_path":"/707thQazLJiYLBhCrZlRoV05NNL.jpg","genre_ids":[28,18,53],"id":948276,"original_language":"fr","original_title":"Balle perdue 2","overview":"๋๋ช
์ ๋ฒ์ ์ฒ์ฌ ์๋์ฐจ ์ ๋น๊ณต ๋ฆฌ๋
ธ. ์ด์ ๊ทธ์ ๋ง์์์ ๋จ์ ๋ชฉํ๋ ๋จ ํ๋. ๋์๊ณผ ๋ฉํ ๋ฅผ ์ฃฝ์ธ ๋น๋ฆฌ ๊ฒฝ์ฐฐ๋ค์๊ฒ ๋ณต์ํ๋ ๊ฒ์ด๋ค.","popularity":2778.164,"poster_path":"/A84Usw0jwhh5RPAKZV7gwP532Fl.jpg","release_date":"2022-11-10","title":"์ฌ๋ผ์ง ํํ 2","video":false,"vote_average":6.8,"vote_count":125},{"adult":false,"backdrop_path":"/f9g3R9gq0bASip9RnK2H56dbb5j.jpg","genre_ids":[53],"id":979924,"original_language":"en","original_title":"On the Line","overview":"์งํ์๊ฐ ์ ํ๋ฅผ ๋ฐ๋๋ฐ, ์ด ์ ํ์์ ์ ์ฒด๋ฅผ ์ ์ ์๋ ์ฌ๋์ด ์ผ๋งจ์ ์จ ๊ฐ์กฑ์ ์ฃฝ์ด๊ฒ ๋ค๊ณ ํ๋ฐํฉ๋๋ค. ์ฌ๋ํ๋ ์ฌ๋๋ค์ ๊ตฌํ๊ธฐ ์ํด ๋ผ๋์ค ์งํ์๋ ์์กด ๊ฒ์์ ํด์ผ ํ ๊ฒ์ด๊ณ ์ด๊ธธ ์ ์๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ๋ฒ์ธ์ ์ ์์ ์์๋ด๋ ๊ฒ์
๋๋ค.","popularity":2535.935,"poster_path":"/a14BbSHvLgzCdbDD6tAL8OBVKL1.jpg","release_date":"2022-10-31","title":"์จ ๋ ๋ผ์ธ","video":false,"vote_average":6.5,"vote_count":145},{"adult":false,"backdrop_path":"/eyiSLRh44SKKWIJ6bxWq8z1sscB.jpg","genre_ids":[53,27,80],"id":899294,"original_language":"en","original_title":"Frank and Penelope","overview":"","popularity":2345.994,"poster_path":"/5NpXoAi3nEQkEgLO09nmotPfyNa.jpg","release_date":"2022-06-03","title":"Frank and Penelope","video":false,"vote_average":7.5,"vote_count":35},{"adult":false,"backdrop_path":"/sCOHkah9RbFeZfFnfBrcykKCMNa.jpg","genre_ids":[27,878],"id":846778,"original_language":"en","original_title":"Margaux","overview":"์ฃผ๋ง ํํฐ๋ฅผ ์ํด ์์ด๋น์ค๋น ์์๋ฅผ ๋ ํธํ ํ ๋ฌด๋ฆฌ์ ๋ํ์๋ค์ด, ์์๋ฅผ ๊ด๋ฆฌํ๋ ์ธ๊ณต์ง๋ฅ ์์คํ
\"๋ง๊ณ \"์ ์ฌ์
ํ ๋ณธ์ฑ๊ณผ ๋ง๋ฅ๋จ๋ฆฌ๊ฒ ๋๋ ์ด์ผ๊ธฐ","popularity":2240.808,"poster_path":"/uNzgeMetu9l4q9NDw7gtiUFwPOJ.jpg","release_date":"2022-09-09","title":"๋ง๊ณ ","video":false,"vote_average":6.8,"vote_count":42},{"adult":false,"backdrop_path":"/u9Io1hVnxb2b3T0z99aOK8sq0SN.jpg","genre_ids":[9648,12,80],"id":829280,"original_language":"en","original_title":"Enola Holmes 2","overview":"ํ์ ์ด ๋ ํ ์ฒซ ๋ฒ์งธ ์ฌ๊ฑด์ ์์ํ ์๋๋ผ. ํ์ง๋ง ์ค์ข
๋ ์๋
์ ๋ฏธ์คํฐ๋ฆฌ๋ฅผ ํ๊ธฐ ์ํด์๋ ์น๊ตฌ๋ค์ ๋์์ด ํ์ํ๋ค. ์ด์ฉ๋ฉด ์ค๋น ์
๋ก์ ๋์๊น์ง๋.","popularity":1635.717,"poster_path":"/S6fDnntDjduIWuLW2GcqFasobD.jpg","release_date":"2022-11-04","title":"์๋๋ผ ํ์ฆ 2","video":false,"vote_average":7.7,"vote_count":1144},{"adult":false,"backdrop_path":"/8Tr79lfoCkOYRg8SYwWit4OoQLi.jpg","genre_ids":[878,28],"id":872177,"original_language":"en","original_title":"Corrective Measures","overview":"๊ฐ์ฅ ์ํํ ๋ฒ์ฃ์๋ค์ด ์ฌ๋ ์ธ๊ณ์์ ๊ฐ์ฅ ์ํํ ์ต๋ ๋ณด์ ๊ต๋์๋ฅผ ๋ฐฐ๊ฒฝ์ผ๋ก ์๊ฐ์์ ์ง์ ๊ฐ์ ๊ธด์ฅ์ด ๊ณ ์กฐ๋์ด ๊ฐ์ฅ์ ์ง์ด์ผํค๋ ๋ฌด์ ๋ถ ์ํ๊ฐ ๋ฐ์ํ๊ณ ์ง์๊ฐ ๋ค์งํ๋ค","popularity":2173.345,"poster_path":"/9qG7cBhu444BYmcIOeoLJoCBMuO.jpg","release_date":"2022-04-29","title":"์์ ์กฐ์น","video":false,"vote_average":4.9,"vote_count":28},{"adult":false,"backdrop_path":"/sqVxhRkPwOo6jogWZjE99V1HRE1.jpg","genre_ids":[16,35,10751],"id":1037858,"original_language":"en","original_title":"The Soccer Football Movie","overview":"์ข์ํ๋ ์ถ๊ตฌ์ ์๋ค์ ์ฌ๋ฅ์ด ์ฌ๋ผ์ก๋ค. ๋ฐ๋ก ์ฌ์
ํ ๊ณผํ์๊ฐ ๋ค ํ์ณ๊ฐ๊ธฐ ๋๋ฌธ! ์ถ๊ตฌ๋ฅผ ์ฌ๋ํ๋ ๋ค ์์ด๋ค์ด ์ด ์ํฉ์ ๋๋๋ฆด ์ ์์๊น?","popularity":1756.384,"poster_path":"/sWoYDNPNZs5MtzPbirXV73tIHrA.jpg","release_date":"2022-11-09","title":"๋ฏธ์
์ถ๊ตฌ: ๋์ฐ๋ณ์ด๋ฅผ ๋ฌด์ฐ๋ฌ๋ผ!","video":false,"vote_average":7,"vote_count":41},{"adult":false,"backdrop_path":"/tUBN1paMQ1tmVA5Sjy1ZjPWVsiF.jpg","genre_ids":[12,16,35,10751,14],"id":676701,"original_language":"es","original_title":"Tadeo Jones 3: La Tabla Esmeralda","overview":"","popularity":1331.281,"poster_path":"/8ZJjRunZbkMSXcRHiqAdQiecXYz.jpg","release_date":"2022-08-24","title":"Tadeo Jones 3: La Tabla Esmeralda","video":false,"vote_average":7.9,"vote_count":119},{"adult":false,"backdrop_path":"/oqwqnaaoSpQMqAQyoEiF8W2F7Id.jpg","genre_ids":[10751,35,16,12],"id":1018403,"original_language":"en","original_title":"Tom and Jerry Snowman's Land","overview":"","popularity":1711.627,"poster_path":"/effgnqJMX2lXvXhKlJt7Pm1TkcU.jpg","release_date":"2022-09-06","title":"Tom and Jerry Snowman's Land","video":false,"vote_average":8,"vote_count":13},{"adult":false,"backdrop_path":"/pGx6O6IwqADOsgmqWzPysmWnOyr.jpg","genre_ids":[28,14],"id":732459,"original_language":"en","original_title":"Blade of the 47 Ronin","overview":"","popularity":1517.04,"poster_path":"/kjFDIlUCJkcpFxYKtE6OsGcAfQQ.jpg","release_date":"2022-10-25","title":"47 ๋ก๋์ ๊ฒ","video":false,"vote_average":7,"vote_count":83}],"total_pages":36072,"total_results":721425}

URL์ ์์ฒญ์ํ๋ฉด ์ ์ฌ์ง์ฒ๋ผ JSON๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ฒ๋๋๋ฐ ์ด JSON๋ฐ์ดํฐ๋ฅผ ์ด์ parsingํด์ ์ฌ์ฉํ๋ฉด ๋๋ค.
JSON๋ฐ์ดํฐ ์ฌ์ฉํ๊ธฐ
// tmdb ์ ๊ทผ , json ์ถ์ถํ๋ ๋ฉ์๋
// params - setSubject : "now_playing" , "popular" , "top_rated" , "upcoming"
// pageNum : ๊ณต๋ฐฑ์ด ๋ค์ด๊ฐ๋ ์๋๋๊ธฐ ๋๋ฌธ์ String ํ์
์ผ๋ก ์ค์ ํ๋ค. 1~??
public List getMovieList(String setSubject, String pageNum) {
// URL์ ์์๋๋ก ๋ค์ด๊ฐ๋ฉด ๋๋ค
String base_url = "https://api.themoviedb.org/3/movie/"; // ์ํ ๊ฒ์ ๊ธฐ๋ณธ url
String subject = setSubject; // ์ฃผ์ ( ์ธ๊ธฐ์๋ , ํ๋ ์ดํ
, ์
์ปค๋ฐ ๋ฑ )
String api_key = "?api_key=76b35796a3549ed9d36a411955f5428f"; // api ํค
String language = "&language=ko-kr"; // ์ธ์ด ์ต์
String page = "&page="+ pageNum; // ํ์ด์ง ์ต์
( ์๋ฃ์ผ๋ฉด ๋ํดํธ 1 )
String completed_url = base_url+subject+api_key+language+page;
// System.out.println("callRestApi ํธ์ถ");
List<HashMap<String, Object>> movieList = null;
try {
URL url = new URL(completed_url);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-Type", "application/json");
conn.setDoOutput(true); // ์๋ฒ๋ก ๋ฐ๋ ๊ฐ์ด ์๋ค
// ๋ฐ์ดํฐ ์ฝ๊ธฐ
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line = null;
// ์ฝ์ ์ ์์ ๋ ๊น์ง
while((line = br.readLine()) != null) {
sb.append(line);
}
JSONParser parser = new JSONParser();
JSONObject obj = (JSONObject) parser.parse(sb.toString());
JSONArray objArray = (JSONArray) obj.get("results");
movieList = new ArrayList();
for(int i=0; i<objArray.size(); i++) {
HashMap<String, Object> movieMap = new HashMap<>();
// System.out.println(objArray.get(i));
JSONObject result = (JSONObject) objArray.get(i);
// ์ค๋ฒ๋ทฐ๊ฐ "" ์ด ์๋๊ฒฝ์ฐ๋ง ๋ด๊ธฐ
if(!result.get("overview").equals("")) {
movieMap.put("movie_id", result.get("id"));
movieMap.put("movie_title", result.get("title"));
movieMap.put("movie_overview", result.get("overview"));
movieMap.put("movie_popularity", result.get("popularity"));
movieMap.put("movie_vote_average", result.get("vote_average"));
movieMap.put("movie_vote_count", result.get("vote_count"));
movieMap.put("movie_poster_path", result.get("poster_path"));
movieMap.put("movie_backdrop_path", result.get("backdrop_path"));
movieMap.put("movie_adult", result.get("adult"));
movieMap.put("movie_date", result.get("release_date"));
movieMap.put("movie_subject", setSubject);
// ๋ฆฌ์คํธ์ ๋ด๊ธฐ
movieList.add(movieMap);
}
// System.out.println(objArray.get(i));
}
// for(int i=0; i<movieList.size(); i++) {
// System.out.println("title : "+movieList.get(i).get("movie_title"));
// }
} catch (MalformedURLException e) {
e.printStackTrace();
System.out.println("URL์ด ์๋ชป๋์์ต๋๋ค.");
} catch (IOException e) {
e.printStackTrace();
System.out.println("Input ๋๋ Ouput ์ค๋ฅ");
} catch (ParseException e) {
e.printStackTrace();
System.out.println("์ ์ด์จ ํ์ฑ ์คํจ");
}
return movieList;
}
์ฝ๋๋ฅผ ๊ฐ๋จํ๊ฒ ์ค๋ช ํ์๋ฉด ์๋ฐ์์ UrlConnection์ ๋งบ์ ํ url์์ฒญ์ ๋ณด๋ด ๋ฐ์ json๋ฐ์ดํฐ๋ฅผ ์คํธ๋ฆผ์ผ๋ก ๊ฐ์ ธ์์ ํ์ฑ ํ ๋ชจ๋ HashMap์ ๋ด๊ณ , ๊ทธ HashMap๋ค์ ๋ค์ List์ ๋ด์ ๊ทธ List๋ฅผ ๋ฐํํ๋ ๋ฉ์๋์ด๋ค.
List(์ธ๊ธฐ์ํ๊ฐ ๋ชจ๋ ๋ค์ด์๋)๋ฅผ ์ฌ์ฉํ๋ ๋ฉ์๋๋ฅผ ์ดํด๋ณด์.
// ์ํ์ ๋ณด ๋ถ๋ฌ์์ db์ ๋ฃ๋๊ฑธ ๋ฐ๋ก ๋ฉ์๋๋ก ๋บ๋ค
public void setMovieInDBperPage(int pagenum) {
MovieDAO mdao = new MovieDAO();
String[] subjects = {"now_playing", "popular", "top_rated", "upcoming"};
for(int a=0; a<subjects.length; a++) {
// ์ํ ๋ฆฌ์คํธ ๋ฐ์์จ๊ฑฐ ๋ด๋ ๋ฆฌ์คํธ
List<HashMap<String, Object>> movieList = Util.getInstance().getMovieList(subjects[a], pagenum+"");
// ๋ฆฌ์คํธ์ ๋ด๊ธด ์ ๋งํผ ๋ฐ๋ณต๋ฌธ ๋๋ ค dto ์์ฑ -> ๊ฐ ๋์
-> db์ ์ธ์ํธ
for (int i=0; i<movieList.size(); i++) {
MovieDTO mdto = new MovieDTO();
mdto.setMovie_id(Integer.parseInt(movieList.get(i).get("movie_id").toString()));
mdto.setMovie_title(movieList.get(i).get("movie_title").toString());
mdto.setMovie_overview(movieList.get(i).get("movie_overview").toString());
mdto.setMovie_popularity(Double.parseDouble(movieList.get(i).get("movie_popularity").toString()));
mdto.setMovie_vote_average(Double.parseDouble(movieList.get(i).get("movie_vote_average").toString()));
mdto.setMovie_vote_count(Integer.parseInt(movieList.get(i).get("movie_vote_count").toString()));
mdto.setMovie_poster_path(movieList.get(i).get("movie_poster_path").toString());
mdto.setMovie_backdrop_path(movieList.get(i).get("movie_backdrop_path").toString());
mdto.setMovie_adult(movieList.get(i).get("movie_adult").toString());
mdto.setMovie_date(movieList.get(i).get("movie_date").toString());
mdto.setMovie_subject(movieList.get(i).get("movie_subject").toString());
// ์ํ๊ฐ ์๋ ํ์ธํ๊ณ ์์ผ๋ฉด ์ํ์ ๋ณด ์
๋ ฅ
if(mdao.selectMovieById(mdto.getMovie_id())==null) {
mdao.movieInsert(mdto);
}
}
}
}
// ์ํ 1ํ์ด์ง ์
๋ ฅ
setMovieInDBperPage(1);
System.out.println("1ํ์ด์ง ์
๋ ฅ ์๋ฃ");
setMovieInDBperPage(2);
System.out.println("2ํ์ด์ง ์
๋ ฅ ์๋ฃ");
setMovieInDBperPage(3);
System.out.println("3ํ์ด์ง ์
๋ ฅ ์๋ฃ");

TMDB์์ ๋ฐ์์จ ๋ฐ์ดํฐ๊ฐ ์ฐ๋ฆฌ์ DB์ ์ด๋ ๊ฒ ๋ด๊ธฐ๊ฒ๋๋ค.




์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ๋น์ฝ์ ์ผ๋ก ์ค๋ ฅ์ด ๋๊ฑฐ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ง์ด๋ ๋ค.
๋ด๊ฐ ๋ง์ฝ ์ด๋ค๋ถ๋ถ์ ์ฝ๋๊ฐ ์ ์ดํด๊ฐ ์๊ฐ๋ค๋ฉด ํ์๋ค์ด ์๋ ค์ฃผ๊ณ ํ์๋ค์ ์๋ ค์ฃผ๋ฉด์ ๋ ๊ณต๋ถ๊ฐ ๋๊ณ ๊ทธ๋ฌ๋ ์๋ก์๊ฒ ๋์์ด ๋๋ ์๊ฐ์ด์๋๊ฑฐ ๊ฐ๋ค. ์ด๋ฐ์๋ ์ด๋ป๊ฒ ํด์ผ๋๋์ง๋ ๋ชจ๋ฅด๊ฒ ์ด์ ๋ง๋งํ ๋๋์ด ์์์ง๋ง
์ ์ ์๊ฐ์ด ์ง๋ ์๋ก ์ฌ๋ฐ์ด์ง๊ณ ๋นจ๋ฆฌ ๋ค์๋ ํ์ ๋๊ฐ์ ํ์๋ค์ด๋ ์ฝ๋๋ฅผ ์ง๋ณด๊ณ ์ถ๋ค๋ ์๊ฐ์ด ๋ง์ด ๋ค์๋ค. ์์ผ๋ก ๊ตญ๋น๊ณผ์ ์์ ํํ๋ก์ ํธ๊ฐ ํ๋๋ ๋จ์๋๋ฐ ๊ทธ๋๋ ์ง๊ธ๋ณด๋ค ๋ฐ์ ํ ๋ด๊ฐ๋์ ๋ ์ข์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ง๋ค๊ณ ์ถ๋ค.