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("홍길동") 그리고, 위의 코틀린 코드는 타입을 명시하지 않아도 자동으로 타입 추론이 되지만, 타입..

Spring Exception Handler & Rest Controller Advice
📘 Backend/Spring2023. 4. 3. 07:35Spring Exception Handler & Rest Controller Advice

📘Exception Handler 예외 발생 가능성이 있는 상황 클라이언트 요청 데이터에 대한 유효성 검증에서 발생하는 예외 서비스 계층의 비즈니스 로직에서 던져지는 의도된 예외 런타임 예외 UserController에 Exception Handler 적용 RequestBody에 유효하지않은 데이터 요청이 오면, 유효성 검증에 실패 유효성 검증에 실패시 내부적으로 던져진 예외인 MethoddArgumentNotValidException을 handleException() 이 받음 그 후, MethodArgumentNotValidException 개체에서 getBindingResult(), getFieldErrors() 를 통해, 발생한 에러 정보를 리스트로 확인 가능 객체에서 얻은 정보인 filedErro..

Service Layer
📘 Backend/Spring2023. 4. 3. 07:28Service Layer

📘API Service 연동 실습 API 계층에서 전달받은 DTO 객체를 서비스 계층의 도메인 엔티티 객체로 변환 계층별 관심사 분리 코드 구성의 단순화 Rest API 스펙의 독립성 확보 리팩터링 포인트 1. 컨트롤러의 핸들러가 DTO를 엔티티로 변환하는 작업까지 하고있다 DTO를 엔티티로 변환하는 작업을 다른 클래스에게 변환 위임 = membermapper 컨트롤러는 이제 두 클래스의 변환작업을 안함 (역할 분리) 2. 엔티티 클래스의 객체를 클라이언트의 응답으로 전송함으로써 계층간 분리 X 클라이언트 응답을 엔티티 클래스로 전송하지말고, 엔티티의 객체를 DTO의 객체로 바꿔줌 membermapper가 엔티티를 dto로 변환해줌으로써 서비스에있는 엔티티를 apu에서 직접 사용하는 문제 해결 📘구현 E..

정규표현식 (Regex)
📘 Backend/Spring2023. 4. 2. 13:19정규표현식 (Regex)

📘정규표현식 (Regex) ‘^’은 문자열의 시작을 의미합니다. ‘$’는 문자열의 끝을 의미합니다. ‘’는 ‘’ 앞에 평가할 대상이 0개 또는 1개 이상인지를 평가합니다. ‘\s’는 공백 문자열을 의미합니다. ‘\S’ 공백 문자열이 아닌 나머지 문자열을 의미합니다. ‘?’는 ‘?’ 앞에 평가할 대상이 0개 또는 1개인지를 의미합니다. ‘+’는 ‘+’ 앞에 평가할 대상이 1개인지를 의미합니다. Flags global = g 매칭되는 다수의 결과값 기억 multi line = m single line = s unicode = u sticky = y case insensitive = i Character 의미 | 또는 () 그룹 [] 문자셋, 괄호안의 어떤 문자든 [^] 부정 문자셋, 괄호안의 어떤 문가 아닐..

image