반응형 개발공부102 [Spring Boot] JPA 영속성 전이 cascade, 고아객체 영속성 전이 cascade : 특정 엔티티의 영속성 상태를 변경할 때 그 엔티티와 연관된 엔티티의 영속성에도 영향을 미쳐 영속성 상태를 변경하는 것 영속성 전이 타입의 종류 ALL : 모든 영속 상태 변경에 대해 영속성 전이 적용 PERSIST : 엔티티가 영속화할 때 연관된 엔티티도 함께 영속화 MERGE : 엔티티를 영속성 컨텍스트에 병합할 때 연관된 엔티티도 병합 REMOVE : 엔티티를 제거할 때 연관된 엔티티도 제거 REFRESH : 엔티티를 새로고침할 때 연관된 엔티티도 새로고침 DETACH : 엔티티를 영속성 컨텍스트에서 제외하면 연관된 엔티티도 제외 엔티티 생명주기와 연관이 있다. 한 엔티티가 영속 상태의 변경이 일어나면 매핑으로 연관된 엔티티에도 동일한 동작이 일어나도록 전이를 발생시킨다.. 2023. 3. 27. PHP 싱글톤 패턴 어플리케이션에서 하나의 객체 인스턴스를 가진다. 단점: 코트 재사용을 제한하고 유닛 테스트를 복잡하게 만드는 등 안티패턴으로도 간주한다. ex) DB connector, Logger 등 class Singleton { private static $instances = []; public static function getInstance() { $cls = static::class; if (!isset(self::$instances[$cls])) { self::$instances[$cls] = new static(); } return self::$instances[$cls]; } } function clientCode() { $s1 = Singleton::getInstance(); $s2 = Singlet.. 2023. 3. 19. [Spring Boot] JPA Auditing 엔티티 클래스에 들어가는 공통적인 필드가 있다. ex) 생성자, 생성시각, 변경자, 변경시각 매번 값을 주입해야하는 번거로움을 해소하기 위해 Spring Data JPA에서 이값을 자동으로 넣어주는 기능을 제공한다. 컨피그 클래스 생성 @Configuration @EnableJpaAuditing public class JpaAuritingConfiguration { } BaseEntity 생성 @MappedSuperclass : 자식 클래스에게 매핑 정보를 전달 @EntityListeners(AuditingEntityListener.class) : 엔티티를 데이터베이스에 적용하기 전후로 콜백 요청 @CreatedDate : 데이터 생성 날짜 자동 주입 @LastModifiedDate : 데이터 변경 날짜.. 2023. 3. 11. [Spring Boot] JPQL, QueryDSL 쿼리 작성 JPQL (JPA Query Language) : JPA에서 사용할 수 있는 쿼리 SELECT p FROM 엔티티타입 p WHERE p.엔티티속성 = ?1; 쿼리 메서드 간단한 쿼리문을 작성하기 위해 사용되는 것 (주제 + 서술어) 쿼리 메서드 - 주제 키워드 findBy / readBy / getBy / queryBy / searchBy / streamBy / existsBy : 조회 existsBy : 특정 데이터가 존재하는지 확인 - 리턴타입 boolean countBy : 쿼리 결과 레코드 개수 리턴 deleteBy / removeBy : 삭제한 횟수 리턴 또는 리턴 안함 FirstBy / TopBy : 쿼리 조회 결과값 개수 제한 쿼리 메서드 - 조건자 메서드 Is / Equals : 값의 일치.. 2023. 3. 10. [Spring Boot] Redis config @Configuration public class RedisConfig { @Value("${spring.redis.host}") private String redisHost; @Value("${spring.redis.port}") private int redisPort; @Bean public RedisConnectionFactory redisConnectionFactory() { return new LettuceConnectionFactory(redisHost, redisPort); } @Bean public RedisTemplate redisTemplate() { RedisTemplate redisTemplate = new RedisTemplate(); redisTemplate.setConnecti.. 2023. 3. 10. shorten url shorten url 주로 모바일 등으로 URL을 공유할 때 줄여서 제공한다. 요청 URL에 대응하는 유니크한 식별자가 필요하다. 방법1. DB의 PrimaryKey를 사용하는 방법 ex) https://dev.com/dir/1022009 단점: url 이 점점 길어질 수 있다. 방법2. base62 사용 ex) https://dev.com/dir/raad21 base64는 "=" 이 포함되어 부적절하다. 영어와 숫자로만 이루어진 62가 적절하다. 2023. 3. 6. 테스트 주도 개발 TDD (Test Driven Development) : 테스트 코드를 먼저 작성한 후 테스트를 통과하는 코드를 작성하는 과정을 반복하는 개발 방식 개발 주기가 짧은 개발 프로세스 개발 주기 단계 1. 실패 테스트 작성 : 실패하는 경우의 테스트 코드를 먼저 작성 2. 테스트를 통과하는 코드 작성 : 테스트 코드를 성공시키기 위한 실제 코드 작성 3. 리팩토링 : 중복 코드를 제거하거나 일반화 테스트 주도 개발 효과 디버깅 시간 단축 생산성 향상 재설계 시간 단축 기능 추가와 같은 추가 구현이 용이 테스트 코드를 작성하는 이유? 문서화 역할 테스트 코드 내 @DisplayName("~하는 테스트") 등 주석을 통해 요구조건을 알 수 있다. 코드에 결함을 발견하기 위함 경계 조건 테스트 코드를 작성하면서 반대 조건도 테스트할 수 있다. 리팩토링 시 안정성 확.. 2023. 3. 4. [Spring Boot] 테스트 코드 작성 관련 정리 테스트 코드를 작성하는 이유 개발 과정에서 문제를 미리 발견할 수 있다. 리팩토링의 리스크가 줄어든다. 애플리케이션을 가동해서 직접 테스트하는것보다 빠르게 진행할 수 있다. 하나의 명세 문서로서의 기능을 수행한다. 몇가지 프레임워크에 맞춰 테스트 코드를 작성하면 좋은 코드를 생산할 수 있다. 단위 테스트 개별 모듈을 독립적으로 테스트하는 방식 테스트 피드백을 빠르게 받을 수 있다. 통합 테스트 다양한 모듈을 결합해 전체적인 로직이 의도한 대로 동작하는지 테스트하는 방식 외부 요인들을 포함하여 애플리케이션이 온전히 동작하는지 테스트한다. 단점 : 테스트 비용이 커진다. Given-When-Then 패턴 Given 테스트에 필요한 변수를 정의하거나 Mock 객체를 통해 특정 상황에 대한 행동을 정의 When.. 2023. 3. 3. MockMvc를 이용한 테스트코드 작성 스프링 MVC를 모킹하여 웹 어플리케이션을 테스트 할 수 있는 라이브러리 controller 레이어를 테스트 하기 위해 사용 -> 서블릿 컨테이너에서 controller를 실행하지 않고도 컨트롤러에 HTTP 요청을 할 수 있다. 매번 서버를 띄우고 브라우저를 통해 테스트 하지않고 테스트 코드를 통해 검증 가능 MockMvcBuilders 클래스 -> 1. standaloneSetup() : 유닛테스트와 유사하다. -> 2. webAppContextSetup() : 통합테스트를 할 수 있다. 테스트해야하는 것 요청 경로에 대해 적절한 handler method가 호출되는지? 입력 파라미터는 handler method에 잘 전달되는지? model에 설정한 값은 잘 참조 하는지? 요청 결과 페이지는 잘 연결되.. 2023. 3. 1. 이전 1 ··· 3 4 5 6 7 8 9 ··· 12 다음 728x90 반응형