Skip to content

leejongsuu/Webbizcraft

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

8 Commits
Β 
Β 

Repository files navigation

🌐 Webbizcraftshop : AWS 기반 SiteBuilder μ„œλΉ„μŠ€

β€» λ³΄μ•ˆμƒμ˜ 이유둜 μ½”λ“œλŠ” κ³΅κ°œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.


πŸ“ κ°œμš”

λ‹€μ–‘ν•œ μ½˜ν…μΈ λ‘œ ν™λ³΄ν•˜κ³  싢은 기업듀을 μœ„ν•œ 고객 λ§žμΆ€ν˜• ν™ˆνŽ˜μ΄μ§€ μžλ™ 생성 및 운영 μ„œλΉ„μŠ€μž…λ‹ˆλ‹€.

ν΄λΌμš°λ“œ 기반 ν”Œλž«νΌμœΌλ‘œ, AWSλ₯Ό ν™œμš©ν•˜μ—¬ μ†μ‰½κ²Œ κ³ μœ ν•œ μ›Ήμ‚¬μ΄νŠΈλ₯Ό ꡬ좕할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ‚¬μš©μžλŠ” URL을 직접 μ§€μ •ν•˜κ³  이미지λ₯Ό μ—…λ‘œλ“œν•˜μ—¬ μžμ‹ λ§Œμ˜ μ›Ήμ‚¬μ΄νŠΈλ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, 방문자 수, λ°©λ¬Έ 횟수, μŠ€ν† λ¦¬μ§€ μš©λŸ‰, νŠΈλž˜ν”½ λ“± μ£Όμš” μ§€ν‘œλ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ λͺ¨λ‹ˆν„°λ§ν•˜μ—¬ λΉ„μ¦ˆλ‹ˆμŠ€ μ„±κ³Όλ₯Ό μ‹ μ†ν•˜κ²Œ 좔적할 수 μžˆμŠ΅λ‹ˆλ‹€.


πŸ“ ν™œλ™

2024.05.03 ~ 2024.07.22


πŸ“ 간단 μ†Œκ°œ

[κΈ°μ—…ν™ˆνŽ˜μ΄μ§€ 생성]
κΈ°μ—…ν™ˆνŽ˜μ΄μ§€ 생성


[κ°œλ³„ μ‚¬μš©μžμ˜ 관리 νŽ˜μ΄μ§€]
ν΄λΌμš°λ“œ μ„œλΉ„μŠ€ μ‹ μ²­μ„œ_λͺ¨λ°”μΌμ•±κ°œλ°œν˜‘λ™μ‘°ν•©(μˆ˜μ •λ³Έv2)_15


[전체 μ„œλΉ„μŠ€μ˜ κ΄€λ¦¬μž νŽ˜μ΄μ§€]
ν΄λΌμš°λ“œ μ„œλΉ„μŠ€ μ‹ μ²­μ„œ_λͺ¨λ°”μΌμ•±κ°œλ°œν˜‘λ™μ‘°ν•©(μˆ˜μ •λ³Έv2)_16


πŸ“ μ£Όμš” κΈ°λŠ₯

κΈ°λŠ₯ μ„€λͺ…
μžλ™μœΌλ‘œ μ›Ήμ‚¬μ΄νŠΈ 생성 μ‚¬μš©μž μš”κ΅¬μ— 맞좘 κ΅¬μ„±μ˜ μ›Ήμ‚¬μ΄νŠΈλ₯Ό μžλ™μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€. AWS의 S3, Route 53, CloudFront, ACM을 ν™œμš©ν•˜μ—¬ 동적 도메인을 μƒμ„±ν•©λ‹ˆλ‹€.
μ‚¬μš©μž μ§€μ • URL 제곡 μ‚¬μš©μžκ°€ μ›ν•˜λŠ” 이름이 ν¬ν•¨λœ κ³ μœ ν•œ URL을 μƒμ„±ν•˜μ—¬ μ†Œκ°œ νŽ˜μ΄μ§€λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, "goodcompany"λΌλŠ” 이름을 URL에 ν¬ν•¨ν•˜μ—¬ goodcompany.webbizcraft.shopκ³Ό 같은 URL을 μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ‚¬μš©μžλŠ” 총 3개의 μ›Ήμ‚¬μ΄νŠΈλ₯Ό 생성할 수 있으며, 각 μ›Ήμ‚¬μ΄νŠΈλŠ” μ‚¬μš©μžκ°€ 직접 μ§€μ •ν•˜μ—¬ κ³ μœ ν•œ URL을 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.
λ―Έλ””μ–΄ μ½˜ν…μΈ  μ—…λ‘œλ“œ 사진, λ™μ˜μƒ, ν…μŠ€νŠΈ λ“± λ‹€μ–‘ν•œ μ½˜ν…μΈ λ₯Ό μ—…λ‘œλ“œν•˜μ—¬ κΈ°μ—… μ†Œκ°œμ— ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
νŠΈλž˜ν”½ μΈ‘μ • 및 μ œν•œ 일 λ‹¨μœ„μ˜ νŠΈλž˜ν”½μ„ λ‹€μ–‘ν•œ 집계 λ°©μ‹μœΌλ‘œ μΈ‘μ •ν•˜λ©°, Bucket4j와 Redis(Lettuce)λ₯Ό ν™œμš©ν•˜μ—¬ 각 μ›Ήμ‚¬μ΄νŠΈμ˜ νŠΈλž˜ν”½μ„ 100MB μ΄ν•˜λ‘œ μ œν•œν•˜μ—¬ μ„œλ²„ λΆ€ν•˜λ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€. μΆ”κ°€ νŠΈλž˜ν”½/μš©λŸ‰ μš”μ²­ μ‹œ νŠΈλž˜ν”½/μš©λŸ‰μ„ ν• λ‹Ήν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μ„œλ²„ μš©λŸ‰ μΈ‘μ • ν™ˆνŽ˜μ΄μ§€κ°€ μ„œλ²„μ—μ„œ ν˜„μž¬ μ‚¬μš©ν•˜κ³  μžˆλŠ” μš©λŸ‰μ„ μ‹€μ‹œκ°„μœΌλ‘œ λͺ¨λ‹ˆν„°λ§ν•˜μ—¬, μ‚¬μš©μžκ°€ 데이터λ₯Ό μ–Όλ§ˆλ‚˜ μ €μž₯ν•˜κ³  μžˆλŠ”μ§€ νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€. AWS CloudWatchλ₯Ό 톡해 각 μ›Ήμ‚¬μ΄νŠΈμ˜ μŠ€ν† λ¦¬μ§€ μš©λŸ‰μ„ μ‹€μ‹œκ°„μœΌλ‘œ λͺ¨λ‹ˆν„°λ§ν•©λ‹ˆλ‹€.
μ‹€μ‹œκ°„ νŠΈλž˜ν”½ λͺ¨λ‹ˆν„°λ§ 및 μ•Œλ¦Ό μ‹€μ‹œκ°„ νŠΈλž˜ν”½ λͺ¨λ‹ˆν„°λ§μ„ 톡해 νŠΈλž˜ν”½μ΄ 100MBλ₯Ό λ„˜μœΌλ©΄ μ•Œλ¦Όμ΄ 가도둝 μ„€μ •ν•˜μ—¬ μ‹€μ‹œκ°„μœΌλ‘œ λͺ¨λ‹ˆν„°λ§ν•˜κ³  λŒ€μ‘ν•©λ‹ˆλ‹€.
전체 κ΄€λ¦¬μž κΈ°λŠ₯ 제곡 Admin μ§€μ›μœΌλ‘œ μ‰¬μš΄ 운영 관리가 κ°€λŠ₯ν•˜λ©°, νŠΈλž˜ν”½, μš©λŸ‰, μ—…λ‘œλ“œ 파일 λͺ©λ‘ λ“±μ˜ 정보λ₯Ό μΌκ΄„μ μœΌλ‘œ κ΄€λ¦¬ν•©λ‹ˆλ‹€. νŠΈλž˜ν”½ λ˜λŠ” μš©λŸ‰μ΄ μ œν•œμ„ μ΄ˆκ³Όν•˜λ©΄ μΆ”κ°€ μ‘°μΉ˜κ°€ ν•„μš”ν•œ λŒ€μƒλ“€μ„ μžλ™μœΌλ‘œ κ²½κ³ ν•©λ‹ˆλ‹€.
μΆ”κ°€ νŠΈλž˜ν”½/μš©λŸ‰ 제곡 μ‚¬μš©μž μš”μ²­ μ‹œ 좔가적인 νŠΈλž˜ν”½/μš©λŸ‰μ„ ν• λ‹Ήν•  수 μžˆμŠ΅λ‹ˆλ‹€.
κ°œλ³„ μ‚¬μ΄νŠΈ 관리 νŠΈλž˜ν”½κ³Ό μš©λŸ‰ 데이터λ₯Ό μ‚¬μš©μžκ°€ κ°œλ³„ μ‚¬μ΄νŠΈ κ΄€λ¦¬νŽ˜μ΄μ§€μ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. μ‚¬μš©μžκ°€ μ›Ήμ‚¬μ΄νŠΈλ₯Ό μƒμ„±ν•˜κ±°λ‚˜ μˆ˜μ •ν•  λ•Œ μ„œλΉ„μŠ€ κ΄€λ¦¬μžμ˜ μŠΉμΈμ„ λ°›μ•„ 지속적인 톡합 관리λ₯Ό μ§€μ›ν•©λ‹ˆλ‹€.
지속적인 톡합 관리 μ‚¬μš©μžκ°€ μ›Ήμ‚¬μ΄νŠΈλ₯Ό 생성 λ˜λŠ” μˆ˜μ •ν•  λ•Œ μ„œλΉ„μŠ€ κ΄€λ¦¬μžμ˜ μŠΉμΈμ„ ν†΅ν•œ 지속적인 톡합 관리λ₯Ό μ§€μ›ν•©λ‹ˆλ‹€.

πŸ“ 아킀텍쳐

λͺ¨λ°”μΌμ•±ν˜‘λ™μ‘°ν•© (5)


πŸ“ μ‚¬μš© κΈ°μˆ μŠ€νƒ

  • SpringBoot
  • JPA
  • MySQL
  • Redis
  • AWS
    • EC2
    • S3
    • CloudFront
    • Route53
    • CloudWatch
  • Docker
  • Bucket4j
  • Lettuce
  • Nginx
  • Jenkins

πŸ“ μ‚¬μš© 라이브러리

  • Spring Boot Starter
  • JWT
  • Swagger
  • Firebase
  • OkHttp
  • QueryDSL
  • Lombok
  • Jackson
  • AWS SDK
    • CloudWatch
    • Route53
    • CloudFront
    • S3
  • Database
    • H2
    • MySQL Connector
  • Redis
    • Redisson
    • Embedded Redis
    • Bucket4j Core
    • Bucket4j Redis
  • Logging
    • Discord Appender

πŸ“ν”„λ‘œμ νŠΈ ꡬ쑰

└── πŸ—‚ main
    β”œβ”€β”€ πŸ—‚ java
    β”‚   └── πŸ—‚ com
    β”‚       └── πŸ—‚ example
    β”‚           └── πŸ—‚ cloudservice
    β”‚               β”œβ”€β”€ πŸ“‘ CloudServiceApplication.java
    β”‚               β”œβ”€β”€ πŸ—‚ auth
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ cookie 
    β”‚               β”‚   β”‚   └── πŸ“‘ CookieUtil.java
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ entity 
    β”‚               β”‚   β”‚   └── πŸ“‘ RefreshToken.java
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ jwt 
    β”‚               β”‚   β”‚   β”œβ”€β”€ πŸ“‘ JwtAuthenticationFilter.java    
    β”‚               β”‚   β”‚   β”œβ”€β”€ πŸ“‘ JwtAuthorizationFilter.java   
    β”‚               β”‚   β”‚   β”œβ”€β”€ πŸ“‘ JwtProvider.java       
    β”‚               β”‚   β”‚   β”œβ”€β”€ πŸ“‘ MemberDetails.java   
    β”‚               β”‚   β”‚   └── πŸ“‘ MemberDetailsService.java   
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ repository
    β”‚               β”‚   β”‚   └── πŸ“‘ RefreshTokenRepository.java
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ service
    β”‚               β”‚   β”‚   └── πŸ“‘ RefreshTokenService.java    
    β”‚               β”‚   └── πŸ“‘ MemberRole.java           
    β”‚               β”œβ”€β”€ πŸ—‚ cofig 
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ Bucket4j 
    β”‚               β”‚   β”‚   └── πŸ“‘ TokenBucketResolver.java 
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ CloudWatch 
    β”‚               β”‚   β”‚   └── πŸ“‘ CloudWatchConfig.java   
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ jpa 
    β”‚               β”‚   β”‚   └── πŸ“‘ JpaAuditingConfig.java
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ mail 
    β”‚               β”‚   β”‚   └── πŸ“‘ MailConfig.java
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ RateLimit 
    β”‚               β”‚   β”‚   β”œβ”€β”€ πŸ“‘ RateLimitAspect.java   
    β”‚               β”‚   β”‚   └── πŸ“‘ RateLimiterConfig.java     
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ redis
    β”‚               β”‚   β”‚   β”œβ”€β”€ πŸ“‘ RedisCacheConfig.java   
    β”‚               β”‚   β”‚   └── πŸ“‘ RedisConfig.java   
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ redisson
    β”‚               β”‚   β”‚   └── πŸ“‘ RedissonConfig.java
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ s3
    β”‚               β”‚   β”‚   β”œβ”€β”€ πŸ“‘ awstest.java   
    β”‚               β”‚   β”‚   └── πŸ“‘ S3Config.java     
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ security
    β”‚               β”‚   β”‚   β”œβ”€β”€ πŸ“‘ SecurityConfig.java   
    β”‚               β”‚   β”‚   └── πŸ“‘ SecurityUtils.java   
    β”‚               β”‚   └── πŸ—‚ swagger
    β”‚               β”‚       └── πŸ“‘ SwaggerConfig.java  
    β”‚               β”œβ”€β”€ πŸ—‚ global 
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ base 
    β”‚               β”‚   β”‚   └── πŸ“‘ BaseTimeEntity.java
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ common 
    β”‚               β”‚   β”‚   └── πŸ“‘ CommonResDto.java
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ dto
    β”‚               β”‚   β”‚   β”œβ”€β”€ πŸ“‘ CommonResponse.java   
    β”‚               β”‚   β”‚   └── πŸ“‘ ErrorResponse.java  
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ error
    β”‚               β”‚   β”‚   β”œβ”€β”€ πŸ“‘ BucketCapacityException.java 
    β”‚               β”‚   β”‚   β”œβ”€β”€ πŸ“‘ DuplicateAccountException.java 
    β”‚               β”‚   β”‚   β”œβ”€β”€ πŸ“‘ DuplicateUrlException.java           
    β”‚               β”‚   β”‚   β”œβ”€β”€ πŸ“‘ EncryptException.java 
    β”‚               β”‚   β”‚   β”œβ”€β”€ πŸ“‘ FileTooLargeException.java 
    β”‚               β”‚   β”‚   β”œβ”€β”€ πŸ“‘ InvalidTokenException.java   
    β”‚               β”‚   β”‚   β”œβ”€β”€ πŸ“‘ NotFoundAccountException.java 
    β”‚               β”‚   β”‚   β”œβ”€β”€ πŸ“‘ PasswordNotMatchException.java 
    β”‚               β”‚   β”‚   β”œβ”€β”€ πŸ“‘ S3UploadException.java  
    β”‚               β”‚   β”‚   β”œβ”€β”€ πŸ“‘ UnAuthorizedException.java 
    β”‚               β”‚   β”‚   β”œβ”€β”€ πŸ“‘ WebsiteLimitException.java           
    β”‚               β”‚   β”‚   └── πŸ“‘ WebsiteNotFoundException.java  
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ log
    β”‚               β”‚   β”‚   β”œβ”€β”€ πŸ“‘ FilterConfig.java   
    β”‚               β”‚   β”‚   └── πŸ“‘ MDCFilter.java 
    β”‚               β”‚   β”œβ”€β”€ πŸ“‘ ErrorCodes.java  
    β”‚               β”‚   β”œβ”€β”€ πŸ“‘ ErrorResponse.java  
    β”‚               β”‚   β”œβ”€β”€ πŸ“‘ GlobalExceptionHandler.java  
    β”‚               β”‚   └── πŸ“‘ GlobalExceptionHandlerFilter.java          
    β”‚               β”œβ”€β”€ πŸ—‚ member 
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ application
    β”‚               β”‚   β”‚   β”œβ”€β”€ πŸ—‚ dto
    β”‚               β”‚   β”‚   β”‚    β”œβ”€β”€πŸ“‘ MemberResponseDto.java     
    β”‚               β”‚   β”‚   β”‚    β””β”€β”€πŸ“‘ MemeberRequestDto.java       
    β”‚               β”‚   β”‚   └── πŸ—‚ impl
    β”‚               β”‚   β”‚   β”‚    β”œβ”€β”€πŸ“‘ MailServiceImpl.java     
    β”‚               β”‚   β”‚   β”‚    β”œβ”€β”€πŸ“‘ MemberServiceImpl.java
    β”‚               β”‚   β”‚   β”‚    β””β”€β”€πŸ“‘ MiddleTableServiceImpl.java      
    β”‚               β”‚   β”‚   β”œβ”€β”€ πŸ“‘ MemberService.java  
    β”‚               β”‚   β”‚   └── πŸ“‘ MiddleTableService.java        
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ domain
    β”‚               β”‚   β”‚   β”œβ”€β”€ πŸ—‚ repository
    β”‚               β”‚   β”‚   β”‚    β”œβ”€β”€πŸ“‘ MemberRepository.java     
    β”‚               β”‚   β”‚   β”‚    β””β”€β”€πŸ“‘ MiddleTableRepository.java   
    β”‚               β”‚   β”‚   β”œβ”€β”€ πŸ“‘ Member.java  
    β”‚               β”‚   β”‚   └── πŸ“‘ MiddleTable.java       
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ exception
    β”‚               β”‚   β”‚   └── πŸ—‚ dto
    β”‚               β”‚   β”‚        β”œβ”€β”€πŸ“‘ CommonResDto.java     
    β”‚               β”‚   β”‚        β””β”€β”€πŸ“‘ CommonResponse.java 
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ presentation
    β”‚               β”‚   β”‚   └── πŸ“‘ MemberController.java
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ restapi
    β”‚               β”‚   β”‚   └── πŸ“‘ MemberApi.java
    β”‚               β”‚   └── πŸ—‚ utils
    β”‚               β”‚       β”œβ”€β”€ πŸ“‘ MemberScheduler.java
    β”‚               β”‚       └── πŸ“‘ MemberUtils.java   
    β”‚               β”œβ”€β”€ πŸ—‚ visit 
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ application  
    β”‚               β”‚   β”‚   └── πŸ—‚ dto
    β”‚               β”‚   β”‚   β”‚    β””β”€β”€πŸ“‘ VisitResponseDto.java   
    β”‚               β”‚   β”‚   └── πŸ—‚ impl
    β”‚               β”‚   β”‚   β”‚    β”œβ”€β”€πŸ“‘ VisitRedisService.java     
    β”‚               β”‚   β”‚   β”‚    β””β”€β”€πŸ“‘ VisitServiceImpl.java    
    β”‚               β”‚   β”‚   └── πŸ“‘ VisitService.java       
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ domain
    β”‚               β”‚   β”‚   β”œβ”€β”€ πŸ—‚ repository    
    β”‚               β”‚   β”‚   β”‚    β”œβ”€β”€πŸ“‘ VisitRepository.java 
    β”‚               β”‚   β”‚   β”‚    β”œβ”€β”€πŸ“‘ VisitRepositoryImpl.java 
    β”‚               β”‚   β”‚   β”‚    β””β”€β”€πŸ“‘ VisitRepositoryJPA.java   
    β”‚               β”‚   β”‚   └── πŸ“‘ Visit.java    
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ exception
    β”‚               β”‚   β”‚   β”œβ”€β”€ πŸ—‚ dto
    β”‚               β”‚   β”‚   β”‚    β”œβ”€β”€πŸ“‘ CommonResponse.java     
    β”‚               β”‚   β”‚   β”‚    β””β”€β”€πŸ“‘ RateLimiterException.java 
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ presentation
    β”‚               β”‚   β”‚   └── πŸ“‘ VisitController.java
    β”‚               β”‚   β”œβ”€β”€ πŸ—‚ restapi
    β”‚               β”‚   β”‚   └── πŸ“‘ VisitApi.java
    β”‚               β”‚   └── πŸ—‚ scheduler
    β”‚               β”‚       └── πŸ“‘ VisitScheduler.java
    β”‚               └── πŸ—‚ websiteaa 
    β”‚                   β”œβ”€β”€ πŸ—‚ application
    β”‚                   β”‚   β”œβ”€β”€ πŸ—‚ dto
    β”‚                   β”‚   β”‚    β”œβ”€β”€πŸ“‘ WebsiteaaRequestDto.java     
    β”‚                   β”‚   β”‚    β””β”€β”€πŸ“‘ WebsiteaaResponseDto.java       
    β”‚                   β”‚   └── πŸ—‚ impl
    β”‚                   β”‚   β”‚    β””β”€β”€πŸ“‘ WebsiteaaServiceImpl.java      
    β”‚                   β”‚   └── πŸ“‘ WebsiteaaService.java        
    β”‚                   β”œβ”€β”€ πŸ—‚ domain
    β”‚                   β”‚   β”œβ”€β”€ πŸ—‚ repository    
    β”‚                   β”‚   β”‚    β””β”€β”€πŸ“‘ WebsiteaaRepository.java   
    β”‚                   β”‚   β”œβ”€β”€ πŸ“‘ Template.java  
    β”‚                   β”‚   └── πŸ“‘ Websiteaa.java       
    β”‚                   β”œβ”€β”€ πŸ—‚ exception
    β”‚                   β”‚   └── πŸ—‚ dto
    β”‚                   β”‚        β””β”€β”€πŸ“‘ CommonResponse.java 
    β”‚                   β”œβ”€β”€ πŸ—‚ presentation
    β”‚                   β”‚   └── πŸ“‘ WebsiteaaController.java
    β”‚                   β”œβ”€β”€ πŸ—‚ restapi
    β”‚                   β”‚   └── πŸ“‘ WebsiteaaApi.java
    β”‚                   └── πŸ—‚ utils
    β”‚                       │── πŸ“‘ MultipartJackson2HttpMessageConverter.java   
    β”‚                       │── πŸ“‘ WebsiteaaEnums.java         
    β”‚                       └── πŸ“‘ WebsiteaaUtils.java 
    └── πŸ—‚ resources
         └── πŸ—‚ scripts   
         β”‚   β”œβ”€β”€ πŸ“‘ getVisitCounts.lua
         β”‚   └── πŸ“‘ incrementVisitCount.lua   
         └── πŸ—‚ temlates   
         β”‚   β”œβ”€β”€ πŸ“‘ bizcraft_logo.png
         β”‚   └── πŸ“‘ email-template.html          
         β”œβ”€β”€ πŸ“‘ application.yaml      
         β”œβ”€β”€ πŸ“‘ application-dev.yml      
         β”œβ”€β”€ πŸ“‘ application-local.yml      
         β”œβ”€β”€ πŸ“‘ application-prod.yml  
         β”œβ”€β”€ πŸ“‘ application-test.yml
         └── πŸ“‘ logback.xml  

About

Only_Readme

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published