[인프런 워밍업 클럽 0기] 3주차 발자국

[인프런 워밍업 클럽 0기] 3주차 발자국

이번 주에 배운 내용

[JPA에서 연관관계 맵핑하기]

create table user (
    id bigint auto_increment,
    name varchar(25),
    age int,
    primary key (id)
)
create table user_loan_history (
    id bigint auto_increment,
    user_id bigint,
    book_name varchar(255),
    is_return tinyint(1),
    primary key (id)
)

user 테이블과 user_loan_history를 보면, user_loan_history 테이블은 user를 알고 있지만 (user_id 컬럼), user 테이블은 user_loan_history 테이블을 알지 못한다. 즉, 관계의 주도권을 user_loan_history 테이블이 갖고 있는 것이다. 이러한 사실을 JPA 기술을 이용해 반영한다.

 

// User.java
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
private final List<CheckoutHistory> checkoutHistories = new ArrayList<>();

// UserLoanHistory.java
@ManyToOne
private User user;

주도권이 없는 쪽에서 @OneToMany와 같은 연관관계 어노테이션을 선언한다.

 

  • mappedBy = "user"라고 작성하면, JPA가 UserLoanHistory의 user 필드를 연관관계의 주인으로 인식한다. 연관관계의 주인이 설정되어야, 이를 기준으로 테이블이 연결된 채 DB 데이터가 제대로 저장된다.

  • cascade 옵션을 사용하면 User가 삭제 및 저장될 때 연결된 UserLoanHistory도 같이 처리된다.

  • orphanRemoval 옵션을 사용하면 연관관계가 끊어진 데이터를 자동으로 제거해준다.

 

[배포]

우리 컴퓨터 대신 외부 컴퓨터 (보통 리눅스 OS 사용)를 가져와 코드를 옮기고, 스프링, MySQL 등을 설치한다면 외부 컴퓨터는 필요한 프로그램만 실행할 것이며, 이용자들은 24시간 우리의 애플리케이션에 접속할 수 있다. 이 과정을 배포라 한다.

 

spring:
  config:
    activate:
      on-profile: local
  datasource:
    url: "jdbc:h2:mem:library;MODE=MYSQL;NON_KEYWORDS=USER"
    # 생략

---
spring:
  config:
    activate:
      on-profile: dev
  datasource:
    url: "jdbc:mysql://localhost/library"
    # 생략

똑같은 서버 코드를 실행시키되 실행 환경에 따라 설정을 다르게 하고 싶다면 profile을 이용해보자. application.yml 파일에 예제처럼 작성하면, local profile에선 H2 DB를 사용하고 dev profile에선 MySQL DB를 사용하게 된다.

 

AWS의 EC2 서비스를 이용해 외부 컴퓨터를 빌려보자. EC2는 Elastic Compute Cloud의 약자로, 탄력적인 방식으로 원격 컴퓨터를 사용할 수 있음을 뜻한다. 이때 우리가 빌린 컴퓨터를 AWS에선 인스턴스라고 일컫는다.

 

인스턴스에서 애플리케이션을 실행하기 위해선 리눅스 명령어를 배울 필요가 있다. 주요 명령어는 다음과 같다.

 

  • mkdir / rmdir: 디렉토리 생성 / 삭제

  • cd: 현재 위치 변경

  • pwd: 현재 위치 확인

  • ls: 현재 위치에 있는 폴더와 파일 확인 (ls -l로 하면 더 자세히 볼 수 있음)

 

미니 프로젝트

출퇴근 사내 시스템을 만드는 미션으로, 단계별로 요구되는 기능을 구현해야 한다. 1단계에선 팀 등록, 직원 등록, 팀 조회, 직원 조회 기능을 구현해야 한다.

 

회고

드디어 목표로 했던 서버 배포를 했습니다. 알찬 강의, 아낌없이 주는 선생님, 함께 공부하는 사람들이 있어 커리큘럼을 완수할 수 있었습니다. 하지만 이제 시작이겠죠? 배포 자동화라든지 AWS에는 EC2 말고 어떤 서비스가 있는지를 좀 더 배워야 할 것 같습니다.

 

3주 동안 함께 공부한 여러분들을 존중하고 존경하며 여기서 마무리하도록 하겠습니다.

댓글을 작성해보세요.