Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🛡️ Secure Coding Project

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 비밀번호 암호화
  • 이메일 중복 검사
  • 닉네임 중복 검사

📦 상품 기능

  • 상품 등록
  • 상품 목록 조회
  • 상품 상세 조회
  • 상품 수정
  • 상품 삭제
  • 판매 완료 상태 변경
  • 내가 등록한 상품 조회

🔒 보안 기능

1. Spring Security 적용

  • 인증되지 않은 사용자는 보호된 페이지 접근 불가
  • 로그인 기능 구현
  • 로그아웃 기능 구현

2. 비밀번호 암호화

사용자의 비밀번호는 BCrypt 알고리즘으로 암호화하여 저장합니다.

Plain Password
        ↓
 BCrypt Encoder
        ↓
Database

3. 입력값 검증 (Validation)

회원가입

  • 이메일 형식 검증
  • 비밀번호 길이 검증
  • 닉네임 필수 입력

상품 등록

  • 상품명 필수 입력
  • 상품 설명 필수 입력
  • 가격은 0 이상만 허용

4. 서버 측 권한 검증

상품 수정, 삭제, 판매 상태 변경은

상품 등록자만 수행할 수 있도록 서버에서 검증합니다.

로그인 사용자
        │
        ▼
상품 판매자 확인
        │
        ├── 일치 → 수행
        └── 불일치 → 접근 거부

5. 예외 처리

GlobalExceptionHandler를 이용하여

  • IllegalArgumentException
  • SecurityException
  • 기타 Exception

발생 시 사용자에게 오류 페이지를 제공합니다.


💾 데이터베이스

User

컬럼 설명
id PK
email 이메일
password BCrypt 암호화 비밀번호
nickname 닉네임
role 사용자 권한
active 활성화 여부

Product

컬럼 설명
id PK
title 상품명
description 상품 설명
price 가격
sellerEmail 판매자
sold 판매 여부

🔐 Secure Coding 적용 내용

본 프로젝트에서는 다음과 같은 시큐어 코딩 요소를 적용하였습니다.

항목 적용 여부
입력값 검증
비밀번호 암호화
인증(Authentication)
인가(Authorization)
서버 측 권한 검증
예외 처리
JPA 사용(SQL Injection 위험 감소)

슬라이드에서 제시된 것처럼 개발 과정에서는 요구사항 분석, 시스템 설계, 구현, 테스트 및 체크리스트를 고려하며 보안 요소를 적용하는 것을 목표로 하였습니다. :contentReference[oaicite:2]{index=2} :contentReference[oaicite:3]{index=3}


🚀 실행 방법

1. 프로젝트 Clone

git clone https://github.com/본인아이디/secure-coding.git

2. MySQL Database 생성

CREATE DATABASE secure_coding
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

3. application.properties 설정

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=update

4. 실행

SecureCodingApplication 실행

브라우저 접속

http://localhost:8080

🧪 테스트

회원 기능

  • 회원가입
  • 로그인
  • 로그아웃

상품 기능

  • 상품 등록
  • 상품 조회
  • 상품 수정
  • 상품 삭제

보안 테스트

  • 로그인하지 않은 사용자의 접근 제한
  • 다른 사용자의 상품 수정/삭제 차단
  • 입력값 검증 확인
  • BCrypt 비밀번호 저장 확인

📚 프로젝트를 통해 배운 점

  • Spring Boot 기반 웹 서비스 개발 과정
  • Spring Security를 활용한 인증 및 권한 관리
  • BCrypt를 이용한 비밀번호 암호화
  • Validation을 활용한 입력값 검증
  • 서버 측 접근 권한 검증의 중요성
  • 예외 처리 및 안전한 웹 서비스 구현
  • 기능 구현뿐만 아니라 보안을 함께 고려하는 시큐어 코딩 개발 방식

📌 향후 개선 사항

  • 상품 검색 기능
  • 상품 이미지 업로드
  • 관리자(Admin) 기능
  • 사용자 프로필 수정
  • 비밀번호 변경
  • 신고 기능
  • 채팅 기능
  • 페이징(Pagination)

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages