본문 바로가기

SpringFramework

(36)
JPA - 영속성 컨텍스트 영속성 컨텍스트 - EntityManager를 생성할 때 만들어지며 Entity를 저장하는 논리적인 공간 - EntityManager를 통해서 Entity를 영속성 컨텍스트에 보관 및 관리한다 특징 - 영속 상태는 식별자 값이 반드시 있어야 한다. (@Id 어노테이션으로 테이블의 기본 키로 매핑한 값) - 데이터베이스 저장 - 영속성 컨텍스트에 Entity를 저장(영속상태)하고 트랜잭션이 커밋되는 순간 DB에 반영하는데 이를 플러시(flush)라 한다. - Entity를 관리하여 아래와같은 장점이 생겨남 1] 1차 캐시 영속성 컨텍스트는 내부에 캐시를 가진다. 영속 상태의 Entity를 이곳에 저장한다. find() 메소드(데이터를 조회)를 호출하여 Entity를 조회할때 곧바로 DB로 가는것이 아닌 영..
Spring - 인스턴스 변수 참조 스프링 프레임워크는 필요한 클래스를 의존주입(Dependency Injection)하여 사용한다. 이때 주입하여 생성된 객체는 싱글톤으로 생성되어 스프링 컨테이너에서 한번 생성하여 관리한다. 싱글톤 Bean은 스프링 컨테이너에서 한번 생성된다. (컨테이너가 사라질 때 Bean도 제거된다) 생성된 하나의 인스턴스는 Single-Beans-Cache에 저장되고, 해당 Bean에 대한 요청과 참조가 있으면 캐시된 객체를 반환한다. 즉, 하나만 생성되기 때문에 동일한 것을 참조한다. 기본적으로 모든 Bean은 Scope이 명시적으로 지정되지 않는다면, Singleton이다. 단, ProtoType으로 빈이 생성된다면, 다수의 객체로써 존재하게 된다 이슈상황 코드 확인 controller package com.t..
Spring - Redis 연동 Redis Java Client중 "Lettuce"를 사용하여 진행한다. 의존성 추가 compile 'org.springframework.boot:spring-boot-starter-data-redis:2.3.1.RELEASE' // Redis Redis 외부설정 Properties (application.yml) 변수 기본값 설명 spring.redis.database 0 커넥션 팩토리에 사용되는 데이터베이스 인덱스 spring.redis.host localhost 레디스 서버 호스트 spring.redis.password 레디스 서버 로그인 패스워드 spring.redis.pool.max-active 8 pool에 할당될 수 있는 커넥션 최대수 (음수로 하면 무제한) spring.redis.pool...
Spring - Validation Spring에서는, Validation Annotation으로 Request Form에대한 요청이나, Parameter, Bean Class와 같은 여러가지 필드에 대하여 길이제한, 필수값 등.. 유효성 check를 할 수 있다. 의존성 추가 dependencies { implementation 'org.springframework.boot:spring-boot-starter-validation' // 유효성검사 implementation 'org.springframework.boot:spring-boot-starter-web' } Validation관련 주요 어노테이션 설명 @Min(value=*): value에 입력된 수치보다 크거나 같아야 한다 @Max(value=*): value에 입력된 수치보다..
Spring - ErrorController Spring Boot Application을 만들면서, 404 Page Not Found에 대한 처리를 커스텀해야할 상황이 생겼다. 스프링에서는 기본적으로 에러처리를 아래와 같은 방법으로 처리해준다. (링크 1.기본적인 에러 처리 참고) [스프링부트 (12)] SpringBoot 에러 페이지 설정(Custom Error Page) [스프링부트 (12)] SpringBoot 에러 페이지 설정(Custom Error Page) 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ Spring Boot Custom Error Page ] 입니다. : ) 0. 에러 페이지를 만들기 앞서 개발.. goddaehee.tistory.com 링크 내용에서도 언급했듯이, BasicErrorController라는 곳에서 기본적인..
Spring - Filter, InterCeptor, AOP 1] Filter 2] InterCeptor 3] AOP 이 세가지 기능은 비슷한 역할을 한다. 이들을 작업할 때 공통되는 부분을 중복코드를 방지하기 위해 묶어주는 역할을 한다. 이 기능들은 Spring에서 제공해준다. 그렇다면, 차이점은 어디에 있을까? 흐름은 아래 그림과 같다. 차이점은 실행하는 위치가 다르다. 흐름: Filter -> InterCeptor -> AOP -> InterCeptor -> Filter Filter Filter는 Servlet이 실행되는 동안에 Init가 실행되고, doFilter가 실행된다. [인코딩 변환 처리, XSS방어 등의 요청에 대한 처리부에 주로 사용] // Filter 예제코드. Filter 인터페이스를 오버라이딩하여 구현한다. import javax.servl..
Spring - Log4j2 log4j2, logback과 같은 로깅시스템은 왜사용할까?? 자바에서는 출력을 System.out으로도 할 수 있는데 문제는 운영이다. 개발시에 개발자가 출력한 System.out구문을 모두 제거하지 않았다면 운영시에 계속 로그가 출력되고 이것은 리소스 낭비를 초래한다. 그렇다고 개발자가 배포시에 모두 찾아서 지우는것 또한 일이다. 또한 운영시에 중대한 오류가 발생하였다고 했을때, 출력되는 로그가 없다고하면 그것 또한 문제를 찾기 위해 엄청난 시간과 노력이 들어간다. 이처럼 운영상에 로그를 남기지 않고 개발시에만 로그를 남김으로써 리소스 낭비를 줄일 수 있고 필요시에는 로그를 남겨서 오류 추적시에 사용될 수 있다. log4j의 프로젝트는 이미 종료되었고 추가적인 업데이트가 이루어지지 않는다. 현재는 l..
Spring - Swagger Swagger란? RestAPI로 개발시 문서를 자동으로 만들어주는 프레임워크 서비스의 API들에 대한 테스트를 해볼 수 있는 도구 해당 API의 스펙을 자동으로 문서화할 수 있다. API의 입력값 예시, 응답값, 오류 코드 등 확인하기 편리하다. 의존성 추가 swagger를 사용하기 위해서는 SPringfox-swagger2를 의존성에 추가해야함. implementation group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2' implementation group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2' Swagger 실행 Swagger설정 값을 스프링 Bean에..
Spring - RestTemplate = RestTemplate 이란? Spring에 내장되어있는 클래스중 하나로써, Rest방식의 API를 호출할 수 있다. Spring 3.0부터 지원한다. REST API 호출 이후, 응답을 받을 때까지 기다리는 동기 방식으로 http 통신에 유용하게 쓸 수 있다. (비 차단 및 비동기 방식도 지원) JSON, XML 등의 데이터를 쉽게 응답 받을 수 있다. = RestTemplate의 동작구조 (1) Application이 RestTemplate를 생성하고 URL, HTTP메소드 등의 헤더를 담아서 Request한다. (2) RestTemplate는 HttpMessageConverter클래스를 사용하여 RequestEntity를 요청 메시지로 변환한다. (3) RestTemplate는 ClientHtt..
Spring - ResponseEntity ResponseEntity는 무엇이며, 왜 사용하는 것일까? : Spring Framework에서 제공하는 클래스 중에 HttpEntity라는 클래스가 존재하는데, 이는 HTTP 요청(Request) 또는 응답(Response)에 해당하는 HttpHeader, HttpStatus를 포함하는 클래스이다. 이 HttpEntity 클래스를 상속받아 구현한 클래스가 ResponseEntity이다. 즉, 사용자의 HttpRequest(요청)에 대한 응답 데이터를 포함하는 클래스이며, 상태값(status), 헤더(header), 응답데이터(responsedata)에 대한 정의가 가능하다. 아래 예제 코드는 Response라는 공용 class를 정의하고, API에 대한 return Class를 ResponseEnti..