[인프런 워밍업 클럽 스터디 1기] 세번째 발자국

[인프런 워밍업 클럽 스터디 1기] 세번째 발자국

1. 3주차 학습한 내용

 

[10일차 - 객체지향과 JPA 연관관계]

1. JPA 연관관계에 대한 추가적인 기능들

1:1 관계 - @OneToOne

  • 예) 한 사람은 한 개의 실거주 주소만을 갖고 있다.

  • @OneToOne 어노테이션을 사용한다.

  • 연관관계 주인이 아닌 쪽에 mappedBy 옵션을 사용한다.

연관관계의 주인 효과

  • 객체가 연결 기준이 된다.

  • 상대 테이블을 참조하고 있으면 연관관계의 주인이다.

  • 연관관계 주인이 아니면 mappedBy를 사용한다.

  • 연관관계의 주인의 setter가 사용되어야만 테이블을 연결한다.

연관관계의 사용 시 주의해야 할 점

  • 트랜잭션이 끝나지 않았을 때, 한 쪽만 연결해두면 반대 쪽은 알 수 없다.

     

    > setter 한번에 둘이 같이 이어주면 된다.

N:1 관계 - @ManyToOne과 @OneToMany

  • @ManyToOne을 단방향으로만 사용할 수도 있다.

  • cascade 옵션 : 한 객체가 저장되거나 삭제될 때, 연결되어 있는 객체도 함께 저장되거나 삭제되는 옵션이다.

  • orphanRemoval 옵션 : 객체간의 관계가 끊어진 데이터를 자동으로 삭제하는 옵션이다.

    • 실제 DB에서 데이터를 삭제하고 싶을 때 사용한다.

@JoinColumn

  • 연관관계의 주인이 활용할 수 있는 어노테이션을 의미한다.

  • 필드의 이름, null여부, 유일성 여부, 업데이트 여부 등을 지정한다.

N:M 관계 - @ManyToMany

  • 구조가 복잡하고, 테이블이 직관적으로 매핑되지 않아 사용하지 않는 것을 권장한다.

도메인 계층에 비즈니스 로직이 들어갔다?

  • BookService는 UserLoanHistory 객체를 직접 사용하지 않도록 변경하였다.

  • User와 UserLoanHistory, 2개의 객체가 서로 협력하도록 변경하였다. 이를 도메인 계층에 비즈니스 로직이 들어갔다라고 표현한다.

2. 영속성 컨텍스트의 4번째 특징

  • 지연 로딩(Lazy Loading) : 연결되어 있는 객체를 꼭 필요한 순간에만 가져온다.

  • @OneToMAny의 fetch 옵션이다.(기본적으로 Lazy로 설정되어 있다.)

연관관계를 사용하면 무엇이 좋을까?

  • 각자의 역할에 집중하게 된다. (=응집성)

  • 새로운 개발자가 코드를 읽을 때 이해하기 쉬워진다.

  • 테스트 코드 작성이 쉬워진다.

연관관계를 사용하는 것이 항상 좋을까?

  • 지나치게 사용하면 성능 상의 문제가 생길 수도 있고, 도메인 간의 복잡한 연결로 인해 시스템을 파악하기 어려워질 수 있다.

  • 비즈니스 요구사항, 기술적인 요구사항, 도메인 아키텍쳐 등 여러 부분을 고민해서 연관관계 사용을 선택해야 한다.

[11일차 - 기본적인 배포를 위한 준비]

1. 배포란?

  • 최종 사용자에게 SW를 전달하는 과정을 의미한다.

  • 전용 컴퓨터(AWS)에 우리의 서버를 옮겨 실행시키는 것이다.

최종 사용자가 우리의 서버를 쓸 수 있는 방법

  • 전용 컴퓨터에 코드를 옮기고 스프링, MYSQL 등을 설치해 사용자가 접속하게 한다.

AWS에서 컴퓨터를 빌릴 때 알아둬야 할 점

컴퓨터를 살 때 운영체제도 같이 선택한다.

  • 윈도우, 리눅스, 맥OS

2. profile과 H2 DB

profile 적용

  • 스프링 서버를 실행할 때 db와 같은 설정들을 코드 변경 없이 제어할 수 있는 방법

spring:
  config:
    activate:
      on-profile: local
  datasource:
    url: "jdbc:h2:mem:library;MODE=MYSQL;NON_KEYWORDS=USER"
    username: "sa"
    password: ""
    driver-class-name: org.h2.Driver
  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        show_sql: true
        format_sql: true
        dialect: org.hibernate.dialect.H2Dialect
  h2:
    console:
      enabled: true
      path: /h2-console

---
spring:
  config:
    activate:
      on-profile: dev
  datasource:
    url: "jdbc:mysql://localhost/library"
    username: "root"
    password: ""
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: none
    properties:
      hibernate:
        show_sql: true
        format_sql: true
        dialect: org.hibernate.dialect.MySQL8Dialect

3. git과 github

git이란?

  • 코드를 쉽게 관리할 수 있도록 해주는 버전 관리 프로그램을 의미한다.

  • 버전 A, 버전 B를 쉽게 만들 수 있게 해주고 여러 버전을 쉽게 취합이 가능하다.

github이란?

  • git으로 관리되는 프로젝트의 코드가 저장되는 원격 저장소를 의미한다.

왜 github에 코드를 저장하는걸까?

  • 컴퓨터의 있는 소스코드가 소실될 수 있기 때문에 코드를 원격의 저장하는 것이다.

  • 배포할 때도 활용한다.

4. git 기초 사용법

git을 활용해서 github 프로젝트 업로드하기

  • github 사이트 접속

  • github 저장소 생성한다.(Create Repository)

  • IntelliJ Terminal을 이용해 git 명령어 입력

  • git 프로젝트 시작하기 / git init : 이 프로젝트를 이제 git이 관리하겠다는 의미

  • git 프로젝트의 github 저장소 설정하기 / git remote add origin [각자의 주소]

  • 기초 셋팅 완료

git 기초 명령어

  • 코드를 git에 추가할 때 명령어

    • git add.

  • git에 메세지 붙이는 명령어

    • git commit-m "메세지"

  • git을 github에 보내기

    • git push

  • 현재 상황 확인하기

    • git status

  • 파일들 빼주기

    • git reset

5. AWS의 EC2 사용하기

회원가입

  • AWS 계정 생성(회원가입) - 회원정보/결제정보/본인인증/Support 플랜 (무료) 선택

로그인

  • 루트 사용자 선택 - 계정입력 후 로그인

콘솔 홈

  • 지역(서버) 서울로 설정

  • 서비스에서 EC2 검색 및 클릭 - 리소스 : 인스턴스(빌린 컴퓨터) 클릭

  • 인스턴스 시작 클릭 - 이름 및 태그 : 이름 입력 - 아마존 리눅스 선택 - 인스턴스 유형(빌린 컴퓨터의 사양) CPU 및 메모리 t2.micro 선택 - 키 페어 : 새 키 페어 생성 - 키 페어 이름 입력 수 생성 - 네트워크 설정 : 보안 그룹 생성 선택 - 스토리지 구성(용량) 8gib - 설정 후 인스턴스 시작 클릭

  • 인스턴스 목록을 보면 실행 중인 서버가 확인된다.

     

[12일차 - AWS와 EC2 배포]

1. EC2에 접속해 리눅스 명령어 다뤄보기

다운로드 받은 키 페어를 이용하는 방법

  • 우리가 접속하려는 EC2의 IP 주소 : 퍼블릭 IPv4 주소

  • 이전 시간에 다운로드 받았던 키 페어

  • 접속하기 위한 프로그램(git CLI 또는 Mac treminal)

기본적인 리눅스 명령어

  • mkdir : 폴더를 만드는 명령어

  • ls : 현재 위치에서 폴더 또는 파일을 확인하는 명령어

  • cd : 폴더 안으로 들어가는 명령어

  • pwd : 현재 위치를 확인하는 명령어


2. 과제

여섯 번째 과제(6일차)

일곱 번째 과제(7일차)


3. 회고

프로젝트 배포 하는 법을 알 수 있어서 좋았고, 배포를 하면서 오류가 발생해서 한번에 되지 않아 시간이 오래 걸렸다. 리눅스에 대한 공부도 해야겠다는 생각이 들었다. 아직 미니 프로젝트를 진행하진 못했지만 배운 것을 활용해서 잘 마무리해야겠다!

댓글을 작성해보세요.

채널톡 아이콘