본문 바로가기

분류 전체보기510

운영체제 - 2.메모리 보호되어 있는 글 입니다. 2022. 9. 21.
연관 관계가 필요한 이유 연관관계가 필요한 이유 : 협력 공동체를 만들 수 없다. Member.class - 현재 teamId 를 Long 타입으로 가지고 있다. @Entity public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; @Column(name = "username") private String name; @Column(name = "team_id") private Long teamId; Team.class @Entity public class Team { @Id @GeneratedValue @Column(name = "team_id") private Long id; private String name; 객체를 테이블에.. 2022. 9. 21.
유효성 검사(Validation) 유효성 검사 / 데이터 검증 (Validation) - 서비스의 비즈니스 로직이 옳바르게 동작하기 위해 사용되는 데이터에 대한 사점 검증하는 작업 - 데이터의 검증은 여러 계층에서 발생 - 데이터에 대해 의도한 형식의 값이 제대로 들어오는지에 대해 체크하는 과정 일반적인 Validation 은 문제가 많았다. 어플리에킹션 전체적으로 분산이 되어있었고, 코드의 중복이 심하고, 비즈니스 로직에 섞여 추적이 어려웠다. 이런 문제를 해결하기 위해 Bean Validation 프레임워크가 제공되었다. 어노테이션을 통해 다양한 데이터를 검증할 수 있다. 어노테이션 설명 @Size 문자의 길이 조건 @NotNull null 값 불가 @NotEmpty @NotNull + "" 값 불가 @NotBlank @NotEmpt.. 2022. 9. 21.
Logback 설정 + 테스트 - 로그에 특정 레벨을 설정할 수 있다. 1. Trace 2. Debug 3. Info 4. Warn 5. Error 로깅을 하는 이유? - 실운영과 테스트 상황에서 각각 다른 출력 레벨을 설정하여 로그를 확인 가능 - 출력 방식에 대해 설정가능 - 설정 파일을 일정 시간마다 스캔하여 어플리케이션 중단 없이 설정 변경 가능 - 별도의 프로그램없이 자체적으로 로그 압축 지원 - 로그 보관 기간 설정 가능 설정방법 ( xml 파일 ) - logback-spring.xml 파일 참조하는 것이 일반적 appender : Log의 형태 및 어디에 출력할지 설정하기 위한 영역 - ConsoleAppender : 콘솔에 로그를 출력 - FileAppender : 파일에 로그를 저장 - RollingFileAppend.. 2022. 9. 21.
필드와 컬럼 매핑 필드에 컬럼 매핑을 통해 DB 에 제약조건을 줄 수 있다. * JPA 의 실행 로직에는 영향을 주지 않으며, DDL을 자동생성 할 때만 사용한다 예로 들어보자 @Entity public class Member { @Id private Long id; @Column(name = "name") private String username; private Integer age; @Enumerated(EnumType.STRING) private RoleType roleType; @Temporal(TemporalType.TIMESTAMP) private Date createdDate; @Temporal(TemporalType.TIMESTAMP) private Date lastModifiedDate; @Lob pri.. 2022. 9. 20.
데이터베이스 스키마 자동 생성 DDL ( Data Definition Language ) : 데이터 정의어 - 데이터를 생성하거나 수정, 삭제 등 데이터의 전체 골격을 결정한다 - JPA 를 사용 및 @Entity를 붙여주면 DDL을 애플리케이션 실행 시점에 자동으로 생성한다. @Entity public class Member { @Id private Long id; @Column(name = "name") private String username; private Integer age; @Enumerated(EnumType.STRING) private RoleType roleType; @Temporal(TemporalType.TIMESTAMP) private Date createdDate; @Temporal(TemporalType... 2022. 9. 20.
객체와 테이블 매핑 객체와 테이블을 매핑하기 위해서는 @Entity를 클래스 위에 작성한다. JPA 를 사용해서 테이블과 매핑할 클래스는 필수로 작성해주어야 한다. @Entity가 붙은 클래스는 JPA가 관리, 엔티티라고 부른다. @Entity public class Member { @Id private Long id; private String name; 주의할 점 1. 기본생성자는 필수 2 . final 클래스를 사용해서는 안된다 -> JPA 구현체들은 엔티티를 내부에서 다양한 방식으로 사용 @Entity 의 속성정리 name() - JPA에서 사용할 엔티티 이름을 지정 - 기본값은 클래스의 이름을 그대로 사용 - 같은 클래스 이름이 없으면 가급적 기본값을 사용 @Entity(name = "MBR") public cla.. 2022. 9. 20.
영속성 컨텍스트 - 플러시 플러시 : 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영 - 플러시가 발생할 때의 예 1. 변경감지 2. 수정된 엔티티 쓰기 지연 SQL 저장소에 등록할 때 3. 쓰기지연 SQL 저장소의 쿼리를 데이터 베이스에 전송 - 플러시 하는 방법 1. em.flush() - 직접 호출 2. transaction.commit - 트랜잭션 커밋 3. JPQL 쿼리 실행 - 플러시는 영속성 컨텍스트를 비우지 않는다 : 영속성 컨텍스트의 소스를 DB에 적용시키는 것 뿐이다. - 영속성 컨텍스트의 변경내용을 데이터베이스에 동기화한다. - 커밋 직전에만 동기화 하면된다. 플러시 모드 옵션 - 변경을 추천하지 않으며 자동(기본값)을 사용하자. 2022. 9. 20.
영속성 컨텍스트 - 변경 감지 영속성 컨텍스트에서의 변경감지에서 가장 핵심은 update 를 할 때, em.persist 로 다시 영속화 할 필요가 없다는 것이다. 변경감지란 무엇일까? 변경감지는 스냅샷 이라는 1차캐시에서 비롯된다. 1차 캐시에서는 그때그때마다 스냅샷을 찍어 캐시의 상태를 사진으로 찍어놓는다. 이 후, 데이터가 변경되면 스냅샷과 비교하여 변경된 것을 감지하고 update 쿼리를 DB에 날리게 된다. ( 틀린그림 찾기라고 생각하면 쉽다 ) 예제 ID 가 1(PK) 이고, NAME 이 memberA 인 데이터를 memberA에서변경으로 변경하려고 한다. tx.begin(); // 트랜잭션 시작 Member findMember = em.find(Member.class, 1L); findMember.setName("memb.. 2022. 9. 20.