전체 글67 [DevOps] CICD 구축 전과정 1. VPC 만들기 요약vpc -> subnet(public*2, private*2) → internet gateway(→ attach to vpc) → route table(→ public subnet 연결) → secuity groups(→ Inbound rules) 1. VPC 만들기 => dns settings도 변경해주자. 그래야 나중에 rds 만들 수가 있다. 2. subnet 만들기만든 vpc 선택해주고 public 2개 private 2개 만들자. 가용영역은 a, c로 나눠주자! => 3. internet gateway 만들기 이름만 설정해주면 만들어진다. => 위 attach to vpc를 눌러 vpc에 연결해주자. => 4. public subnet 위해서 라우팅 테이블 만들기 현재 10.0.0.. 2024. 7. 9. [GIT] Commit Drop (실수로 secret key를 노출한 상태로 커밋을 했다면?) ec2 배포를 시도한적 있어서 yml파일에 secret key가 전부 노출되어있었다. 그걸 모르고, 커밋을 하고, push를 시도하자 푸시가 reject되며 아래와 같은 에러문구가 떴다. 오.. 깃허브가 리포지토리 rule을 어겼다고 push를 reject한 것이었다. 이걸 보고 요즘 깃허브가 보완적으로 많이 발전하고 있구나.. 새삼 느낄 수 있었다 ㅋㅋㅋ 이제 해결하러 가보자! 우선 우리는 이전에 secret key가 노출된 상태로 커밋된 내역을 지워야 한다. 1. commit id 찾기git log git log를 하면 아래와 같이 커밋 id와 기타 등등 정보가 뜬다. test-repo (test-branch)]$ git logcommit 8053f7b27 (HEAD -> main)Author: .. 2024. 7. 9. [Redis] Refresh Token Redis에 넣어보기 1. DB에 저장로그인: http://localhost:8080/oauth2/authorization/naver결과: user db에 회원 정보 저장, refreshToken db에 refresh token 저장, access token redirect(json, url)로그아웃: http://localhost:8080/users/logout헤더: access token 담아 요청결과: refreshToken db에서 refresh token 삭제 -> refresh token으로 access token 재발급 받지 못하도록 방지!!회원탈퇴: http://localhost:8080/users/me헤더: access token 담아 요청결과: user db에서 회원정보 삭제 아래 로직과 대조되는 부분만 첨.. 2024. 7. 8. [Redis] FCM Token Redis에 넣어보기 1. DB에 FCM Token 저장하는 기존 방식@PostMapping("/generate")public ApiResponse tokenToFront( @RequestBody UserReqDto userReqDto // email, username, nickname, provider) { // 1. 받은 email 가지고 회원가입 되어있는 사용자인지 판단 Boolean isMember = userService.checkMemberByEmail(userReqDto.getEmail()); // 2. jwt 생성 String accessToken = ""; String refreshToken = ""; // 3. 기존 회원인지 판별 -> 튜토리얼 때문 Stri.. 2024. 7. 8. Redis란? Remote Dictionary Server Redis; Remote Dictionary Server;1. 소개Redis는 오픈 소스 인메모리 데이터 저장소로, 주로 속도와 성능에 중점을 둔 키-값 저장소이다.데이터의 Scale out을 위해 Consistent Hashing을 활용한 분산 시스템에서 널리 사용되고 있다.특징영속성을 지원하는 In-Memory 데이터 저장소데이터를 disk에 저장할 수 있음 → 서버가 내려가더라도 disk에 저장된 데이터를 읽어서 메모리에 로딩을 함저장방식RDB(Snapshotting): 순간적으로 메모리에 있는 내용을 DISK에 전체를 옮겨담는 방식AOF(Append On File): redis의 모든 write/update 연산 자체를 모두 log 파일에 기록하는 형태읽기 성능 증대를 위한 서버 측 복제를 지원문.. 2024. 7. 8. [Spring/Java] FCM을 통해 Push 알림 보내기 프로젝트 마지막 즈음에 push 알림 기능을 추가했다. 기획 의도와 잘 맞아서 좋았지만, 개발 기간이 짧아서 다양한 방법들 중에 fcm을 선택했다. FCM이란? Firebase Cloud Messaging은 Google의 Firebase 플랫폼에서 제공하는 클라우드 메시징 서비스로, 개발자는 이를 통해 간편히 안드로이드, iOS, 웹 애플리케이션에 푸시 알림을 보낼 수 있다. 장점- Firebase 플랫폼과 통합되어 있어 설정과 사용이 간편하다. Firebase 콘솔에서 설정을 쉽게 관리할 수 있다. - 안드로이드, iOS, 웹을 포함한 여러 플랫폼에서 사용 가능하다. - Google의 인프라를 기반으로 하여, 대량의 메시지를 안정적으로 처리할 수 있다. - FCM은 무료로 제공되며, 추가 비용 없이 .. 2024. 7. 8. [Spring/Java] CORS란? 해결법은? CORS란? Cross-Origin Resource Sharing = 교차 출처 리소스 공유 정책 자세히는 추후 말하겠다. 출처(Origin)란? URL의 Protocol + Host + Port를 의미하는데, 간단히 말해선 웹 페이지나 리소스의 출처를 나타내는 개념이다. 그러면, 아무래도 보안 때문에 같은 출처끼리의 리소스를 공유하는 정책이랑 다른 출처끼리의 리소스를 공유하는 정책이 각각 존재할 것 같다는 생각이 든다. 1. SOP (Same-Origin Policy)동일 출처 정책은 웹 브라우저가 동일한 출처에서만 리소스를 공유하도록 제한하는 보안 정책이다. 기본적으로 같은 출처끼리는 리소스를 공유할 수 있도록 허용된다. 만일, 다른 출처끼리도 제약 없이 공유가 허용된다면, 해커가 개인정보를 가로챌 .. 2024. 7. 7. [Spring/Java] 동시성 제어 통한 게시물 좋아요 및 댓글 수 관리 (비관적 락, 반정규화, 세마포어) 상황게시물에 좋아요 버튼을 누르면 좋아요 수가 1씩 증가하거나 감소해야하고, 댓글을 작성하거나 삭제하면 댓글 수가 1씩 증가하거나 감소해야 했다. 그런데, 그런 요청이 있을 때마다 좋아요 댓글 수 컬럼 값을 1씩 증가하거나 1씩 감소시키게 된다면, 충돌의 위험이 있었고, 데이터 무결성에 문제가 생길 수 있었다. 그래서 충돌을 방지하여 데이터 무결성을 높이는 락을 사용해야 했다. 하지만, 동시성 처리가 많은 상황에서는 락 경합이 빈번하게 발생하여 락 대기 시간이 길어질 수 있었고, 데이터베이스의 성능이 저하될 수 있었다. 해결방법 [ 1. 별도의 테이블을 사용하여 성능 향상 ]좋아요와 댓글에 대한 테이블을 따로 만들고, 생성이 될 때마다 데이터를 하나씩 추가시키고 삭제할때마다 해당 데이터를 하니씩 삭제했다.. 2024. 7. 7. [백준/C++] #2529 부등호 (Back Tracking) 문제https://www.acmicpc.net/problem/2529 구상주어진 부등호 사이사이에 0~9 범위의 숫자를 넣어야했다. 즉, 부등호 조건에 맞는 0~9로 이루어진 순열을 만들어야 했다. 근데, sign 배열의 크기도 작고, 숫자의 범위로 0~9로 작기에 순열을 만들때 완전탐색으로 backtraking하면 될 것 이라 판단했다. 풀이 + 코드backtracking의 일반적인 기본 구조는 재귀 함수 안의 if-for문이다. for문 안에서 특정 횟수만큼의 답을 구하거나 답을 구할 수 있도록 반복하는데, for문 안에서 재귀호출을 하며 가능한 경우를 전부 따진다. if문에서는 답이 될 수 있는 조건을 충족하면 답을 따로 저장한다. 세세한 조건은 if문을 사용하는데, for문에서 재귀 돌기 전에.. 2024. 7. 7. [Sping/Java] JPQL vs QueryDSL JPQL(Java Persistence Query Language)과 QueryDSL은 둘 다 Java 애플리케이션에서 데이터베이스 쿼리를 작성하는 데 사용되지만, 접근 방식과 사용 용도에서 차이가 있다. 1. JPQL (Java Persistence Query Language) JPA의 일부로, 쿼리를 테이블이 아닌 엔티티 객체를 대상으로 작성하는 정적인 객체지향 쿼리 언어이다. JPQL은 SQL과 유사한 문법을 사용하지만, 데이터베이스 테이블 대신 Java 엔티티 객체를 다루며, 필드나 속성을 통해 데이터베이스 레코드를 조회하고 조작할 수 있다. 이를 통해 데이터베이스와의 상호작용을 객체지향적으로 처리할 수 있게 해준다.@Entitypublic class Board { @Id @Gener.. 2024. 7. 7. [Spring/Java] JPQL & Slice 객체(paging)이용하여 특정 조건의 게시물을 특정 방식으로 가져오기 Paging과 Slice 객체에 대해서 궁금하다면 이전 글을 보고오면 좋을 것 같다.https://persi0815.tistory.com/25 [Spring/Java] Paging이란? Page 객체 vs Slice 객체 (+ 코드)1. Paging이란? Paging은 대량의 데이터를 효율적으로 처리하고 사용자에게 필요한 양만큼씩 나누어 제공하는 기법이다. 데이터베이스 쿼리에서 페이징을 구현하면, 전체 데이터 집합을 작은 부분persi0815.tistory.com 1. 북마크한 게시물들을 특정 종류(type)과 정렬 방식(way)에 따라 목록 조회Controller@Operation(summary = "북마크 한 전체 게시판 목록 정보 조회 메서드", description = "북마크 한 게시판 중 ty.. 2024. 7. 7. [Spring/Java] Paging이란? Page 객체 vs Slice 객체 (+ 코드) 1. Paging이란? Paging은 대량의 데이터를 효율적으로 처리하고 사용자에게 필요한 양만큼씩 나누어 제공하는 기법이다. 데이터베이스 쿼리에서 페이징을 구현하면, 전체 데이터 집합을 작은 부분(페이지)으로 분할하여 한 번에 적은 양의 데이터만을 가져오게 된다. 이렇게 하면 메모리 사용을 줄이고, 네트워크 트래픽을 최소화하며, 사용자에게 더 빠른 응답 시간을 제공할 수 있다.2. Page 객체 vs Slice 객체두 객체 모두 Spring Data JPA에서 사용되고, 페이징 기능을 제공하지만, 약간의 차이가 있다. Page 객체전체 페이지 수, 현재 페이지 번호, 페이지 당 항목 수, 총 항목 수, 현재 페이지에 포함된 데이터 목록 등 페이징 관련 정보를 포함한다.페이지에 대한 추가 정보를 포함한다.. 2024. 7. 7. 이전 1 2 3 4 5 6 다음