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 매핑됨 테이..

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 의미 | 또는 () 그룹 [] 문자셋, 괄호안의 어떤 문자든 [^] 부정 문자셋, 괄호안의 어떤 문가 아닐..

Data Transfer Object (DTO)
📘 Backend/Spring2023. 4. 2. 13:17Data Transfer Object (DTO)

📘DTO (Data Transfer Object) HTTP Method별로 or Request, Response 별로 받아올 필드값(Request)과 보내줄 필드값(Response)을 잘 생각해서 필드값 설정 Mapstruct로 자동매핑이 어려운 필드의 경우 서비스클래스에서 비즈니스로직으로 처리하자. DTO 클래스 = 요청 데이터를 하나의 객체로 전달받는 역할 DTO를 적용하기 전엔 요청데이터를 @RequestParam을 통해 일일이 받았지만, 데이터가 많아질수록 @RequestParam의 개수도 많아질 것이다. DTO 클래스를 적용함으로써 코드의 간결성을 충족시킬 수 있다. DTO를 쓰는 가중 중요한 이유는 HTTP 요청의 수를 줄여 비용절감을 하는 것 아래에서 볼 예시는 DTO, 데이터 유효성 검증을..

Spring MVC & Rest API & Servlet
📘 Backend/Spring2023. 4. 2. 12:11Spring MVC & Rest API & Servlet

📘Spring Web MVC Spring의 모듈중 하나로 Suvlet API를 기반으로 웹계층을 담당 클라이언트의 요청을 편리하게 처리해주는 프레임워크 서블릿(Servlet)이란? 서블릿에 대해서는 ‘Spring Framework을 배워야 하는 이유’ 챕터에서 잠깐 언급을 한적이 있다. 서블릿은 클라이언트의 요청을 처리하도록 특정 규약에 맞추어서 Java 코드로 작성하는 클래스 파일이다. 그리고 아파치 톰캣(Apache Tomcat)은 이러한 서블릿들이 웹 애플리케이션으로 실행이 되도록 해주는 서블릿 컨테이너(Servlet Container) 중 하나임. Model Spring MVC 에서 'M' 에 해당 처리한 작업의 결과 데이터를 의미함 View Spring MVC 에서 'V&#..

image