Back-End 52

HTTP 상태코드

🧫 상태코드클라이언트가 보낸 요청의 처리를 응답에서 알려주는 기능1xx (Informational) : 요청이 수신되어 처리중2xx (Successful) : 요청 정상 처리3xx (Redirection) : 요청을 완료하면 추가 행동이 필요4xx (Client Error) : 클라이언트 오류 , 서버가 요청을 수행할 수 없음5xx (Server Error) : 서버오류, 서버가 정상 요청을 처리하지 못함모르는 상태코드-> 상위 상태코드로 해석해서 처리ex) 234 ? -> 2xx (Successful)로 처리✖️ 1xx -Informational-거의 사용하지 않음✅ 2xx -Successful-200 OK요청 성공201 Created요청 성공해서 새로운 리소스가 생성됨생성된 리소스는 응답의 Loca..

Back-End/HTTP 2024.08.17

HTTP - 메서드

🖊️ API URI 설계리소스 식별 중점✔️ 리소스의 의미회원CRUD를 예로 들어보자회원 등록, 수정, 조회 자체가 리소스는 아니다.회원 이라는 개념 자체가 리소스가 된다.✔️ 리소스 식별방법회원의 CRUD(기능)를 모두 배제하고회원이라는 리소스만 식별 -> 회원 리소스를 URI에 매핑✔️ 계층 구조를 활용회원 목록 조회 /members회원 조회 /members/{memberId}회원 등록 /members/{memberId}...계층 구조상 상위를 컬렉션으로 보고 복수단어 사용 권장그렇다면 어떻게 구분할까?리소스와 행위를 분리 하는 것이다.📬 GET,POST✔️ GET : 리소스 조회리소스 조회서버에 전달하고 싶은 데이터는 query를 통해서 전달지원하지 않는 서버가 많아서 메시지 바디를 허용하지 않..

Back-End/HTTP 2024.08.17

HTTP 기본

💠HTTP?'Hyper Text Transfer Protocol'➡️ HTML같은 리소스 데이터들을 주고받는 프로토콜모든 것 전송 가능HTML,TEXT, 이미지, 음성, 영상,JSON,XML(API) 등일반적으로 알려진 거의 모든 파일을 전송서버 간 데이터 통신에도 대부분 HTTP를 사용TCP : HTTP/1.1, HTTP/2UDP : HTTP/3HTTP/1.1 주로 사용하지만 구글이나 네이버같은 사이트를 보면 HTTP/2, HTTP/3를 많이 사용한다.해당 사이트에서 어떤 프로토콜을 사용하는 지 보는 방법크롬 브라우저를 기준으로 F12를 눌러 NETWORK상태 창에서Protocol을 보면 나온다 .없을시 저 부분을 우클릭하여 프로토콜을 추가만약 아무것도 안나올 시 Filter부분에 뭔가 있는지 확인?..

Back-End/HTTP 2024.08.17

스프링 고급편 - 로그 추적기

✔️ 로그 추적 [TraceId] 깊이 ->(방향) (호출 메서드) (종료시간) (예외) 로그를 남김으로써 어떤 부분에서 문제가 있는지, 예외가 발생하는지 빠르게 확인이 가능하다. TraceId 와 TraceStatus 클래스를 만들어서 트랜잭션 ID(DB 트랜잭션X) 와 level(깊이), 메세지를 로그로 남긴다. public class TraceId { private String id; private int level; public TraceId() { this.id = createId(); this.level = 0; } private TraceId(String id, int level) { this.id = id; th..

QueryDsl - 핵심만 정리

QueryDsl은 객체 지향적 쿼리 작성 프레임워크이기에 매우 편리하고,컴파일 시점에서 오류를 잡아준다. 또한 가독성이 매우 좋고, 동적 쿼리 작성도 매우 좋다. 의존성 //Querydsl 추가 implementation 'com.querydsl:querydsl-jpa:5.1.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:5.1.0:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api"✔️ JPAQueryFactoryQueryD..

Back-End/QueryDsl 2024.08.14

스프링 데이터 JPA - 분석

✔️ 스프링 JPA 구현체 분석 org.springframework.data.jpa.repository.support.SimpleJpaRepository   @Repository // JPA 예외를 스프링이 추상화한 예외로 변환@Transactional(readOnly = true) // 서비스 계층에서 트랜잭션 시작시 해당 트랜잭션을 전파 받아서 사용public class SimpleJpaRepository ...{ @Transactional public S save(S entity) { if (entityInformation.isNew(entity)) { em.persist(entity); return entity; ..

Back-End/JPA 2024.07.31

스프링 데이터 JPA - 확장 기능

✔️ 사용자 정의 리포지토리 구현스프링 데이터 JPA 외에 JPA 직접사용 JDBC TemplateQuerydsl 사용데이터베이스 커넥션 직접 사용 등 ..  인터페이스 메서드를 직접 구현하고 싶을 때 사용 // 사용자 정의 인터페이스public interface MemberRepositoryCustom { List findMemberCustom();} 사용자 정의 인터페이스 구현 클래스@RequiredArgsConstructorpublic class memberRepositoryImpl implements MemberRepositoryCustom { private final EntityManager em; @Override public List findMemberCustom() {..

Back-End/JPA 2024.07.31

스프링 데이터 JPA - 페이징과 정렬, 벌크 수정

✔️  페이징과 정렬 페이징과 정렬 파라미터org.springframework.data.domain.Sort // 정렬 기능org.springframework.data.domain.Pageable // 페이징 기능 (내부에 Sort 포함)  특별한 반환 타입org.springframework.data.domain.Page // 추가 count 쿼리 결과를 포함하는 페이징org.springframework.data.domain.Slice // count 쿼리 없이 다음 페이지만 확인 가능 (내부적으로 limit + 1 조회)List(자바 컬렉션) : 추가 count 쿼리 없이 결과만 반환  Page 인터페이스public interface Page extends Slice { int getTotalPa..

Back-End/JPA 2024.07.29

스프링 데이터 JPA - 기본

✔️ 공통 인터페이스 설정JavaConfig 설정- 스프링 부트 사용시 생략 가능@Configuration@EnableJpaRepositories(basePackages = "jpabook.jpashop.repository")public class AppConfig {} 스프링 부트 사용시 @SpringBootApplication 위치를 지정(해당 패키지와 하위 패키지 인식)만약 위치가 달라지면 @EnableJpaRepositories 필요// T : 엔티티 타입// ID : 식별자 타입 (PK)public interface XxxRepository extends JpaRepository {}@Repository 애노테이션 생략 가능컴포넌트 스캔을 스프링 데이터 JPA가 자동으로 처리JPA 예외를 스프링..

Back-End/JPA 2024.07.29

API 학습 내용

api를 엔티티 그대로 반환하면 양방향 매핑시 무한 루프에 빠진다. @Jsonignore 을 사용하는것도 좋은 방법은 아니다. (항상 사용하지 않는것이 아니기에) DTO로 반환하자 💠  DTO로 조회하는 V4 ~ V6✔️ V3컬렉션 패치 조인 + 페이징 @BatchSize // 쿼리 1번 @GetMapping("api/v3.1/orders") public List ordersV3_page(@RequestParam(value = "offset", defaultValue = "0") int offset, @RequestParam(value = "limit", defaultValue = "100") int limit) { ..

Back-End/JPA 2024.07.15