Testing (Mockito) & Assertion
📘 Backend/Spring2023. 4. 3. 08:09Testing (Mockito) & Assertion

📘 Test JUnit은 표준 테스트 프레임워크이다 기능 테스트 테스트의 범위 중 제일 큰 테스트, 어플리케이션 전체에 걸친 테스트 통합 테스트 테스트 주체가 어플리케이션 제작 개발팀 or 개발자 단위 테스트, 클라이언트 툴 없음 슬라이스 테스트 어플리케이션을 특정 계층으로 나눠서 테스트 단위 테스트 어플리케이션의 핵심 비즈니스 로직 메소드의 독립적인 테스트 단위 테스트의 F.I.R.S.T 원칙 Fast Independent Repeatable Self-validating Timely given - when - then Pattern given 테스트에 필요한 전제조건 포함 when 테스트 동작 지정 then 테스트 결과 검증, 값 비교 (Assertion) Hamcrest를 사용한 Assertion A..

Transaction & AOP 방식 / 분산 트랜잭션
📘 Backend/Spring2023. 4. 3. 08:07Transaction & AOP 방식 / 분산 트랜잭션

📘 Transaction ACID 원칙 원자성 (Atomicity) All or Nothing 보장 일관성 (Consistency) 어떤 값 증가시 연관된 값 일관성있게 증가 격리성 (Isolation) 각 트랜잭션 당 각각 독립적 실행 지속성 (Durability) 트랜잭션 완료 후 결과 지속 보장 트랜잭션 커밋 & 롤백 Commit 완료된 작업 최종 DB 반영 - 트랜잭션 종료 RollBack 작업중 문제 발생 시 수행작업 취소 -> 원상태 복귀 조회 메소드에는 @Transaction의 Attr을 readOnly=true 로 설정함으로써 성능 최적화 과정을 거치도록 한다 트랜잭션 전파 (Transaction Propagation) @Transactional의Attribute Propagation.RE..

JPA & Hibernate 개념
📘 Backend/Spring2023. 4. 3. 08:03JPA & Hibernate 개념

📘 JPA (ORM) 사용이유 장점 객체지향적인 코드의 작성으로 DB의 데이터들과 매핑하여 개발의 생산성을 높여준다. 유지보수성이 증대되며 엔티티들이 독립적으로 작성되어 있어 재활용성이 높다. 매핑 정보가 명확하여 ERD에 대한 의존성을 낯출 수 있다. DBMS에 대한 종속성이 줄어들고 많은 자료구조를 구현할 수 있다. RDB의 와 객체의 패러다임 불일치 문제를 해결할 수 있고 영속성을 제공한다. 기본적인 CRUD의 SQL 쿼리를 알아서 생성해서 처리해준다. 단점 완벽한 ORM으로만 서비스를 구현하기 어렵다. 사용은 편하지만 설계는 신중히 해야하고 프로젝트의 복잡성이 올라갈수록 난이도가 올라간다. 특정 자주 사용되는 대형 쿼리는 성능을 위해 SP를 쓰는 등 별도의 쿼리튜닝이 필요하다. 패러다임의 불일치 ..

Aggregate & JDBC
📘 Backend/Spring2023. 4. 3. 07:58Aggregate & JDBC

📘Aggregate 비슷한 업무 도메인들의 집합 Aggregate Root = 각각의 도메인 대표, root의 key를 다른 도메인이 foreign키로 가지고 있음 Aggregate Root 선정 기준 = 다른 도메인과 연관성이 있는 도메인 (1:N) 설계중 Aggregate Root역할을 할 엔티티 클래스를 잘 선정해야함 엔티티 설계 1:N의 관계에서 1은 N의 객체를 참조할 수 있도록 List를 멤버변수로 가진다 N:N의 관계에서, 1:N - N:1로 변환하도록 N쪽의 객체를 참조하도록 1쪽에서 List를 멤버 변수로 가짐 ex) private AggregateReference userId; 객체 참조 = 테이블에서의 외래키 참조 테이블 설계 각 테이블의 컬럼은 엔티티의 멤버변수와 1:1 매핑됨 테이..

📘 Backend/Kotlin2023. 4. 3. 07:47Kotlin - Type

💡 코틀린에서 Type을 다루는 방법 코틀린에서는 선언된 기본값을 보고 타입을 추론한다. val number1 = 3 // Int val number2 = 3L // Long val number3 = 3.0f // Float val number4 = 3.0 // Double 자바는 기본 타입간의 타입 변환은 암시적으로 이루어질 수 있지만, 코틀린의 기본 타입간 타입 변환은 to를 이용한 명시적 변환이 이루어져야 한다. 아래 예시는 자바의 암시적 타입 변환 예시이다. // Java int number1 = 4 long number2 = number1 // 암시적 타입 변환 System.out.println(number1 + number2) 코틀린에서의 코드 // ----------명시적 타입변환 예시---..

📘 Backend/Kotlin2023. 4. 3. 07:46Kotlin - Nullable

💡 코틀린에서 Null을 다루는법 코틀린에서는 기본적으로 모든 변수에 Null이 들어갈 수 없게 설정 되어있다. 위의 Long은 객체이다, 그러므로 Null이 들어갈 수 있음을 의미한다. 코틀린에서는 'Null이 될 수 있는'을 '?' 기호로 타입 뒤에 정의한다. var 변수명: 타입? = 값 var number1: Long? = 1_00L number1 = null Nullable 타입은 Null 체크를 무조건 해주어야 한다. 예시 1번 함수, boolean (Primitive Type) 2번 함수, Boolean (Reference Type) 3번 함수, boolean (Primitive Type) 1번 함수의 파라미터의 타입인 String에서 Nullable을 선언해줬다..

📘 Backend/Kotlin2023. 4. 3. 07:46Kotlin - Variable

💡 Kotlin에서 변수를 다루는 법 불변인 변수를 선언하려면 val를 사용한다. 가변인 변수를 선언하려면 var를 사용한다. 모든 변수는 우선 val(불변)로 만들고 필요한 경우 var(가변)로 변경하는게 디버깅 & 가독성에 좋다. // Java long number1 = 10L; final long number2 = 10L; Long number3 = 1_000L; Person person = new Person("홍길동"); // Kotlin var number1 = 10L val long number2 = 10L Long number3 = 1_000L Person person = new Person("홍길동") 그리고, 위의 코틀린 코드는 타입을 명시하지 않아도 자동으로 타입 추론이 되지만, 타입..

image