| 항목 | 설명 |
|---|---|
| HTTP | HyperText Transfer Protocol : 문자 이동 통신 규약 |
| 특징 | 1) 무상태 프로토콜 (저장 기능 없음) 2) 독립적이며, 이전 통신과 연관 없음 3) TCP/IP 기반으로 동작 (IP 사용) |
| 항목 | 예시 | 설명 |
|---|---|---|
| 기본 구조 | http://ip번호:port번호/자원경로?쿼리스트링 | 기본적인 HTTP 주소 체계 |
| URL | https://nid.naver.com/user2/join/agree | 네트워크 상의 자료 위치를 표시 |
| URI | https://nid.naver.com/user2/join/agree?lang=ko_KR | URL + 쿼리스트링 포함 |
| 항목 | 설명 |
|---|---|
| HTTP Method | 통신 요청을 분류하는 규칙 → GET, POST, PUT, DELETE |
| HTTP Content-Type | 데이터의 타입/정보를 명시하여 수신자가 인식할 수 있도록 함 |
| HTTP Body | 실제 데이터가 담겨 전송되는 부분 |
| HTTP Host | 요청을 받는 서버의 도메인 주소 |
| Content-Type | 설명 |
|---|---|
text/html | HTML 문서 (JSP 포함) |
text/plain | 일반 텍스트 (String 반환) |
application/json | JSON 데이터 (REST API 주 데이터) |
application/x-www-form-urlencoded | HTML <form> 기본 데이터 전송 형식 |
multipart/form-data | 첨부파일 업로드용 대용량 데이터 |
| 방식 | 설명 | 사용 어노테이션 |
|---|---|---|
| 쿼리스트링 (GET, POST, PUT, DELETE) | URL 뒤 ? 이후 매개변수 전달, 경로 노출로 보안 취약 | @RequestParam |
| Body (POST, PUT) | fetch 옵션에 데이터를 포함, 경로 비노출로 보안 유리 | @RequestBody |
| form 마크업 (POST) | <form> 데이터를 전송 | @ModelAttribute (생략 가능) |
| 코드 | 설명 |
|---|---|
| 1XX | 요청을 받고 진행 중 |
| 2XX | 요청 성공 및 응답 완료 |
| 200 | 요청 성공 + 응답 데이터 존재 |
| 201 | 저장 성공 + 응답 데이터 존재 |
| 204 | 저장 성공 + 응답 데이터 없음 |
| 3XX | 요청 완료 위해 추가 조치 필요 |
| 4XX | 클라이언트 오류 (데이터, 매핑 문제 등) |
| 400 | 잘못된 요청 (쿼리, body, mapping 오류) |
| 401 | 인증 필요 |
| 403 | 권한 거부 |
| 404 | 요청 자원이 존재하지 않음 |
| 409 | 리소스 중복 |
| 5XX | 서버 오류 |
| 500 | 예기치 못한 서버 오류 |
| 설정 항목 | 기본값 | 설명 |
|---|---|---|
spring.servlet.multipart.max-file-size | 1MB | 업로드 파일의 최대 용량 |
spring.servlet.multipart.max-request-size | 10MB | 업로드 요청의 최대 용량 |
| 예시 설정 | 10MB, 100MB 등으로 변경 가능 |
| 항목 | 설명 |
|---|---|
| 프로젝트 경로 확인 | System.getProperty("user.dir") |
| 업로드 폴더 위치 | build/resources/main/static/upload/ |
| 파일명 중복 방지 | 파일명 앞/뒤에 식별 가능한 문자열 추가 |
| 파일 업로드 인터페이스 | MultipartFile 지원 |
| 메소드 | 설명 |
|---|---|
.getOriginalFilename() | 업로드된 파일명 반환 |
.transferTo(File 객체) | 지정한 경로로 업로드 파일 이동 (일반 예외 발생 가능) |
| 메소드 | 설명 |
|---|---|
.exists() | 지정한 경로 존재 여부 확인 |
.mkdirs() | 지정한 경로에 폴더 생성 |
.delete() | 지정한 경로의 파일 삭제 |
| 항목 | 설명 |
|---|---|
| 클래스 설명 | 다운로드 요청 사용자의 응답 객체 생성 |
| 브라우저별 다운로드 형식 지정 | java HttpServletResponse response; |
| URL은 한글을 지원하지 않으므로 인코딩 필요 | response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(oldFilename, "UTF-8")); |
| 클래스 | 메소드 | 설명 |
|---|---|---|
| FileInputStream | .read(바이트배열) | 파일을 읽어와 바이트 배열에 저장 |
.close() | 스트림 닫기 (대용량 권장) | |
| ServletOutputStream | .write(바이트배열) | 바이트 배열을 사용자에게 출력 |
.close() | 스트림 닫기 |
💡 스트림이란? 바이트가 흐르는 통신 경로를 의미한다.
| 항목 | 설명 |
|---|---|
| Statement.RETURN_GENERATED_KEYS | 자동 생성된 PK값 반환 |
| ResultSet rs = ps.getGeneratedKeys() | 생성된 키값을 ResultSet으로 받음 |
| Dto 설계 팁 | 테이블 외 부가 정보(업로드/다운로드/합계 등)를 포함하면 유용 |
| await 주의사항 | 비동기 함수 안에서 await 사용 시, 호출하는 함수도 await 필요 |
// 특정 회원의 포인트 합계 가져오기
let point = await memberPoint();
// 이 메소드를 호출하는 함수도 await로 대기해야 함