[인프런 워밍업 클럽 스터디 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. 과제
3. 회고
프로젝트 배포 하는 법을 알 수 있어서 좋았고, 배포를 하면서 오류가 발생해서 한번에 되지 않아 시간이 오래 걸렸다. 리눅스에 대한 공부도 해야겠다는 생각이 들었다. 아직 미니 프로젝트를 진행하진 못했지만 배운 것을 활용해서 잘 마무리해야겠다!
댓글을 작성해보세요.