Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- function
- 집합관계
- Thread
- Java
- 연관관계
- java변수
- Java데이터 타입
- While
- 시스템 환경 변수 편집
- 자바 멀티스레딩
- 인텔리제이 기초 설정
- 형 변환
- JAVA객체지향
- IntelliJ IDEA
- 메서드 오버로딩
- OPP개념
- 인텔리제이 한글 깨짐 해결법
- 상수
- JAVA기초
- continue문
- 컴파일
- break문
- multi-threading
- 생성자
- 접근제어지시자
- 메서드
- for문
- this예약어
- 반복문
- 포함관계
Archives
- Today
- Total
최원종의 개발 블로그
V10 -1 이미지 업로드와 프로필 화면 본문
1단계 - 프로필 이미지 저장하는 기능 구현

application-dev.yml 파일에 추가
server:
servlet:
encoding:
charset: utf-8
force: true
# 파일 업로드 설정
multipart:
enabled: true # 파일 업로드 활성화
max-file-size: 50MB # 단일 파일 최대 크기 설정 (1MB)
max-request-size: 100MB # 전체 요청(Request) 최대 크기 설정
port: 8080
User 엔티티 컬럼 추가
// User 테이블에는 이미지 파일명만 저장할 예정 (실제 데이터는 내 서버 컴퓨터 로컬에 저장할 예정)
@Column(nullable = true) // null 허용, 기본값
private String profileImage; // 프로필 이미지는 선택 사항(회원 가입 시)
join-form.mustache - MIME 타입 반드시 설정 (파일 전송 시)
{{> layout/header}}
<div class="container p-5 flex-grow-1">
<div class="card">
<div class="card-header"><b>회원가입을해주세요</b></div>
<div class="card-body">
<!--
중요!!
파일 업로드 사용시 method (POST)
enctype 을 반드시 multipart/form-data 설정 해주어야 한다.
설정을 안하면 파일 데이터를 서버측에서 받을 수 없음
(form 태그 사용시 서버측으로 파일 데이터를 보내는 방법)
-->
<form action="/join" method="post" enctype="multipart/form-data">
<div class="mb-3">
<input type="text" class="form-control" placeholder="enter username" name="username" value="ssar2">
</div>
<div class="mb-3">
<input type="password" class="form-control" placeholder="enter password" name="password" value="1234">
</div>
<div class="mb-3">
<input type="email" class="form-control" placeholder="enter email" name="email" value="aa@naver.com">
</div>
<!-- 프로필 이미지 등록 필드(선택 사항) -->
<div class="mb-3">
<label for="profileImage" class="form-label">프로필 사진(선택사항)</label>
<input type="file" id="profileImage" class="form-control" name="profileImage" accept="image/*" >
<small class="form-text text-muted">이미지 파일만 업로드 가능합니다(JPG, PNG, GIF 등)</small>
<small class="form-text text-muted d-block mt-1">⭐ 프로필 사진을 등록하지 않아도 회원 가입 가능⭐ </small>
</div>
<button type="submit" class="btn btn-primary form-control">회원가입</button>
</form>
</div>
</div>
</div>
{{> layout/footer}}
UserRequest.JoinDTO - MultipartFile 타입 추가
MultipartFile : Spring 에서 제공해주고 있는 파일 업로드를 처리하기 위한 인터페이스이다
// 회원가입 DTO
@Data
public static class JoinDTO {
private String username;
private String password;
private String email;
/**
* 프로필 이미지 (선택 사항, null 이 될 수 있음)
* MultipartFile : Spring 에서 제공해주고 있는 파일 업로드를 처리하기 위한 인터페이스이다.
*/
private MultipartFile profileImage;
// 편의 기능 추가 - 내가 가지고 있는 멤버 변수에 값으로 User 엔티를 생성
public User toEntity() {
return User.builder()
.username(username)
.password(password)
.email(email)
.build();
}
// 유효성 검사 메서드 만들기
public void validate() {
if (username == null || username.trim().isEmpty()) {
throw new IllegalArgumentException("사용자명은 필수 입니다");
}
if(password == null || password.trim().isEmpty()) {
throw new IllegalArgumentException("비밀번호는 필수 입니다");
}
if(email == null || email.trim().isEmpty()) {
throw new IllegalArgumentException("이메일은 필수 입니다");
}
// 입력값 : abc@naver.com --> contains() --> true --> ! --> false
if(email.contains("@") == false) {
throw new IllegalArgumentException("올바른 이메일 형식이 아닙니다");
}
}
}'Spring boot 입문' 카테고리의 다른 글
| V10-3 프로필 이미지 삭제 하기 (0) | 2026.05.22 |
|---|---|
| V10-2 프로필 이미지 출력과 정적 리소스 핸들러 처리 (0) | 2026.05.22 |
| V9 게시글 목록 검색 기능 추가 (0) | 2026.05.21 |
| V8 게시글 페이징 처리 (0) | 2026.05.21 |
| V7-4 댓글 삭제 기능 추가 (0) | 2026.05.21 |