| ⚡ 지연로딩 실무에서 모든 연관관계는 지연로딩을 사용해라. 실무에서 즉시 로딩을 사용하지 마라. JPQL fetch 조인이나, 엔티티 그래프 기능을 사용해라 @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) public abstract class Item { @Id @GeneratedValue private Long id; private String name; private int price; } @Entity public class Member extends BaseEntity { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME..
⚡ 프록시 객체는 객체그래프로 연관된 객체들을 탐색한다. 그런데 객체가 데이터베이스에 저장되어 있으므로 연관된 객체를 마음껏 탐색하기는 어렵다. JPA는 이러한 문제를 해결하려고 프록시라는 기술을 사용한다. 프록시는 연관된 객체를 처음부터 데이터베이스에서 조회하는 것이 아니라, 실제 사용하는 시점에 데이터베이스에서 조회할 수 있다. 하지만 자주 함께 사용하는 객체들은 조인을 사용해서 함께 조회하는 것이 효과적이다. JPA는 즉시로딩과 지연 로딩이라는 방법으로 둘을 지원한다. JPA는 연관된 객체를 함께 저장하거나 함께 삭제할 수 있는 영속성 전이와 고아 객체 제거라는 편리한 기능을 제공한다. ⚡ 프록시의 특징 프록시 객체는 처음 사용할 때 한 번만 초기화 된다. 프록시 객체를 초기화 할 때, 프록시 객체..
| 다대일 단반향 package hellojpa; import javax.persistence.*; @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String username; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUsername() { return username; } public..
목표: 상속 관계 매핑과 @MappedSuperclass 알아보기 💡 상속 관계 매핑 관계형 데잍터베이스에는 객체지향 언어에서 다루는 상속이라는 개념이 없다. 대신 슈퍼타입 서브타입 관계라는 모델링 기법이 객체의 상속 개념과 가장 유사하다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델인 테이블로 구현할 때는 3가지 방법을 선택할 수 있다. 조인전략 : 각각을 모두 테이블로 만들고 조회할 때 조인을 사용한다 단일 테이블 전략 : 테이블을 하나만 사용해서 통합한다 구현 클래스마다 테이블 전략 : 서브 타입마다 하나의 테이블을 만든다. 1.조인전략 엔티티 각각을 모두 테이블로 만들고 자식 테이블이 부모 테이블의기본 키를 받아서 기본키+외래키 로 사용하는 전략이다. 객체는 타입으로 구분할 수 있지만 테이블은 ..
Feign Client REST Call을 추상화 한 Spring Cloud Netflix 라이브러리 이다. 사용방법 호출하려는 HTTP Endpoint에 대한 Interface를 생성 @FeignClient 선언 Load Balanced 지원 참조 - https://docs.spring.io/spring-cloud-openfeign/docs/current/reference/html/ Spring Cloud OpenFeign Feign is a declarative web service client. It makes writing web service clients easier. To use Feign create an interface and annotate it. It has pluggable ann..
User-Service > UserServiceApplication.java @LoadBalaned를 붙이면 Microservice의 name으로 사용할 수 있다. 그러면 url이 바꿔도 따로 바꿔줄 필요가 없다 @SpringBootApplication @EnableDiscoveryClient public class UserServiceApplication { public static void main(String[] args) { SpringApplication.run(UserServiceApplication.class, args); } @Bean public BCryptPasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } ..
| 대칭키를 활용한 DB정보 암호화 1. User-service 의 db설정과 config 설정을 수정한다 applicaton.yml의 DB설정을 주석 처리한다 # datasource: # url: jdbc:postgresql://localhost:5432/basic # username: postgres # password: wcadmin # driver-class-name: org.postgresql.Driver bootstrap.yml의 config 설정 정보 수정한다. "user-service"의 파일 정보를 불러올 수 있게 수정. spring: cloud: config: uri: http://localhost:8888 name: user-service # profiles: # active: dev..
대칭키 Symmetric Encryption (Shared) 대칭키라는 것은 Encryption에 사용하는 키와 Deryption에 사용하는 키를 같은 거를 사용하는걸 말한다. Using the same key 비대칭키 Asymmetric Encryption (RSAKeypair) 암호화하는 키와 복호화하는 키를 다르게 쓰는 걸 비대칭키 라고한다. Private and Public Key Using Java keytool
| Spring Cloud Bus 분산 시스템의 노드(Microservice)를 경량 메시지 브로커와 연결 상태 및 구성에 대한 변경 사항을 연결된 노드에게 전달(Broadcast) WHY config가 변경되면 각 마이크로서비스는 최신 값을 갖고 오기 위해 POST로 http[s]://{microservice host}/actuator/refresh를 해줘야 한다. 물론 이 작업을 자동화할 수도 있겠으나, config server가 각 마이크로서비스의 주소를 모두 관리해야 하니 비효율적입니다. Spring cloud bus는 동적으로 config 변경을 적용하기 위한 MQ(Message Queue) Handler 이다. HOW MQ(Message Queue)에 Publisher(=config serve..
Spring Security 프레임워크와 JsonWebToken 을 이용해 웹인증을 구현하는 도중, 로그인을 시도해서 서버로부터 토큰을 얻으려고 할때, 웹서버 로그에 다음과 같은 에러가 발생했습니다. javax/xml/bind/DatatypeConverter해당 문제 발생 시 pom.xml에 아래의 라이브러리를 추가해주면 된다. javax.xml.bind jaxb-api 2.1
| Spring Cloud Config 분산 시스템에서 서버, 클라이언트 구성에 필요한 설정 정보 application.yml을 외부 시스템에서 관리 하나의 중앙화 된 저장소에서 구성요소 관리 가능 각 서비스를 다시 빌드하지 않고, 바로 적응 가능 애플리케이션 배포 파이프라인을 통해 DEV-UAT-PROD 환경에 맞는 구성 정보 사용 💻 Config Server를 추가하면 아래와 같이 Dependency가 추가된다 org.springframework.cloud spring-cloud-config-server org.springframework.boot spring-boot-starter-test test 💻 ConfigServiceApplication에 @EnableConfigServer 추가 packa..
| User-Service - AuthorizationHeaderFilter 추가 ApiGatewayService에 AuthorizationHeaderFilter 추가 - 회원가입과 로그인은 Authenticate 필요가 없다 - id: user-service # user-service (GET) uri: lb://USER-SERVICE predicates: - Path=/user-service/** - Method=GET filters: - RemoveRequestHeader=Cookie - RewritePath=/user-service/(?.*), /$\{segment} - AuthorizationHeaderFilter application.yml에 toekn 설정 token: secret: user..