From 5345c7d5ec6934c9a82403e9411b159517936a71 Mon Sep 17 00:00:00 2001 From: heozzi Date: Wed, 26 Feb 2025 16:30:52 +0900 Subject: [PATCH 01/16] =?UTF-8?q?Feat:=20CI/CD=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 57 +++++++++++++++++++ .../controller/CommentController.java | 12 +++- .../controller/SearchController.java | 26 +++++++++ .../repository/CommentRepository.java | 2 + .../repository/PostRepository.java | 3 + .../minipro2_post/service/CommentService.java | 11 +++- .../minipro2_post/service/PostService.java | 3 +- src/main/resources/application.properties | 12 +++- 8 files changed, 119 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/deploy.yml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..28054a3 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,57 @@ +name: Post_CI/CI + +on: + push: + branches: + - kkb +jobs: + cicd-deploy: + runs-on: ubuntu-latest + steps: + - name: Github Repository내 파일들 checkout(불러오기) 수행 + uses: actions/checkout@v4 + + # JDK 17 버전 설치 + - name: JDK 17 버전 설치 + uses: actions/setup-java@v4 + with: + distribution: 'temurin' # See 'Supported distributions' for available options + java-version: '17' + - name: application.properties 동적 생성 + run : | + echo "${{secrets.APPLICATION_PRO }}" > ./src/main/resources/application.yml + + - name: 단위 테스트 및 빌드 + run: | + chmod +x ./gradlew + ./gradlew clean build + - name: 관리상 빌드된 결과물의 이름을 변경 처리 + run: | + mv ./build/libs/*SNAPSHOT.jar ./run.jar + ls + + - name: EC2에 jar파일 업로드 + uses: appleboy/scp-action@v0.1.7 + with: + host: ${{ secrets.EC2_HOST }} + username: ${{ secrets.EC2_USER }} + key: ${{ secrets.EC2_KEY }} + source: run.jar + target: /home/ubuntu/server/demo + + - name : SSH로 EC2에 접속후 서버가동 + uses: appleboy/ssh-action@v1.2.0 + + with: + host: ${{ secrets.EC2_HOST }} + username: ${{ secrets.EC2_USER }} + key: ${{ secrets.EC2_KEY }} + script_stop: true + script: | + rm -rf /home/ubuntu/server/web + mkdir /home/ubuntu/server/web + mv /home/ubuntu/server/demo/run.jar /home/ubuntu/server/web/run.jar + cd /home/ubuntu/server/web + sudo fuser -k -n tcp 8080 || true + nohup java -jar run.jar > ./output.log 2>&1 & + rm -rf /home/ubuntu/server/demo \ No newline at end of file diff --git a/src/main/java/com/example/minipro2_post/controller/CommentController.java b/src/main/java/com/example/minipro2_post/controller/CommentController.java index 965d738..6501e13 100644 --- a/src/main/java/com/example/minipro2_post/controller/CommentController.java +++ b/src/main/java/com/example/minipro2_post/controller/CommentController.java @@ -10,6 +10,7 @@ import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Mono; +import java.util.ArrayList; import java.util.List; /** @@ -55,8 +56,17 @@ public ResponseEntity createComment( .bodyToMono(Long.class); Long uid = webClient.block(); // 동기 처리 + List gid = new ArrayList<>(); +// // GID 확인 +// Mono webClient_2 = webClientBuilder.baseUrl("http://localhost:8083").build() +// .get() +// .uri(uriBuilder -> uriBuilder.path("/user/checkemail") +// .queryParam("email",email).build()) +// .retrieve() +// .bodyToMono(List.class); +// List gid = webClient_2.block(); - commentService.addComment(commentDto, pid,uid); + commentService.addComment(commentDto, pid,uid,gid); return ResponseEntity.ok("댓글 저장완료"); } // 댓글 수정 진행 diff --git a/src/main/java/com/example/minipro2_post/controller/SearchController.java b/src/main/java/com/example/minipro2_post/controller/SearchController.java index 298327b..c76f620 100644 --- a/src/main/java/com/example/minipro2_post/controller/SearchController.java +++ b/src/main/java/com/example/minipro2_post/controller/SearchController.java @@ -4,9 +4,13 @@ import com.example.minipro2_post.repository.PostRepository; import com.example.minipro2_post.service.SearchService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Mono; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -26,6 +30,9 @@ public class SearchController { @Autowired private PostRepository postRepository; + @Autowired + private WebClient.Builder webClientBuilder; + // 메인 페이지 테스트 @GetMapping @@ -54,6 +61,16 @@ public ResponseEntity search(@RequestBody HashMap map) { List postEntity = null; +// Mono webClient = webClientBuilder.baseUrl("http://localhost:8083").build() +// .get() +// .uri(uriBuilder -> uriBuilder.path("/user/checkemail") +// .queryParam("email",email).build()) +// .retrieve() +// .bodyToMono(List.class); +// List result = webClient.block(); + +// System.out.println(result); + try { if ("tag".equals(type)) { postEntity = searchService.searchByTag(searchString); @@ -65,6 +82,15 @@ public ResponseEntity search(@RequestBody HashMap map) { } catch (Exception e) { return ResponseEntity.ok("해당 이메일을 가진 사용자가 없습니다."); } + List postIds = new ArrayList<>(); + for (PostEntity postEntity1 : postEntity) { + if (!postEntity1.getGid().equals(0)) { + postIds.add(postEntity1.getGid()); + } + } + for (int i = postIds.size() - 1; i >= 0; i--) { + postEntity.remove(postIds.get(i)); + } if (postEntity == null || postEntity.isEmpty()) { return ResponseEntity.ok("검색 결과가 없습니다"); diff --git a/src/main/java/com/example/minipro2_post/repository/CommentRepository.java b/src/main/java/com/example/minipro2_post/repository/CommentRepository.java index ece2864..9b58ad6 100644 --- a/src/main/java/com/example/minipro2_post/repository/CommentRepository.java +++ b/src/main/java/com/example/minipro2_post/repository/CommentRepository.java @@ -9,4 +9,6 @@ public interface CommentRepository extends JpaRepository { List findByPid(PostEntity post); + + List findByUid(PostEntity post); } diff --git a/src/main/java/com/example/minipro2_post/repository/PostRepository.java b/src/main/java/com/example/minipro2_post/repository/PostRepository.java index a322995..d93fdca 100644 --- a/src/main/java/com/example/minipro2_post/repository/PostRepository.java +++ b/src/main/java/com/example/minipro2_post/repository/PostRepository.java @@ -12,6 +12,9 @@ public interface PostRepository extends JpaRepository { // 태그 검색 List findByTag (String tag); + // gid,pid 검색 +// List findByUidandGid (Long uid, Long gid); + // gid 검색 List findByGid(Long gid); diff --git a/src/main/java/com/example/minipro2_post/service/CommentService.java b/src/main/java/com/example/minipro2_post/service/CommentService.java index 10d0889..fa27fc1 100644 --- a/src/main/java/com/example/minipro2_post/service/CommentService.java +++ b/src/main/java/com/example/minipro2_post/service/CommentService.java @@ -32,10 +32,17 @@ public class CommentService { private CommentEventPublisher commentEventPublisher; // 댓글 추가 - public void addComment(CommentDto commentDto, Long pid, Long uid) { + public void addComment(CommentDto commentDto, Long pid, Long uid, List gid) { Optional postEntity = postRepository.findById(pid); + Boolean uidGidCheck = true; +// for (Long gid1 : gid) { +// List postEntity1 = postRepository.findByUidandGid(uid,gid1); +// if (!postEntity1.isEmpty()) { +// uidGidCheck = true; +// } +// } - if (postEntity.isPresent()) { + if (postEntity.isPresent() && uidGidCheck) { CommentEntity commentEntity = CommentEntity.builder() .pid(postEntity.get()) .uid(commentDto.getUid()) diff --git a/src/main/java/com/example/minipro2_post/service/PostService.java b/src/main/java/com/example/minipro2_post/service/PostService.java index 04fc8e5..78dc459 100644 --- a/src/main/java/com/example/minipro2_post/service/PostService.java +++ b/src/main/java/com/example/minipro2_post/service/PostService.java @@ -65,10 +65,11 @@ else if(!postDto.getType().equals("public") &&!postDto.getType().equals("groupOnly")) { throw new RuntimeException("게시글 타입이 옳지 않습니다."); } + PostEntity postEntity = PostEntity.builder() .uid(result) .type(postDto.getType()) - .gid(postDto.getGid() != null ? postDto.getGid() : 0L) + .gid(postDto.getType().equals("public") ? 0L : postDto.getGid()) .date(postDto.getDate() != null ? postDto.getDate() : LocalDateTime.now()) .content(postDto.getContent()) .youLike(postDto.getLike() != null ? postDto.getLike() : 0L) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 94ab4dc..06db93f 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -13,10 +13,16 @@ eureka.instance.lease-expiration-duration-in-seconds=20 # RDS mysql -spring.datasource.url=jdbc:mysql://localhost:3306/miniproject +#spring.datasource.url=jdbc:mysql://localhost:3306/miniproject +#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +#spring.datasource.username=root +#spring.datasource.password=p1234 + spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -spring.datasource.username=root -spring.datasource.password=p1234 +spring.datasource.url=jdbc:mysql://database-1.c9y4oso2gkpy.us-west-2.rds.amazonaws.com:3306/projectmini?serverTimezone=UTC&characterEncoding=UTF-8 +spring.datasource.username=admin +spring.datasource.password=qhdks001! + # No-SQL redis spring.data.redis.host=localhost From c099c7bcead13d0f0c7232978558aa1a11d3419f Mon Sep 17 00:00:00 2001 From: heozzi Date: Wed, 26 Feb 2025 16:33:27 +0900 Subject: [PATCH 02/16] =?UTF-8?q?Feat:=20CI/CD=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/1 | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/1 diff --git a/src/main/resources/1 b/src/main/resources/1 new file mode 100644 index 0000000..e69de29 From 26898901039c95fb953428d29c2b0075cd2a0333 Mon Sep 17 00:00:00 2001 From: heozzi Date: Wed, 26 Feb 2025 16:34:49 +0900 Subject: [PATCH 03/16] =?UTF-8?q?Feat:=20CI/CD=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + src/main/resources/application.properties | 44 ----------------------- 2 files changed, 1 insertion(+), 44 deletions(-) delete mode 100644 src/main/resources/application.properties diff --git a/.gitignore b/.gitignore index c2065bc..7f915e8 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ build/ !gradle/wrapper/gradle-wrapper.jar !**/src/main/**/build/ !**/src/test/**/build/ +application.properties ### STS ### .apt_generated diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties deleted file mode 100644 index 06db93f..0000000 --- a/src/main/resources/application.properties +++ /dev/null @@ -1,44 +0,0 @@ -spring.application.name=post -# \uC11C\uBE44\uC2A4 \uD3EC\uD2B8 \uC124\uC815 -server.port=8081 - - -# \uC720\uB808\uCE74 \uC11C\uBC84 \uC5F0\uACB0 -eureka.client.service-url.defaultZone=http://localhost:8761/eureka -# \uD5EC\uC2A4 \uCCB4\uD06C -# \uAE30\uBCF8 30\uCD08 -> 15\uCD08 \uC8FC\uAE30 \uC870\uC815 -eureka.instance.lease-renewal-interval-in-seconds=15 -# \uAE30\uBCF8 90\uCD08 -> 20\uCD08 \uC815\uB3C4 \uB300\uAE30 -eureka.instance.lease-expiration-duration-in-seconds=20 - - -# RDS mysql -#spring.datasource.url=jdbc:mysql://localhost:3306/miniproject -#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -#spring.datasource.username=root -#spring.datasource.password=p1234 - -spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -spring.datasource.url=jdbc:mysql://database-1.c9y4oso2gkpy.us-west-2.rds.amazonaws.com:3306/projectmini?serverTimezone=UTC&characterEncoding=UTF-8 -spring.datasource.username=admin -spring.datasource.password=qhdks001! - - -# No-SQL redis -spring.data.redis.host=localhost -spring.data.redis.port=6379 -spring.data.redis.repositories.enabled=false - -# kafka -spring.kafka.bootstrap-servers=localhost:9092 -spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer -spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer -spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer -spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer -spring.kafka.consumer.auto-offset-reset=earliest -spring.kafka.consumer.group-id=test-group -spring.kafka.listener.missing-topics-fatal=false - -# JPA -spring.jpa.hibernate.ddl-auto=update -spring.jpa.properties.hibernate.format_sql=true \ No newline at end of file From 723003dc8f9f13e4149fa02c00ff511623e47957 Mon Sep 17 00:00:00 2001 From: heozzi Date: Wed, 26 Feb 2025 16:36:43 +0900 Subject: [PATCH 04/16] =?UTF-8?q?Feat:=20CI/CD=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=5F2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 28054a3..3b4dc80 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -19,7 +19,7 @@ jobs: java-version: '17' - name: application.properties 동적 생성 run : | - echo "${{secrets.APPLICATION_PRO }}" > ./src/main/resources/application.yml + echo "${{secrets.APPLICATION_PRO }}" > ./src/main/resources/application.properties - name: 단위 테스트 및 빌드 run: | From 1706c003eeda93a178af376abc3b9bccf3df91c0 Mon Sep 17 00:00:00 2001 From: heozzi Date: Wed, 26 Feb 2025 16:30:52 +0900 Subject: [PATCH 05/16] =?UTF-8?q?Feat:=20CI/CD=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 57 +++++++++++++++++++ .../controller/CommentController.java | 12 +++- .../controller/SearchController.java | 26 +++++++++ .../minipro2_post/service/CommentService.java | 11 +++- .../minipro2_post/service/PostService.java | 3 +- src/main/resources/application.properties | 12 +++- 6 files changed, 114 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/deploy.yml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..28054a3 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,57 @@ +name: Post_CI/CI + +on: + push: + branches: + - kkb +jobs: + cicd-deploy: + runs-on: ubuntu-latest + steps: + - name: Github Repository내 파일들 checkout(불러오기) 수행 + uses: actions/checkout@v4 + + # JDK 17 버전 설치 + - name: JDK 17 버전 설치 + uses: actions/setup-java@v4 + with: + distribution: 'temurin' # See 'Supported distributions' for available options + java-version: '17' + - name: application.properties 동적 생성 + run : | + echo "${{secrets.APPLICATION_PRO }}" > ./src/main/resources/application.yml + + - name: 단위 테스트 및 빌드 + run: | + chmod +x ./gradlew + ./gradlew clean build + - name: 관리상 빌드된 결과물의 이름을 변경 처리 + run: | + mv ./build/libs/*SNAPSHOT.jar ./run.jar + ls + + - name: EC2에 jar파일 업로드 + uses: appleboy/scp-action@v0.1.7 + with: + host: ${{ secrets.EC2_HOST }} + username: ${{ secrets.EC2_USER }} + key: ${{ secrets.EC2_KEY }} + source: run.jar + target: /home/ubuntu/server/demo + + - name : SSH로 EC2에 접속후 서버가동 + uses: appleboy/ssh-action@v1.2.0 + + with: + host: ${{ secrets.EC2_HOST }} + username: ${{ secrets.EC2_USER }} + key: ${{ secrets.EC2_KEY }} + script_stop: true + script: | + rm -rf /home/ubuntu/server/web + mkdir /home/ubuntu/server/web + mv /home/ubuntu/server/demo/run.jar /home/ubuntu/server/web/run.jar + cd /home/ubuntu/server/web + sudo fuser -k -n tcp 8080 || true + nohup java -jar run.jar > ./output.log 2>&1 & + rm -rf /home/ubuntu/server/demo \ No newline at end of file diff --git a/src/main/java/com/example/minipro2_post/controller/CommentController.java b/src/main/java/com/example/minipro2_post/controller/CommentController.java index 965d738..6501e13 100644 --- a/src/main/java/com/example/minipro2_post/controller/CommentController.java +++ b/src/main/java/com/example/minipro2_post/controller/CommentController.java @@ -10,6 +10,7 @@ import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Mono; +import java.util.ArrayList; import java.util.List; /** @@ -55,8 +56,17 @@ public ResponseEntity createComment( .bodyToMono(Long.class); Long uid = webClient.block(); // 동기 처리 + List gid = new ArrayList<>(); +// // GID 확인 +// Mono webClient_2 = webClientBuilder.baseUrl("http://localhost:8083").build() +// .get() +// .uri(uriBuilder -> uriBuilder.path("/user/checkemail") +// .queryParam("email",email).build()) +// .retrieve() +// .bodyToMono(List.class); +// List gid = webClient_2.block(); - commentService.addComment(commentDto, pid,uid); + commentService.addComment(commentDto, pid,uid,gid); return ResponseEntity.ok("댓글 저장완료"); } // 댓글 수정 진행 diff --git a/src/main/java/com/example/minipro2_post/controller/SearchController.java b/src/main/java/com/example/minipro2_post/controller/SearchController.java index d772557..ded9130 100644 --- a/src/main/java/com/example/minipro2_post/controller/SearchController.java +++ b/src/main/java/com/example/minipro2_post/controller/SearchController.java @@ -4,9 +4,13 @@ import com.example.minipro2_post.repository.PostRepository; import com.example.minipro2_post.service.SearchService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Mono; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -26,6 +30,9 @@ public class SearchController { @Autowired private PostRepository postRepository; + @Autowired + private WebClient.Builder webClientBuilder; + // 메인 페이지 테스트 @GetMapping @@ -54,6 +61,16 @@ public ResponseEntity search(@RequestBody HashMap map) { List postEntity = null; +// Mono webClient = webClientBuilder.baseUrl("http://localhost:8083").build() +// .get() +// .uri(uriBuilder -> uriBuilder.path("/user/checkemail") +// .queryParam("email",email).build()) +// .retrieve() +// .bodyToMono(List.class); +// List result = webClient.block(); + +// System.out.println(result); + try { if("tag".equals(type)) { postEntity = searchService.searchByTag(searchString); @@ -66,6 +83,15 @@ public ResponseEntity search(@RequestBody HashMap map) { } catch (Exception e) { return ResponseEntity.ok("해당 이메일을 가진 사용자가 없습니다."); } + List postIds = new ArrayList<>(); + for (PostEntity postEntity1 : postEntity) { + if (!postEntity1.getGid().equals(0)) { + postIds.add(postEntity1.getGid()); + } + } + for (int i = postIds.size() - 1; i >= 0; i--) { + postEntity.remove(postIds.get(i)); + } if (postEntity == null || postEntity.isEmpty()) { return ResponseEntity.ok("검색 결과가 없습니다"); diff --git a/src/main/java/com/example/minipro2_post/service/CommentService.java b/src/main/java/com/example/minipro2_post/service/CommentService.java index 10d0889..fa27fc1 100644 --- a/src/main/java/com/example/minipro2_post/service/CommentService.java +++ b/src/main/java/com/example/minipro2_post/service/CommentService.java @@ -32,10 +32,17 @@ public class CommentService { private CommentEventPublisher commentEventPublisher; // 댓글 추가 - public void addComment(CommentDto commentDto, Long pid, Long uid) { + public void addComment(CommentDto commentDto, Long pid, Long uid, List gid) { Optional postEntity = postRepository.findById(pid); + Boolean uidGidCheck = true; +// for (Long gid1 : gid) { +// List postEntity1 = postRepository.findByUidandGid(uid,gid1); +// if (!postEntity1.isEmpty()) { +// uidGidCheck = true; +// } +// } - if (postEntity.isPresent()) { + if (postEntity.isPresent() && uidGidCheck) { CommentEntity commentEntity = CommentEntity.builder() .pid(postEntity.get()) .uid(commentDto.getUid()) diff --git a/src/main/java/com/example/minipro2_post/service/PostService.java b/src/main/java/com/example/minipro2_post/service/PostService.java index 71e8ac6..62b6279 100644 --- a/src/main/java/com/example/minipro2_post/service/PostService.java +++ b/src/main/java/com/example/minipro2_post/service/PostService.java @@ -48,10 +48,11 @@ else if(!postDto.getType().equals("public") &&!postDto.getType().equals("groupOnly")) { throw new RuntimeException("게시글 타입이 옳지 않거나 공백입니다."); } + PostEntity postEntity = PostEntity.builder() .uid(result) .type(postDto.getType()) - .gid(postDto.getGid() != null ? postDto.getGid() : 0L) + .gid(postDto.getType().equals("public") ? 0L : postDto.getGid()) .date(postDto.getDate() != null ? postDto.getDate() : LocalDateTime.now()) .content(postDto.getContent()) .youLike(postDto.getLike() != null ? postDto.getLike() : 0L) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 94ab4dc..06db93f 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -13,10 +13,16 @@ eureka.instance.lease-expiration-duration-in-seconds=20 # RDS mysql -spring.datasource.url=jdbc:mysql://localhost:3306/miniproject +#spring.datasource.url=jdbc:mysql://localhost:3306/miniproject +#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +#spring.datasource.username=root +#spring.datasource.password=p1234 + spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -spring.datasource.username=root -spring.datasource.password=p1234 +spring.datasource.url=jdbc:mysql://database-1.c9y4oso2gkpy.us-west-2.rds.amazonaws.com:3306/projectmini?serverTimezone=UTC&characterEncoding=UTF-8 +spring.datasource.username=admin +spring.datasource.password=qhdks001! + # No-SQL redis spring.data.redis.host=localhost From 2ec8a6b80ed9d967e5bd913aab4833bdf1265714 Mon Sep 17 00:00:00 2001 From: heozzi Date: Wed, 26 Feb 2025 16:33:27 +0900 Subject: [PATCH 06/16] =?UTF-8?q?Feat:=20CI/CD=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/1 | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/1 diff --git a/src/main/resources/1 b/src/main/resources/1 new file mode 100644 index 0000000..e69de29 From f0e01fa246e93c8f77d81adaaf8bfecaeb1794a6 Mon Sep 17 00:00:00 2001 From: heozzi Date: Wed, 26 Feb 2025 16:34:49 +0900 Subject: [PATCH 07/16] =?UTF-8?q?Feat:=20CI/CD=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + src/main/resources/application.properties | 44 ----------------------- 2 files changed, 1 insertion(+), 44 deletions(-) delete mode 100644 src/main/resources/application.properties diff --git a/.gitignore b/.gitignore index c2065bc..7f915e8 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ build/ !gradle/wrapper/gradle-wrapper.jar !**/src/main/**/build/ !**/src/test/**/build/ +application.properties ### STS ### .apt_generated diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties deleted file mode 100644 index 06db93f..0000000 --- a/src/main/resources/application.properties +++ /dev/null @@ -1,44 +0,0 @@ -spring.application.name=post -# \uC11C\uBE44\uC2A4 \uD3EC\uD2B8 \uC124\uC815 -server.port=8081 - - -# \uC720\uB808\uCE74 \uC11C\uBC84 \uC5F0\uACB0 -eureka.client.service-url.defaultZone=http://localhost:8761/eureka -# \uD5EC\uC2A4 \uCCB4\uD06C -# \uAE30\uBCF8 30\uCD08 -> 15\uCD08 \uC8FC\uAE30 \uC870\uC815 -eureka.instance.lease-renewal-interval-in-seconds=15 -# \uAE30\uBCF8 90\uCD08 -> 20\uCD08 \uC815\uB3C4 \uB300\uAE30 -eureka.instance.lease-expiration-duration-in-seconds=20 - - -# RDS mysql -#spring.datasource.url=jdbc:mysql://localhost:3306/miniproject -#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -#spring.datasource.username=root -#spring.datasource.password=p1234 - -spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -spring.datasource.url=jdbc:mysql://database-1.c9y4oso2gkpy.us-west-2.rds.amazonaws.com:3306/projectmini?serverTimezone=UTC&characterEncoding=UTF-8 -spring.datasource.username=admin -spring.datasource.password=qhdks001! - - -# No-SQL redis -spring.data.redis.host=localhost -spring.data.redis.port=6379 -spring.data.redis.repositories.enabled=false - -# kafka -spring.kafka.bootstrap-servers=localhost:9092 -spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer -spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer -spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer -spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer -spring.kafka.consumer.auto-offset-reset=earliest -spring.kafka.consumer.group-id=test-group -spring.kafka.listener.missing-topics-fatal=false - -# JPA -spring.jpa.hibernate.ddl-auto=update -spring.jpa.properties.hibernate.format_sql=true \ No newline at end of file From cb7a049c14ec9e48a0797ecd42bc22a4fa44691c Mon Sep 17 00:00:00 2001 From: heozzi Date: Wed, 26 Feb 2025 16:36:43 +0900 Subject: [PATCH 08/16] =?UTF-8?q?Feat:=20CI/CD=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=5F2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 28054a3..3b4dc80 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -19,7 +19,7 @@ jobs: java-version: '17' - name: application.properties 동적 생성 run : | - echo "${{secrets.APPLICATION_PRO }}" > ./src/main/resources/application.yml + echo "${{secrets.APPLICATION_PRO }}" > ./src/main/resources/application.properties - name: 단위 테스트 및 빌드 run: | From 420cb3de8ea0867e3464c3e7eb4b69461d6003bd Mon Sep 17 00:00:00 2001 From: heozzi Date: Thu, 27 Feb 2025 18:53:27 +0900 Subject: [PATCH 09/16] =?UTF-8?q?Feat:=20=EA=B7=B8=EB=A3=B9=20=EC=A7=84?= =?UTF-8?q?=ED=96=89=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CommentController.java | 22 +++++++++++-------- .../repository/CommentRepository.java | 2 ++ .../repository/PostRepository.java | 1 + .../minipro2_post/service/CommentService.java | 19 ++++++++-------- 4 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/example/minipro2_post/controller/CommentController.java b/src/main/java/com/example/minipro2_post/controller/CommentController.java index 6501e13..7c1d848 100644 --- a/src/main/java/com/example/minipro2_post/controller/CommentController.java +++ b/src/main/java/com/example/minipro2_post/controller/CommentController.java @@ -3,6 +3,7 @@ import com.example.minipro2_post.dto.CommentDto; import com.example.minipro2_post.service.CommentService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -56,16 +57,19 @@ public ResponseEntity createComment( .bodyToMono(Long.class); Long uid = webClient.block(); // 동기 처리 - List gid = new ArrayList<>(); -// // GID 확인 -// Mono webClient_2 = webClientBuilder.baseUrl("http://localhost:8083").build() -// .get() -// .uri(uriBuilder -> uriBuilder.path("/user/checkemail") -// .queryParam("email",email).build()) -// .retrieve() -// .bodyToMono(List.class); -// List gid = webClient_2.block(); +// List gid = new ArrayList<>(); + // GID 확인 + Mono> webClient_2 = webClientBuilder.baseUrl("http://localhost:8083").build() + .get() + .uri(uriBuilder -> uriBuilder.path("/user/groupCheck") + .queryParam("email", email).build()) + .retrieve() + .bodyToMono(new ParameterizedTypeReference>() {}) // List로 먼저 받아서 + .map(list -> list.stream() + .map(obj -> ((Number) obj).longValue()) // Object → Number → Long 변환 + .toList()); + List gid = webClient_2.block(); commentService.addComment(commentDto, pid,uid,gid); return ResponseEntity.ok("댓글 저장완료"); } diff --git a/src/main/java/com/example/minipro2_post/repository/CommentRepository.java b/src/main/java/com/example/minipro2_post/repository/CommentRepository.java index 2bb0d54..8e5891b 100644 --- a/src/main/java/com/example/minipro2_post/repository/CommentRepository.java +++ b/src/main/java/com/example/minipro2_post/repository/CommentRepository.java @@ -12,6 +12,8 @@ public interface CommentRepository extends JpaRepository { List findByPid(PostEntity post); + List findByUid(PostEntity post); + // 특정 사용자가 작성한 모든 댓글 삭제 @Modifying @Transactional diff --git a/src/main/java/com/example/minipro2_post/repository/PostRepository.java b/src/main/java/com/example/minipro2_post/repository/PostRepository.java index 3c429a2..639febd 100644 --- a/src/main/java/com/example/minipro2_post/repository/PostRepository.java +++ b/src/main/java/com/example/minipro2_post/repository/PostRepository.java @@ -16,6 +16,7 @@ public interface PostRepository extends JpaRepository { List findByUid(Long uid); + // uid로 게시글 삭제 @Modifying @Transactional diff --git a/src/main/java/com/example/minipro2_post/service/CommentService.java b/src/main/java/com/example/minipro2_post/service/CommentService.java index fa27fc1..52a9794 100644 --- a/src/main/java/com/example/minipro2_post/service/CommentService.java +++ b/src/main/java/com/example/minipro2_post/service/CommentService.java @@ -32,17 +32,18 @@ public class CommentService { private CommentEventPublisher commentEventPublisher; // 댓글 추가 - public void addComment(CommentDto commentDto, Long pid, Long uid, List gid) { + public void addComment(CommentDto commentDto, Long pid, Long uid, List gids) { Optional postEntity = postRepository.findById(pid); - Boolean uidGidCheck = true; -// for (Long gid1 : gid) { -// List postEntity1 = postRepository.findByUidandGid(uid,gid1); -// if (!postEntity1.isEmpty()) { -// uidGidCheck = true; -// } -// } - if (postEntity.isPresent() && uidGidCheck) { + Boolean gidCheck = false; + // public 확인 + if (postEntity.get().getGid() ==0L) gidCheck = true; + + for (Long gid:gids) { + if (gid == postEntity.get().getGid()) gidCheck = true; + } + System.out.println(postEntity.isPresent()+" / "+postEntity.get().getGid() +" / "+gids); + if (postEntity.isPresent() && gidCheck ) { CommentEntity commentEntity = CommentEntity.builder() .pid(postEntity.get()) .uid(commentDto.getUid()) From bda5e36281596dfb629e6e8ff30ea7aa24b5321e Mon Sep 17 00:00:00 2001 From: heozzi Date: Wed, 26 Feb 2025 16:30:52 +0900 Subject: [PATCH 10/16] =?UTF-8?q?Feat:=20CI/CD=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 57 +++++++++++++++++++ .../controller/CommentController.java | 12 +++- .../controller/SearchController.java | 26 +++++++++ .../minipro2_post/service/CommentService.java | 11 +++- .../minipro2_post/service/PostService.java | 3 +- src/main/resources/application.properties | 12 +++- 6 files changed, 114 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/deploy.yml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..28054a3 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,57 @@ +name: Post_CI/CI + +on: + push: + branches: + - kkb +jobs: + cicd-deploy: + runs-on: ubuntu-latest + steps: + - name: Github Repository내 파일들 checkout(불러오기) 수행 + uses: actions/checkout@v4 + + # JDK 17 버전 설치 + - name: JDK 17 버전 설치 + uses: actions/setup-java@v4 + with: + distribution: 'temurin' # See 'Supported distributions' for available options + java-version: '17' + - name: application.properties 동적 생성 + run : | + echo "${{secrets.APPLICATION_PRO }}" > ./src/main/resources/application.yml + + - name: 단위 테스트 및 빌드 + run: | + chmod +x ./gradlew + ./gradlew clean build + - name: 관리상 빌드된 결과물의 이름을 변경 처리 + run: | + mv ./build/libs/*SNAPSHOT.jar ./run.jar + ls + + - name: EC2에 jar파일 업로드 + uses: appleboy/scp-action@v0.1.7 + with: + host: ${{ secrets.EC2_HOST }} + username: ${{ secrets.EC2_USER }} + key: ${{ secrets.EC2_KEY }} + source: run.jar + target: /home/ubuntu/server/demo + + - name : SSH로 EC2에 접속후 서버가동 + uses: appleboy/ssh-action@v1.2.0 + + with: + host: ${{ secrets.EC2_HOST }} + username: ${{ secrets.EC2_USER }} + key: ${{ secrets.EC2_KEY }} + script_stop: true + script: | + rm -rf /home/ubuntu/server/web + mkdir /home/ubuntu/server/web + mv /home/ubuntu/server/demo/run.jar /home/ubuntu/server/web/run.jar + cd /home/ubuntu/server/web + sudo fuser -k -n tcp 8080 || true + nohup java -jar run.jar > ./output.log 2>&1 & + rm -rf /home/ubuntu/server/demo \ No newline at end of file diff --git a/src/main/java/com/example/minipro2_post/controller/CommentController.java b/src/main/java/com/example/minipro2_post/controller/CommentController.java index 965d738..6501e13 100644 --- a/src/main/java/com/example/minipro2_post/controller/CommentController.java +++ b/src/main/java/com/example/minipro2_post/controller/CommentController.java @@ -10,6 +10,7 @@ import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Mono; +import java.util.ArrayList; import java.util.List; /** @@ -55,8 +56,17 @@ public ResponseEntity createComment( .bodyToMono(Long.class); Long uid = webClient.block(); // 동기 처리 + List gid = new ArrayList<>(); +// // GID 확인 +// Mono webClient_2 = webClientBuilder.baseUrl("http://localhost:8083").build() +// .get() +// .uri(uriBuilder -> uriBuilder.path("/user/checkemail") +// .queryParam("email",email).build()) +// .retrieve() +// .bodyToMono(List.class); +// List gid = webClient_2.block(); - commentService.addComment(commentDto, pid,uid); + commentService.addComment(commentDto, pid,uid,gid); return ResponseEntity.ok("댓글 저장완료"); } // 댓글 수정 진행 diff --git a/src/main/java/com/example/minipro2_post/controller/SearchController.java b/src/main/java/com/example/minipro2_post/controller/SearchController.java index 514bca6..29b2eb7 100644 --- a/src/main/java/com/example/minipro2_post/controller/SearchController.java +++ b/src/main/java/com/example/minipro2_post/controller/SearchController.java @@ -5,9 +5,13 @@ import com.example.minipro2_post.repository.PostRepository; import com.example.minipro2_post.service.SearchService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Mono; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -27,6 +31,9 @@ public class SearchController { @Autowired private PostRepository postRepository; + @Autowired + private WebClient.Builder webClientBuilder; + // 메인 페이지 테스트 @GetMapping @@ -55,6 +62,16 @@ public ResponseEntity search(@RequestBody HashMap map) { List postDtoList = null; +// Mono webClient = webClientBuilder.baseUrl("http://localhost:8083").build() +// .get() +// .uri(uriBuilder -> uriBuilder.path("/user/checkemail") +// .queryParam("email",email).build()) +// .retrieve() +// .bodyToMono(List.class); +// List result = webClient.block(); + +// System.out.println(result); + try { if("tag".equals(type)) { postDtoList = searchService.searchByTag(searchString); @@ -67,6 +84,15 @@ public ResponseEntity search(@RequestBody HashMap map) { } catch (Exception e) { return ResponseEntity.ok("해당 이메일을 가진 사용자가 없습니다."); } + List postIds = new ArrayList<>(); + for (PostEntity postEntity1 : postEntity) { + if (!postEntity1.getGid().equals(0)) { + postIds.add(postEntity1.getGid()); + } + } + for (int i = postIds.size() - 1; i >= 0; i--) { + postEntity.remove(postIds.get(i)); + } if (postDtoList == null || postDtoList.isEmpty()) { return ResponseEntity.ok("검색 결과가 없습니다"); diff --git a/src/main/java/com/example/minipro2_post/service/CommentService.java b/src/main/java/com/example/minipro2_post/service/CommentService.java index 10d0889..fa27fc1 100644 --- a/src/main/java/com/example/minipro2_post/service/CommentService.java +++ b/src/main/java/com/example/minipro2_post/service/CommentService.java @@ -32,10 +32,17 @@ public class CommentService { private CommentEventPublisher commentEventPublisher; // 댓글 추가 - public void addComment(CommentDto commentDto, Long pid, Long uid) { + public void addComment(CommentDto commentDto, Long pid, Long uid, List gid) { Optional postEntity = postRepository.findById(pid); + Boolean uidGidCheck = true; +// for (Long gid1 : gid) { +// List postEntity1 = postRepository.findByUidandGid(uid,gid1); +// if (!postEntity1.isEmpty()) { +// uidGidCheck = true; +// } +// } - if (postEntity.isPresent()) { + if (postEntity.isPresent() && uidGidCheck) { CommentEntity commentEntity = CommentEntity.builder() .pid(postEntity.get()) .uid(commentDto.getUid()) diff --git a/src/main/java/com/example/minipro2_post/service/PostService.java b/src/main/java/com/example/minipro2_post/service/PostService.java index 0842649..6942d29 100644 --- a/src/main/java/com/example/minipro2_post/service/PostService.java +++ b/src/main/java/com/example/minipro2_post/service/PostService.java @@ -48,10 +48,11 @@ else if(!postDto.getType().equals("public") &&!postDto.getType().equals("groupOnly")) { throw new RuntimeException("게시글 타입이 옳지 않거나 공백입니다."); } + PostEntity postEntity = PostEntity.builder() .uid(result) .type(postDto.getType()) - .gid(postDto.getGid() != null ? postDto.getGid() : 0L) + .gid(postDto.getType().equals("public") ? 0L : postDto.getGid()) .date(postDto.getDate() != null ? postDto.getDate() : LocalDateTime.now()) .content(postDto.getContent()) .youLike(postDto.getLike() != null ? postDto.getLike() : 0L) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 94ab4dc..06db93f 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -13,10 +13,16 @@ eureka.instance.lease-expiration-duration-in-seconds=20 # RDS mysql -spring.datasource.url=jdbc:mysql://localhost:3306/miniproject +#spring.datasource.url=jdbc:mysql://localhost:3306/miniproject +#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +#spring.datasource.username=root +#spring.datasource.password=p1234 + spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -spring.datasource.username=root -spring.datasource.password=p1234 +spring.datasource.url=jdbc:mysql://database-1.c9y4oso2gkpy.us-west-2.rds.amazonaws.com:3306/projectmini?serverTimezone=UTC&characterEncoding=UTF-8 +spring.datasource.username=admin +spring.datasource.password=qhdks001! + # No-SQL redis spring.data.redis.host=localhost From dacc075b3a6ef7475baa9d3793ed2bcfa4135fba Mon Sep 17 00:00:00 2001 From: heozzi Date: Wed, 26 Feb 2025 16:33:27 +0900 Subject: [PATCH 11/16] =?UTF-8?q?Feat:=20CI/CD=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/1 | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/1 diff --git a/src/main/resources/1 b/src/main/resources/1 new file mode 100644 index 0000000..e69de29 From 2d45638708fc6e06d0b70e9669cc608bbc80d2fa Mon Sep 17 00:00:00 2001 From: heozzi Date: Wed, 26 Feb 2025 16:34:49 +0900 Subject: [PATCH 12/16] =?UTF-8?q?Feat:=20CI/CD=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + src/main/resources/application.properties | 44 ----------------------- 2 files changed, 1 insertion(+), 44 deletions(-) delete mode 100644 src/main/resources/application.properties diff --git a/.gitignore b/.gitignore index c2065bc..7f915e8 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ build/ !gradle/wrapper/gradle-wrapper.jar !**/src/main/**/build/ !**/src/test/**/build/ +application.properties ### STS ### .apt_generated diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties deleted file mode 100644 index 06db93f..0000000 --- a/src/main/resources/application.properties +++ /dev/null @@ -1,44 +0,0 @@ -spring.application.name=post -# \uC11C\uBE44\uC2A4 \uD3EC\uD2B8 \uC124\uC815 -server.port=8081 - - -# \uC720\uB808\uCE74 \uC11C\uBC84 \uC5F0\uACB0 -eureka.client.service-url.defaultZone=http://localhost:8761/eureka -# \uD5EC\uC2A4 \uCCB4\uD06C -# \uAE30\uBCF8 30\uCD08 -> 15\uCD08 \uC8FC\uAE30 \uC870\uC815 -eureka.instance.lease-renewal-interval-in-seconds=15 -# \uAE30\uBCF8 90\uCD08 -> 20\uCD08 \uC815\uB3C4 \uB300\uAE30 -eureka.instance.lease-expiration-duration-in-seconds=20 - - -# RDS mysql -#spring.datasource.url=jdbc:mysql://localhost:3306/miniproject -#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -#spring.datasource.username=root -#spring.datasource.password=p1234 - -spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -spring.datasource.url=jdbc:mysql://database-1.c9y4oso2gkpy.us-west-2.rds.amazonaws.com:3306/projectmini?serverTimezone=UTC&characterEncoding=UTF-8 -spring.datasource.username=admin -spring.datasource.password=qhdks001! - - -# No-SQL redis -spring.data.redis.host=localhost -spring.data.redis.port=6379 -spring.data.redis.repositories.enabled=false - -# kafka -spring.kafka.bootstrap-servers=localhost:9092 -spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer -spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer -spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer -spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer -spring.kafka.consumer.auto-offset-reset=earliest -spring.kafka.consumer.group-id=test-group -spring.kafka.listener.missing-topics-fatal=false - -# JPA -spring.jpa.hibernate.ddl-auto=update -spring.jpa.properties.hibernate.format_sql=true \ No newline at end of file From c83da9fe1fd710e37b32595e19a99f12408577fa Mon Sep 17 00:00:00 2001 From: heozzi Date: Wed, 26 Feb 2025 16:36:43 +0900 Subject: [PATCH 13/16] =?UTF-8?q?Feat:=20CI/CD=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=5F2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 28054a3..3b4dc80 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -19,7 +19,7 @@ jobs: java-version: '17' - name: application.properties 동적 생성 run : | - echo "${{secrets.APPLICATION_PRO }}" > ./src/main/resources/application.yml + echo "${{secrets.APPLICATION_PRO }}" > ./src/main/resources/application.properties - name: 단위 테스트 및 빌드 run: | From bc0dc981c4a0787f8de65fe77dfb8191d3409c22 Mon Sep 17 00:00:00 2001 From: heozzi Date: Thu, 27 Feb 2025 18:53:27 +0900 Subject: [PATCH 14/16] =?UTF-8?q?Feat:=20=EA=B7=B8=EB=A3=B9=20=EC=A7=84?= =?UTF-8?q?=ED=96=89=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CommentController.java | 22 +++++++++++-------- .../repository/CommentRepository.java | 2 ++ .../repository/PostRepository.java | 1 + .../minipro2_post/service/CommentService.java | 19 ++++++++-------- 4 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/example/minipro2_post/controller/CommentController.java b/src/main/java/com/example/minipro2_post/controller/CommentController.java index 6501e13..7c1d848 100644 --- a/src/main/java/com/example/minipro2_post/controller/CommentController.java +++ b/src/main/java/com/example/minipro2_post/controller/CommentController.java @@ -3,6 +3,7 @@ import com.example.minipro2_post.dto.CommentDto; import com.example.minipro2_post.service.CommentService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -56,16 +57,19 @@ public ResponseEntity createComment( .bodyToMono(Long.class); Long uid = webClient.block(); // 동기 처리 - List gid = new ArrayList<>(); -// // GID 확인 -// Mono webClient_2 = webClientBuilder.baseUrl("http://localhost:8083").build() -// .get() -// .uri(uriBuilder -> uriBuilder.path("/user/checkemail") -// .queryParam("email",email).build()) -// .retrieve() -// .bodyToMono(List.class); -// List gid = webClient_2.block(); +// List gid = new ArrayList<>(); + // GID 확인 + Mono> webClient_2 = webClientBuilder.baseUrl("http://localhost:8083").build() + .get() + .uri(uriBuilder -> uriBuilder.path("/user/groupCheck") + .queryParam("email", email).build()) + .retrieve() + .bodyToMono(new ParameterizedTypeReference>() {}) // List로 먼저 받아서 + .map(list -> list.stream() + .map(obj -> ((Number) obj).longValue()) // Object → Number → Long 변환 + .toList()); + List gid = webClient_2.block(); commentService.addComment(commentDto, pid,uid,gid); return ResponseEntity.ok("댓글 저장완료"); } diff --git a/src/main/java/com/example/minipro2_post/repository/CommentRepository.java b/src/main/java/com/example/minipro2_post/repository/CommentRepository.java index 2bb0d54..8e5891b 100644 --- a/src/main/java/com/example/minipro2_post/repository/CommentRepository.java +++ b/src/main/java/com/example/minipro2_post/repository/CommentRepository.java @@ -12,6 +12,8 @@ public interface CommentRepository extends JpaRepository { List findByPid(PostEntity post); + List findByUid(PostEntity post); + // 특정 사용자가 작성한 모든 댓글 삭제 @Modifying @Transactional diff --git a/src/main/java/com/example/minipro2_post/repository/PostRepository.java b/src/main/java/com/example/minipro2_post/repository/PostRepository.java index 3c429a2..639febd 100644 --- a/src/main/java/com/example/minipro2_post/repository/PostRepository.java +++ b/src/main/java/com/example/minipro2_post/repository/PostRepository.java @@ -16,6 +16,7 @@ public interface PostRepository extends JpaRepository { List findByUid(Long uid); + // uid로 게시글 삭제 @Modifying @Transactional diff --git a/src/main/java/com/example/minipro2_post/service/CommentService.java b/src/main/java/com/example/minipro2_post/service/CommentService.java index fa27fc1..52a9794 100644 --- a/src/main/java/com/example/minipro2_post/service/CommentService.java +++ b/src/main/java/com/example/minipro2_post/service/CommentService.java @@ -32,17 +32,18 @@ public class CommentService { private CommentEventPublisher commentEventPublisher; // 댓글 추가 - public void addComment(CommentDto commentDto, Long pid, Long uid, List gid) { + public void addComment(CommentDto commentDto, Long pid, Long uid, List gids) { Optional postEntity = postRepository.findById(pid); - Boolean uidGidCheck = true; -// for (Long gid1 : gid) { -// List postEntity1 = postRepository.findByUidandGid(uid,gid1); -// if (!postEntity1.isEmpty()) { -// uidGidCheck = true; -// } -// } - if (postEntity.isPresent() && uidGidCheck) { + Boolean gidCheck = false; + // public 확인 + if (postEntity.get().getGid() ==0L) gidCheck = true; + + for (Long gid:gids) { + if (gid == postEntity.get().getGid()) gidCheck = true; + } + System.out.println(postEntity.isPresent()+" / "+postEntity.get().getGid() +" / "+gids); + if (postEntity.isPresent() && gidCheck ) { CommentEntity commentEntity = CommentEntity.builder() .pid(postEntity.get()) .uid(commentDto.getUid()) From fd5d5c617318948f45f20f6dcc5110b858d113f8 Mon Sep 17 00:00:00 2001 From: heozzi Date: Wed, 26 Feb 2025 16:30:52 +0900 Subject: [PATCH 15/16] =?UTF-8?q?Feat:=20CI/CD=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CommentController.java | 22 ++++------ .../controller/SearchController.java | 10 +++++ src/main/resources/application.properties | 44 +++++++++++++++++++ 3 files changed, 63 insertions(+), 13 deletions(-) create mode 100644 src/main/resources/application.properties diff --git a/src/main/java/com/example/minipro2_post/controller/CommentController.java b/src/main/java/com/example/minipro2_post/controller/CommentController.java index 7c1d848..6501e13 100644 --- a/src/main/java/com/example/minipro2_post/controller/CommentController.java +++ b/src/main/java/com/example/minipro2_post/controller/CommentController.java @@ -3,7 +3,6 @@ import com.example.minipro2_post.dto.CommentDto; import com.example.minipro2_post.service.CommentService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -57,19 +56,16 @@ public ResponseEntity createComment( .bodyToMono(Long.class); Long uid = webClient.block(); // 동기 처리 -// List gid = new ArrayList<>(); - // GID 확인 - Mono> webClient_2 = webClientBuilder.baseUrl("http://localhost:8083").build() - .get() - .uri(uriBuilder -> uriBuilder.path("/user/groupCheck") - .queryParam("email", email).build()) - .retrieve() - .bodyToMono(new ParameterizedTypeReference>() {}) // List로 먼저 받아서 - .map(list -> list.stream() - .map(obj -> ((Number) obj).longValue()) // Object → Number → Long 변환 - .toList()); + List gid = new ArrayList<>(); +// // GID 확인 +// Mono webClient_2 = webClientBuilder.baseUrl("http://localhost:8083").build() +// .get() +// .uri(uriBuilder -> uriBuilder.path("/user/checkemail") +// .queryParam("email",email).build()) +// .retrieve() +// .bodyToMono(List.class); +// List gid = webClient_2.block(); - List gid = webClient_2.block(); commentService.addComment(commentDto, pid,uid,gid); return ResponseEntity.ok("댓글 저장완료"); } diff --git a/src/main/java/com/example/minipro2_post/controller/SearchController.java b/src/main/java/com/example/minipro2_post/controller/SearchController.java index 29b2eb7..83b74c6 100644 --- a/src/main/java/com/example/minipro2_post/controller/SearchController.java +++ b/src/main/java/com/example/minipro2_post/controller/SearchController.java @@ -70,6 +70,16 @@ public ResponseEntity search(@RequestBody HashMap map) { // .bodyToMono(List.class); // List result = webClient.block(); +// System.out.println(result); + +// Mono webClient = webClientBuilder.baseUrl("http://localhost:8083").build() +// .get() +// .uri(uriBuilder -> uriBuilder.path("/user/checkemail") +// .queryParam("email",email).build()) +// .retrieve() +// .bodyToMono(List.class); +// List result = webClient.block(); + // System.out.println(result); try { diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..06db93f --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,44 @@ +spring.application.name=post +# \uC11C\uBE44\uC2A4 \uD3EC\uD2B8 \uC124\uC815 +server.port=8081 + + +# \uC720\uB808\uCE74 \uC11C\uBC84 \uC5F0\uACB0 +eureka.client.service-url.defaultZone=http://localhost:8761/eureka +# \uD5EC\uC2A4 \uCCB4\uD06C +# \uAE30\uBCF8 30\uCD08 -> 15\uCD08 \uC8FC\uAE30 \uC870\uC815 +eureka.instance.lease-renewal-interval-in-seconds=15 +# \uAE30\uBCF8 90\uCD08 -> 20\uCD08 \uC815\uB3C4 \uB300\uAE30 +eureka.instance.lease-expiration-duration-in-seconds=20 + + +# RDS mysql +#spring.datasource.url=jdbc:mysql://localhost:3306/miniproject +#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +#spring.datasource.username=root +#spring.datasource.password=p1234 + +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +spring.datasource.url=jdbc:mysql://database-1.c9y4oso2gkpy.us-west-2.rds.amazonaws.com:3306/projectmini?serverTimezone=UTC&characterEncoding=UTF-8 +spring.datasource.username=admin +spring.datasource.password=qhdks001! + + +# No-SQL redis +spring.data.redis.host=localhost +spring.data.redis.port=6379 +spring.data.redis.repositories.enabled=false + +# kafka +spring.kafka.bootstrap-servers=localhost:9092 +spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer +spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer +spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer +spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer +spring.kafka.consumer.auto-offset-reset=earliest +spring.kafka.consumer.group-id=test-group +spring.kafka.listener.missing-topics-fatal=false + +# JPA +spring.jpa.hibernate.ddl-auto=update +spring.jpa.properties.hibernate.format_sql=true \ No newline at end of file From 1bd89d119f6ebe18bd7b59bb4dddc8303c625a3d Mon Sep 17 00:00:00 2001 From: heozzi Date: Wed, 26 Feb 2025 16:34:49 +0900 Subject: [PATCH 16/16] =?UTF-8?q?Feat:=20CI/CD=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application.properties | 44 ----------------------- 1 file changed, 44 deletions(-) delete mode 100644 src/main/resources/application.properties diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties deleted file mode 100644 index 06db93f..0000000 --- a/src/main/resources/application.properties +++ /dev/null @@ -1,44 +0,0 @@ -spring.application.name=post -# \uC11C\uBE44\uC2A4 \uD3EC\uD2B8 \uC124\uC815 -server.port=8081 - - -# \uC720\uB808\uCE74 \uC11C\uBC84 \uC5F0\uACB0 -eureka.client.service-url.defaultZone=http://localhost:8761/eureka -# \uD5EC\uC2A4 \uCCB4\uD06C -# \uAE30\uBCF8 30\uCD08 -> 15\uCD08 \uC8FC\uAE30 \uC870\uC815 -eureka.instance.lease-renewal-interval-in-seconds=15 -# \uAE30\uBCF8 90\uCD08 -> 20\uCD08 \uC815\uB3C4 \uB300\uAE30 -eureka.instance.lease-expiration-duration-in-seconds=20 - - -# RDS mysql -#spring.datasource.url=jdbc:mysql://localhost:3306/miniproject -#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -#spring.datasource.username=root -#spring.datasource.password=p1234 - -spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -spring.datasource.url=jdbc:mysql://database-1.c9y4oso2gkpy.us-west-2.rds.amazonaws.com:3306/projectmini?serverTimezone=UTC&characterEncoding=UTF-8 -spring.datasource.username=admin -spring.datasource.password=qhdks001! - - -# No-SQL redis -spring.data.redis.host=localhost -spring.data.redis.port=6379 -spring.data.redis.repositories.enabled=false - -# kafka -spring.kafka.bootstrap-servers=localhost:9092 -spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer -spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer -spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer -spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer -spring.kafka.consumer.auto-offset-reset=earliest -spring.kafka.consumer.group-id=test-group -spring.kafka.listener.missing-topics-fatal=false - -# JPA -spring.jpa.hibernate.ddl-auto=update -spring.jpa.properties.hibernate.format_sql=true \ No newline at end of file