QR ํ๊ทธ๋ก ์ ๊ฒ๊ณผ ๋ฏผ์์ ํ ํ๋ซํผ์์ ์ฒ๋ฆฌํ๋ ํ์คํ ์น์ฑ
ํด๋ผ์ฐ๋ 3-Tier(์น/์ ํ๋ฆฌ์ผ์ด์ /DB) ๊ตฌ์กฐ, ๋ชจ๋ฐ์ผ ํ์ฅ ์ฌ์ฉ ์ต์ ํ
- ๊ธฐ๊ฐ: 2025-09-03 ~ 2025-09-16 (2์ฃผ)
- ํ: 3์กฐ SNAPSHOT (๊น๋ฏผ์, ๊ตฌํฌ์, ์ต์จ์ , ์ต์ด์)
- ๋ชฉ์ : ์ข ์ด ์ ๊ฒํยท์ ํ ๋ฏผ์์ ๋์งํธ ์ ํ. ์ค์๊ฐ ๋ฐ์ดํฐ๋ก ์๋ฐฉ์ ๊ด๋ฆฌ์ ์ฒ๋ฆฌ ์๋ ํฅ์.
- ์ค๋น ๊ด๋ฆฌ
- ์ค๋น ๋ฑ๋ก/์์ /์ญ์ , ๋๋ฉ์ธ(์๋ฐฉยท์์ฐฐยท๋ฏธํ) ๋ถ๋ฅ, ์ํ/์์น(GPS) ๊ด๋ฆฌ
- ์ค๋น๋ณ QR ์ฝ๋ ๋ฐ๊ธยทํ๊ธฐ ๋ผ์ดํ์ฌ์ดํด, ์ผ๊ด ๋ฐ๊ธ
- ๊ฒ์/ํํฐ: ๋๋ฉ์ธ, ์ค๋น๋ช , ์ํ, ์ต๊ทผ ์ ๊ฒ์ผ
- ์ ๊ฒ ๊ด๋ฆฌ
- ํ ํ๋ฆฟ ๊ธฐ๋ฐ ์ฒดํฌ๋ฆฌ์คํธ: ํญ๋ชฉ ํ์ (BOOL/NUM/TEXT/IMAGE), ํ์ ์ฌ๋ถ, ๊ฐ์ด๋, ๋ฒ์ ๊ฒ์ฆ(min/max/step)
- ์ ์ถ ๊ฒ์ฆ: ํ์ํญ๋ชฉ ๋๋ฝ ๊ธ์ง, ์ค๋ณต ์ ์ถ ๋ฐฉ์ง, ์์น ์ผ์น ์คํจ ์ ๋ฐ๋ ค
- ์ด๋ ฅ/๋ก๊ทธ: ์ ๊ฒ์, ์๊ฐ, ์์น, ๊ฒฐ๊ณผ ๋ณ๊ฒฝ ์ถ์
- ๋ฏผ์ ๊ด๋ฆฌ
- ์ ์โ์ฒ๋ฆฌ์คโ์๋ฃ ์ํฌํ๋ก ์ํ ์ ํ ๋ฐ ์ฝ๋ฉํธ ๊ธฐ๋ก
- ์ ํ ๋ถ๋ฅ, ์ฒจ๋ถ(์ด๋ฏธ์ง) ์กฐํ, ์ค๋น์ ์ฐ๊ณ๋ ํ์คํ ๋ฆฌ ํ์ธ
- ๋์๋ณด๋/๋ฆฌํฌํธ
- ์ค๋ ์์ ์ ๊ฒ ์๋ฃ/์ ์ฒด ์งํ๋ฅ , ์ต๊ทผ 10์ผ ์ถ์ด(ํด๋ฆญ ๋๋ฆด๋ค์ด)
- ๋ฏธ์ ๊ฒ/์ง์ฐ ์ค๋น ์นด์ดํธ, ๋๋ฉ์ธ๋ณ ๋ถํฌ
- ์ง๋(์์ค ํํฉ)
- Kakao Map ๊ธฐ๋ฐ GPS ๋ง์ปค, ํด๋ฌ์คํฐ๋ง, ์ํ์์(์ ์/์ฃผ์/์ด์)
- ํ์ : ์ค๋น๋ช , ์ฃผ์, ์ต๊ทผ ์ ๊ฒ์ผ, ํ์ฌ ์ํ, ์์ธ ๋งํฌ
- ์ธ์ฆ/๊ถํ
- ์นด์นด์ค OAuth2 + Spring Security, ๊ด๋ฆฌ์ ๊ถํ ๊ตฌ๋ถ
- ์ธ์ /๋ณด์ ํค๋, HTTPS ์ ์ (OCI)
- QR ํ๊ทธ ์ง์
+ PIN ๊ฒ์ฆ
- ์ค๋น๋ณ PIN ํ์ธ ํ ์ฒดํฌ๋ฆฌ์คํธ ์ ๊ทผ ํ์ฉ
- ๋ชจ๋ฐ์ผ ์ฒดํฌ๋ฆฌ์คํธ
- ํ ํ๋ฆฟ ์๋ ๋ก๋ฉ, ์ ๋ ฅ ์ ํจ์ฑ(ํ์/๋ฒ์/ํ์) ์ฆ์ ๊ฒ์ฆ
- ์ฌ์ง ์ ๋ก๋ โ AWS S3 ์ ์ฅ, ๋ฉํ๋ฐ์ดํฐ DB ์ฐ๋
- ์์น ๊ธฐ๋ฐ ์ ์ถ ๋ณดํธ
- Geolocation API๋ก ํ์ฌ ์์น ํ๋
- ์ค๋น ์ขํ์ ํ์ฉ ๋ฐ๊ฒฝ ๋น๊ต ํ ๋ถ์ผ์น ์ ์ ์ถ ์ฐจ๋จ
- ์ ์ถ ์ ๋ขฐ์ฑ
- ์ด์ค ์ ์ถ ๋ฐฉ์ง ํ ํฐ, ์คํจ ์ ๋ถ๋ถ ๋กค๋ฐฑ, ์๋ฒ์ธก ์ฌ๊ฒ์ฆ
- QR ๊ธฐ๋ฐ ์ํฐ์น ์ ๊ณ
- ์ค๋น ์๋ณ ์๋ ๋งคํ, ์ ํ ์ ํ + ์์ธ ๋ด์ฉ ์ ๋ ฅ
- ์ฒจ๋ถ ๋ฐ ์ฐ๋ฝ
- ์ฌ์ง ์ฒจ๋ถ(S3), ์ ํ์ ์ด๋ฉ์ผ ๊ธฐ์ฌ
- ์ฒ๋ฆฌ ํผ๋๋ฐฑ
- ์ ์ ์๋ฃ ์๋ด, ์ํ ๋ณ๊ฒฝ ์๋ฆผ(ํ์ด์ง ๊ธฐ์ค)
- ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ
- ํธ๋์ญ์ ์ฒ๋ฆฌ, ํ์/์ธ๋ํค ์ ์ฝ ์ค์, ์๋ฒ์ธก ์ต์ข ๊ฒ์ฆ
- ๊ฐ์ฌ ๊ฐ๋ฅ์ฑ
- ๋ชจ๋ ์ค์ ์ด๋ฒคํธ(๋ก๊ทธ์ธ, ์ ๊ฒ/๋ฏผ์ ์์ฑยท์์ ) ๊ฐ์ฌ ๋ก๊ทธ ๊ธฐ๋ก
- ํ์ฅ์ฑ
- 3-Tier ๊ตฌ์กฐ(์น/Tomcat/Oracle), ์ ์ ์์ฐ ๋ถ๋ฆฌ, ์ธ๋ถ API ๋ชจ๋ํ
- Front-end: JSP/JSTL
- Back-end: Spring MVC 6, Spring Security, MyBatis
- DB: Oracle Autonomous DB(OCI)
- ์ ์ฅ์: AWS S3
- ์ธ๋ถ: Kakao Map, Kakao OAuth2
- ๋ฐฐํฌ: OCI Compute(Tomcat, HTTPS)
- Language/Build: Java 17, Maven, WAR
- Web: Spring Web MVC 6.0.23, JSP, JSTL, Servlet 6.0
- Security: Spring Security 6.0.5 + OAuth2 Client
- DB/Access: Oracle(OCI), ojdbc8 21.11, MyBatis 3.5.12, DBCP2
- JSON/Log: Jackson 2.14, Logback 1.5
- ํนํ: ZXing(QR), AWS SDK v2 S3, Lombok
- ํ์ /๋ฐฐํฌ: GitHub, Figma, Jira, OCI Compute(Linux, Tomcat)
- ์ ๊ฒยท๋ฏผ์ ํตํฉ ์น์ฑ ์์ฑ. ํ์ฅ QR โ ์ฆ์ ์ ๋ ฅ โ ๋์๋ณด๋ ์ง๊ณ
- OCI HTTPS ๋ฐฐํฌ ์์ ํ. ์ธ๋ถ API ์ฐ๋ ๋ณด์ ํ์ธ
- ์ง๋ ๊ธฐ๋ฐ ์ด์๊ณผ ์ต๊ทผ 10์ผ ํต๊ณ๋ก ๊ด๋ฆฌ ํจ์จ ํฅ์
- ์ด์์ฒด์ : Linux, macOS, Windows
- Java: JDK 17 (LTS)
- ๋น๋ ๋๊ตฌ: Maven (์ต์ 3.8.x ์ด์)
- ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ: Apache Tomcat
- ๋ฐ์ดํฐ๋ฒ ์ด์ค: Oracle Database
- ํจํค์ง ๊ด๋ฆฌ์ / ์ฐ๊ฒฐ ๋๊ตฌ
- Git
- Oracle JDBC Driver (ojdbc8)
- Oracle SQL Developer
-
์ ์ฅ์ ํด๋ก
# GitHub ์ ์ฅ์๋ฅผ ํด๋ก ํ๊ณ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ git clone https://github.com/sysone-3/qure.git cd qure
-
ํ๊ฒฝ ๋ณ์ ์ค์ ์๋ ์์ ํ์ผ์ ์ฐธ๊ณ ํ์ฌ
src/main/resources๊ฒฝ๋ก์ ์ค์ ํ์ผ์ ์์ฑํ์ธ์.
์ค์ ํค ๊ฐ์ ๋ณด์์ ์ปค๋ฐํ์ง ๋ง๊ณ ,.gitignore์ ์ถ๊ฐํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.-
Oracle DB ์ฐ๊ฒฐ ์ ๋ณด
-
AWS S3 ๋ฒํท ์ ๋ณด
-
์๋น์ค ๋๋ฉ์ธ ์ค์
db.url=jdbc:oracle:thin:@<DB_SERVICE_NAME>?TNS_ADMIN=<WALLET_PATH> db.user=<DB_USERNAME> db.pass=<DB_PASSWORD> db.driver=oracle.jdbc.OracleDriver aws.region=ap-northeast-2 s3.bucket=<S3_BUCKET_NAME> aws.accessKeyId=<AWS_ACCESS_KEY> aws.secretAccessKey=<AWS_SECRET_KEY> app.public-domain=https://<DOMAIN_OR_IP>/qure
```properties kakao.client-id=<KAKAO_CLIENT_ID> kakao.client-secret=<KAKAO_CLIENT_SECRET> ``````properties kakao.api.key=<KAKAO_API_KEY> kakao.app.key=<KAKAO_APP_KEY> ``` -
-
์์กด์ฑ ์ค์น
# Maven์ ์ฌ์ฉํ์ฌ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์น mvn clean install -
๋น๋ ๋ฐ ํจํค์ง
# Maven์ผ๋ก WAR ํ์ผ ๋น๋ mvn package # ์์ฑ๋ WAR ํ์ผ์ /target ๋๋ ํ ๋ฆฌ์์ ํ์ธ ๊ฐ๋ฅ
-
์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ ๋ฐฐํฌ
- Apache Tomcat ์๋ฒ์ WAR ํ์ผ์ ๋ฐฐํฌํฉ๋๋ค.
- ์๋ฒ ์คํ ํ http://localhost:8080 ๋๋ ์ค์ ๋ ๋๋ฉ์ธ(https://qure.site)์ผ๋ก ์ ์ํฉ๋๋ค.
- ์ด์ ํ๊ฒฝ์์๋ Oracle Cloud Infrastructure(OCI) Compute Instance์ ๋ฐฐํฌํฉ๋๋ค.
-
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๊ธฐํ
- Oracle Autonomous Database๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์ด๊ธฐํ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ์ฌ ํ
์ด๋ธ์ ์์ฑํฉ๋๋ค.
TODO: ์ค์ ์ด๊ธฐ ์คํค๋ง ํ์ผ ๊ฒฝ๋ก/์ด๋ฆ ๊ธฐ์ ํ์
-
์ ํ๋ฆฌ์ผ์ด์ ์คํ
- Tomcat์ด ์ ์์ ์ผ๋ก ๊ธฐ๋๋๋ฉด ์๋์ ๊ฐ์ด ์ ๊ทผ ๊ฐ๋ฅํฉ๋๋ค:
- ๊ด๋ฆฌ์ ๋์๋ณด๋: ์น ๋ธ๋ผ์ฐ์ (๋ฐ์คํฌํฑ) โ https://qure.site
- ์ ๊ฒ์ ํ๋ฉด: QR ์ฝ๋ ์ค์บ ํ ๋ชจ๋ฐ์ผ ๋ธ๋ผ์ฐ์
- ๋ฏผ์์ธ ํ๋ฉด: QR ์ฝ๋ ์ค์บ ํ ๋ชจ๋ฐ์ผ ๋ธ๋ผ์ฐ์
- Tomcat์ด ์ ์์ ์ผ๋ก ๊ธฐ๋๋๋ฉด ์๋์ ๊ฐ์ด ์ ๊ทผ ๊ฐ๋ฅํฉ๋๋ค:




