프로미스 지옥 벗어나려고 async/await 로 갈아탔는데 에러 처리에서 또 막혔어요. 예전에 .then().catch() 쓸 때는 그래도 catch 가 눈에 보였는데, async 함수에서는 에러를 어디서 어떻게 잡아야 하는지 헷갈려요.


일단 이렇게 try-catch 로 감싸면 되는 것까진 알았어요.


async function getUser() {
  try {
    const res = await fetch("/api/user");
    const data = await res.json();
    return data;
  } catch (e) {
    console.log("에러 발생", e);
  }
}


근데 여기서 이상한 걸 발견했어요. fetch 는 네트워크가 끊기면 에러가 나서 catch 로 가는데, 서버가 404나 500 을 응답하면 catch 로 안 가더라고요. 분명 실패한 요청인데 왜 안 잡히는지 모르겠어요. 이건 fetch 특성인가요?


또 하나 헷갈리는 게, 여러 개를 한꺼번에 await 할 때요.


const [a, b] = await Promise.all([fetch(url1), fetch(url2)]);


이럴 때 하나만 실패하면 어떻게 되는 건가요? try-catch 하나로 다 잡히나요? 그리고 async 함수를 호출하는 쪽에서 try-catch 를 안 감싸면 에러가 조용히 사라진다는 얘기도 들었는데, 그럼 함수 안에서 잡는 거랑 호출하는 쪽에서 잡는 거랑 어느 쪽이 맞는 건가요? 상황마다 다른가요? 에러 처리 패턴을 어떻게 잡아야 깔끔한지 조언 부탁드려요.