2018 LA 오토쇼에서 기아자동차 미국법인(KMA)은 완전히 새로워졌지만 친숙한 2020년형 신형 소울을 세계 최초로 공개하며 더 나은 이동 방식을 선보였다. 이 차량은 기아의 사랑받고 수상 경력이 있는 도심형 소형차의 완전히 새롭지만 익숙한 버전이다.
기아는 독특하고 비전통적인 스타일의 서브컴팩트를 대중화하는 데 기여한 모든 요소를 바탕으로 차량의 거의 모든 부분에 더 많은 '소울'을 담아냈다. 그 결과 3세대 모델은 독보적인 스타일, 경쾌한 성능, 짜릿한 기술, 도심 실용성을 계속해서 뛰어넘는 모습을 보여준다.
"소울은 미국 시장 출시 이후 엄청난 성공을 거두며 (현재는 사라진) 경쟁 모델들을 압도했고, 유쾌한 성격과 독특한 스타일로 자동차 아이콘으로 자리 잡았다"고 기아의 차량기획 및 텔레매틱스 담당 이사 오스 헤드릭(Orth Hedrick)은 말했다. "완전히 새로운 세대의 경쟁자들이 시장에 넘쳐나는 지금도 신형 소울은 비교할 수 없는 스타일과 인상적인 첨단 기술 및 맞춤형 옵션 덕분에 강력한 경쟁자임을 다시 한 번 입증할 것이라고 확신한다."
모든 사람을 위한 소울이 있다는 점을 증명하듯, 자연흡기 및 선택 사양인 터보차저 소울은 LX, S, X-Line, GT-Line, EX, 'EX 디자이너 컬렉션' 등 6가지 트림 레벨과 완전히 새로운 소울 EV로 출시된다. 가격 정보는 내년 상반기 출시 예정일에 더 가까워져 공개될 예정이다.
-
{
const btn = w.querySelector(`[data-action="${action}"]`)
if (!btn) return
btn.dataset.state = on ? 'on' : 'off'
const label = btn.querySelector('.post-action-label')
if (label) label.textContent = on ? label.dataset.labelOn : label.dataset.labelOff
})
}
function setCountAll(n) {
wrappers.forEach((w) => {
const c = w.querySelector('[data-count]')
if (c) c.textContent = String(n)
})
}
function getCount() {
const c = wrappers[0]?.querySelector('[data-count]')
return Number(c?.textContent || 0)
}
function getState(action) {
const btn = wrappers[0]?.querySelector(`[data-action="${action}"]`)
return btn?.dataset.state === 'on'
}
async function loadInitial() {
try {
// Comprobar sesion PRIMERO. Sin esto, lanzabamos 3 fetches en
// paralelo y los anonimos (mayoria) generaban 2 invocations
// inutiles (vote + bookmark devolvian 401). Con miles de page
// renders/h post-cutover ese desperdicio se notaba en logs y
// function invocations facturadas.
//
// Reusa el helper kcbFetchSession (BaseLayout) que cachea el resultado
// en sessionStorage 10 min. Navbar/PostComments/PostActions todos
// usan el mismo helper → 1 fetch por sesion en lugar de 1 por page.
// Fallback in-place si el helper no esta cargado (orden inesperado).
if (typeof window.kcbFetchSession === 'function') {
window.__kcbSession = window.kcbFetchSession()
} else {
window.__kcbSession = window.__kcbSession || new Promise((resolve) => {
const start = () => {
fetch('/api/auth/session-check/', { credentials: 'same-origin' })
.then((r) => (r.ok ? r.json() : null))
.then(resolve)
.catch(() => resolve(null))
}
if ('requestIdleCallback' in window) {
requestIdleCallback(start, { timeout: 2000 })
} else {
setTimeout(start, 1000)
}
})
}
const s = await window.__kcbSession
if (s) {
userAuthenticated = Boolean(s.authenticated)
}
// Solo si el usuario esta autenticado pedimos su estado per-post.
// Para anonimos: vote_count se queda con el valor SSR inicial
// (data-count en el HTML); voted/bookmarked permanecen 'off'.
if (!userAuthenticated) return
const [voteRes, bmRes] = await Promise.all([
fetch(`/api/vote/${encodeURIComponent(slug)}`).catch(() => null),
fetch(`/api/bookmark/${encodeURIComponent(slug)}`).catch(() => null),
])
if (voteRes && voteRes.ok) {
const v = await voteRes.json()
setStateAll('like', Boolean(v.voted))
if (typeof v.vote_count === 'number') setCountAll(v.vote_count)
}
if (bmRes && bmRes.ok) {
const b = await bmRes.json()
setStateAll('bookmark', Boolean(b.bookmarked))
}
} catch {
/* silencioso — botones quedan en estado off */
}
}
function flashStatusAll(action, msg) {
wrappers.forEach((w) => {
const btn = w.querySelector(`[data-action="${action}"]`)
if (!btn) return
const prevTitle = btn.title
btn.title = msg
btn.classList.add('is-flash')
setTimeout(() => {
btn.title = prevTitle
btn.classList.remove('is-flash')
}, 1800)
})
}
async function handleVote() {
if (!userAuthenticated) {
flashStatusAll('like', signinHint)
const next = encodeURIComponent(location.pathname + location.search)
location.href = `/login/?next=${next}`
return
}
const prevState = getState('like')
// Optimistic UI (todas las instancias sincronizadas)
setStateAll('like', !prevState)
setCountAll(getCount() + (prevState ? -1 : 1))
try {
const res = await fetch(`/api/vote/${encodeURIComponent(slug)}`, { method: 'POST' })
if (!res.ok) throw new Error('vote failed')
const data = await res.json()
setStateAll('like', Boolean(data.voted))
if (typeof data.vote_count === 'number') setCountAll(data.vote_count)
// GA4: solo cuenta el voto positivo (toggle ON), no la retirada.
if (data.voted && window.kcbTrack) {
window.kcbTrack('post_vote', { slug })
}
} catch {
setStateAll('like', prevState)
setCountAll(getCount() + (prevState ? 1 : -1))
}
}
async function handleBookmark() {
if (!userAuthenticated) {
flashStatusAll('bookmark', signinHint)
const next = encodeURIComponent(location.pathname + location.search)
location.href = `/login/?next=${next}`
return
}
const prevState = getState('bookmark')
setStateAll('bookmark', !prevState)
try {
const res = await fetch(`/api/bookmark/${encodeURIComponent(slug)}`, { method: 'POST' })
if (!res.ok) throw new Error('bookmark failed')
const data = await res.json()
setStateAll('bookmark', Boolean(data.bookmarked))
// GA4: solo cuenta el bookmark positivo (toggle ON), no la retirada.
if (data.bookmarked && window.kcbTrack) {
window.kcbTrack('post_bookmark', { slug })
}
} catch {
setStateAll('bookmark', prevState)
}
}
// Bind click en TODOS los botones de TODAS las instancias
wrappers.forEach((w) => {
w.querySelector('[data-action="like"]')?.addEventListener('click', handleVote)
w.querySelector('[data-action="bookmark"]')?.addEventListener('click', handleBookmark)
})
loadInitial()
} // bindAll
})()
})(); Korean Car Blog 추가 → Korean Car Blog을 Google 선호 소스에 추가하세요
계속 읽기
이 주제에 관한 더 많은 글
Spy Shots2025년 5월 28일
양산형 기아 EV2, 독일서 포착
Spy Shots2025년 5월 19일
최신 현대 IONIQ 6 N 스파이샷, 더 넓고 공격적인 자세 드러내
Spy Shots2025년 5월 10일
미국 사양 아이오닉 6 페이스리프트, 실제 도로에서 포착
Spy Shots2025년 4월 30일






























댓글
아직 댓글이 없습니다. 가장 먼저 작성해 보세요.