Web Sever 개발과 CS 기초/스프링 (45) 썸네일형 리스트형 Spring Proxy가 아닌 방법으로 AOP 구현 방법 먼저 AOP란 무엇인가 서비스에는 핵심 기능과 부가 기능이 존재한다. 회원 가입 로직이라면 DB에 새로운 회원 정보를 등록하는 것이 핵심 기능이고, 트랜잭션을 관리하고, 로그를 찍는 것은 부가 기능이다. 이러한 부가 기능은 다른 곳에서도 반복 사용되기 때문에, 따로 분리하여 관리하는 것이 유리하다. AOP는 핵심 기능과 부가 기능을 분리하는 역할을 한다. AOP은 Aspect Oriented Programing의 약자이고, Aspect를 사용한 프로그래밍이라는 의미다. Aspect는 부가 기능의 역할은 무엇이고, 핵심 기능 중 어디에 적용할 지 정한다. 스프링이 제공하는 @Aspect가 Aspect중 하나이다. Proxy가 아닌 방법으로 AOP 구현 방법 1. AspectJ 컴파일러 .java 소스 코드.. OpenInView의미와 꺼야 하는 이유 OpenInView 의미와 꺼야 하는 이유 OpenInView는 하이버네이트에서는, Open Session In View이고, JPA에서는 Open EntityManager In View이다. OSIV가 켜져 있으면, DB 커넥션과 영속성 컨텍스트의 사용 범위를, API 응답이 끝날 때까지 유지한다. Controller에서 return을 하기 직전까지, 영속성 컨텍스트를 사용할 수 있는 것이다. 장점으로는 영속성 컨텍스트를 이용한 지연로딩을 Controller 영역에도 사용할 수 있다. 문제점은, 데이터베이스 커넥션을 너무 유지된다. 트래픽이 많은 서비스의 경우, 각 쓰레드마다, 커넥션을 늦게 반납하여, 커넥션 고갈 문제가 생긴다. 끄는 방법 spring: jpa: open-in-view: false 설.. CORS 이해와 동작 원리 파악 개요 목적 Spring 백엔드 서버를 웹페이지에서 테스트할 때 CORS 정책 예외를 만난다. 이번 시간에는 해당 CORS 의미와 동작 과정을 파악한다. 마지막은 Spring에서 CORS 정책을 허용하는 방법을 알아본다. CORS란 Cross-Origin-Resource-Sharing은 브라우저가 Cross Origin 데이터 교환에 대한 HTTP 통신을 통제하는 것을 의미한다. 예시를 통해 Cross Origin의 HTTP 통신 상황에 대해서 알아보자. 브라우저를 사용하는 http://localhost:8080이라는 UI 서버에서, 화면에 작성할 데이터를 받아오기 위해, http://www.imagelist.com:5510 백엔드 서버에서 HTTP 요청을 한다. 이때 브라우저(크롬)는 두 서버의 프로토콜.. ORM과 JPA, 영속성 쉽게 이해하기 ORM(Object Relational Mapping)이란 ORM은 객체와 관계형 데이터 베이스를 연결한다. 객체 지향 프로그램은 클래스를 사용하지만, 데이터 베이스는 테이블을 사용한다. 이러한 차이 때문에, 어플리케이션에서 DB에 접근할 때는 객체 지향 언어를 포기하고 SQL을 사용해야 했다. 하지만, ORM은 어플리케이션의 객체 지향스러운 언어를 자동을 SQL로 변환하여 둘 사이를 연결한다. 자바 진영의 표준 ORM 기술인 JPA를 통해서 ORM의 역할을 구체적으로 알아보자.(JPA예시를 통해서 본 ORM의 역할) JPA(Java Perisistence API)이란 JPA는 자바 진영의 표준 ORM 기술 인터페이스이다. 어플리케이션과 JDBC사이에 위치하여, 객체 정보와 객체 언어를 SQL로 변환하여.. DB Connection Pool 필요성, Hikari CP 알아보기 connection pool이란 DB Connection Pool을 잘 이해하기 위해, 복잡한 DB connection 획득에 대해서 먼저 알아보자. 어플리케이션은 DB 관련 로직을 수행할 때, DB Connection을 획득해야 한다. 예를 들어, 회원 가입 로직을 실행 할 때, 회원 가입자 목록 DB Table에 접근할 Connection이 필요한 것이다. DB Connection을 획득하기 위해서는 먼저, 어플리케이션은 DB드라이버를 통해 DB와 TCP/IP 커넥션 연결을 한다. 그리고 DB 드라이버를 통해 id, password 인증 정보를 보낸다. DB는 인증 정보를 확인해서 DB 연결이 완료 되었다는 응답을 보낸다. 마지막으로 응답을 받은 DB 드라이버에서 커넥션 객체를 생성한다. 위와 같은 .. SpringBoot 설정 파일 기능 활용하기(Profile나누기, 환경 변수 설정, 설정 파일 분리, group하기) 개요 목적 SpringBoot 설정 파일의 다야한 기능을 활용해서 개발 친화적인 프로젝트 만드는 방법을 알아본다. 알아볼 설정 파일 기능으로는 Profiles 나누기 profile별로 나누는 서비스 개발 환경 종류 gradle bootrun으로 profile별 실행 방법 설정 파일 환경 변수 가져오기 설정 파일 자체를 분리하기 spring.profiles.group을 통해 profile 그룹 분리하기 Profile 나누기 로컬 환경 실제 배포 환경에 따라 사용할 설정이 다를 때 Profile을 통해서 설정 정보를 편리하게 나눌 수 있다. 실행 시점에만 어떤 profile을 설정하는 지 선택하면 해당 설정 정보를 사용할 수 있다. Profile을 나누는 방법은 spring.config.activate.on.. @ExceptionHandler, @ControllerAdvice를 사용한 예외를 원하는 Response 처리 개요와 목적 스프링 REST API 서버에 정상적인 요청이 오면, 예외 발생 없이, 2XX Status Code와 api 정보를 제공한다. 하지만 잘못된 요청이 왔을 때(잘못된 파라미터 타입 등)는 예외가 발생하고, 그 예외를 catch하여 그에 맞는 Response header, body를 전송한다. 모든 예외를 Controller영역에서 try - catch하여 Response를 설정하면, 코드가 굉장히 복잡해지고, 유지 보수성이 떨어진다. 그래서 예외 발생 시, 스프링의 ExceptionResolver(@ExceptionHandler)를 사용해, 원하는 Response를 반환하는 방법에 대해서 알아보자. Spring이 제공하는 ExceptionResolver 종류 ExceptionResolver가 .. RFC7807가 제시한 오류 메시지 생성하기 개요 목적 REST API에서 클라이언트 요청에 에러가 발생 했을 때, 서버는 HTTP status 에러 code를 보낸다. (400 bad request, 404 not found) 하지만, HTTP status code만으로 에러의 원인을 정확히 파악하기 힘들다. 그 때 사용하는 것이, Response Body에 에러에 대한 정보를 담은 오류 메시지를 보내는 것이다. 이제 문제는 오류 메세지에 어떤 내용을 담을 지 생각해야 한다. 이런 고생을 덜어주는 것이, RFC 7807 표준이다. 이번 시간에는 RFC7807 제시한 오류 메세지의 구성과 내용에 대해서 알아보자. 오류 메시지 사용 시 주의사항 에러 상황에 맞는 적절한 HTTP status code를 제시하는 데 먼저 집중해야 한다. 단순 에러코드만.. 이전 1 2 3 4 5 6 다음