[Hakple] JPA N+1 문제와 좋아요 상태 조회 성능 최적화
·
Project/HakPle
게시판의 댓글을 불러오는 api -> 로그인 된 사용자이면 댓글에 좋아요 누른 상태인지 아닌지 여부 포함 해야함문제 1. N+1 쿼리List comments = board.getComments();위 코드 쓰면 JPA가게시판 한 번 조회댓글 10개면 댓글 10번 따로 쿼리 날림총 11번 쿼리 나감 (이게 바로 N+1 문제)✅ 해결 1. Fetch Join 써서 쿼리 1번으로 끝냄@Query("""SELECT c FROM Comment cJOIN FETCH c.userWHERE c.board.id = :boardId AND c.status = :statusORDER BY c.creationTime ASC""")List findWithUserByBoardIdAndStatus(Long boardId, Stat..
[PRMemo] GitHub Webhook vs 배치 프로그램
·
Project
프로젝트에서 사용자의 깃허브 레포지토리, PR목록을 서버로 자동 동기화 해야하는데 Webhook과 배치 중 어느 쪽이 더 적절할지 결정이 필요했음1. Webhook / 배치 프로그램 차이점항목Webhook배치 프로그램작동 방식GitHub 이벤트 발생 시 즉시 알림주기적으로 서버에서 GitHub API 호출트리거 조건PR 생성, push, comment 등설정된 시간마다 무조건 실행실시간성✅ 매우 뛰어남❌ 느릴 수 있음API 호출 횟수필요할 때만반복적으로 호출 (비효율적 가능성 있음)GitHub 설정 필요✅ Webhook 수동 등록❌ 없음구현 난이도서버 수신기 필요 (POST endpoint)비교적 간단 (스케줄러만 설정하면 됨) 2. 실제 사용 시나리오이 서비스는 사용자가 GitHub OAuth 로그인 ..
프로젝트 회고 : Juseyo - 재고 관리 플랫폼
·
Project
1. 프로젝트 개요서비스명: Juseyo기간: 2025.05.02 ~ 2025.06.02팀 구성: 이름 역할 GitHub 황지윤PM GitHub 장지현개발 팀장 GitHub 홍보람팀원 GitHub 근하람팀원 GitHub 이현석팀원 GitHub 한 줄 소개: 기업별 자산과 재고를 효율적으로 관리하고 요청·승인 프로세스를 자동화하는 재고 관리 플랫폼입니다.🌟 주요 특징부서 및 역할(Role) 기반 권한 관리요청 → 승인 → 반납 흐름 구조실시간 상태 추적 및 Excel 입출력SSE 기반 알림 & STOMP 기반 실시간 채팅사용자 맞춤 비품 추천 기능 구현2. 사용 기술 스택FrontendReact, Next.js, TypeScriptBackendSpring Boot, Spring Security, MyS..
Vercel 배포 next.config.js 설정
·
Project/JUSEYO
VECEL 배포 과정은 매우 오류가 많다 (깐깐함)오류 방지을 위해 next.config.js에 미리 설정// next.config.js/** @type {import('next').NextConfig} */const nextConfig = { images: { // 여기에 본인이 실제 쓰는 S3 버킷 호스트명을 모두 나열하세요. domains: [ "example-bucket.s3.ap-northeast-2.amazonaws.com", "juseyo.s3.ap-northeast-2.amazonaws.com", // ...(추가 버킷이 있으면 계속) ], }, eslint: { // 빌드 중에 ESLint 검사를 건너뜁니다 ignoreDuring..
NPM 설정
·
Project/JUSEYO
1.nginx proxy manager 관리콘솔에 접속http://:81초기 계정아이디 : admin@example.com비번 : changeme 2.NPM으로 리버스 프록시DOMAIN NAMES에는 백엔드 서버 주소 컨테이너 안에서 사용하므로 컨테이너 이름과 백엔드 서버 포트 번호 입력 3.NPM으로 HTTPS 설정
도메인 등록
·
Project/JUSEYO
1. dnszi 회원 가입2. 가비아에서 도매인 구매 1개의 도메인을 구매하면 www.user.site, api.user.site, blog.user.site 와 같이 여러 도메인을 사용할 수 있다. 도메인 구매시 DNS 서버를 dnszi 로 설정네임서버(Name Server) : 도메인 이름을 IP 주소로 바꿔주는 서버 3. vercel 에서 배포4. DNSZI 에서 레코드 등록 A Record : 도메인을 아이피로 직통 연결 접속이 빠름CName : 도메인을 별명과 연결 iP가 유동적일때프론트 서버 CNAME 등록 vercel -> project settings -> domains -> add CNAME 값 입력 백엔드 서버 ( api 서버) A Record 등록
EC2 배포 과정 (테라 폼&깃 허브 액션)
·
Project/JUSEYO
EC2→가상의 컴퓨터를 빌려줌 ex) 피시방 컴퓨터VPC→공간을 빌려줌 정확히 말하면 네트워크 ex) 피시방IAM → 루트 계정을 이용하면 탈취 위험이 크므로 정책(권한)을 위임한 계정, 공유 작업 시 사용 AWS GUI (콘솔) : 일일이 작업을 클릭으로 수행AWS CLI : 커맨드 작업어로 작업을 수행, 작업 효율 좋음, 설치 필요,권한 인증 필요 테라폼 : AWS 쉽게 사용할 수 있게 해줌 (AWS CLI 명령어를 학습하는 것에 대한 어려움)A(클라이언트) → B(테라폼) → C(AWS CLI) → D(AWS) IAM 액세스 키: AWS CLI 에서 내가 누구인지 증명하는 키(권한 인증)IAM 액세스 키를 이용해서 AWS CLI 에서 권한 인증함 먼저 테라폼을 이용해서 AWS 자원들을 쉽게 생성한..
프로젝트 회고: Hakple – 학원생 커뮤니티 플랫폼
·
Project
1. 프로젝트 개요프로젝트명: Hakple기간: 2025.04.03 ~ 2025.05.01팀 구성:이름 역할 GitHub 연락처박주호 (팀장)백엔드(팀장)@JAWSP@juhpark (Discord)고희은백엔드@heeeun-ko@heeeun_k (Discord)도상원백엔드@dark2138@dodoriaseu (Discord)황지윤백엔드@jiyuuuuun@jy3317 (Discord)김명수 (부팀장)백엔드(부팀장)@Kim-ms527@kim.m.s (Discord)한줄 소개:학원 수강생들이 자유롭게 소통하고 정보를 공유할 수 있는 커뮤니티 플랫폼.2. 사용 기술 스택BackendJava 21, Spring BootFrontendJavaScript, React, Next.jsDatabaseMySQL, Redis..
@MappedSuperclass - 공통 엔티티 베이스 클래스 만들기
·
Project/HakPle
1. @MappedSuperclassJPA의 공통 엔티티 속성을 정의할 때 사용하는 애너테이션이 클래스를 직접 엔티티 테이블로 만들지 않고,상속받는 엔티티 클래스가 이 클래스의 필드를 테이블에 포함시키도록 함.@MappedSuperclasspublic abstract class BaseEntity { @CreatedDate private LocalDateTime createdAt; @LastModifiedDate private LocalDateTime updatedAt;} 사용 이유모든 엔티티에서 createdAt, updatedAt 같은 필드를 반복하지 않고,상속을 통해 공통 속성을 쉽게 재사용.2. @SuperBuilderLombok의 빌더 패턴 애너테이션으로, 상속 관계에서 빌..
Spring Boot application.yml 설정
·
Project/HakPle
다양한 실행 환경(dev, prod 등)에 따라 설정을 다르게 적용할 수 있도록 구성 application.yml (기본/공통 설정)모든 환경에서 공통적으로 적용되는 설정을 담는 기본 파일서버 포트 설정 (port: 8090)공통 JPA 설정 (DDL 자동 업데이트, SQL 출력)공통 로그 레벨custom.site의 기본값 설정 (프로파일에 따라 동적으로 바뀜)spring.profiles.active: dev → 기본 실행 환경은 dev로 설정됨# 공통 설정 파일server: port: 8090 # 서버 포트 설정spring: output: ansi: enabled: ALWAYS # 콘솔 로그에 색상 출력 profiles: active: dev # 현재 활성화된 프..