Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
185 commits
Select commit Hold shift + click to select a range
c5346fd
Feat/ 유저 스웨거 연결 컨트롤러, DTO 생성
dudulic Jan 14, 2026
8b2faa6
Feat: 유저 컨트롤러, DTO 개발 및 Swagger 추가
LeeJeongHeon02 Jan 14, 2026
0ddfc8b
feat: 공통 응답 및 에러 핸들러 개발, UserRestController 공통 응답 처리
LeeJeongHeon02 Jan 14, 2026
0d937ed
feat: CI/CD 구축
LeeJeongHeon02 Jan 14, 2026
7ea20ef
feat: CI/CD 구축 2
LeeJeongHeon02 Jan 14, 2026
4fee6a6
Fix: gradle wrapper jar 강제 추가
LeeJeongHeon02 Jan 14, 2026
6bd90bf
feat: CI/CD 구축 완료 및 배포 성공
LeeJeongHeon02 Jan 14, 2026
443c20a
Feat: CI/CD 구축 완료 및 배포 성공
LeeJeongHeon02 Jan 14, 2026
95076ef
docs: develop에 Readme 업로드
LeeJeongHeon02 Jan 14, 2026
7e779a4
Feat: 기기, 유저(내프로필 조회, 닉네임 변경) 스웨거 명세
cdth12345 Jan 15, 2026
0d1a246
Refactor: Remove isSuccess field from DeviceResponseDTO
LeeJeongHeon02 Jan 15, 2026
c04d24d
Feat: 임시 기기 관련 API, 유저(내프로필 조회, 닉네임 변경) API 개발
LeeJeongHeon02 Jan 15, 2026
7f90249
feat/auth와 users 분리
dudulic Jan 15, 2026
d009013
feat/ users와 auth DTO 분리
dudulic Jan 15, 2026
3d16671
feat: images API - mock 데이터 넣은 Controller 개발
LeeJeongHeon02 Jan 15, 2026
33982a4
Refactor : auth와 users Api URL 분리
LeeJeongHeon02 Jan 15, 2026
42dafef
B
jeun66 Jan 15, 2026
29770b9
Merge pull request #14 from DigitalTok/feat/12-images-controller
jeun66 Jan 16, 2026
fef17d6
Merge branch 'develop' of https://github.com/DigitalTok/digitaltok-se…
jeun66 Jan 19, 2026
a641fde
Init Amazon S3 Config
LeeJeongHeon02 Jan 19, 2026
3e92469
Feat: 기기 상태 조회, 기기 연결, 기기 해제 API 작성
cdth12345 Jan 19, 2026
cafc31b
Feat: S3 연동 및 이미지 업로드 확인(S3 테스트용 이미지 업로드 API)
LeeJeongHeon02 Jan 19, 2026
43ef885
Feat: RDS MySQL 연동 및 TestUser 엔티티를 통한 연동 확인
LeeJeongHeon02 Jan 19, 2026
6121b9d
feat: add image preview/binary service
jeun66 Jan 20, 2026
ce2f061
Merge pull request #18 from DigitalTok/feat/15-S3-RDS
jeun66 Jan 20, 2026
3a3dee7
Feat: 기기 상태 조회, 기기 연결, 기기 해제 API 작성
LeeJeongHeon02 Jan 20, 2026
16adf92
Merge branch 'develop' into feat/image-preview
jeun66 Jan 20, 2026
1b1e204
Feat: image preview 개발(엔티티, Service)
LeeJeongHeon02 Jan 20, 2026
6e672a4
Refactor: deploy 스크립트 수정
LeeJeongHeon02 Jan 20, 2026
3a91845
Refactor: deploy 스크립트 수정 2
LeeJeongHeon02 Jan 20, 2026
3bcd100
Refactor: deploy 스크립트 수정 - 테스트 스킵
LeeJeongHeon02 Jan 20, 2026
7e924f7
Refactor: deploy 스크립트 수정 - GitHub Actions에 있는 변수 값을 EC2 내부로 밀어 넣는 스크립…
LeeJeongHeon02 Jan 20, 2026
99bef49
Refactor: deploy 스크립트 수정 - export를 -D 로 수정
LeeJeongHeon02 Jan 20, 2026
6da97e2
Refactor: deploy 스크립트 수정 - GitHub Actions 변수 문법 적용
LeeJeongHeon02 Jan 20, 2026
908445d
Feat: setter제거, 기기 테스트용 임시 로직 설계
cdth12345 Jan 20, 2026
90d78b7
Refactor: deploy 스크립트 수정 - run.sh 파일 만들어서 전송
LeeJeongHeon02 Jan 20, 2026
0482cbc
Refactor: deploy 스크립트 수정 - 리눅스 환경 변수 시스템 사용
LeeJeongHeon02 Jan 20, 2026
0739b0e
Refactor: deploy 스크립트 수정 - Heredoc 방식
LeeJeongHeon02 Jan 20, 2026
8fe9ca4
Feat: device 엔티티에 기기 삭제 필드 추가
cdth12345 Jan 20, 2026
539fba0
fix: application.yml 생성 방식 변경
LeeJeongHeon02 Jan 20, 2026
d29e614
Feat: 기기 테스트용 임시 로직 설계
LeeJeongHeon02 Jan 20, 2026
7068473
Fix: deploy 파일 수정 및 배포 성공
cdth12345 Jan 20, 2026
62ebc14
fix: 이미지, 지하철 엔티티 수정 - ERD cloud에 수정한 내용이랑 동일하게 코드 수정
LeeJeongHeon02 Jan 20, 2026
1083814
feat:이미지 업로드api,preview api, binary api 정상작동(단, 로직 구현은 미완 및 request 더…
jeun66 Jan 21, 2026
5d4683f
Feat: 지하철 역 템플릿 목록 조회 기능 개발 및 검증완료
LeeJeongHeon02 Jan 21, 2026
a40cdc6
Feat: 단일 지하철 역 조회 API 개발
LeeJeongHeon02 Jan 21, 2026
12ee2d5
fix: 이미지 매핑 - 지하철 템플릿 연관관계 삭제
LeeJeongHeon02 Jan 21, 2026
9d87acb
fix: 템플릿 관련 기능 슈퍼타입/서브타입(Supertype/Subtype) 모델로 Entity 수정 및 이에 따른 로직 수정
LeeJeongHeon02 Jan 21, 2026
33d141b
변경된 테이블 내용 반영
jeun66 Jan 22, 2026
ce20760
Feat: 지하철 템플릿 이미지 생성기능 개발 및 S3,DB 연동 검증
LeeJeongHeon02 Jan 23, 2026
249763f
Feat: 지하철 템플릿 검색 API 개발
LeeJeongHeon02 Jan 23, 2026
d23a447
Fix: 주석 수정
LeeJeongHeon02 Jan 23, 2026
3649a95
Docs: readme.md ERD 및 주요 기능 수정
LeeJeongHeon02 Jan 23, 2026
269507f
Merge pull request #28 from DigitalTok/feat/27-subway
jeun66 Jan 23, 2026
3f0ca0f
Merge develop into my branch
jeun66 Jan 23, 2026
a67c815
[feat]원본 이미지 preview,binary로 변환 로직
jeun66 Jan 23, 2026
ac293ac
preview, binary 관련 기능 하나로 묶고 url 반환
jeun66 Jan 23, 2026
c802f81
Feat:기기 관련 API를 NFC 고유 Id 기반으로 수정
cdth12345 Jan 23, 2026
80eaf12
원본이미지 preview, binary로 변환 로직 구현
jeun66 Jan 23, 2026
25937fa
[feat]디더링 품질 향상
jeun66 Jan 23, 2026
fa5198d
[fix]S3에 저장된 preview, binary url 타 기기에서도 접근 가능하도록 수정
jeun66 Jan 23, 2026
fdbe91c
[fix]MockStorage 비활성화
jeun66 Jan 23, 2026
baf7e32
[delete]테스트한 파일들 삭제
jeun66 Jan 23, 2026
aa784e7
[delete]테스트한 파일들 삭제2
jeun66 Jan 23, 2026
79f976a
Feat: 이미지 업로드, 미리보기 변환, 바이너리 변환 api 구현
LeeJeongHeon02 Jan 23, 2026
bd1dbd6
[fix]서버에 파일 저장되는 문제 해결
jeun66 Jan 23, 2026
e63185e
[fix].gitignore에 debug-output 추가
jeun66 Jan 23, 2026
a6b9e13
Fix: 서버에 파일 저장되게 수정ix: 서버에 파일 저장되게 수정
LeeJeongHeon02 Jan 24, 2026
e00b699
Fix:기기 관련 API를 NFC 고유 Id 기반으로 수정
LeeJeongHeon02 Jan 24, 2026
9b4c157
Refactor: 계층형 구조에서 도메인형 구조로 리펙토링
LeeJeongHeon02 Jan 24, 2026
9992156
Refactor: @Builder 없는 엔티티에 @Builder추가
LeeJeongHeon02 Jan 24, 2026
311ffe7
Refactor: DB 수정 작업에 @Transactional 추가
LeeJeongHeon02 Jan 24, 2026
ad13316
fix: Self-invocation때문에 Transaction처리가 안되는 문제 수정
LeeJeongHeon02 Jan 24, 2026
4414af4
Refactor: 노션 API 명세서랑 Swagger 일치화
LeeJeongHeon02 Jan 24, 2026
2f1f93a
feat/엔티티 및 레포지토리, JWT 의존성, AuthService 구현
dudulic Jan 25, 2026
ff41704
Feat/ User 엔티티에 이메일 변경 메서드 추가 후 UserService 구현
dudulic Jan 25, 2026
1bbfd24
feat/ user와 auth controller 를 service 와 연결
dudulic Jan 25, 2026
f3bee00
feat/ PrincipalDetails와 JwtAuthenticationFilter파일 구현 및 SecurityConfig…
dudulic Jan 25, 2026
32cf3ca
feat/getProfile 메서드 구현 및 UserRestController 하드코딩 수정
dudulic Jan 25, 2026
620bb19
feat/회원가입, 로그인, 로그아웃, 회원탈퇴, 비밀번호,이메일 주소 변경 기능 구현
dudulic Jan 25, 2026
ae092fe
fix: 충돌 해결 및 SwaggerConfig수정
LeeJeongHeon02 Jan 25, 2026
6ab0bae
Refactor: 중간 피드백 To-Be 사항 수정 완료 및 SwaggerConfig수정 및 충돌 해결
LeeJeongHeon02 Jan 25, 2026
3727e3d
fix: deploy에 JWT_SECRET_KEY 추가
LeeJeongHeon02 Jan 25, 2026
e3271c6
fix: deploy에서 JWT_SECRET_KEY를 WT 키를 -D 옵션으로 직접 주입
LeeJeongHeon02 Jan 25, 2026
768cd58
fix: deploy에서 JWT_SECRET_KEY를 -Djwt.secret 옵션으로 넣어주게 수정
LeeJeongHeon02 Jan 25, 2026
c529b85
Docs: Readme에 팀원 및 담당 API 추가
LeeJeongHeon02 Jan 25, 2026
52abfad
fix: 회원가입 닉네임, 이름 입력 삭제
dudulic Jan 26, 2026
f4ad7d3
fix: 닉네임 변경 기능 삭제
dudulic Jan 26, 2026
cf04374
fix: 회원가입 시 닉네임, 이름 입력 삭제 및 닉네임 변경기능 삭제
dudulic Jan 26, 2026
1ffc438
Fix: 회원가입 시 닉네임, 이름 입력 기능 삭제, 닉네임 변경 기능 삭제
LeeJeongHeon02 Jan 26, 2026
8de405d
Feat: 교통약자 템플릿 목록 조회, 상세 조회 API 개발
LeeJeongHeon02 Jan 27, 2026
5317d8b
fix: 지하철 템플릿 생성할 때, 바이너리 데이터 파일도 생성해서 S3에 저장할 수 있게 수정
LeeJeongHeon02 Jan 27, 2026
e9bd63f
fix: RuntimeException을 GeneralException으로 수정 및 로깅
LeeJeongHeon02 Jan 27, 2026
59f5999
Refactor: 템플릿 상세조회 PathVariable templateId로 통일 및 기존 교통약자 템플릿 관련 API 개…
LeeJeongHeon02 Jan 27, 2026
397e09f
[feat]최근 사진 조회 기능 구현
jeun66 Jan 27, 2026
e7ad702
[feat] 즐겨찾기 기능 구현
jeun66 Jan 27, 2026
662fc25
feat/ 이메일 중복 검사 기능 개발
dudulic Jan 28, 2026
392f8b7
Feat: 이메일 중복 검사 기능 개발
LeeJeongHeon02 Jan 28, 2026
145b08d
Feat: 교통약자 템플릿 API 개발 완료
LeeJeongHeon02 Jan 28, 2026
827a75a
Refactor: Device 관련 API 3개 리팩토링
cdth12345 Jan 29, 2026
f094ba3
Refactor: Device 관련 API 3개 리팩토링
LeeJeongHeon02 Jan 29, 2026
b6daf74
feat/비밀번호 재설정 기능 구현
dudulic Jan 29, 2026
abec3fd
Fix: 응답 DTO, 서비스에서 전화번호 삭제
cdth12345 Jan 29, 2026
60fcbd4
Fix: 응답 DTO, 서비스에서 전화번호 삭제
LeeJeongHeon02 Jan 29, 2026
f07de41
Refactor: DeviceService의 엔티티->DTO 변환 역할을 DeviceConverter에 부여
cdth12345 Jan 30, 2026
7e5d401
Merge remote-tracking branch 'origin/develop' into feat/43-recent-image
jeun66 Jan 30, 2026
7c58f66
[fix]dto에 메타데이터 추가
jeun66 Jan 31, 2026
a70aade
Refactor: DeviceService의 엔티티->DTO 변환 역할을 DeviceConverter에 부여
LeeJeongHeon02 Jan 31, 2026
c58da1f
Feat: 최근 사진 조회 기능, Fix: 즐겨찾기 기능, 이미지 dto 수정
LeeJeongHeon02 Jan 31, 2026
6ad3de4
feat/비밀번호 재설정 기능 개발
dudulic Jan 31, 2026
45dd6fa
feat/비밀번호 재설정 기능 구현
dudulic Jan 31, 2026
9def864
Refactor: Device 엔티티에 권한 및 행위 검증 역할 부여
cdth12345 Feb 1, 2026
1a94bd4
Feat: 비밀번호 재설정 기능 구현
LeeJeongHeon02 Feb 2, 2026
e193c26
fix: deploy.yml 이메일 환경변수 설정
LeeJeongHeon02 Feb 3, 2026
b151f3c
Refactor: 주석 수정
cdth12345 Feb 3, 2026
f3fdabc
Refactor: 이메일 변경 시 result에 변경된 이메일 포함
dudulic Feb 6, 2026
cee88d4
Refactor: DeviceService 보안 강화
cdth12345 Feb 6, 2026
5d86080
Fix: Device Entity 생성일자에 insertable = false 추가
cdth12345 Feb 6, 2026
ce3400b
fix: 회원 탈퇴 시, Request Body 삭제
dudulic Feb 7, 2026
bc2c5ba
Feat: 회원 탈퇴 후 재가입 로직 추가
dudulic Feb 7, 2026
91435d1
Refactor: 56 - expand device entity role
LeeJeongHeon02 Feb 7, 2026
0e157df
Refactor: 이메일 변경 시 result에 변경된 이메일 포함
LeeJeongHeon02 Feb 7, 2026
a9310d0
Refactor: 60 - enhance device service security
LeeJeongHeon02 Feb 7, 2026
965cb91
Fix: Device Entity 생성일자에 insertable = false 추가
LeeJeongHeon02 Feb 7, 2026
28a30f7
Feat: 재가입 로직 추가 및 회원 탈퇴 API Request 파라미터 제거
LeeJeongHeon02 Feb 7, 2026
63889eb
Fix: 지하철역 이미지 생성 폰트 변경
LeeJeongHeon02 Feb 7, 2026
e81de0b
refactor: converter 파일만 생성
jeun66 Feb 8, 2026
efdfa37
fix: getBinary의 db 업데이트 가능하도록 변경
jeun66 Feb 8, 2026
a611c83
refactor: ImageService Slf4j 로깅 적용
jeun66 Feb 8, 2026
79d64ae
refactor: ImageDerivationService Slf4j 로깅 적용
jeun66 Feb 8, 2026
b77c64f
refactor: image관련 errorcode 추가
jeun66 Feb 8, 2026
09fb005
fix: 로그인 더미데이터 user로 돌아가는 api들 수정
jeun66 Feb 8, 2026
aa490d6
fix: jwt 토큰 제대로 꺼내쓸 수 있도록 재수정
jeun66 Feb 8, 2026
a2a9fd2
Refactor: 코드 구조 통일성 개선 - RequestMapping에 api/v1 통일, Controller가 swagg…
LeeJeongHeon02 Feb 8, 2026
cd15d53
fix: Operation 수정
LeeJeongHeon02 Feb 8, 2026
09c0fee
Refactor: 이미지 관련 api 리팩토링(jwt 토큰 오류 해결, converter추가, slf4j, 오류코드 추가)
LeeJeongHeon02 Feb 8, 2026
5221754
Merge pull request #72 from DigitalTok/feat/54-Improved-code-consistency
jeun66 Feb 9, 2026
0bfc08f
Refactor: auth, user 도메인 DTO 검증 추가
LeeJeongHeon02 Feb 9, 2026
d40d046
Refactor: Image 도메인 DTO 검증 추가
LeeJeongHeon02 Feb 9, 2026
41e5c6c
Refactor: Controller에 Valid 추가 및 SubwayCreateRequestDTO 검증 강화
LeeJeongHeon02 Feb 9, 2026
f6f17e2
fix: SecurityConfig 인증 없이 접근 가능한 경로 수정
LeeJeongHeon02 Feb 9, 2026
9a530c0
Refactor: Auth, User DTO 검증 강화 및 @Valid 어노테이션 추가, @Valid 검증 실패 시 발생하는…
LeeJeongHeon02 Feb 9, 2026
96e420b
Docs: TODO 추가
LeeJeongHeon02 Feb 9, 2026
4c74cae
Refactor: Auth 도메인 Swagger 명세 분리 및 에러 코드 적용
dudulic Feb 10, 2026
72b7bd5
feat: ImageControllerDocs 파일만 추가
jeun66 Feb 10, 2026
a1cb9f9
feat: ImageControllerDocs 파일 코드 작성
jeun66 Feb 10, 2026
3d370d8
refactor: ImageController에 errorcode 추가
jeun66 Feb 10, 2026
17cc65c
Refactor: AuthControllerDocs 추가 수정
dudulic Feb 10, 2026
39c3f87
fix: ImageController summary 수정
jeun66 Feb 10, 2026
f995d9c
fix: 이미지 업로드 최대 용량 10MB로 수정
jeun66 Feb 10, 2026
29ac988
refactor: 불필요한 주석 제거
jeun66 Feb 10, 2026
cb8cc20
Refactor: Auth/User 도메인 Converter 도입
dudulic Feb 10, 2026
f5da680
Merge pull request #74 from DigitalTok/feat/73-DTO-valid
jeun66 Feb 10, 2026
f1b77e9
Merge branch 'develop' into Refactor/78-auth-user-converter
dudulic Feb 10, 2026
4f6e226
Merge branch 'develop' into Refactor/76-image-swagger
jeun66 Feb 10, 2026
e48c5fd
Merge branch 'develop' into Refactor/75-auth-interface
LeeJeongHeon02 Feb 10, 2026
c91c4b5
Refactor: Auth 도메인 Swagger 명세 분리 및 에러 코드 적용
LeeJeongHeon02 Feb 10, 2026
0621aae
Refactor: Image 관련 Api Swagger 문서화 스타일 통합, 이미지 업로드 최대 용량 설정 추가
LeeJeongHeon02 Feb 10, 2026
d77352c
Refactor: Auth/User 도메인 Converter 도입
LeeJeongHeon02 Feb 10, 2026
51ee526
Refactor: 이미 생성된 지하철 역 템플릿 생성 못하게 처리
LeeJeongHeon02 Feb 10, 2026
3b8b1e1
Refactor: 지하철 역 이미지는 관리자만 가능하게 수정
LeeJeongHeon02 Feb 10, 2026
825cb2f
Refactor: Device 관련 코드 구조 통일성 개선
cdth12345 Feb 11, 2026
d55628c
Refactor: UserControllerDocs에 개발자 수정
cdth12345 Feb 11, 2026
331f56c
fix: payload row-major로 되도록 수정
jeun66 Feb 11, 2026
af45bcf
fix: 주석 오기입 부분 수정
jeun66 Feb 11, 2026
f43769c
Refactor: 83 device uniformity user developer
LeeJeongHeon02 Feb 11, 2026
d75de10
Refactor: 바이너리 인코딩 스캔 순서 row-major로 변경
LeeJeongHeon02 Feb 11, 2026
fecf863
fix: binary 사진 기기에서 좌우반전되어 보이는 문제 해결
jeun66 Feb 11, 2026
6125d88
Fix: binary 사진 기기에서 좌우반전되어 보이는 문제 해결
LeeJeongHeon02 Feb 11, 2026
ee1ecc4
Refactor: 미사용 코드 주석처리
LeeJeongHeon02 Feb 11, 2026
66566b7
Fix: Refresh Token 생성할때 userId 값도 넣어주게 수정
LeeJeongHeon02 Feb 11, 2026
cc99806
Merge pull request #89 from DigitalTok/Fix/88-logout
dudulic Feb 11, 2026
487e858
fix: binary 변환 로직에서 이미지의 패킹 밀림 현상 해결
jeun66 Feb 11, 2026
4966b8f
Fix: binary 변환 로직에서 이미지의 패킹 밀림 현상 해결
LeeJeongHeon02 Feb 11, 2026
79c900f
Refactor: S3에 이미지 업로드 후 DB에 저장할때, 만약 DB에 저장이 실패하면 S3에 저장한 이미지를 삭제(롤백)…
LeeJeongHeon02 Feb 11, 2026
57ff0b3
Fix: 회원 탈퇴한 이메일 복구 예외처리 추가
dudulic Feb 11, 2026
7f5ea35
Fix: 회원 탈퇴 계정 이메일 중복 검사 허용
dudulic Feb 11, 2026
30b5961
Fix: 회원 탈퇴한 이메일 복구 예외처리 추가
LeeJeongHeon02 Feb 11, 2026
b1459d6
Merge pull request #94 from DigitalTok/Refactor/81-template-exception
dudulic Feb 11, 2026
3808655
Feat: HTTPS 적용 및 HealthController 개발
LeeJeongHeon02 Feb 11, 2026
30e134f
Fix: deploy가 develop, main에서 실행되도록 수정
LeeJeongHeon02 Feb 11, 2026
0463727
Feat: HTTPS 적용 및 HealthController 개발
LeeJeongHeon02 Feb 11, 2026
6e1b24c
Fix: CORS 오류 관련 Config 수정
LeeJeongHeon02 Feb 11, 2026
bea0516
Docs: Revise README with project details and team roles
LeeJeongHeon02 Feb 11, 2026
df266f9
Merge branch 'main' into develop
LeeJeongHeon02 Feb 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
104 changes: 98 additions & 6 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,103 @@
name: UMC Dev CI/CD // 여러분들 맘대로 이름 지으세요
name: CI/CD Pipeline

on:
pull_request:
types: [closed]
workflow_dispatch: # (2).수동 실행도 가능하도록
push:
branches: [ develop, main ]

jobs:
build:
runs-on: ubuntu-latest # (3).OS환경
if: github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'develop'
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3

- name: Set up JDK 17
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'

# application.yml 생성 방식 변경
- name: Make application.yml
run: |
cd ./src/main/resources
# EOF에 따옴표(')를 붙여서 쉘이 ${...}를 건드리지 못하게 막습니다.
cat << 'EOF' > ./application.yml
${{ secrets.APPLICATION_YML }}
EOF
shell: bash

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Build with Gradle
uses: gradle/gradle-build-action@v2
with:
arguments: build -x test

- name: Upload build artifact
uses: actions/upload-artifact@v4
with:
name: digitalTok
path: build/libs/*.jar

deploy:
needs: build
runs-on: ubuntu-latest

steps:
- name: Download build artifact
uses: actions/download-artifact@v4
with:
name: digitalTok
path: build/libs/

# env 추가 및 run.sh 생성
- name: Deploy to EC2
env:
EC2_SSH_KEY: ${{ secrets.EC2_SSH_KEY }}
EC2_USERNAME: ${{ secrets.EC2_USERNAME }}
EC2_HOST: ${{ secrets.EC2_HOST }}
run: |
echo "$EC2_SSH_KEY" > private_key.pem
chmod 600 private_key.pem
jar_file=$(find build/libs -name '*.jar' ! -name '*plain.jar' | head -n 1)

# 파일 전송
scp -i private_key.pem -o StrictHostKeyChecking=no "$jar_file" $EC2_USERNAME@$EC2_HOST:/home/$EC2_USERNAME/digitalTok.jar

# 실행 스크립트 생성 (run.sh)
cat <<EOF > run.sh
#!/bin/bash

# 1. 기존 자바 프로세스 강제 종료
pgrep java | xargs -r kill -9
sleep 5

# DB 및 AWS 환경변수 설정
export DB_URL='${{ secrets.DB_URL }}'
export DB_USERNAME='${{ secrets.DB_USERNAME }}'
export DB_PASSWORD='${{ secrets.DB_PASSWORD }}'
export AWS_ACCESS_KEY='${{ secrets.AWS_ACCESS_KEY }}'
export AWS_SECRET_KEY='${{ secrets.AWS_SECRET_KEY }}'
export SPRING_CLOUD_AWS_REGION_STATIC=ap-northeast-2

# 이메일 환경변수 설정
export MAIL_USERNAME='${{ secrets.MAIL_USERNAME }}'
export MAIL_PASSWORD='${{ secrets.MAIL_PASSWORD }}'

# 서버 실행 명령어
# -Djwt.secret 옵션으로 스프링이 찾는 이름에 맞춰서 값을 직접 넣어줌
nohup java -Duser.timezone=Asia/Seoul \
-Dapp.server-url='https://diring.site' \
-Djwt.secret='${{ secrets.JWT_SECRET_KEY }}' \
-Djwt.access-token-validity-in-seconds=1800 \
-Djwt.refresh-token-validity-in-seconds=604800 \
-jar /home/$EC2_USERNAME/digitalTok.jar > app.log 2>&1 &
EOF

# 스크립트 전송 및 실행
scp -i private_key.pem -o StrictHostKeyChecking=no run.sh $EC2_USERNAME@$EC2_HOST:/home/$EC2_USERNAME/run.sh
ssh -i private_key.pem -o StrictHostKeyChecking=no $EC2_USERNAME@$EC2_HOST "chmod +x /home/$EC2_USERNAME/run.sh && sh /home/$EC2_USERNAME/run.sh"

rm -f private_key.pem run.sh
21 changes: 20 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,23 @@ Thumbs.db

### [Custom Settings] ###
# 나중에 DB 정보나 API Key가 들어있는 설정 파일을 숨길 때 사용하세요.
# application-secret.properties
# application-secret.properties

### [Security & AWS] ###
# EC2 접속을 위한 키 파일 (해킹 위험 1순위, 절대 금지)
*.pem

# 환경변수 설정 파일
.env

### [Spring Boot Config - Safety] ###
# 우리가 만들기로 했던 배포용 설정 파일 (실수 방지용)
src/main/resources/application-prod.yml
src/main/resources/application-secret.yml

# 혹시 모를 로컬 테스트용 설정 파일들
application-prod.yml
application-secret.yml

#debug용 파일은 업로드 되지 않게
debug-output
129 changes: 71 additions & 58 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,90 +1,103 @@
> **프로젝트 한 줄 소개:** 나만의 전자 잉크 키링 서비
# 🏷️ 나만의 전자 잉크 키링 서비스, DiRing (디링)

![Java](https://img.shields.io/badge/Java-17-007396?style=flat&logo=java&logoColor=white)
![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.5.9-6DB33F?style=flat&logo=springboot&logoColor=white)
![MySQL](https://img.shields.io/badge/MySQL-8.0-4479A1?style=flat&logo=mysql&logoColor=white)
![AWS](https://img.shields.io/badge/AWS-EC2%20%2F%20S3%20%2F%20RDS-232F3E?style=flat&logo=amazon-aws&logoColor=white)

> **"당신의 일상을 키링에 담다."** <br>
> 사용자가 원하는 템플릿이나 이미지를 선택하면 전자 잉크(E-ink) 디스플레이에 맞는 이미지로 변환하여 전자 잉크(E-ink)키링 디바이스로 전송해주는 서비스입니다.

<br>

## 🌐 Swagger API Docs
- **URL:** [http://3.37.213.174:8080/swagger-ui/index.html](http://3.37.213.174:8080/swagger-ui/index.html)

<br>

## 1. 🚩 프로젝트 개요
- **개발 기간:** 2025.12.12 ~ 2026.02.19
- **개발 인원:** Backend 3
- **프로젝트 목적:**
- **개발 인원:** 4명 (Backend Team)

### 👨‍💻 팀원 및 담당 역할 (R&R)

| 이름 | 포지션 | 담당 도메인 및 핵심 기여 |
| :---: | :---: | :--- |
| [**이정헌**](https://github.com/LeeJeongHeon02) | **Team Leader** | • **Template & CI/CD** <br>• 지하철 템플릿 이미지 생성 로직 구현 <br>• GitHub Actions 파이프라인 구축 및 서버 관리 |
| [**송정은**](https://github.com/jeun66) | **Sub Leader** | • **Image Processing** <br>• E-ink 전용 4-Color Quantization(양자화) 알고리즘 구현 <br>• 이미지 ↔ 바이너리 데이터 인코딩/디코딩 로직 개발 |
| [**이승주**](https://github.com/dudulic) | **Member** | • **Auth & Security** <br>• JWT 기반 인증/인가 시스템 및 Refresh Token 로테이션 <br>• SMTP 기반 이메일 인증 기능 구현 |
| [**조성하**](https://github.com/cdth12345) | **Member** | • **Device & User** <br>• 사용자 프로필 관리 및 디바이스 연동 API 개발 |

<br>

## 2. 📚 사용 기술 (Tech Stack)

| 구분 | 기술 |
| :-: | - |
| **Language** | Java 17 |
| **Framework** | Spring Boot 3.5.9, Spring Security, Spring Data JPA |
| **Database** | MySQL, Redis |
| **Infra** | AWS EC2, RDS, Docker |
| **Collaboration** | Git, Notion, Discord |
| 구분 | 기술 | 상세 내용 |
| :-: | :-: | - |
| **Language** | Java 17 | |
| **Framework** | Spring Boot 3.5.9 | Spring Security, Spring Data JPA |
| **Database** | MySQL 8.0 | AWS RDS (Prod), H2 (Test) |
| **Infra** | AWS | EC2, S3 (Image Storage), RDS |
| **CI/CD** | GitHub Actions | Gradle Build -> SCP Transfer -> Deploy Script |
| **Utils** | ImageIO, Java AWT | 이미지 생성 및 픽셀 처리 |

<br>

## 3.🤝 Team Convention (협업 규칙)

### 3-1. Branch Strategy - Git Flow 전략
## 3. ✨ 주요 기능 (Key Features)

* **main**: 배포 가능한 상태의 코드가 모이는 브랜치
* **develop**: 다음 버전을 위한 개발이 진행되는 주 브랜치
* **feature**: 기능을 개발하는 브랜치 (develop에서 분기)
* 브랜치 명: `feature/이슈번호-기능요약`
* 예시: `feature/12-login-api`
* **hotfix**: 배포된 버전에서 발생한 버그를 긴급 수정 (main에서 분기)
### 🔐 1. 인증 및 보안 (Auth & Security)
- **JWT 기반 로그인:** Access/Refresh Token을 활용한 무상태(Stateless) 인증.
- **이메일 인증:** Google SMTP를 연동하여 비밀번호 찾기 시 새로운 비밀번호 자동 발송.

### 🖼️ 2. 템플릿 이미지 생성 (Template Engine)
- **동적 이미지 드로잉:** Java AWT/Graphics2D를 활용해 실시간으로 이미지를 그려냅니다.
- **커스텀 폰트 적용:** `Pretendard` 폰트를 서버 리소스에 내장하여 일관된 타이포그래피 제공.

### 3-2. Commit Message Convention
- 제목은 50글자 이내로 작성한다.
- 첫글자는 대문자로 작성한다.
- 마침표 및 특수기호는 사용하지 않는다.
- 영문으로 작성하는 경우 동사(원형)을 가장 앞에 명령어로 작성한다.
- 과거시제는 사용하지 않는다.
- 간결하고 요점적으로 즉, 개조식 구문으로 작성한다.
### 구조 및 작성예시
```text
Feat: 회원가입 시 이메일 중복 검사 로직 추가
### 🎨 3. 전자 잉크 이미지 처리 (E-ink Processing)
- **4-Color Quantization:** 일반 이미지를 E-ink 디스플레이가 표현 가능한 4색(Black, White, Red, Yellow)으로 최적화하여 변환합니다.
- **Binary Encoding:** 변환된 픽셀 데이터를 하드웨어(키링)로 전송하기 위해 경량화된 바이너리 포맷으로 인코딩합니다.

기존에 아이디만 중복 검사하던 로직에 이메일 검사 추가함.
DB 쿼리 최적화 포함.
### ☁️ 4. 스토리지 및 데이터 관리
- **AWS S3 연동:** 생성된 템플릿 이미지와 사용자 업로드 이미지를 S3 버킷에 안전하게 저장합니다.
- **트랜잭션 관리:** 이미지 업로드 실패 시 S3 파일 삭제 등 롤백 처리 이벤트 핸들링 로직 구현.

Resolves: #123
<br>

```
## 4. 🏗️ 아키텍처 및 설계 (Architecture)

## 4. 🏗️ 아키텍처 및 설계 (Architecture & Design)
### 4-1. 시스템 아키텍처
<img width="2816" height="1536" alt="digitaltok 아키텍처구조" src="https://github.com/user-attachments/assets/f65c9d9c-9503-405d-bc6b-97a074a7efa3" />
<img width="80%" alt="최종 시스템 아키텍처" src="https://github.com/user-attachments/assets/4c868be5-8523-4106-b7e1-e899430b431d" />

### 4-2. ERD (Entity Relationship Diagram)
*(여기에 ERD 이미지를 넣으세요)*
<img width="1268" height="747" alt="스크린샷 2026-01-14 205456" src="https://github.com/user-attachments/assets/4f4ae8b4-ed71-4918-99e8-8cba38ba153a" />


<br>

## 5. ✨ 주요 기능 (Key Features)
* **회원가입/로그인:** JWT 기반 인증, OAuth2 (Kakao, Google)
* **이미지 생성:** S3를 이용한 이미지 업로드
<img width="80%" alt="ERD" src="https://github.com/user-attachments/assets/c9bbada4-d5ea-4f07-b06b-35df1140d490" />

<br>

## 5. 📂 디렉토리 구조 (Directory Structure)
도메인형 디렉토리 구조(Domain-driven)를 채택하여 응집도를 높였습니다.

## 6. 📂 디렉토리 구조 (Directory Structure)
```bash
src
├── main
│ ├── java
│ │ └── com.example.project
│ │ ├── common # 공통 처리 (Exception, DTO)
│ │ ├── config # 설정 파일
│ │ ├── controller # 컨트롤러
│ │ ├── domain # 엔티티
│ │ ├── repository # 리포지토리
│ │ └── service # 비즈니스 로직
│ └── resources
└── test

digitaltok-server/
├── .github/ # GitHub 관련 설정 (CI/CD 워크플로우, 이슈/PR 템플릿)
├── gradle/ # Gradle Wrapper 관련 설정
├── src/
│ ├── main/
│ │ ├── java/com/digital_tok/
│ │ │ ├── global/ # 공통 설정 (Security, Exception, API 응답 규격 등)
│ │ │ ├── auth/ # 인증 및 인가 (Login, JWT 등)
│ │ │ │ ├── controller # 컨트롤러
│ │ │ │ ├── convertor # Entity, DTO 간의 변환
│ │ │ │ ├── domain # 엔티티
│ │ │ │ ├── dto # DTO 클래스
│ │ │ │ ├── repository # 리포지토리
│ │ │ │ └── service # 비즈니스 로직
│ │ │ ├── device/ # 디바이스 관리 도메인
│ │ │ ├── image/ # 이미지 처리 및 스토리지(S3) 관련
│ │ │ ├── template/ # 템플릿 관리 및 이미지 생성 로직
│ │ │ ├── user/ # 사용자 관리 도메인
│ │ │ └── DigitalTokApplication.java # 애플리케이션 시작점
│ │ └── resources/ # 설정 파일(yml), 폰트 등의 리소스
│ └── test/ # 테스트 코드 (JUnit5 등)
├── build.gradle # 프로젝트 의존성 및 빌드 설정
├── gradlew # Gradle 실행 스크립트
└── README.md # 프로젝트 설명 문서
29 changes: 28 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ plugins {
}

group = 'com.digital-tok'
version = '0.0.1-SNAPSHOT'
version = '1.0.0'
description = 'E-Ink digital-tok service'

java {
Expand All @@ -24,6 +24,11 @@ repositories {
mavenCentral()
}

// [추가할 부분 1] 빌드된 jar 파일 이름을 버전 없이 고정
bootJar {
archiveFileName = 'digitalTok.jar'
}

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-validation'
Expand All @@ -35,6 +40,28 @@ dependencies {
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'

// AWS SDK
implementation 'software.amazon.awssdk:s3:2.29.0'

// Swagger
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.13'
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-api:2.8.13'

// AWS S3 (Spring Cloud AWS 3.x)
implementation platform("io.awspring.cloud:spring-cloud-aws-dependencies:3.1.0")
implementation 'io.awspring.cloud:spring-cloud-aws-starter-s3'

// Spring Security
implementation 'org.springframework.boot:spring-boot-starter-security'

// JWT 라이브러리 (JJWT 0.12.3 버전)
implementation 'io.jsonwebtoken:jjwt-api:0.12.3'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.12.3'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.12.3'

// 이메일 발송 라이브러리
implementation 'org.springframework.boot:spring-boot-starter-mail'
}

tasks.named('test') {
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/com/digital_tok/DigitalTokApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,12 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.scheduling.annotation.EnableAsync;

@SpringBootApplication
@EnableJpaAuditing
@EnableAsync // 비동기 처리 활성화
public class DigitalTokApplication {

public static void main(String[] args) {
Expand Down
Loading
Loading