분류 전체보기 161

[스프링] service 관련 어노테이션

1. @Service 에 의해 스프링 빈으로 등록 2. @Transactional 어노테이션이 붙어 있는 클래스나 메소드에 트랜잭션을 적용, 외부에서 이 클래스의 메소드를 호출할 때 트랜잭션을 시작하고 메소드를 종료할 때 트랜잭션을 커밋한다. 만약 예외가 발생하면 트랜잭션을 롤백한다 3. @Autowired 스프링 컨테이너가 적절한 스프링 빈을 주입해준다

Spring/spring 2023.02.22

[JPA] 조인 테이블

1. 데이터베이스 테이블의 연관관계를 설계하는 방법 1) 조인 컬럼 사용(외래키) MEMBER LOCKER MEMBER_ID(PK) LOCKER_ID(PK) USERNAME NAME LOCKER_ID(FK, NULL 허용) 특징 외래 키에 null을 허용하는 선택적 비식별 관계 회원과 사물함을 조인할 때 외부 조인을 사용해야 한다. 내부 조인을 사용하면 사물함과 관계가 없는 회원은 조회되지 않는다. 회원과 사물함이 아주 가끔 관계를 맺는다면 외래 키 값 대부분이 null로 저장되는 단점이 있다. 2) 조인 테이블 사용(테이블 사용) MEMBER MEMBER_LOCKER LOCKER MEMBER_ID(PK) MEMBER_ID(FK) LOCKER_ID(PK) USERNAME LOCKER_ID(FK) NAME..

Spring/jpa 2023.02.21

[ICT 인턴십] 회고록 4 - 두 번째 프로젝트

첫 번째 프로젝트를 마치고 두 번째 프로젝트에 참여하게 되었다. 두 번째 외부 기업이 요청한 앱을 만드는 외부 프로젝트였다. 1. 프로젝트 시작하기 전 나의 마음가짐 첫 번째 프로젝트를 진행하며 은근 flutter가 재밌어서 두 번째 프로젝트를 맡게 되었을 때 은근 기대가 되었다. 특히, 첫 번째 프로젝트를 진행하며 실행되는 것에 급급하여 코드를 비효율적이고 유지보수가 쉽지 않게 작성했었는데, 이번 프로젝트는 사수와 함께 진행하는 거여서 도움을 더 많이 받을 수 있을 것 같다는 생각을 하게 되었다. 2. 프로젝트를 진행하며 배운 지식적 내용 1) GetX의 사용법 상태관리 UI에서 실시간으로 변하는 여러 데이터들의 상태를 효율적으로 관리하기 위한 개념 GetX flutter에서 상태관리를 도와주는 라이브..

기록 2023.02.16

[JPA] 복합키와 식별 관계 매핑

1. 식별 관계 1) 개념 부모 테이블의 기본 키를 내려받아서 자식 테이블의 기본 키 + 외래 키로 사용하는 관계 2) 단점 식별 관계는 부모 테이블의 기본 키를 자식 테이블로 전파하면서 자식 테이블의 기본 키 컬럼이 늘어난다. 이 때문에 조인할 때 sql이 복잡해지고 기본 키 인덱스가 불필요하게 커질 수 있다. 식별 관계는 2개 이상의 컬럼을 합해서 복합 기본 키를 만들어야 하는 경우가 많다 식별 관계를 사용할 때 기본 키로 비즈니스 의미가 있는 자연 키 컬럼을 조합하는 경우가 많다. 그런데, 비즈니스 요구 사항이 시간이 지나면서 변할 수도 있다. 이 경우에 식별 관계의 자연 키 컬럼들이 자식에 손자까지 전파되면 변경이 힘들어지고, 전체적으로 관리도 어려워진다. 부모 테이블의 기본 키를 자식 테이블의 ..

Spring/jpa 2023.02.16

[JPA] 고급 매핑 관련 어노테이션

상속 관련 1. @Inheritance 1) 개념 상속 해 줄 부모 클래스에게 적용하는 어노테이션 2) 속성 strategy InheritanceType.JOINED 조인 전략: 자식 각각을 모두 테이블로 만들고 조회할 때 조인 사용 InheritanceType.SINGLE_TABLE 단일 테이블 전략: 테이블을 하나만 사용해서 통합 InheritanceType.TABLE_PER_CLASS 구현 클래스마다 테이블 전략: 서브 타입마다 하나의 테이블을 만든다 2. @DiscriminatorColumn 1) 개념 부모 클래스에 구분 컬럼 지정. 이 컬럼으로 자식 구분. 2) 속성 name 구분 컬럼의 이름 3. @DiscriminatorValue 1) 개념 엔티티를 저장할 때 구분 컬럼에 입력할 값을 지정 ..

Spring/jpa 2023.02.16

[JPA] 상속 관계 매핑, MappedSuperClass

1. 상속 관계 매핑 1) 개념 ORM에서 이야기하는 상속 관계 매핑은 객체의 상속 구조와 데베의 슈퍼타입 서브타입 관계를 매핑하는 것이다. 2) 방법 조인 전략 개념 엔티티 각각을 모두 테이블로 만들고 자식 테이블이 부모 테이블의 기본 키를 받아서 기본키 + 외래 키로 사용하는 전략 ITEM ITEM_ID(PK) NAME PRICE DTYPE ALBUM MOVIE BOOK ITEM_ID(PK, FK) ITEM_ID(PK, FK) ITEM_ID(PK, FK) ARTIST DIRECTOR AUTHOR ACTOR ISBN @Entity @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn(name = "dtype") public abstr..

Spring/jpa 2023.02.16

[알고리즘] 정렬 - 선택정렬

1. 개념 배열의 원소를 순서대로 살피면서, 살피는 원소 아래에 있는 모든 원소를 확인해서 만약 더 작은 것이 있다면 현재 살피는 원소와 해당 원소를 바꾼다. 2. 특징 제자리 정렬 알고리즘의 하나(입력 배열 이외에 추가 메모리를 요구하지 않음) 1) 장점 구현이 쉽다 사용할 수 있는 메모리가 제한적인 경우에 사용시 성능 상의 이점이 있다. 2) 단점 안정 정렬이 아니다(값이 같은 레코드가 있는 경우에 상대적인 위치가 변경될 수 있다.) 정렬 규칙이 다수이거나 특정 순서를 유지해야 할 때 문제가 될 수 있다. 시간복잡도 상 효율이 좋지 않음 3) 단점 보완 방법 이중 선택 정렬 한 번의 탐색에서 최솟값과 최댓값을 같이 찾는 방법이다. 탐색 횟수가 절반으로 줄어들게 된다. 탐색을 응용하여 개선 한 번의 탐..

알고리즘 2023.02.14

[JPA] 다대일, 일대다, 일대일, 대다대

1. 연관관계 매핑할 때 고려해야 할 것 1) 다중성 다중성 종류 다대일 일대다 일대일 다대다 2) 단방향, 양방향 두 엔티티 중 한쪽만 참조하는 단방향 관계인지, 서로 참조하는 양방향 관계인지 3) 연관관계의 주인 양방향 관계면 연관관계의 주인을 정해야 한다 전제 조건: 다중성은 왼쪽을 연관관계의 주인으로 정했다. 예를 들어 일대다면 일 쪽이 연관관계의 주인인 것. 2. 다대일 1) 다대일 단방향 Member(다) Team(일) id id Team team name username MEMBER TEAM MEMBER_ID(PK) TEAM_ID(PK) TEAM_ID(FK) NAME USERNAME @Entity public class Member{ @Id @GeneratedValue @Column(name..

Spring/jpa 2023.02.14

[JPA] 연관관계 어노테이션

1. @ManyToOne 1) 개념 다대일 관계에서 사용 2) 속성 optional false로 설정하면 연관된 엔티티가 항상 있어야 한다 기본값: true fetch 글로벌 페치 전략을 설정한다 기본값: ManyToOne=FetchType.EAGER, OneToMany=FetchType.LAZY cascade 영속성 전이 기능을 사용한다 targetEntity 연관된 엔티티의 타입 정보를 설정한다 2. @JoinColumn 1) 개념 외래 키를 매핑할 때 사용 2) 속성 name 매핑할 외래 키 이름 기본값: 필드명_참조하는 테이블의 기본 키 컬럼명 referencedColumnName 외래 키가 참조하는 대상 테이블의 컬럼명 기본값: 참조하는 테이블의 기본 키 컬럼명 foreignKey(DDL) 외래..

Spring/jpa 2023.02.13

[JPA] 단방향 연관관계, 양방향 연관관계

1. 방향의 의미 1) 단방향 회원과 팀이 관계가 있을 때 회원 -> 팀, 팀 -> 회원 둘 중 한 쪽만 참조하는 것 2) 양방향 회원과 팀이 관계가 있을 때 회원 -> 팀, 팀 -> 회원 모두 서로 참조하는 것 3) 특징 객체 관계에만 존재하고 테이블 관계는 항상 양방향 2. 객체의 연관관계와 테이블의 연관관계 차이 1) 객체의 연관관계 특징 참조로 연관관계를 맺는다 연관된 데이터를 조회할 때 참조를 사용한다 참조를 통한 연관관계는 언제나 단방향이다 객체간에 연관관계를 양방향으로 만들고 싶으면 반대쪽에도 필드를 추가해서 참조를 보관해야 한다. 이렇게 양쪽에서 서로 참조하는 것을 양방향 연관관계라고 하지만 이것은 양방향 관계가 아니라 서로 다른 단방향 관계 2개다. 예시 Member Team id id ..

Spring/jpa 2023.02.13