[TIL] JPA 주요 애너테이션, CompletableFuture

2025-04-08 TIL

📝 TIL (Today I Learned)
🔗 원본 이슈: #38
📅 작성일: 2025-04-08
🔄 최종 수정: 2025년 04월 09일


🍀 새롭게 배운 것

  • JPA 주요 애너테이션 10개
  • CompletableFuture
    • 비트코인 대시보드 개발 중 비동기 처리를 위해 공부했다.

1. JPA에서 자주 쓰는 애너테이션 10선

범주대표 애너테이션기능
엔티티 지정@Entity, @Table클래스 → 테이블로 매핑
필드 매핑@Id, @GeneratedValue, @Column변수 → 컬럼으로 매핑
관계 매핑@OneToOne, @OneToMany, @ManyToOne, @ManyToMany엔티티 간 관계 지정
기타@Embedded, @Embeddable, @Transient부가 설정

🧠 요약 정리표

애너테이션설명예시
@Entity테이블 매핑 객체클래스 위에
@Table테이블 이름 지정@Table(name="members")
@IdPK 설정필드 위에
@GeneratedValue자동 생성 PK 전략IDENTITY, AUTO
@Column컬럼 설정이름, 길이, null 여부 등
@TransientDB에 저장 안 됨계산용 필드 등
@ManyToOne관계 설정외래키 매핑
@JoinColumn외래키 이름 설정member_id
@EmbeddedVO 포함Address 같은 값 객체
@EnumeratedEnum 타입 저장 방식STRING 권장

2. CompletableFuture : JAVA 비동기 프로그래밍 도구

  • Spring에서 @Async와 함께 씀
    • 백그라운드에서 비동기 처리하고, 나중에 결과 받기 최적
    • 백그라운드 작업, 병렬처리, API응답 지연 없는 작업에 유용하게 활용됨
  • 기본적인 사용 예제

    •   CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
            // 백그라운드에서 실행될 코드
            return "Hello, Sungwoo!";
        });
      
        future.thenAccept(result -> {
            System.out.println("결과: " + result);
        });
      
      • supplyAsync() : 비동기 작업 시작
      • thenAccept() : 결과가 오면 처리

🍎 오늘의 문제 상황

  • 비트코인 대시보드의 첫 페이지 로딩이 너무 느려서 render배포에 실패했다.
    • 복잡한 API 호출이 문제가 된 것 같다.
    • CompletableFuture를 사용해서 병렬처리를 할까 했지만 DB에 API 응답들을 저장하여 API호출을 줄이는 방법을 선택했다.

🦄 느낀 점

  • API를 연결하는게 문제가 아니라, 어떤 로직으로 어떻게 데이터를 처리할 것인지가 중요한 것 같다.