diff --git a/.github/workflows/rankit-cicd.yml b/.github/workflows/rankit-cicd.yml
new file mode 100644
index 0000000..c777c07
--- /dev/null
+++ b/.github/workflows/rankit-cicd.yml
@@ -0,0 +1,68 @@
+name: develop branch bluegreen deployment
+
+on:
+ push:
+ branches:
+ - release* # Trigger on any branch that starts with "release"
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+
+ steps:
+ - uses: actions/checkout@v4
+
+ # 1. JDK 17 설정
+ - name: Set up JDK 17
+ uses: actions/setup-java@v4
+ with:
+ java-version: '17'
+ distribution: 'temurin'
+
+ # 2. Gradle 설정
+ - name: Setup Gradle
+ uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3.1.0
+
+ # 3. Jar 파일 빌드 (테스트 제외)
+ - name: Build with Gradle Wrapper
+ run: ./gradlew -x test bootJar
+
+ # 4. Docker Buildx 설정
+ - name: Set up Docker Build
+ uses: docker/setup-buildx-action@v1
+
+ # 5. Docker 로그인
+ - name: Login to Docker Hub
+ uses: docker/login-action@v1
+ with:
+ username: ${{ secrets.DOCKER_USERNAME }}
+ password: ${{ secrets.DOCKER_TOKEN }}
+
+ # 6. Docker 이미지 빌드 및 푸시
+ - name: Build and push Docker image
+ run: |
+ docker build -t ${{ secrets.DOCKER_USERNAME }}/rankitrun-be:latest .
+ docker push ${{ secrets.DOCKER_USERNAME }}/rankitrun-be:latest
+
+ deploy:
+ runs-on: ubuntu-latest
+ needs: build # build 작업이 완료되어야 실행
+ permissions:
+ contents: read
+
+ steps:
+ # 1. EC2 SSH 접속을 위한 키 등록
+ - name: Set up SSH key
+ uses: webfactory/ssh-agent@v0.5.3
+ with:
+ ssh-private-key: ${{ secrets.API_RANKIT_PEM }}
+
+ # 2. EC2에 blue green 무중단 배포를 위한 스크립트 실행
+ - name: Run deploy.sh
+ run: |
+ ssh -o StrictHostKeyChecking=no ec2-user@${{ secrets.EC2_HOST }} << 'EOF'
+ chmod +x deploy.sh # 만약 실행 권한이 없다면 추가
+ ./deploy.sh # 스크립트 실행
+ EOF
\ No newline at end of file
diff --git a/.github/workflows/rankit-multiaz-cicd.yml b/.github/workflows/rankit-multiaz-cicd.yml
deleted file mode 100644
index 83da7ec..0000000
--- a/.github/workflows/rankit-multiaz-cicd.yml
+++ /dev/null
@@ -1,231 +0,0 @@
-name: rankit-multiaz-rolling-zerodowntime-cicd
-
-on:
- push:
- branches:
- - release* # Trigger on any branch that starts with "release"
-
-jobs:
- build:
- runs-on: ubuntu-latest
- permissions:
- contents: read
-
- steps:
- - uses: actions/checkout@v4
-
- # 1. JDK 17 설정
- - name: Set up JDK 17
- uses: actions/setup-java@v4
- with:
- java-version: '17'
- distribution: 'temurin'
-
- # 2. Gradle 설정
- - name: Setup Gradle
- uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3.1.0
-
- # 3. Jar 파일 빌드 (테스트 제외)
- - name: Build with Gradle Wrapper
- run: ./gradlew -x test bootJar
-
- # 4. Docker Buildx 설정
- - name: Set up Docker Build
- uses: docker/setup-buildx-action@v1
-
- # 5. Docker 로그인
- - name: Login to Docker Hub
- uses: docker/login-action@v1
- with:
- username: ${{ secrets.DOCKER_USERNAME }}
- password: ${{ secrets.DOCKER_TOKEN }}
-
- # 6. Docker 이미지 빌드 및 푸시
- - name: Build and push Docker image
- run: |
- docker build -t ${{ secrets.DOCKER_USERNAME }}/rankitrun-be:latest .
- docker push ${{ secrets.DOCKER_USERNAME }}/rankitrun-be:latest
- deploy:
- runs-on: ubuntu-latest
- needs: build # build 작업이 완료되어야 실행
- permissions:
- contents: read
-
- steps:
- # 1. AWS CLI 설치
- - name: Install AWS CLI
- run: |
- sudo apt-get update
- sudo apt-get install awscli -y
-
- # 2. AWS 자격 증명 설정
- - name: Configure AWS credentials
- env:
- AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
- AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- run: |
- aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID
- aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY
- aws configure set region ap-northeast-2 # 서울 AWS 리전을 설정
-
- # 3. ALB 연결 끊기 (EC2-A)
- - name: Deregister EC2-A from Target Group
- run: |
- aws elbv2 deregister-targets \
- --target-group-arn ${{ secrets.TARGET_GROUP_ARN }} \
- --targets Id=${{ secrets.EC2_A_ID }}
- echo "EC2-A has been deregistered from the ALB."
-
- # 4. Bastion 호스트에 접속하여 EC2-A에 docker-compose 실행
- - name: Deploy to EC2-A via Bastion Host
- env:
- BASTION_HOST: ${{ secrets.BASTION_HOST }}
- SSH_PRIVATE_KEY: ${{ secrets.API_RANKIT_PEM }}
- EC2_A_IP: ${{ secrets.EC2_A_IP }}
- run: |
- echo "$SSH_PRIVATE_KEY" > private_key.pem
- chmod 600 private_key.pem
- ssh -o StrictHostKeyChecking=no -i private_key.pem ec2-user@$BASTION_HOST "ssh -o StrictHostKeyChecking=no -i /home/ec2-user/my-key.pem ec2-user@$EC2_A_IP '
- if [ \$(docker-compose ps -q app | xargs -r docker inspect -f \"{{.State.Running}}\") == \"true\" ]; then
- docker-compose down
- fi
- sleep 10
- docker-compose up -d --pull always
-
- # 향상된 헬스체크: 최대 10번 시도, 5초 간격
- MAX_HEALTH_CHECKS=10
- HEALTH_CHECK_COUNT=0
-
- while [ \$HEALTH_CHECK_COUNT -lt \$MAX_HEALTH_CHECKS ]; do
- if curl -s 127.0.0.1:8080 | grep -q \"health Check Success\"; then
- echo \"EC2-A is healthy after \$((HEALTH_CHECK_COUNT + 1)) attempts.\"
- exit 0
- else
- echo \"Health check attempt \$((HEALTH_CHECK_COUNT + 1)) failed. Retrying in 5 seconds...\"
- sleep 5
- HEALTH_CHECK_COUNT=\$((HEALTH_CHECK_COUNT + 1))
- fi
-
- if [ \$HEALTH_CHECK_COUNT -eq \$MAX_HEALTH_CHECKS ]; then
- echo \"EC2-A health check failed after \$MAX_HEALTH_CHECKS attempts.\"
- exit 1
- fi
- done
- '"
- rm private_key.pem
-
- # 5. ALB 연결 복원 (EC2-A)
- - name: Register EC2-A back to Target Group
- run: |
- aws elbv2 register-targets \
- --target-group-arn ${{ secrets.TARGET_GROUP_ARN }} \
- --targets Id=${{ secrets.EC2_A_ID }}
- echo "EC2-A has been registered back to the ALB."
-
- # 6. ALB 연결 상태 확인 (EC2-A)
- - name: Check Health of ALB Connection to EC2-A
- run: |
- MAX_ATTEMPTS=30
- ATTEMPT=0
-
- while [ $ATTEMPT -lt $MAX_ATTEMPTS ]; do
- HEALTH_STATUS=$(aws elbv2 describe-target-health \
- --target-group-arn ${{ secrets.TARGET_GROUP_ARN }} \
- --query "TargetHealthDescriptions[?Target.Id=='${{ secrets.EC2_A_ID }}'].TargetHealth.State" \
- --output text)
-
- if [ "$HEALTH_STATUS" == "healthy" ]; then
- echo "EC2-A is healthy in ALB."
- break
- else
- echo "Waiting for EC2-A to become healthy in ALB..."
- sleep 10
- ATTEMPT=$((ATTEMPT + 1))
- fi
-
- if [ $ATTEMPT -eq $MAX_ATTEMPTS ]; then
- echo "EC2-A is not healthy in ALB after $MAX_ATTEMPTS attempts. Exiting."
- exit 1
- fi
- done
-
- # 7. ALB 연결 끊기 (EC2-C)
- - name: Deregister EC2-C from Target Group
- run: |
- aws elbv2 deregister-targets \
- --target-group-arn ${{ secrets.TARGET_GROUP_ARN }} \
- --targets Id=${{ secrets.EC2_C_ID }}
- echo "EC2-C has been deregistered from the ALB."
-
- # 8. Bastion 호스트에 접속하여 EC2-C에 docker-compose 실행
- - name: Deploy to EC2-C via Bastion Host
- env:
- BASTION_HOST: ${{ secrets.BASTION_HOST }}
- SSH_PRIVATE_KEY: ${{ secrets.API_RANKIT_PEM }}
- EC2_C_IP: ${{ secrets.EC2_C_IP }}
- run: |
- echo "$SSH_PRIVATE_KEY" > private_key.pem
- chmod 600 private_key.pem
- ssh -o StrictHostKeyChecking=no -i private_key.pem ec2-user@$BASTION_HOST "ssh -o StrictHostKeyChecking=no -i /home/ec2-user/my-key.pem ec2-user@$EC2_C_IP '
- if [ \$(docker-compose ps -q app | xargs -r docker inspect -f \"{{.State.Running}}\") == \"true\" ]; then
- docker-compose down
- fi
- sleep 10
- docker-compose up -d --pull always
-
- # 향상된 헬스체크: 최대 10번 시도, 5초 간격
- MAX_HEALTH_CHECKS=10
- HEALTH_CHECK_COUNT=0
-
- while [ \$HEALTH_CHECK_COUNT -lt \$MAX_HEALTH_CHECKS ]; do
- if curl -s 127.0.0.1:8080 | grep -q \"health Check Success\"; then
- echo \"EC2-C is healthy after \$((HEALTH_CHECK_COUNT + 1)) attempts.\"
- exit 0
- else
- echo \"Health check attempt \$((HEALTH_CHECK_COUNT + 1)) failed. Retrying in 5 seconds...\"
- sleep 5
- HEALTH_CHECK_COUNT=\$((HEALTH_CHECK_COUNT + 1))
- fi
-
- if [ \$HEALTH_CHECK_COUNT -eq \$MAX_HEALTH_CHECKS ]; then
- echo \"EC2-C health check failed after \$MAX_HEALTH_CHECKS attempts.\"
- exit 1
- fi
- done
- '"
- rm private_key.pem
-
- # 9. ALB 연결 복원 (EC2-C)
- - name: Register EC2-C back to Target Group
- run: |
- aws elbv2 register-targets \
- --target-group-arn ${{ secrets.TARGET_GROUP_ARN }} \
- --targets Id=${{ secrets.EC2_C_ID }}
- echo "EC2-C has been registered back to the ALB."
-
- # 10. ALB 연결 상태 확인 (EC2-C)
- - name: Check Health of ALB Connection to EC2-C
- run: |
- MAX_ATTEMPTS=30
- ATTEMPT=0
-
- while [ $ATTEMPT -lt $MAX_ATTEMPTS ]; do
- HEALTH_STATUS=$(aws elbv2 describe-target-health \
- --target-group-arn ${{ secrets.TARGET_GROUP_ARN }} \
- --query "TargetHealthDescriptions[?Target.Id=='${{ secrets.EC2_C_ID }}'].TargetHealth.State" \
- --output text)
-
- if [ "$HEALTH_STATUS" == "healthy" ]; then
- echo "EC2-C is healthy in ALB."
- break
- else
- echo "Waiting for EC2-C to become healthy in ALB..."
- sleep 10
- ATTEMPT=$((ATTEMPT + 1))
- fi
-
- if [ $ATTEMPT -eq $MAX_ATTEMPTS ]; then
- echo "EC2-C is not healthy in ALB after $MAX_ATTEMPTS attempts. Exiting."
- exit 1
- fi
- done
diff --git a/README.md b/README.md
index f7e4491..1841d05 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,5 @@
-
-
-
+## 🌐 Service
+> **[RankIt](https://rankit.run)** - https://rankit.run
@@ -24,7 +23,6 @@
-
## 1. 개발 환경
@@ -34,7 +32,28 @@
- 서비스 배포 환경 : AWS - EC2 , Docker , Github Actions 사용 예정
-## 2. 전략 및 컨벤션
+## 2. 서비스 아키텍쳐 (최종 완성형)
+
+
+
+
+## 2-1. 현재 아키텍쳐 (지속된 비용 문제로 인한 변경)
+
+### 변경 사유
+- 현재 유저 규모로 예상했을때 이중화 서버를 구축하기에는 너무 많은 비용이 부과되어 현재 구조로 변경
+- 현재 구조의 경우 비용이 나오지 않음!
+
+
+
+
+
+
+
+ ## 3. ERD
+
+
+
+## 4. 브랜치 전략 및 컨벤션
### 브랜치 전략
@@ -64,7 +83,7 @@
-## 3. 패키지 구조
+## 5. 패키지 구조
### 05.20 기준 도메인형으로 변경!
diff --git a/src/main/java/gitbal/backend/api/schoolPage/controller/SchoolRankController.java b/src/main/java/gitbal/backend/api/schoolPage/controller/SchoolRankController.java
index 3dc7aa3..40bfbfb 100644
--- a/src/main/java/gitbal/backend/api/schoolPage/controller/SchoolRankController.java
+++ b/src/main/java/gitbal/backend/api/schoolPage/controller/SchoolRankController.java
@@ -26,7 +26,7 @@ public class SchoolRankController {
private final SchoolRankService schoolRankService;
- @GetMapping("/mySchool") // 삭제????
+ @GetMapping("/mySchool")
@Operation(summary = "이 API 가 필요할까요? 이건 보류", description = "내 학교 정보 탭 관련 api 요청입니다.")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "내 학교 정보 요청을 성공했습니다."),
diff --git a/src/main/java/gitbal/backend/api/univcert/service/MailService.java b/src/main/java/gitbal/backend/api/univcert/service/MailService.java
index 1bac584..51e4a81 100644
--- a/src/main/java/gitbal/backend/api/univcert/service/MailService.java
+++ b/src/main/java/gitbal/backend/api/univcert/service/MailService.java
@@ -42,7 +42,7 @@ public void sendMail(String to) {
helper.setSubject("랭깃 인증 코드 발급 안내");
helper.setText(setContext(code), true);
helper.addInline("rankitLogo",
- new ClassPathResource("img/rankit.png")); // 로고 파일 경로 수정 필요
+ new ClassPathResource("img/rankit.png"));
mailSender.send(message);
univCertRepository.findByEmail(to).ifPresentOrElse(u -> u.updateCode(code,
diff --git a/src/main/java/gitbal/backend/domain/user/User.java b/src/main/java/gitbal/backend/domain/user/User.java
index a82b7d6..cc9cdd5 100644
--- a/src/main/java/gitbal/backend/domain/user/User.java
+++ b/src/main/java/gitbal/backend/domain/user/User.java
@@ -46,7 +46,6 @@ public class User extends BaseTimeEntity {
@Column(name = "user_id")
private Long id;
- // Todo: 공부한 이후 수정 작업 계속 진행 (JPA 공부)
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "school_id")
private School school;
diff --git a/src/main/java/gitbal/backend/global/mock/GenerateRealMockUser.java b/src/main/java/gitbal/backend/global/mock/GenerateRealMockUser.java
deleted file mode 100644
index fb6a71e..0000000
--- a/src/main/java/gitbal/backend/global/mock/GenerateRealMockUser.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package gitbal.backend.global.mock;
-
-import lombok.Getter;
-
-import java.util.List;
-
-@Getter
-public class GenerateRealMockUser {
-
- private final List names = List.of(
- "Ace", "Apollo", "Ash", "Atlas", "Axel", "Blaine", "Blaze", "Bolt", "Brick", "Brody",
- "Buck", "Cade", "Cash", "Chase", "Cole", "Dash", "Dax", "Dex", "Finn", "Flynn",
- "Gage", "Griff", "Hawk", "Holt", "Hunter", "Jace", "Jett", "Knox", "Lance", "Logan",
- "Mace", "Maverick", "Max", "Nash", "Nico", "Pax", "Phoenix", "Quinn", "Rex", "Ryder",
- "Sawyer", "Scout", "Sky", "Slade", "Steel", "Stone", "Talon", "Tate", "Thane", "Troy",
- "Vance", "Wolf", "Zane", "Zoey", "Zoe", "Zara", "Ava", "Luna", "Mila", "Ella",
- "Emma", "Nora", "Layla", "Isla", "Maya", "Avery", "Aurora", "Brook", "Hazel", "Leah",
- "Skylar", "Piper", "Alexa", "Riley", "Quinn", "Ruby", "Aiden", "Bray", "Colt", "Evan",
- "Finn", "Grey", "Hugh", "Jace", "Kian", "Levi", "Milo", "Noah", "Odin", "Pace",
- "Reed", "Seth", "Theo", "Vito", "Wren", "Zion", "Aria", "Belle", "Cleo", "Daisy",
- "Elle", "Freya", "Gia", "Hope", "Ivy", "Jade", "Kara", "Lily", "Mia", "Nova",
- "Olive", "Paige", "Rain", "Sage", "Tara", "Una", "Vera", "Willow", "Xena", "Yara",
- "Zoe", "Beau", "Casey", "Dana", "Eli", "Finn", "Gus", "Hale", "Ike", "Jax",
- "Kade", "Lake", "Moe", "Nate", "Otto", "Poe", "Quade", "Rex", "Saul", "Tate",
- "Uma", "Vann", "Wade", "Xan", "Yule", "Zed", "Amy", "Bea", "Cora", "Dora",
- "Eve", "Faye", "Gina", "Hope", "Isis", "Juno", "Kia", "Lena", "Mara", "Nina",
- "Opal", "Pearl", "Rea", "Sia", "Tia", "Uma", "Vera", "Wyn", "Xia", "Yumi",
- "Zara", "Arlo", "Benji", "Cedric", "Dexter", "Ezra", "Fletcher", "Gideon", "Harley", "Idris",
- "Jasper", "Kingston", "Landon", "Micah", "Nash", "Orion", "Parker", "Rafael", "Samson", "Tristan",
- "Uri", "Victor", "Wyatt", "Xander", "Yosef", "Zeke", "Alma", "Belle", "Cleo", "Dara",
- "Elena", "Flora", "Gina", "Helena", "Ines", "Jemma", "Kyla", "Luna", "Mira", "Nadia",
- "Orla", "Poppy", "Rhea", "Selena", "Tiana", "Una", "Veda", "Willow", "Xenia", "Yasmin",
- "Zuri", "Asher", "Brooks", "Colby", "Dane", "Ellis", "Ford", "Gage", "Hayes", "Ian",
- "Jett", "Kai", "Lyle", "Mason", "Nico", "Owen", "Porter", "Quinn", "Reid", "Shane",
- "Trey", "Urban", "Vaughn", "Wells", "Xavi", "Yanni", "Zander", "Aiden", "Beck", "Clark",
- "Dean", "Emmet", "Flynn", "Grant", "Hale", "Ira", "Jude", "Knox", "Lane", "Miles",
- "Nolan", "Oscar", "Pace", "Reeve", "Shay", "Thane", "Usher", "Vale", "West", "Xen",
- "Yule", "Zane", "Blair", "Carter", "Dylan", "Emery", "Fallon", "Galen", "Haven", "Indie", "Jules", "Kieran",
- "Lennox", "Marlow", "Nico", "Oakley", "Paisley", "Quincy", "Remy", "Shay", "Tatum", "Urban",
- "Vesper", "Wilder", "Xavi", "Yara", "Zeke", "Alden", "Briar", "Cassian", "Darcy", "Ellery",
- "Frankie", "Greer", "Harlow", "Idris", "Joss", "Keegan", "Lark", "Maddox", "Nova", "Onyx",
- "Perry", "Romy", "Stevie", "Teagan", "Uma", "Vaughn", "Winslow", "Xander", "Yates", "Zara", "Arwen", "Blaise", "Caelan", "Dove", "Elio", "Frost", "Gentry", "Hollis", "Ira", "Juno",
- "Kace", "Lumi", "Merlin", "Niall", "Orin", "Phaedra", "Riven", "Sable", "Theron", "Vale"
- );
-
-
-
-
-
-
-}
diff --git a/src/main/java/gitbal/backend/global/mock/ImgGenerator.java b/src/main/java/gitbal/backend/global/mock/ImgGenerator.java
deleted file mode 100644
index 1588e9e..0000000
--- a/src/main/java/gitbal/backend/global/mock/ImgGenerator.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package gitbal.backend.global.mock;
-
-public class ImgGenerator {
- private static String IMG_BASE_URL = "https://raw.githubusercontent.com/jamooooong/rankit_mock_img/refs/heads/main/jpg/rankit_mock_";
- public String imgGenerator(int index){
- StringBuilder sb = new StringBuilder();
- if(index < 10)
- sb.append(IMG_BASE_URL).append("00").append(index).append(".jpg");
- else if(index < 100)
- sb.append(IMG_BASE_URL).append("0").append(index).append(".jpg");
- else
- sb.append(IMG_BASE_URL).append(index).append(".jpg");
- return sb.toString();
- }
-
-}
diff --git a/src/main/java/gitbal/backend/global/mock/MockDataGenerator.java b/src/main/java/gitbal/backend/global/mock/MockDataGenerator.java
deleted file mode 100644
index ba5650b..0000000
--- a/src/main/java/gitbal/backend/global/mock/MockDataGenerator.java
+++ /dev/null
@@ -1,161 +0,0 @@
-package gitbal.backend.global.mock;
-
-
-import gitbal.backend.api.guestBookPage.facade.GuestBookPageFacade;
-import gitbal.backend.domain.guestbook.application.GuestBookService;
-import gitbal.backend.domain.introduction.application.repository.IntroductionRepository;
-import gitbal.backend.domain.region.application.repository.RegionRepository;
-import gitbal.backend.domain.user.UserService;
-import gitbal.backend.global.constant.Grade;
-import gitbal.backend.domain.region.Region;
-import gitbal.backend.domain.school.School;
-import gitbal.backend.domain.user.User;
-import gitbal.backend.domain.school.SchoolRepository;
-import gitbal.backend.domain.user.UserRepository;
-import gitbal.backend.domain.region.application.RegionService;
-import gitbal.backend.domain.school.SchoolService;
-
-import java.util.HashSet;
-import java.util.List;
-import java.util.Random;
-import java.util.stream.Collectors;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.stereotype.Component;
-import org.springframework.transaction.annotation.Transactional;
-
-
-@Component
-@RequiredArgsConstructor
-@Slf4j
-public class MockDataGenerator implements CommandLineRunner {
-
- // Repositories and services declarations are omitted for brevity
- private final SchoolRepository schoolRepository;
- private final RegionRepository regionRepository;
- private final UserRepository userRepository;
- private final UserService userService;
- private final SchoolService schoolService;
- private final RegionService regionService;
- private final GuestBookService guestBookService;
- private final IntroductionRepository introductionRepository;
-
-
- private final Random random = new Random();
- private final GenerateRealMockUser generateRealMockUser = new GenerateRealMockUser();
- private SchoolGenerator schoolGenerator;
- private RegionGenerator regionGenerator;
- private final ImgGenerator imgGenerator = new ImgGenerator();
-
- @Override
- @Transactional
- public void run(String... args) throws Exception {
- schoolGenerator = new SchoolGenerator(schoolRepository);
- regionGenerator = new RegionGenerator(regionRepository);
- log.info("Start runner to create mock data");
- List names = new HashSet<>(generateRealMockUser.getNames()).stream().toList();
- log.info("name size was {}" , names.size());
-
- for (int i = 0; i < names.size(); i++) {
- String username = names.get(i);
- log.info("now username {}", username);
- log.info("now i {}", i);
- if (userRepository.findByNickname(username).isPresent()) {
- log.info("duplicate");
- continue;
- }
- School school = schoolGenerator.generateSchool();
- Region region = regionGenerator.generateRegion();
- String imgUrl = imgGenerator.imgGenerator(i);
- Long randomScore = (long) random.nextInt(0, 120000); // Example userScore
-
- User user = User.builder()
- .school(school)
- .region(region)
- .nickname(username)
- .score(randomScore)
- .profile_img(imgUrl)
- .grade(Grade.PURPLE)
- .build();
-
- createIntroductionForUser(user);
- String randomMajorLanguagesForUser = createRandomMajorLanguagesForUser(user);
- scoring(user);
-
- // Update user with the new relations
- user.joinMockUpdateUser(school, region, randomMajorLanguagesForUser,
- user.getNickname(), user.getScore(), user.getProfile_img(), 0, user.getIntroduction());
-
- userRepository.save(user);
- guestBookService.saveGuestBook(user, "안녕하세요!");
-
- if (i % 50 == 0 && i != 0) {
- userRepository.flush();
- log.info("Flushed and cleared at count {}", i);
- }
- }
-
- // Test를 위한 나(이승준)의 githubid와 동일한 nickname data
-
-// String lee = "leesj000603";
-// if (userRepository.findByNickname(lee).isPresent()) {
-// log.info("duplicate");
-// return;
-// }
-//
-// createUserWithNickname(lee);
-// createUserWithNickname("jamooooong");
- userService.updateUserRank(); //user 순위 업데이트
- userService.updateUserGrade(); // user 등급 업데이트
- schoolService.updateSchoolRank(); // school 순위 업데이트
- log.info("Mock data creation completed!!!!!!");
- }
-
-
- private void createUserWithNickname(String nickName) {
- School school = schoolRepository.findById(1L)
- .orElse(null);
- Region region = regionRepository.findById(1L)
- .orElse(null);
-
- User user = User.builder()
- .school(school)
- .region(region)
- .nickname(nickName)
- .score(140000L)
- .profile_img("https://i.namu.wiki/i/tyx9GSyT6U1vpeboPZpUimd2wgkQsB7SDBIe8nFnHRlgCrXRpp6_C9QRvz61A9KRyf_oP1rUHT8Ykwc3CQF9nDQ4aFR5_5ZueLRbnodvtMpF_wPCbRMis09h_JwvVMIRv12bnrAXy6ecLT959C9a4w.webp")
- .grade(Grade.PURPLE)
- .build();
-
- String randomMajorLanguagesForUser = createRandomMajorLanguagesForUser(user);
-
- user.joinMockUpdateUser(school, region, randomMajorLanguagesForUser,
- user.getNickname(), user.getScore(), user.getProfile_img(), 0, introductionRepository.createIntroductionAndReturn());
- userRepository.save(user);
- }
-
- private String createRandomMajorLanguagesForUser(User user) {
- // Generate a random number of languages for each user
- int languagesCount = 1; // Random number of languages between 1 and 5
- int i = random.nextInt(5);
- String[] languages = {"Java", "C#", "JavaScript", "Python", "C"};
- String randomLanguage = languages[i];
-
- return randomLanguage;
- }
-
- private User createIntroductionForUser(User user) {
- user.setIntroduction(introductionRepository.createIntroductionAndReturn());
- return user;
- }
-
-
- private void scoring(User findUser) {
- schoolService.joinNewUserScore(findUser);
- regionService.joinNewUserScore(findUser);
- }
-
-
-}
\ No newline at end of file
diff --git a/src/main/java/gitbal/backend/global/mock/RegionGenerator.java b/src/main/java/gitbal/backend/global/mock/RegionGenerator.java
deleted file mode 100644
index 4ac2d55..0000000
--- a/src/main/java/gitbal/backend/global/mock/RegionGenerator.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package gitbal.backend.global.mock;
-
-import gitbal.backend.domain.region.Region;
-import gitbal.backend.domain.region.application.repository.RegionRepository;
-import gitbal.backend.domain.school.School;
-import gitbal.backend.domain.school.SchoolRepository;
-import lombok.RequiredArgsConstructor;
-
-@RequiredArgsConstructor
-public class RegionGenerator {
-
- private final RegionRepository regionRepository;
- private static final int REGION_SIZE = 10;
- private static long id=1;
-
- private static int count=0;
-
- public Region generateRegion() {
- Region byId = regionRepository.findById((id % REGION_SIZE) +1).get();
- if(count<5) {
- count++;
- }else{
- count=0;
- id++;
- }
- return byId;
- }
-}
diff --git a/src/main/java/gitbal/backend/global/mock/SchoolGenerator.java b/src/main/java/gitbal/backend/global/mock/SchoolGenerator.java
deleted file mode 100644
index e3b69d3..0000000
--- a/src/main/java/gitbal/backend/global/mock/SchoolGenerator.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package gitbal.backend.global.mock;
-
-import gitbal.backend.domain.school.School;
-import gitbal.backend.domain.school.SchoolRepository;
-import lombok.RequiredArgsConstructor;
-
-import java.util.Optional;
-
-@RequiredArgsConstructor
-public class SchoolGenerator {
-
- private final SchoolRepository schoolRepository;
- private static long id=1;
-
- private static int count=0;
-
- public School generateSchool() {
- School byId = schoolRepository.findById(id).get();
- if(count<5) {
- count++;
- }else{
- count=0;
- id++;
- }
- return byId;
- }
-}
diff --git a/src/main/java/gitbal/backend/schedule/SchedulingService.java b/src/main/java/gitbal/backend/schedule/SchedulingService.java
index bf77c0c..9ef4200 100644
--- a/src/main/java/gitbal/backend/schedule/SchedulingService.java
+++ b/src/main/java/gitbal/backend/schedule/SchedulingService.java
@@ -26,7 +26,7 @@ public class SchedulingService {
private final UserGradeUpdater userGradeUpdater;
private final UnivCertCodeChecker univCertCodeChecker;
- @Scheduled(initialDelay = 1, fixedRate = 120, timeUnit = TimeUnit.MINUTES) // fixedRate를 사용하여 일정한 6시간의 주기를 가지는것이 중요!
+ @Scheduled(initialDelay = 1, fixedRate = 120, timeUnit = TimeUnit.MINUTES) // fixedRate를 사용하여 일정한 2시간의 주기를 가지는것이 중요!
@SchedulerLock(name="updateUser")
@Transactional
public void updateUser() {
diff --git a/src/main/java/gitbal/backend/schedule/userupdate/UserSetup.java b/src/main/java/gitbal/backend/schedule/userupdate/UserSetup.java
index 95ea478..8fbac8a 100644
--- a/src/main/java/gitbal/backend/schedule/userupdate/UserSetup.java
+++ b/src/main/java/gitbal/backend/schedule/userupdate/UserSetup.java
@@ -1,7 +1,6 @@
package gitbal.backend.schedule.userupdate;
import gitbal.backend.domain.user.UserService;
-import gitbal.backend.global.mock.GenerateRealMockUser;
import java.util.List;
import java.util.stream.Collectors;
@@ -9,14 +8,11 @@
public abstract class UserSetup {
- private final GenerateRealMockUser generateRealMockUser = new GenerateRealMockUser();
protected List getAllUsernames(UserService userService){
- List allUserNamesExcludeMockData = userService.findAllUserNames();
+ List userNames = userService.findAllUserNames();
- return allUserNamesExcludeMockData.stream()
- .filter(u -> !generateRealMockUser.getNames().contains(u))
- .collect(Collectors.toList());
+ return userNames.stream().toList();
}
}