본문 바로가기
관리자

분류 전체보기

(1002)
[TIL][TDD] TDD 3편. 인터페이스 분리로 테스트는 분리, 서비스는 트랜잭션으로 묶기 TDD 2편에서는 서비스 메서드를 기능(의미)적으로 분리해가며 작성하는 것이 TDD 방식의 기본이라고 기록했다. 이번 글에서는 이것을 각 인터페이스로 분리해서 설계하는 방법에 대해 정리한다. 정확한 정보는 아닐 수 있으니 이 글을 발견하시는 분이 있다면 참조만 하시길. TDD 2편 [TIL][TDD] 테스트 코드 기반으로 짜되, service 코드에서 의미적으로(기능적으로) 분리해가며 작성하기 1. 문제점 1-1. 메서드를 분리하면 트랜잭션 하나로 묶이지 않는다. 다른 사용자가 실행 순서를 기억해야한다. 2편에서 다룬 것처럼 서비스 코드를 메서드별로 분리하면서 테스트하면 좋다. 그런데, 분리만 하다보면 모든 서비스 코드가 개별 트랜잭션으로 분리되고, Controller에서 각 service 메서드들을 불..
[spring data JPA] 1. 초기 설정 및 Data Jpa 기본 1. 초기 세팅 이전 강의와 거의 동일하게 프로젝트를 만들고 환경 설정을 해준다. application.yml 파일은 다음과 같다. 환경 설정에서 띄어쓰기, 오타 등의 실수는 치명적이다. 정확히 써야한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 spring: datasource: url: jdbc:h2:tcp://localhost/~/datajpa username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: # show-sql: true format_sql: true logging.level: org.hibernate.S..
[비공개] Weekly Report - 21/11/08~21/11/14, 504일차 보호되어 있는 글입니다.
[JPA활용-1] 3. 도메인 개발 : Unique 제약 조건, main/test 환경 설정 분리, JPQL 동적 쿼리 등 스프링의 @Repository에 JPA의 @PersistenceContext 추가 그냥 스프링만 이용할 때는 @Repository 어노테이션을 추가하여 @Component 로서 Component Scan이 되게 하였다. 여기에 @PersistenceContext 어노테이션으로 EntityManager를 불러오면, 스프링이 EntityManager를 만들어서 Repository에 주입해주게 된다. Member 객체와 관련한 기본적인 기능을 갖는 MemberRepository를 보면, EntityManager를 @PersistenceContext 어노테이션과 함께 작성한 것을 확인할 수 있다. 추가로, 엔티티 자체를 들고 와야하거나 특정 파라미터를 추가해야된다면, 기본편에서 배운 JPQL 문법을 사용해야 한..
[TIL][TDD] 테스트 코드 기반으로 짜되, service 코드에서 의미적으로(기능적으로) 분리해가며 작성하기 전체 그림 1. API 분석 및 테스트 코드 작성 API 분석을 잘하는 것이 가장 중요하다. 요구되는 기능과 사양이 어떤지 명확히 알고, 그에 따른 경우의 수와 상황 등을 구체적으로 작성해본다. 최대한 많은 경우의 수를 고려하여 명기해놓고, 이것을 테스트 코드로 옮겨적으면 된다. 케이스별로 필요한 데이터를 Mock 데이터로 만들어서 테스트를 진행한다. 2. 테스트 통과를 위한 구현체 코드 작성 및 메서드 묶기 작성한 테스트 코드를 의미적, 기능별로 Service 메서드의 기능으로 묶어서 생각한다. 그리고 이 테스트 코드들을 통과하기 위한 구현체 코드를 작성한다. 테스트를 먼저 작성하고 이를 통과하기 위해 구현체 코드를 작성하므로 Test Driven Development가 된다. 이렇게 개발을 하면 최대..
[JPA활용-1] 2. 엔티티 작성 : 계층구조 연관관계 매핑 등 활용편은 대부분 아는 내용이라, 차례대로 모두 정리하지 않고 새롭게 알게된 내용들만 일부 참조하여 작성한다. 테이블명 단수형, 복수형 문제 복잡한 문제로 논란이 많지만, 테이블의 레코드 1개가 가지는 의미를 생각하여 단수로 작성한다. 테이블명이 명확한 단어로 작성되는 경우도 있지만, H1KQLW와 같은 코드로 작성되는 경우도 있다고 한다. 이런 경우에는 복수형으로 만들기가 곤란하다. 다만, order와 같은 일부 예약어는 단수로 작성 시 문제가 되므로 복수로 작성하여 혼용되기도 한다. 사용하는 DB의 종류, 프로그래밍 언어, 상황에 따라 다르겠지만 강의에서는 결국 프로젝트나 회사 단위에서 지정하기 나름이라고 한다. 일관성이 중요하다. Getter는 열되, Setter는 무조건 열지는 않는다. Entity..
[비공개] Weekly Report - 21/11/01~21/11/07, 497일차 보호되어 있는 글입니다.
[TIL] inner join, left join의 차이. 예시 및 성능, MSSQL Server Management Studio 실행 계획 차이점1. 데이터 조회량 차이 inner join과 left join의 기본적인 차이는 간단하다. 기준이 되는 from 테이블(driving table)과 조인해오는 테이블(inner table)이 있을 때, 외래키를 갖는 데이터만 불러올지, 외래키가 없더라도 모든 데이터를 driving table 기준으로 조회할지 결정하는 것이다. orders 테이블의 member_id가 members 테이블의 id값과 외래키로 연결되어 있는 상태인데, '주인없는 주문'의 경우 member_id 값이 null이기 때문에 left join에서는 아래 그림처럼 null인 값도 포함하여 5개 행이 조회되지만, inner join으로 조회한다면 외래키가 없는 레코드(행)은 빠지게 되어 4개 행만 조회된다. 따라서 비즈니스 로..