CS/Backend

CS/Backend

[Spring] JPA - 양방향 연관 관계 mappedBy, @JoinColumn

참고: ORM 이란 참조: @JoinColumn과 연관관계 주인 1. ORM Object Relational Mapping, 객체-관계 매핑 관계형 데이터베이스의 데이터를 객체지향적 언어로 자동으로 매핑(연결)해주는 것을 말한다. 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용하기 때문에 객체 모델과 관계형 모델 간에 불일치가 존재한다. ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다. 데이터베이스 데이터 Object 필드 이를 통해 Spring에서 객체를 사용해 간접적으로 데이터베이스 데이터를 다룰 수 있다. Persistent API라고도 할 수 있다. Ex) JPA, Hibernate 등 데이터베이스의 관계의 종류는 크게 세 가지가..

CS/Backend

[Spring] @Valid와 @Validated를 이용한 유효성 검증

참고: @Valid와 @Validated를 이용한 유효성 검증의 동작 원리 및 사용법 예시 Validation 올바르지 않은 데이터를 걸러내고, 보안을 유지하기 위해 데이터 검증은 여러 계층에 걸쳐서 적용된다. 클라이언트의 데이터는 조작이 쉽고 모든 데이터가 정상적인 방식으로 들어오는 것이 아니기 때문에 클라이언트 측 뿐만 아니라 서버 측에서도 데이터 유효성을 검사할 필요가 있다. ✅ @Valid 와 @Validated 차이 @Valid @Validated JSR-303 자바 표준 검증 어노테이션 스프링 프레임워크에서 제공하는 어노테이션 적용 계층 컨트롤러 컨트롤러 + 다른 계층도 가능 유효성 검증 실패 시 발생하는 예외 MethodArgumentNotValidException ConstraintViol..

CS/Backend

[Spring] 서블릿, HTTP request & response

인프런의 스프링 MVC 김영한님 강의를 정리 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의 원래는 웹 애플리케이션(톰캣)을 직접 설치하고 그 위에 서블릿 코드를 클래스 파일로 빌드해서 올린 다음 톰캣 서버를 실행해야 한다. 1️⃣ 서블릿으로 HTTP 요청, 응답 보내기 웹 브라우저가 url로 요청 WAS 가 HTTP 요청에 맞춰서 request, response 객체 생성 > servlet 실행 servlet 이 요청을 처리하고 response 객체 반환 WAS 가 response 객체 정보로 HTTP 응답 생성 > 웹 브라우저에 전달 2️⃣ 서블릿 등록하기 서블릿을 직접 등록해서 사용하기 위해. Application 클래스에@ServletComponentScan을 적어주면 된다...

CS/Backend

[Spring] Pagiantion, Pageable 인터페이스

참고: Pageable을 이용한 Pagination을 처리하는 다양한 방법 Pagination 조회할 데이터 개수가 많을 때, 한 번에 조회되는 데이터의 개수를 한정시켜 페이지 단위로 나누는 기법 정렬 방식, 페이지 크기, 불러올 페이지 번호 등 지정할 수 있다. 조회할 데이터 개수가 적어진다 > 성능 향상 사용자가 데이터를 확인하는 과정에서 확인해야 하는 데이터가 줄어든다 > UX 향상 Pagination 방법 JpaRepository 사용repository.findTop20ByIdLessThanOrderByIdDesc(Long id) repository.findTop20ByOrderByIdDesc() Pageable 객체 이용 Pageable 인터페이스 JPA에서 제공하는 Pageable 객체를 이용..

CS/Backend

[Java] 직렬화, 역직렬화

참고: Serialization and Deserialization in Java with Example Java에서 입출력 시 스트림을 이용하는데, 스트림에서는 바이트 형태로 데이터를 전송한다. → 따라서 자바 객체를 바이트 배열로 변환하는 직렬화, 바이트 배열에서 객체로 변환하는 역직렬화를 사용한다. 직렬화 (Serialization) 객체를 바이트 스트림으로 변환하는 메커니즘 객체의 상태를 네트워크를 통해 전송이 가능해짐 직렬화된 바이트 스트림은 플랫폼에 독립적 > 다른 플랫폼에서 역직렬화 가능 java.io.Serializable 인터페이스를 구현하거나 Serializable 인터페이스를 구현한 클래스를 상속받은 클래스의 객체만 직렬화할 수 있다. Serializable 은 마커 인터페이스 마커 ..

CS/Backend

[Spring] REST, REST API

최근 다양한 브라우저, 모바일 디바이스 등 다양한 클라이언트가 등장했다 → 서버 프로그램은 다양한 클라이언트와 통신할 수 있어야 한다. → 멀티 플랫폼 지원을 위해 REST 등장 REST 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 방식 HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 아키텍처자원의 표현 (representation) 그 자원을 표현하기 위한 이름 ex) “students” 자원 해당 소프트웨어가 관리하는 모든 것 ex) 문서, 그림, 데이터, 소프트웨어 자체 등 장점 • HTT..

CS/Backend

[Spring] 웹 애플리케이션 개념 정리

인프런 - 스프링 MVC 김영한님 강의를 정리한 내용 출저: 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의 1️⃣ 웹 애플리케이션 웹에서 데이터를 주고받을 때 거의 HTTP 프로토콜을 사용. 웹 서버 HTTP 기반으로 동작 웹 애플리케이션 서버 웹 서버의 기능을 포함 + 프로그램 코드를 실행해서 애플리케이션 로직 수행 동적 HTML 제공, HTTP API 제공 웹 서버 WAS 정적 리소스 제공 + 애플리케이션 로직까지 실행 가능 (자바) 서블릿 컨테이너 기능을 제공 간단한 웹 시스템 구성 = WAS & DB but, WAS 가 너무 많은 역할을 담당 서버 과부하 우려 정적 리소스 때문에 애플리케이션 로직 수행이 어려움 WAS에 장애 발생 > 웹에 접근 자체가 안됨, 오류 화면도 노..

CS/Backend

[이슈] Spring boot 프로젝트 실행 시 html 파일을 찾지 못하는 에러, whitelabel error page

http://localhost:8080/send 로 접속했을 때 다음과 같은 에러가 뜬다. 찾아보니 FormController에서 templates 폴더 내 html 파일을 읽어오지 못해서 발생하는 에러 같았다. 2023-06-13T13:41:46.521+09:00 ERROR 16356 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Circular view path [send]: would dispatch back to the current handler URL [/send] ag..

CS/Backend

[JAVA] 예외 처리

참고: http://www.tcpschool.com/java/java_exception_intro Exception 클래스 오류 (error) : 시스템 레벨에서 발생하는 심각한 수준의 오류로, 실행 중인 프로그램을 종료 시킴 > 미리 예측 불가능, 처리가 불가능 예외 (exception) : 개발자가 구현한 로직에서 발생하는 문제, 발생 상황을 미리 예측해서 예방할 수 있다. > 처리 가능 모든 예외 클래스는 Throwable 클래스를 상속받는다. Throwable을 상속받는 클래스 Error Exception Exception 클래스 자바에서 발생하는 모든 예외의 조상 클래스 RuntimeException와 그 하위 클래스들 = UncheckedException 클래스 그 외 Exception의 자식..

CS/Backend

[MySQL] WINDOW 함수

WINDOW 함수 참고: https://learn.microsoft.com/en-us/sql/t-sql/queries/select-over-clause-transact-sql?view=sql-server-ver16 OVER 절로 window 함수를 어떻게 적용할지 정의한다. (파티션, 정렬 순서, 범위… 등) > Row 윈도우 안에서 각 행의 값을 계산하고 하나의 결과를 반환 (그룹 별로 하나의 결과를 반환하는 집계 함수와 다르다) offset (옵션) : 값을 가져올 행의 위치. (default) 1 PARTITION BY (옵션) : WINDOW 함수를 적용할 그룹을 나누는 기준 ORDER BY : 파티션 내 정렬 기준 [WINDOW함수](적용할_컬럼[, offset]) OVER ( [ ] [ ] [..

yooja_tea
'CS/Backend' 카테고리의 글 목록