본문 바로가기

반응형

전체 글

(133)
클린코드 3장 정리 - 작을 수록 좋은 함수! 함수는 작은 단위로 만들 것. 함수가 길어질수록, 해당 함수를 이해하는 것은 어려워진다. 따라서, 함수는 최대한 작고 간결한 단위로 분리해서 만들자. (if/else, while 등에서 "{}"를 생략해 한줄로 작성할 수 있을 정도로...) 하나의 함수는 하나의 기능만 하도록 하나의 함수에서 여러 기능을 수행하도록 코딩하면, 함수의 크기가 커지고, 이해하기도 어려워진다. 함수는 세로 지향적으로 작성 가로로 긴 함수보다는 세로로 이어지는 함수가 가독성이 더 좋다! 함수의 인수는 적게! 함수의 인자의 개수는 적을수록, 가독성이 좋아진다. 3개의 인자도 많고, 부득이한 경우를 제외하고 4개 이상의 인자를 받는 함수는 지양하ㅓ 1개 이하의 인수를 지향하자! 명령과 조회를 구분하고 분리하자
JPA - 연관관계 주인(feat. mappedBy) jpa에서는 양방향 연관관계를 설정할 때, 외래키를 관리하는 "연관관계의 주인"을 설정해주어야 한다. 그리고, 연관관계 주인만이 외래키를 관리(등록, 수정)할 수 있다. (이때, 주인이 아닌 쪽은 읽기만 가능하다.) 연관관계 주인 설정 연관관계의 주인이 아닌쪽에 mappedBy 옵션을 넣어주면 된다. 아래는 멤버(N) - 팀(1)의 관계에서의 코드이다. //Member @Entity public class Member { ... @ManyToOne //Member는 연관관계의 주인이다.= private Team team; ... } //Team @Entity public class Team{ ... @OneToMany (mappedBy = "team") // Team은 Member에 의해 매핑되어 있다!..
책 정리, 클린코드 CH.2 이름을 명확히 짓자! 변수/함수의 이름들은 주석없이 아래 내용들을 알 수 있어야 한다. 존재 이유(역할) 수행 기능 사용 방법 나쁜 예시 int d; //경과 시간 올바른 예시 int elapsedTimeInDays; int daysSinceCreation; int daysSinscemodification; ... 이름은 항상 명확하게 짓자! 자료구조 이름을 이름에 넣지 말자! 만약, 계좌 정보들을 가진 List가 있을 경우, accountList라고 짓곤 한다. 하지만, 자료구조 이름인 List를 빼고, accounts 처럼 작명하자 연속된 숫자, 불용어는 피하자! a1, a2, a3와 같은 연속된 숫자를 이용한 변수들은 아무런 정보도 제공하지 않는 의미없는 이름이다. Info, data 와 ..
영속성 컨텍스트! JPA의 동작 방식 EntityManagerFactory에서 고객 요청에 대한 EntityManager 생성 Request1 ➡️ EntityManagerFactory에서 EntityManager1 생성 Request2 ➡️ EntityManagerFactory에서 EntityManager2 생성 영속성 컨텍스트란? Entity Manager = 영속성 컨텍스트 Entity 객체들을 관리 및 영구 저장하는 환경(논리적인 영역) 영속성 컨텍스트의 역할 Entity 객체의 생명주기 관리 데이터베이스와의 상호작용을 추상화 ➡️ 개발자가 DB와 직접 상호작용 할 필요가 없음 Entity의 영속성을 보장 Entity 객체의 변경을 감지 DB와 동기화 담당 EntityManager를 통해 영속성 컨텍스트에 접근 E..
자바의 트랜잭션 자바에서 트랜잭션은 아래의 과정으로 수행된다. EntityManagerFactory 생성 EntityManagerFactory로 EntityManager 생성 EntityManager로부터 트랜잭션 호출 트랜잭션의 4단계 수행 (https://dogandbird-foot.tistory.com/101) import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; public class Main { public static void main(String[] args) {..
[DB] 트랜잭션(Transaction)이란? 데이터베이스 트랜잭션? 데이터베이스에서 상호작용의 단위이다. 각 트랜잭션은 ACID 1.원자성(Atomicity), 2.일관성(Consistency), 3.독립성(Isolation), 4.영구성(Durability)를 보장한다. (하지만, 실제로는 성능향상을 위해 ACID의 각 특성들이 완화되곤 한다.) 트랜잭션의 실행 단계 시작 단계(Begin) 트랜잭션의 시작을 선언 작업 수행 단계 (Perform Actions / Execute several Queries) 데이터베이스에서 읽기/쓰기 할 쿼리들을 실행 이 단계에서는 아직 DB에 반영되지 않음! 완료 단계 (Commit) 작업 수행 단계에서 모든 작업이 성공적으로 수행되, 트랜잭션을 완료하고 변경된 데이터들을 DB에 영구적으로 반영 롤백 단계 (Ro..
엔티티 매니저와 영속성 컨텍스트 정리 엔티티 매니저란? (Entity Manager) 데이터 베이스에 접근하기 위해 사용되는 객체 ➡️ 엔티티 매니저를 통해 DB 조회 / 등록 / 수정 / 삭제 작업 수행 엔티티 매니저 종류 애플리케이션에서 관리하는 엔티티 매니저 애플리케이션을 시작하면서 EntityManagerFactory를 초기화 필요할 때, Entity Manager 생성 후 사용 사용이 끝난 Entity Manager는 close() 사용이 끝난 EM은 바로바로 **close 해주지 않으면 자원 누수 발생** 가능 컨테이너(JEE)에서 관리하는 엔티티 매니저 컨테이너가 제공하는 EntityManager를 사용(@PersistenceContext) 영속성 컨텍스트(Persistence Context) 일종의 캐시 저장소 엔티티 타입, ..
1. JPA의 등장 HTML 삽입 미리보기할 수 없는 소스 SQL 중심 개발의 문제점 무수히 반복되는 쿼리문 ➡️ 쿼리문 작성하는데 소요하는 시간이 길다. 객체 ➡️ SQL 변환 ➡️ RDB 상속의 어려움 RDB에 상속관계의 데이터를 저장할 경우, 상위 객체와 하위 객체 데이터 모두 필요하기 때문에, join으로 각 객체들을 생성해야한다. ➡️상속 관계를 안쓰게 된다. 개발 언어와 SQL 간 차이 객체 : 참조 (Member.getTeam()) SQL 테이블 : 외래 키(JOIN ON M.TEAM_ID = T.TEAM_ID) 객체에서 getTeam()과 같은 자신과 연관된 객체를 테이블에 저장할 수 없고, 팀의 ID값을 저장 후 getTeamId와 같은 형식으로 개발하게 된다.(테이블에는 TEAM_ID 값으로 저장해야한다...