본문 바로가기

전체 글

(54)
Java의 GC 방식, GC 튜닝 목차 JVM의 구성Method Area(메서드 영역 = Metaspace): 클래스 메타데이터(클래스 정의, 메서드, 상수 풀 등)를 저장하는 영역, JVM에서 실행되는 모든 클래스의 메타데이터를 저장합니다.  Heap(힙 영역): 객체들이 할당되는 동적 메모리 영역, 자바 프로그램에서 생성된 모든 객체는 힙에 저장됩니다.  Stack(스택 영역): 메서드 호출 시 지역 변수와 매개변수를 저장하는 메모리 영역, 각 스레드는 자신만의 스택을 가지고 있습니다. 메서드 호출이 끝나면, 해당 메서드의 스택 프레임이 제거됩니다. PC Register(프로그램 카운터 레지스터): 각 스레드가 실행 중인 현재 명령어의 주소를 저장하는 영역, 각 스레드는 자신의 PC Register를 가지고 있습니다. Native M..
[스프링부트] FCM (Firebase Cloud Messaging) - bulk + 비동기 전송 multicast() 메소드를 사용해서 여러 사용자에게 푸시 알림을 전송하는 로직에서 오류 발생. . // (마케팅 수신동의한 멤버) 전체 알림 전송 public void sendBulkMarketingNotification(MessagePushRequest request) { List agreedMembers = consentService.findAllMarketingAgreedMember(); List targetTokens = fcmTokenRepository.findTokensByMemberIds(agreedMembers); // 토큰이 없을 경우 처리 if (targetTokens.isEmpty()) { System.ou..
AWS 단일 서버 설정 (Docker) - 2편 ⚙️ 개발 환경Mac OSAWS EC2 → UbuntuSpring bootJava 17Gradle   jar파일 생성    로컬에 Docker 설치Mac OS는 Homebrew를 이용해 설치brew install --cask docker 도커 버전 확인yeonbin@yeonbinui-MacBookPro common-module % docker --versionDocker version 27.2.0, build 3ab4256  Docker 레포지토리 생성 Docker 로그인 yeonbin@yeonbinui-MacBookPro common-module % docker loginUSING WEB BASED LOGINTo sign in with credentials on the command line, use ..
AWS 단일 서버 설정 (Load Balancer, SSL) - 1편 프론트: module-common에 대해 테스트를 원해요 !! API 명세서 작성해주세요 !! → 기존의 멀티 모듈에서 기본 기능에 대해서만 분리하여 단일 서버에 올리고 Swagger를 통해 API 공유 예정  이런 식으로 만들어봅시다~!(이 후에 서버 더 추가할거라 미리 로드 밸런서 넣었음!!)1) EC2 생성     보안 그룹 설정-SSH - 22번 포트-HTTP - 80번 포트-HTTPS - 443번 포트 (0.0.0.0/0)   인스턴스 시작  2) Route 53 통해 도메인 연결     트래픽 라우팅 대상 4개의 주소 기억 → 레코드 생성 값 필드에 아까 생성했던 탄력적 IP(EIP) 입력 → 레코드 생성 EC2 Elastic IP를 가진 레코드 생성 완료  가비아에 해당 도메인 설정 → 호스..
[스프링부트] FCM (Firebase Cloud Messaging) - 개별 전송 Firebase는 Google이 제공하는 모바일 및 웹 애플리케이션 개발 플랫폼으로, 다음과 같은 다양한 기능을 제공합니다:실시간 데이터베이스: 클라우드에서 실시간으로 데이터를 저장하고 동기화할 수 있는 NoSQL 데이터베이스입니다.인증: 사용자 인증을 간편하게 처리할 수 있는 다양한 인증 방법을 지원합니다.호스팅: 정적 웹 사이트 및 앱을 배포하고 호스팅할 수 있는 기능을 제공합니다.Analytics: 사용자 행동 분석 및 앱 성과를 측정할 수 있는 도구입니다.Storage: 파일을 안전하게 저장하고 관리할 수 있는 클라우드 스토리지 서비스입니다.  FCM (Firebase Cloud Messaging)은 Firebase의 일부로, 다음과 같은 기능을 제공합니다:푸시 알림: 앱 사용자에게 실시간으로 푸..
[스프링부트] 마케팅 수신 동의 멤버 조회, @Cache- [선택 약관 수신 동의]- 마케팅 수신 동의와 시스템 수신 동의의 변경(수신O → 수신X or 수신X → 수신O)은 DB에 남아야한다.- 알림 구현 시 필요한 마케팅 수신 동의 멤버 조회의 기능 최적화 1) 마케팅 수신 동의 여부 추가 마케팅 수신 동의 테이블: 수신 동의와 수신 철회의 날짜값을 다른 컬럼으로 설정할까 고민했지만 이 후에 멤버의 최신 MarketingConsent를 가지고 오는 로직에서 복잡성이 증가할 것 같아 하나의 컬럼으로 설정하였다.@NoArgsConstructor@Getter@Entity@Table(name = "marketing_consent")public class MarketingConsent { @Id @Column(name = "marketing_consent_..
[스프링부트] 필수 약관 - Native Query 요구사항1) 회원가입 시 User는 필수 약관 동의를 동의하지 않으면 가입할 수 없다.2) 약관의 최초 생성 일자만 남기면 된다. (약관의 수정 일자는 저장하지 않아도 된다.)3) 필수 약관 생성 또는 수정 시, 약관에 따라 User에게 동의를 구하지 않고 동의로 체크한다 .4) 이 때, 공지사항은 약관 생성 또는 수정이 반영되기 이전에 관리자가 직접 게시한다. 1) 필수 약관 생성 Entity 생성[module-common & module-admin] → TermsCondition@Entity@NoArgsConstructor@Table(name = "terms_condition")public class TermsCondition { @Id @Column(name = "terms_conditi..
[스프링부트] JPA Specification 이용한 멤버 조회 구현 ※ 어드민 기능: Member 조회1. 기간 설정 (생일, 가입일)2. 필터링 조건 설정 (MemberId, 이메일, 닉네임, 생년월일, 성별, 권한, 임신 유무, 흡연 유무, 고혈압 유무, 당뇨병 유무)→ Member 객체 (MemberId, 이메일, 닉네임, 생년월일, 성별, 권한), Profile 객체 (임신 유무, 흡연 유무, 고혈압 유무, 당뇨병 유무)→ Profile은 메인 프로필만 사용한다. (추가 프로필은 사용 X)→ 이메일, 닉네임은 대소문자를 구분하지 않는다.조건이 두가지만 들어가서 필터링 자체는 간단하다. QueryDsl보다는 JPA Specification이 더 적합하다.  JPA SpecificationJPA Specification은 JPA의 Criteria API를 기반으로 하..