프론트 → 컨트롤러 → 서비스 → DB. 결과는 반대로 돌아옴
컨트롤러는 입력 형식(body값에 null값이 잘들어왔군 - 타입같은거)과 HTTP 응답, 서비스는 제품 규칙(개발 body값이 비면 안되지)과 DB 작업.
input은 저장해달라고 받은 값, rows는 DB 실행 결과 배열. rows[0]은 결과의 첫 번째 행.
pool.query() - 서비스에 있음) 전에 잘못된 값을 막아요. 예) 개발 body은 null·빈 문자열·공백뿐이면 안됨(if로 막아서 throw는 오류를 전달). throw는 오류를 전달할 뿐, 400 응답은 별도로 컨트롤러에서 처리해야 해요.
UNIQUE는 중복 행을 막는 DB 제약, upsert는 없으면 생성하고 있으면 수정하는 저장 방식이에요.