목록분류 전체보기 (405)
오답노트
여는말 23년에는 다이나믹했다... 에이블스쿨도 끝나고 취업도 해보고.. 파견 나가기 싫었는데 또 파견도 나가고(돌아올 수 없음 ㅎ).. 그리고 공연이 엄청 많았는데 아무튼 여자친구의 권유로 월마다 블로그에 기록해보는건 어떻냐고 해서 수치적으로 딱딱 해놓으면 정신적 만족감이 넘칠것 같아서 써보기로 한다. 여행 1회 노보텔 내 돈으로 간건 아니고 회사 돈으로.. 사진은 뭐 없다.. 삼양목장 겨울의 대관령? 그냥 겨울왕국이다. 사실 그냥 목장인데 눈이 내 목, 가슴 높이까지 쌓여있는걸 보니까 웅장함 그 잡채 바람도 엄청 불어서 대충 서있으면 넘어질거 같았다. 밴드 합주 6회 공연 2회 합주 합주는 보통 합정 근처에서 하는 편.. 평일 1회 주말 1회 진행한다. 생각보다 합주 횟수가 적었네.. 공덕 DGT 아..
식별자와 비식별자 식별자 엔터티를 각각 구분할 수 있는 논리적인 이름을 식별자라고 한다. 언터티가 가지는 속성중 엔터티를 대표할 수 있는 속성을 의미하며 하나의 엔터티는 반드시 하나의 유일한 식별자가 존재 해야한다. 주식별자 특징 유일성 최소성 불변성 존재성 식별자 관계와 비식별자 관계에 따른 식별자 식별자 관계 부모 엔터티로부터 속성을 받아 자식엔터티의 주식별자로 사용하는 경우 반드시 부모 엔터티가 생성되어야 자기 자신 엔터티 생성 부모로부터 받은 속성을 자식 엔터티가 모두 사용하고 그것만을 주식별자로 사용하면 1:1 관계 부모로부터 받은 속성 이외에 다른 부모로부터 받은 속성이나 스스로 가지고 있는 속성으로 주식별자를 구성하면 1:M 관계 식별자 관계로만 관계를 구성하면 조인조건이 많아져 개발자 복잡..
OAuth2 다량의 사용자를 보유하고 있는 벤더에게서 사용자 정보를 위임을 받아 사용자를 가입하게 하는 방식이다. 개발 환경 구축 dependencies { implementation("$boot:spring-boot-starter-oauth2-client") } build.gradle에 위와 같은 의존성을 추가한다. spring: security: oauth2: client: registration: google: client-id: 532557492921-oanhrsrege0kqvb7q1v0v2o4lcu0ktlc.apps.googleusercontent.com client-secret: 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 application.yml 에 위와 같이 설정한다..
세션 관리 서버는 모든 요청에 아이디/패스워드를 요구 할 수 없다. 그래서 한 번 로그인 하면 토큰을 발급하고, 세션에는 토큰을 저장해 세션이 유지되는 동안, 혹은 remember-me 토큰이 있다면 해당 토큰이 살아있는 동안 해당 토큰만으로 사용자를 인증하고 요청을 처리한다. SessionManagementFilter SessionRegistry를 Bean으로 등록하여 SessionInformation(세션 사용자)를 모니터링 할 수 있다. 만료된 세션에 대한 요청은 세션 즉시 종료하고, 만료 판단은 SessionManagementFilter 의 ConcurrentSessionControlAuthenticationStrategy 에서 처리한다. @Bean SessionRegistry sessionReg..
영속성 전이 (Cascade) 영속성 전이는 포함하고 있는 속성에 대해 현재 속성이 받는 영향을 전달하는 것이다. 예를 들어 Book 과 Publisher 가 1:N 관계를 가지고 있고, Book을 제거 하면 Publisher도 같이 제거 해야하는데, 그렇게 하려면 쿼리를 두 번 날려야한다.(각각 삭제에 대한 쿼리) 하지만 영속성 전이를 통해 Book이 삭제 될 때, Publisher와 연결되는 Book이 삭제된다면 해당 Publisher도 삭제한다. @Entity @NoArgsConstructor @Data @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) @DynamicUpdate public class Book extends Base..
1:1 관계 Book 과 BookReviewInfo 의 1:1 관계를 나타내는 예시이다. 연결할 두 Entity에 상대방 멤버 변수를 만들고 OneToOne Annotation을 달아주면 연결된다. OneToOne Annotation에 mappedBy를 설정하게 되면 ToString이 순환 참조로 인해 에러가 발생한다. 둘 다 사용하고 싶다면 한쪽에는 @ToString.Exclude를 사용하자. OneToOne @Entity @NoArgsConstructor @Data @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) public class Book extends BaseEntity { @Id @GeneratedValue(strategy ..
Query Method JPA에서 쿼리문을 직접 작성하지 않고 Method명으로 지정만 하면 자동으로 쿼리를 만들고 요청까지 해주는 편리한 기능이 있다. https://www.javaguides.net/2018/11/spring-data-jpa-query-creation-from-method-names.html Spring Data JPA - Query Creation from Method Names In this article, we will learn how we can create query methods by using the query generation from the method name strategy. Spring Data JPA offers various ways to create a ..
Listener JPA에는 Listener가 있는데, curd를 할 때, Anotation을 활용해 전후로 원하는 로직을 만들어 넣을 수 있다. https://www.baeldung.com/jpa-entity-lifecycle-events#lifecycle Auditing Listener를 통해서 자주 사용하는 기능을 Spring에서 Anotation으로 미리 만들어 놨다. (ex. CreatedDate) 이를 사용하기 위해서 AuditingEntityListener를 상속 받으면 된다. @Data @MappedSuperclass @EntityListeners(value = AuditingEntityListener.class) public class BaseEntity { @CreatedDate priv..
H2 자바 기반의 RDB이다. 프로젝트 초반에 테스트용 DB로 많이 활용되고 있다. 환경 설정 build.gradle 파일에서 다음과 같은 의존성이 추가되어 있는지 확인하자 (h2database:h2) 그리고 application.yaml에서 다음과 같이 설정하자. (application.properties로 되어있으면 yaml로 변경) 그리고 프로젝트를 Run 시키면 콘솔에 h2에 대한 정보가 나온다. 포커스된 주소를 복사한다. 그리고 아래 두 가지 방법으로 접속이 가능하다. Web Page http://localhost:8080/h2-console/ 에 접속하여 JDBC URL에 입력한다. Connect를 누르면 접속 할 수 있다. InteliJ 인텔리제이에서도 접속 할 수 있다. 우측 탭에서 Dat..
JPA 2019년 부터 Jakarta Persistence API라고 개명됐다. JPA는 인터페이스, 이넘, 추상 클래스로 이루어져있다. 그리고 실제 구현은 Hibernate에 구현되어 있다. Spring Data JPA Hibernate를 간편하게 사용할 수 있도록 추상 객체를 다시 한 번 감싼 것이다. ORM 어플리케이션과 DB를 연결하는 것이 ORM이다. ORM은 JPA로 이루어져 있는데, 이를 구현해 놓은 것이 Hibernate이고 이 중 자중 사용하는 것을 더 간편하게 사용할 수 있도록 해놓은 것이 Spring Data JPA인 것이다.