From 8aaa49b1f0f01cf1f555a8f43972a71190e01c4f Mon Sep 17 00:00:00 2001 From: Gyubin-Han Date: Tue, 10 Jun 2025 17:40:12 +0900 Subject: [PATCH] =?UTF-8?q?Add:=20DB=20=EC=84=A4=EA=B3=84=20=EB=B0=8F=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ReadMe.md | 19 +++++++++++- pom.xml | 23 ++++++++++----- sql/DDL.sql | 29 +++++++++++++++++++ .../be/gyu/urlShortener/entity/UrlMap.java | 29 +++++++++++++++++++ .../be/gyu/urlShortener/entity/Users.java | 21 ++++++++++++++ 5 files changed, 112 insertions(+), 9 deletions(-) create mode 100644 sql/DDL.sql create mode 100644 src/main/java/be/gyu/urlShortener/entity/UrlMap.java create mode 100644 src/main/java/be/gyu/urlShortener/entity/Users.java diff --git a/ReadMe.md b/ReadMe.md index 812cb72..fa1c7e4 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -1,2 +1,19 @@ # UrlShortener -원본 URL을 짧게 요약시키는 시스템 +원본 URL을 짧게 단축시키는 시스템 +### Use Skill tree +| | Skills | +|---|---| +| Back-End | Spring Framework(MVC, JPA) | +| Front-End | Thyme-leaf | +| Infra | Linux, MariaDB | +### 주요 기능 +1. 긴 원본 URL을 짧은 형태나 사용자가 희망하는 단어의 형태로 URL 단축 +2. 단축된 URL로 접속 시도 시, (존재하는 URL의 경우) 원본 URL로 Redirect 처리 +3. 정상적인 HTTP(HTTPS) URL인지 검증한 후 단축 진행 +4. 단축 URL을 특정 기간에만 유지되도록 하고, 특정 기간을 경과하면 접속 차단
+### 구현 현황 +- [x] 개발 환경 구축 +- [x] DB 설계 및 Entity 구현 +- [x] URL 단축 알고리즘 구현 +- [ ] URL 단축 저장 및 조회 기능 구현 +- [ ] 테스트 및 배포 \ No newline at end of file diff --git a/pom.xml b/pom.xml index f9cc560..aa3e52c 100644 --- a/pom.xml +++ b/pom.xml @@ -38,10 +38,10 @@ org.springframework.boot spring-boot-starter-data-rest - + org.springframework.boot spring-boot-starter-thymeleaf @@ -50,10 +50,10 @@ org.springframework.boot spring-boot-starter-web - + org.springframework.boot @@ -61,12 +61,12 @@ runtime true - + org.mariadb.jdbc mariadb-java-client @@ -80,17 +80,24 @@ org.springframework.boot spring-boot-starter-test - test + test org.springframework.restdocs spring-restdocs-mockmvc test - + + + + + io.seruco.encoding + base62 + 0.1.3 diff --git a/sql/DDL.sql b/sql/DDL.sql new file mode 100644 index 0000000..732b0ef --- /dev/null +++ b/sql/DDL.sql @@ -0,0 +1,29 @@ +CREATE DATABASE `hangyub_url_shortener`; + +USE hangyub_url_shortener; + +DROP TABLE IF EXISTS url_map; +DROP TABLE IF EXISTS users; + +CREATE TABLE `users`( + `user_id` INT NOT NULL AUTO_INCREMENT, + `user_email` VARCHAR(100) NOT NULL, + `user_password` VARCHAR(30) NOT NULL, + `user_nickname` VARCHAR(20) NOT NULL, + `user_created_at` DATETIME NOT NULL, + PRIMARY KEY(user_id) +); + +CREATE TABLE `url_map`( + `url_map_id` INT NOT NULL AUTO_INCREMENT, + `url_map_original` VARCHAR(255) NOT NULL, + `url_map_short` VARCHAR(7) NOT NULL, + `url_map_is_active` TINYINT(1) NOT NULL, + `user_id` INT NULL, + `url_map_click` INT NOT NULL DEFAULT 0, + `url_map_created_at` DATETIME NOT NULL, + `url_map_edited_at` DATETIME NOT NULL, + `url_map_expired_at` DATETIME NULL, + PRIMARY KEY(url_map_id), + FOREIGN KEY(user_id) REFERENCES users(user_id) +); diff --git a/src/main/java/be/gyu/urlShortener/entity/UrlMap.java b/src/main/java/be/gyu/urlShortener/entity/UrlMap.java new file mode 100644 index 0000000..0fcb4cc --- /dev/null +++ b/src/main/java/be/gyu/urlShortener/entity/UrlMap.java @@ -0,0 +1,29 @@ +package be.gyu.urlShortener.entity; + +import java.time.LocalDateTime; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import lombok.Getter; + +@Entity +@Getter +public class UrlMap { + @Id + @GeneratedValue(strategy=GenerationType.IDENTITY) + private int urlMapId; + private String urlMapOriginal; + private String urlMapShort; + private boolean urlMapIsActive; + @ManyToOne + @JoinColumn(name="user_id") + private Users user; + private int urlMapClick; + private LocalDateTime urlMapCreatedAt; + private LocalDateTime urlMapEditedAt; + private LocalDateTime urlMapExpiredAt; +} diff --git a/src/main/java/be/gyu/urlShortener/entity/Users.java b/src/main/java/be/gyu/urlShortener/entity/Users.java new file mode 100644 index 0000000..d257e60 --- /dev/null +++ b/src/main/java/be/gyu/urlShortener/entity/Users.java @@ -0,0 +1,21 @@ +package be.gyu.urlShortener.entity; + +import java.time.LocalDateTime; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import lombok.Getter; + +@Entity +@Getter +public class Users { + @Id + @GeneratedValue(strategy=GenerationType.IDENTITY) + private int userId; + private String userEmail; + private String userPassword; + private String userNickname; + private LocalDateTime userCreatedAt; +}