Spring Boot 기반의 Tiny Second-hand Shopping Platform
WhiteHat School Secure Coding 실습 프로젝트
본 프로젝트는 Spring Boot를 활용하여 중고거래 플랫폼을 구현하고, 개발 과정에서 시큐어 코딩(Secure Coding) 원칙을 적용하여 안전한 웹 서비스를 만드는 것을 목표로 하였습니다.
단순히 기능 구현에 집중하는 것이 아니라,
- 사용자 입력 검증
- 인증(Authentication)
- 인가(Authorization)
- 비밀번호 암호화
- 예외 처리
등의 보안 요소를 함께 고려하여 개발하였습니다.
본 프로젝트는 WhiteHat School Secure Coding 실습의 Tiny Second-hand Shopping Platform 요구사항을 기반으로 구현되었습니다. :contentReference[oaicite:1]{index=1}
- Spring Boot 기반 웹 서비스 개발
- Spring Security를 활용한 사용자 인증
- 안전한 사용자 입력 처리
- 서버 측 접근 권한 검증
- 비밀번호 암호화
- 안전한 CRUD 기능 구현
| 항목 | 내용 |
|---|---|
| Language | Java 21 |
| Framework | Spring Boot |
| Build Tool | Gradle |
| Database | MySQL 8 |
| ORM | Spring Data JPA |
| Template Engine | Thymeleaf |
| Security | Spring Security |
| Validation | Jakarta Validation |
| Password Encryption | BCrypt |
src
├── controller
│ ├── HomeController
│ ├── ProductController
│ └── UserController
│
├── service
│ ├── ProductService
│ ├── UserService
│ └── CustomUserDetailsService
│
├── repository
│ ├── ProductRepository
│ └── UserRepository
│
├── entity
│ ├── Product
│ └── User
│
├── dto
│ ├── ProductDTO
│ └── SignupDTO
│
├── config
│ └── SecurityConfig
│
└── exception
└── GlobalExceptionHandler
- 회원가입
- 로그인
- 로그아웃
- BCrypt 비밀번호 암호화
- 이메일 중복 검사
- 닉네임 중복 검사
- 상품 등록
- 상품 목록 조회
- 상품 상세 조회
- 상품 수정
- 상품 삭제
- 판매 완료 상태 변경
- 내가 등록한 상품 조회
- 인증되지 않은 사용자는 보호된 페이지 접근 불가
- 로그인 기능 구현
- 로그아웃 기능 구현
사용자의 비밀번호는 BCrypt 알고리즘으로 암호화하여 저장합니다.
Plain Password
↓
BCrypt Encoder
↓
Database
회원가입
- 이메일 형식 검증
- 비밀번호 길이 검증
- 닉네임 필수 입력
상품 등록
- 상품명 필수 입력
- 상품 설명 필수 입력
- 가격은 0 이상만 허용
상품 수정, 삭제, 판매 상태 변경은
상품 등록자만 수행할 수 있도록 서버에서 검증합니다.
로그인 사용자
│
▼
상품 판매자 확인
│
├── 일치 → 수행
└── 불일치 → 접근 거부
GlobalExceptionHandler를 이용하여
- IllegalArgumentException
- SecurityException
- 기타 Exception
발생 시 사용자에게 오류 페이지를 제공합니다.
| 컬럼 | 설명 |
|---|---|
| id | PK |
| 이메일 | |
| password | BCrypt 암호화 비밀번호 |
| nickname | 닉네임 |
| role | 사용자 권한 |
| active | 활성화 여부 |
| 컬럼 | 설명 |
|---|---|
| id | PK |
| title | 상품명 |
| description | 상품 설명 |
| price | 가격 |
| sellerEmail | 판매자 |
| sold | 판매 여부 |
본 프로젝트에서는 다음과 같은 시큐어 코딩 요소를 적용하였습니다.
| 항목 | 적용 여부 |
|---|---|
| 입력값 검증 | ✅ |
| 비밀번호 암호화 | ✅ |
| 인증(Authentication) | ✅ |
| 인가(Authorization) | ✅ |
| 서버 측 권한 검증 | ✅ |
| 예외 처리 | ✅ |
| JPA 사용(SQL Injection 위험 감소) | ✅ |
슬라이드에서 제시된 것처럼 개발 과정에서는 요구사항 분석, 시스템 설계, 구현, 테스트 및 체크리스트를 고려하며 보안 요소를 적용하는 것을 목표로 하였습니다. :contentReference[oaicite:2]{index=2} :contentReference[oaicite:3]{index=3}
git clone https://github.com/본인아이디/secure-coding.gitCREATE DATABASE secure_coding
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;spring.datasource.url=jdbc:mysql://localhost:3306/secure_coding?serverTimezone=Asia/Seoul&characterEncoding=UTF-8
spring.datasource.username=YOUR_USERNAME
spring.datasource.password=YOUR_PASSWORD
spring.jpa.hibernate.ddl-auto=updateSecureCodingApplication 실행
브라우저 접속
http://localhost:8080
- 회원가입
- 로그인
- 로그아웃
- 상품 등록
- 상품 조회
- 상품 수정
- 상품 삭제
- 로그인하지 않은 사용자의 접근 제한
- 다른 사용자의 상품 수정/삭제 차단
- 입력값 검증 확인
- BCrypt 비밀번호 저장 확인
- Spring Boot 기반 웹 서비스 개발 과정
- Spring Security를 활용한 인증 및 권한 관리
- BCrypt를 이용한 비밀번호 암호화
- Validation을 활용한 입력값 검증
- 서버 측 접근 권한 검증의 중요성
- 예외 처리 및 안전한 웹 서비스 구현
- 기능 구현뿐만 아니라 보안을 함께 고려하는 시큐어 코딩 개발 방식
- 상품 검색 기능
- 상품 이미지 업로드
- 관리자(Admin) 기능
- 사용자 프로필 수정
- 비밀번호 변경
- 신고 기능
- 채팅 기능
- 페이징(Pagination)