전체 글 49

자바 중급 스터디 시작

자바 중급 스터디 시작스터디 링크기간: 24/12/03 ~ 24/12/23입문편, 기본편에 이어 자바 중급편 스터디가 시작된다.이전 스터디에서는 미션 수행을 Git을 이용해 PR을 보내고 코드 리뷰를 받는 것으로 끝이 났다면,이번 스터디에서는 자기만의 언어로 배운 것을 적어보는 미션도 추가되었다. 이번 미션에서 꼭 할 것미루지 않기 코드 리뷰를 최대한 꼼꼼히 해보기 (모르겠거나 이해 안 되는 것도 질문하기) 그리고 개인적으로 복습하는 시간도 가지려고 한다.기본편에서 객체지향에 대한 개념을 배웠는데, 반복의 필요성을 느꼈다. 스터디 내에서 작은 그룹으로 매일 프로그래머스 문제도 풀고 있다.생각보다 시간이 걸려서 하루에 풀어야 하는 문제 수도 조절해야겠다. 무엇보다 조급해하지 않고, 쌓아가는 것에 ..

스터디/JAVA 2024.12.03

[8장] 8.3~8.7 지연로딩 활용 / 영속성 전이 / 고아 객체

8.3 지연로딩 활용사내 주문 관리 시스템을 개발한다고 가정해보자.- Member와 연관된 Team은 자주 함께 사용 -> 즉시로딩으로 설정- Member와 연관된 Order는 가끔 사용 -> 지연 로딩으로 설정- Orderdhk dusrhksehls Product는 자주 함께 사용 -> 즉시 로딩으로 설정  회원 엔티티@Entitypublic class Member{ @Id private String id; private String username; private Integer age; @ManyToOne(fetch = FetchType.EAGER) private Team team; @OneToMany(mappedBy = "member", fetch = ..

자바 기본편 스터디 후기

휴휴 드디어 후기를 쓴다! 시간이 참 빨리 흘러가는것같다 거의 2주동안의 기본편 스터디가 끝났다. 다음 중급편이 기다리고 있지만...마지막 미션이 생각보다 어려워서 갈길이 멀다는 생각을 하면서 글을 쓰고 있다. 이번에는 깃으로 미션 코드리뷰를 했다. 처음엔 깃에 올리는 방법조차 어려웠는데 이제는 익숙해 진것같다.이번 미션 과정을 통해 좋았던 점이 있는데, 다른 분들이 미션 수행하신 코드를 보면서 흐름을 따라가고 다양한 표현법을 볼 수 있어 좋았다.특히 예외처리를 꼼꼼히 해주시는 분들이 많아서 그 분분에 대해 많이 배웠던 것 같다. 그리고 내 미션에 대한 리뷰를 보면서 수정을 해나가는 과정도 좋았다 :)  아쉬운 점은 내가 코드리뷰 하는 것에 익숙치 않고, 아는게 부족하다보니.. ㅠ 적극적으로 할수 없었던..

스터디/JAVA 2024.11.26

[8장] 8.1~8.2 프록시 / 즉시 로딩과 지연 로딩

8.1 프록시엔티티를 조회할 때 연관된 엔티티들이 항상 사용되는 것은 아니다.회원 엔티티만 사용하는데 관련된 팀엔티티까지 데이터베이스에서 함꼐 조회해 두는 것은 효율적이지 않다.JPA는 이런 문제를 해결하려고 엔티티가 실제 사용될 떄까지 데이터베이스 조회를 지연하는 방법을 제공하는데 이것을 지연 로딩이라 한다. 지연 로딩 기능을 사용하려면 실제 엔티티 객체 대신에 데이터베이스 조회를 지연할 수 있는 가까 객체가 필요한데 이것을 프록시 객체라 한다. 1) 프록시 기초JPA에서 식별자로 엔티티 하나를 조회할 때는 EntityManager.find()를 사용한다.이 메소드는 영속성 컨텍스트에 엔티티가 없으면 데이터 베이스를 조회한다. 엔티티를 실제 사용하는 시점까지 데이터 베이스 조회를 미루고 싶으면 Enti..

[5장] 5.3~5.4 S3의 사용절차 / 객체와 버킷

5.3 S3의 사용절차: 스토리지 서비스를 사용하기까지 1) 조작버킷의 생성 및 각종 기본적인 S3조작은 관리 콘솔의 S3 대시보드에서 가능 2) S3 서비스의 기능 S3 서비스의 용어객체S3의 엔터티 단위이다. 쉽게 말하면 텍스트나 이미지 등의 파일을 말한다.버킷객체를 저장하는 컨체이너이다. 모든 객체는 버킷에 저장된다.버킷명 S3 버킷의 명칭은 다른 AWS 사용자를 포함하여 유일한 이름이어야 한다.웹 서버로 사용할 경우는 도메인 명이 버킷명이 된다.객체 키객체 식별자이다. 모든 객체는 반드시 한개의 키를 가진다. 버킷, 객체 키, 버전을 조합하여 객체를 고유하게 식별한다.객체 메타데이터이름과 값의 세트이다. 객체를 업로드할 때 설정할수있다. 메타데이터는 사람이 파일을 쉽게 관리하기 위한 데이터 라고 ..

[7장] 7.4~7.5 조인 테이블 / 엔티티 하나에 여러 테이블 매핑

7.4 조인 테이블데이터 베이스 테이블의 연관관계를 설계하는 방법- 조인 컬럼 사용(외래 키)- 조인 테이블 사용(테이블 사용) 1) 일대일 조인 테이블조인테이블의 외래 키 컬럼에 각각 유니크 제약조건을 걸어야한다.일대인 조인 테이블 매핑 예제// 부모@Entitypublic class Parent { @Id @GeneratedValue @Column (name = "PARENT_ID") private Long id; private String name; @OneToOne @JoinTable (name = "PARENT_CHILE", joinColumns = @JoinCloumn(name = "PARENT_ID"), inverseJo..

[7장] 7.3.6 식별, 비식별 관계의 장단점

데이터베이스 설계 관점에서 보면 식별관계보다 비식별 관계를 선호한다.식별관계는 부모테이블에서 자식테이블로 가면서 기본키 컬럼이 점점 늘어난다.결국 조인할 때 SQL이 복잡해지고 기본 키 인덱스가 불필요하게 커질 수 있다.식별 관계는 2개 이상의 컬럼을 합해서 복합 기본 키를 만들어야 하는 경우가 많다.식별관계를 사용할때 기본 키로 비즈니스 의미가 있는 자연 키 컬럼을 조합하는 경우가 많다.반면 비식별 관계의 기본 키는 비즈니스와 전혀 상관없는 대리키를 주로 사용한다.비즈니스 요구사항이 변하면 식별관계의 경우 변경하기 힘들어 진다.식별관계는 부모 테이블의 기본 키를 자식 테이블의 기본키로 사용하므로 테이블 구조가 유연하지 못하다.객체 관계의 매핑 관점에서 비식별 관계를 선호하는 이유일대일 관계를 제외하고 ..

[7장]7.3.3~7.3.5 복합 키: 식별 관계 매핑 / 일대일 식별관계

7.3.3@IdClass와 식별 관계 // 부모@Entitypublic class Parent { @Id @Column(name = "PARENT_ID") private String id; private String name; ...}// 자식@Entity@IdClass(ChildId.class)public class Child { @Id @ManyToOne @JoinColumn (name = "PARENT_ID") public Parent parent; @Id @Column (name = "CHILD_ID") private String cildId; private String name; ...}// 자식 IDpublic clas..

[7장]7.3.1~7.3.2 복합 키 : 비식별 관계 매핑

1) 식별관계 vs 비식별 관계 식별관계 : 부모 테이블의 기본 키를 내려 받아서 자식 테이블의 기본 키 + 외래 키로 사용하는 관계비식별관계: 부모 테이블의 기본 키를 받아서 자식테이블의 외래 키로만 사용하는 관계- 필수적 비식별 관계 : 외래 키에 NULL 을 허용하지 않음- 선택적 비식별 관계 : 외래 키에 NULL 을 허용2) 복합 키 : 비식별 관계 매핑  기본 키를 구성하는 컬럼이 하나일 때@Entitypublic class Hellod {    @Id    private String id;} 복합키 일때-> JPA는 @IdClass와 @EmbeddedId 2가지 방법 제공@IdClass부모클래스@Entity@IdClass(ParentId.class)public class Parent { @I..

[7장] 7.2 @MappedSuperclass

@MappedSuperclass부모 클래스는 테이블과 매핑하지 않고 부모클래스를 상속받는 자식 클래스에 매핑 정보만 제공하고 싶을 때 사용 @MappedSuperclasspublic abstract class BaseEntity{ @Id @GeneratedValue private Long id; private String name; ...}@Entitypublic class Member extends BaseEntity{ //ID 상속 // NAME 상속 private String email ...}@Entitypublic class Seller extends BaseEntity{ // 상속 // NAME 상속 private String shopName; ..