일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- SQL프로그래밍
- 다대다
- 연결리스트
- 즉시로딩
- 백트래킹
- querydsl
- dfs
- FetchType
- 스프링 폼
- 유니크제약조건
- 스토어드 프로시저
- PS
- 동적sql
- 연관관계
- 힙
- 데코레이터
- 일대다
- 비관적락
- 다대일
- shared lock
- eager
- JPQL
- 이진탐색
- CHECK OPTION
- 낙관적락
- execute
- 지연로딩
- fetch
- exclusive lock
- BOJ
- Today
- Total
목록All (557)
흰 스타렉스에서 내가 내리지
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/byBVVv/btsGjN71TtL/6y7StvSiarYp1P1IgemS8k/img.png)
일대일 식별 관계는 자식 테이블의 기본 키 값으로 부모 테이블의 기본 키 값만 사용한다. @Entity public class Board { @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "BOARD_ID") private Long id; @OneToOne(mappedBy = "board") private BoardDetail boardDetail; } @Entity public class BoardDetail { @Id private Long boardId; @MapsId @OneToOne @JoinColumn(name = "BOARD_ID") private Board board; } BoardDetail 처럼 식별자가 단순히 컬럼 하나면 @Maps..
JPA 에서 식별자를 둘 이상 사용하려면 별도의 식별자 클래스를 만들어야 한다. JPA 는 영속성 컨텍스트에 엔티티를 보관할 때, 엔티티의 식별자를 키로 사용한다. 그리고 식별자를 구분하기 위해 equals 와 hashCode 를 사용해서 동등성 비교를 한다. 그런데 식별자 필드가 하나일 떄는 보통 자바의 기본 타입을 사용하므로 문제가 없지만, 식별자 필드가 2개 이상이면 별도의 식별자 클래스를 만들고 그곳에 equals 와 hashCode 를 구현해야 한다. JPA 는 복합키를 지원하기 위해 @IdClass 와 @EmbeddedId 2가지 방법을 제공한다. @IdClass 는 관계형 데이터베이스에 가까운 방법이고, @EmbeddedId 는 좀 더 객체지향에 가까운 방법이다. # @IdClass 복합 키..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bQQvc4/btsGmPJyGv9/twG1KGnNjjHspMkYrBxGO1/img.png)
# 식별관계 (Identifying Relationship) vs 비식별관계 (Non-Identifying Relationship) # 식별관계 부모 테이블의 기본 키를 내려받아서 자식 테이블의 기본 키 + 외래 키로 시용하는 관계다. # 비식별관계 부모 테이블의 기본 키를 받아서 자식 테이블의 외래 키로만 사용하는 관계다. 테이블을 설계할 떄 식별 관계나 비식별 관계 중 하나를 선택해야 한다. 최근에는 비식별 관계를 주로 사용하고 꼭 필요한 곳에만 식별 관계를 사용하는 추세다.
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/KAmdZ/btsGjQKkKCz/jTytFieg7Bu6gFvryODXd1/img.png)
# 언제 사용하라고? 부모 클래스는 테이블과 매핑하지 않고, 부모 클래스를 상속 받는 자식 클래스에게 매핑 정보만 제공하고 싶을 떄 # 비유를 하자면.. 추상 클래스와 비슷하다 @Entity 는 실제 테이블과 매핑되지만, @MappedSuperclass 는 실제 테이블과는 매핑되지 않는다. 단순히 매핑 정보를 상속할 목적으로만 사용된다. Member 와 Seller 는 서로 관계가 없는 테이블과 엔티티다. 테이블은 그대로 두고 객체 모델의 id, name 두 공통 속성을 부모 클래스로 모으고 객체 상속 관계로 만들어보자 @MappedSuperclass public abstract class BaseEntity { @Id @GeneratedValue private Long id; private String..
@Entity @Getter public class Member { @Id @Column(name = "MEMBER_ID") private String id; private String username; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; //==연관관계 메소드==// public void setTeam(Team team){ // 기존 팀과 관계를 제거 if (this.team != null){ this.team.getMembers().remove(this); } this.team = team; team.getMembers().add(this); } } 한 번에 양방향 관계를 설정하는 메소드를 연관관계 편의 메소드라 한다. membe..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/MFKqr/btsGgBZ6lQ5/9th6J3J9D5tqsKwSicKOKk/img.png)
# 매핑 어노테이션 @Column @Enumerated @Temporal @Lob @Transient @Access 1. @Column 객체 필드를 테이블 컬럼에 매핑한다. 속성 중에 name, nullable, unique 가 주로 사용되고, 나머지는 잘 사용되지 않는 편이다. nullalbe 의 디폴트값은 true 이다. @Column(nullable = false) @Column(unique = true) @Column(columnDefinition = "varchar(100) default 'EMPTY'") @Column(length = 400) 생성된 DDL unique alter table Tablename add constraint UK_Xxx unique (username) columnDe..
@Table(name = "MEMBER", uniqueConstraints = {@UniqueConstraint( name = "NAME_AGE_UNIQUE", columnNames = {"NAME", "AGE"} )}) public class Member { @Id private String id; @Column(name = "name") private String username; private Integer age; } UNIQUE 제약으로 들어가는 컬럼들은, 그들의 조합이 유일해야 한다. 각 컬럼의 데이터의 유일함은 의미가 없고, 조합이 유일해야 한다. (name = 'Alice', age = 25) 와 (name = 'Alice', age = 23) 은 공존 가능 # 생성된 DDL ALTER T..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/mY2I9/btsGcIYUnua/jXa6Tct4tKoS2kxpqcWQpK/img.png)
numpy 가 없대요 나는 scipy 랑 numpy 라이브러리를 쓸 건데, lambda 함수에서 import 할 수 있도록 한 번 해보죠 1. python 이라는 폴더를 만들어 봅니다. 2. 그 안에서 pip3 install 을 합니다. pip3 install numpy -t . pip3 install scipy -t . - 라이브러리들이 폴더 내에 설치될 수 있도록 한다. 3. python 폴더를 압축한다. 4. AWS Lambda 콘솔에서 '계층' 메뉴에 들어가, '계층 생성'을 누른다. 5. python.zip 파일을 업로드한다. 그럼 S3 에서 업로드하고 온다. 6. Lambda 함수로 돌아가서 [Add a layer] 7. 계층 선택
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bKJl37/btsGaxi0YRR/sQqYRRbrbm33kr3MS6kgFK/img.png)
빈번하게 호출되는 API에 대해서, 매번 서비스 로직을 실행하고 응답하는 것은 비효율 적일 수 있다. (응답값이 같다는 가정 하에) API 의 응답 결과를 Elasticache for Redis 를 이용하여 응답 값을 캐싱해주면 어떨까? # API Caching ? - API 의 호출에 따라 캐시를 이용하여, 서버의 부하를 줄이고 API 성능을 최적화 하여 응답시간을 단축시키는 역할을 한다. - 데이터를 메모리에 저장하여, 빠른 검색을 가능하게 하는 기능을 제공한다. # Cache 사용 목적 - DB 로부터 데이터를 조회하는 경우, 동일한 데이터를 반복하여 조회함으로써 불필요한 일을 반복하는 문제가 발생한다. - 캐시를 통해, DB 로부터 반복적으로 데이터를 조회해 오는 일에 대해, 최초 데이터를 조회해..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cuqcMt/btsF5UyZtaH/9fVCJrnAfMKkiuXQEhp5ZK/img.png)
Redis 설치와 실행 redis 설치 $ brew install redis redis 실행 $ brew services start redis redis-cli 실행 $ redis-cli With Spring Boot * gradle 의존성 추가 implementation 'org.springframework.boot:spring-boot-starter-data-redis' * application.yml spring: data: redis: host: localhost port: 6379 password: 1234 * Configuration @Configuration @EnableCaching public class RedisConfig { @Value("${spring.data.redis.host}..