스프링 데이터 JPA-22.Query by Example
스프링 데이터 JPA: Query by Example
QBE는 필드 이름을 작성할 필요 없이(뻥) 단순한 인터페이스를 통해 동적으로 쿼리를 만드는 기능을 제공하는 사용자 친화적인 쿼리 기술입니다. (감이 1도 안잡히는거 이해합니다.. 코드를 봐야 이해하실꺼에요.)
스프링 데이터 JPA-21.Specifications
스프링 데이터 JPA: Specifications
에릭 에반스의 책 DDD에서 언급하는 Specification 개념을 차용 한 것으로 QueryDSL의 Predicate와 비슷합니다.
스프링 데이터 JPA-20.EntityGraph, Projection
스프링 데이터 JPA: EntityGraph
-쿼리 메소드 마다 연관 관계의 Fetch 모드를 설정 할 수 있습니다.
스프링 데이터 JPA-19.Update 쿼리 메소드
스프링 데이터 JPA: Update 쿼리 메소드
쿼리 생성하기
- find…
- count…
- delete…
- 흠.. update는 어떻게 하지?
스프링 데이터 JPA-18.Named Parameter과 SpEL
스프링 데이터 JPA: Named Parameter과 SpEL
스프링 데이터 JPA-17.쿼리 메소드, Sort
스프링 데이터 JPA: 쿼리 메소드
쿼리 생성하기
- https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation
- And, Or
- Is, Equals
- LessThan, LessThanEqual, GreaterThan, GreaterThanEqual
- After, Before
- IsNull, IsNotNull, NotNull
- Like, NotLike
- StartingWith, EndingWith, Containing
- OrderBy
- Not, In, NotIn
- True, False
- IgnoreCase
스프링 데이터 JPA-16.Repository, Repository.save() 메소드
스프링 데이터 JPA: JPA Repository
@EnableJpaRepositories
- 스프링 부트 사용할 때는 사용하지 않아도 자동 설정 됨.
- 스프링 부트 사용하지 않을 때는 @Configuration과 같이 사용.
스프링 데이터 JPA-15.HATEOAS, Common 마무리(스프링 데이터 Common:Web)
스프링 데이터 Common: Web 4부: HATEOAS
Page를 PagedResource로 변환하기
- 일단 HATEOAS 의존성 추가 (starter-hateoas)
- 핸들러 매개변수로 PagedResourcesAssembler
스프링 데이터 JPA-14.DomainClassConverter, Pageable과 Sort 매개변수(스프링 데이터 Common:Web)
스프링 데이터 Common: Web 2부: DomainClassConverter
스프링 Converter
- https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/convert/converter/Converter.html
- Formatter…?
스프링 데이터 JPA-13.웹 지원 기능 소개(스프링 데이터 Common:Web)
스프링 데이터 Common: Web 1부: 웹 지원 기능 소개
스프링 데이터 웹 지원 기능 설정
- 스프링 부트를 사용하는 경우에.. 설정할 것이 없음. (자동 설정)
- 스프링 부트 사용하지 않는 경우?
@Configuration @EnableWebMvc @EnableSpringDataWebSupport class WebConfiguration {}
스프링 데이터 JPA-12.QueryDSL(스프링 데이터 Common)
스프링 데이터 Common: QueryDSL
findByFirstNameIngoreCaseAndLastNameStartsWithIgnoreCase(String firstName, String lastName) … 너무 길다..
스프링 데이터 JPA-11.도메인 이벤트(스프링 데이터 Common)
스프링 데이터 Common: 도메인 이벤트
도메인 관련 이벤트를 발생시키기
스프링 데이터 JPA-10.커스텀 리포지토리, 기본 레포지토리 커스터마이징(스프링 데이터 Common)
스프링 데이터 Common: 커스텀 리포지토리
쿼리 메소드(쿼리 생성과 쿼리 찾아쓰기)로 해결이 되지 않는 경우 직접 코딩으로 구현 가능.
- 스프링 데이터 리포지토리 인터페이스에 기능 추가.
- 스프링 데이터 리포지토리 기본 기능 덮어쓰기 가능.
- 구현 방법
- 커스텀 리포지토리 인터페이스 정의
- 인터페이스 구현 클래스 만들기 (기본 접미어는 Impl)
- 엔티티 리포지토리에 커스텀 리포지토리 인터페이스 추가
스프링 데이터 JPA-09.쿼리 만들기 개요 및 실습,비동기 쿼리(스프링 데이터 Common)
스프링 데이터 Common: 쿼리 만들기 개요
스프링 데이터 저장소의 메소드 이름으로 쿼리 만드는 방법
- 메소드 이름을 분석해서 쿼리 만들기 (CREATE)
- 미리 정의해 둔 쿼리 찾아 사용하기 (USE_DECLARED_QUERY)
- 미리 정의한 쿼리 찾아보고 없으면 만들기 (CREATE_IF_NOT_FOUND)
스프링 데이터 JPA-08.Null 처리하기(스프링 데이터 Common)
스프링 데이터 Common: Null 처리하기
스프링 데이터 2.0 부터 자바 8의 Optional 지원.
- Optional
findById(Long id);
스프링 데이터 JPA-07.Repository 인터페이스 정의하기(스프링 데이터 Common)
스프링 데이터 Common: Repository 인터페이스 정의하기
Repository 인터페이스로 공개할 메소드를 직접 일일히 정의하고 싶다면 (다 받지 말고 쓰는 것만 직접 선언)
스프링 웹 MVC-28.전역 컨트롤러:@(Rest)ControllerAdvice
전역 컨트롤러: @(Rest)ControllerAdvice
예외 처리, 바인딩 설정, 모델 객체를 모든 컨트롤러 전반에 걸쳐 적용하고 싶은 경우에 사용한다.
- @ExceptionHandler
- @InitBinder
- @ModelAttributes
스프링 웹 MVC-27.DataBinder:@InitBinder, 예외 처리 핸들러:@ExceptionHandler
DataBinder: @InitBinder
특정 컨트롤러에서 바인딩 또는 검증 설정을 변경하고 싶을 때 사용
스프링 웹 MVC-26.모델 @ModelAttribute
모델: @ModelAttribute 또 다른 사용법
@ModelAttribute의 다른 용법
- @RequestMapping을 사용한 핸들러 메소드의 아규먼트에 사용하기
- @Controller 또는 @ControllerAdvice(뒤에서 포스팅)를 사용한 클래스에서 모델 정보를 초기화 할 때 사용한다.
- @RequestMapping과 같이 사용하면 해당 메소드에서 리턴하는 객체를 모델에 넣어 준다.
- RequestToViewNameTranslator
스프링 웹 MVC-25.@ResponseBody & ResponseEntity 및 정리(핸들러 메소드)
핸들러 메소드 16부: @ResponseBody & ResponseEntity
@ResponseBody
- 데이터를 HttpMessageConverter를 사용해 응답 본문 메시지로 보낼 때 사용한다.
- @RestController 사용시 자동으로 모든 핸들러 메소드에 적용 된다.
스프링 웹 MVC-24.@RequestBody & HttpEntity(핸들러 메소드)
핸들러 메소드 15부: @RequestBody & HttpEntity
@RequestBody
- 요청 본문(body)에 들어있는 데이터를 HttpMessageConveter를 통해 변환한 객체로 받아올 수 있다.
- @Valid 또는 @Validated를 사용해서 값을 검증 할 수 있다.
- BindingResult 아규먼트를 사용해 코드로 바인딩 또는 검증 에러를 확인할 수 있다.
스프링 웹 MVC-23.ResponseEntity(핸들러 메소드)
핸들러 메소드 14부: ResponseEntity
파일 리소스를 읽어오는 방법
- 스프링 ResourceLoader 사용하기
스프링 웹 MVC-22.Flash Attributes, MultipartFile(핸들러 메소드)
핸들러 메소드 12부: Flash Attributes
주로 리다이렉트시에 데이터를 전달할 때 사용한다.
- 데이터가 URI에 노출되지 않는다.
- 임의의 객체를 저장할 수 있다.
- 보통 HTTP 세션을 사용한다.
스프링 웹 MVC-21.RedirectAttributes핸들러 메소드)
핸들러 메소드 11부: RedirectAttributes
스프링 웹 MVC-20.@SessionAttribute(핸들러 메소드)
핸들러 메소드 10부: @SessionAttribute
스프링 웹 MVC-19.폼 서브밋(에러 처리), @SessionAttributes, 멀티 폼 서브밋(핸들러 메소드)
핸들러 메소드 7부: 폼 서브밋 (에러 처리)
스프링 웹 MVC-18.@ModelAttribute, @Validated(핸들러 메소드)
핸들러 메소드 5부: @ModelAttribute
@ModelAttribute
- 여러 곳에 있는 단순 타입 데이터를 복합 타입 객체로 받아오거나 해당 객체를 새로 만들 때 사용할 수 있다.
- 여러 곳? URI 패스, 요청 매개변수, 세션 등
- 생략 가능
스프링 웹 MVC-17.URI 패턴, 요청 매개변수(단순타입), 폼서브밋(타임리프)(핸들러 메소드)
핸들러 메소드 2부: URI 패턴
@PathVariable
- 요청 URI 패턴의 일부를 핸들러 메소드 아규먼트로 받는 방법.
- 타입 변환 지원.
- (기본)값이 반드시 있어야 한다.
- Optional 지원.
스프링 웹 MVC-16.아규먼트와 리턴 타입(핸들러 메소드)
핸들러 메소드 1부: 지원하는 메소드 아규먼트와 리턴 타입
핸들러 메소드 아규먼트: 주로 요청 그 자체 또는 요청에 들어있는 정보를 받아오는데 사용한다.
스프링 웹 MVC-15.HEAD와 OPTIONS, 커스텀 애노테이션(요청 맵핑하기)
HTTP 요청 맵핑하기 5부: HEAD와 OPTIONS 요청 처리
우리가 구현하지 않아도 스프링 웹 MVC에서 자동으로 처리하는 HTTP Method
- HEAD
- OPTIONS
스프링 웹 MVC-14.미디어 타입, 헤더와 매개변수(요청 맵핑하기)
HTTP 요청 맵핑하기 3부: 미디어 타입 맵핑
특정한 타입의 데이터를 담고 있는 요청만 처리하는 핸들러
- @RequestMapping(consumes=MediaType.APPLICATION_JSON_UTF8_VALUE) // 문자열 대체 (produces=”application/json”)
- Content-Type 헤더로 필터링
- 매치 되는 않는 경우에 415 Unsupported Media Type 응답
스프링 웹 MVC-13.HTTP method, URI 패턴(요청 맵핑하기)
HTTP 요청 맵핑하기 1부: 요청 메소드
HTTP Method
- GET, POST, PUT, PATCH, DELETE, …
스프링 웹 MVC-12.스프링 MVC 핵심 기술 소개
스프링 MVC 핵심 기술 소개
- 애노테이션 기반의 스프링 MVC
- 요청 맵핑하기
- 핸들러 메소드
- 모델과 뷰
- 데이터 바인더
- 예외 처리
- 글로벌 컨트롤러
스프링 웹 MVC-11.기타 WebMvcConfigurer 설정
기타 WebMvcConfigurer 설정
스프링 웹 MVC-10.HTTP 메시지 컨버터(개요, JSON, XML)
HTTP 메시지 컨버터 1부: 개요
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/config/annotation/WebMvcConfigurer.html#configureMessageConverters-java.util.List-
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/config/annotation/WebMvcConfigurer.html#extendMessageConverters-java.util.List-
스프링 웹 MVC-09.리소스 핸들러
리소스 핸들러
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/config/annotation/WebMvcConfigurer.html#addResourceHandlers-org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry-
스프링 웹 MVC-08.핸들러 인터셉터
핸들러 인터셉터 1부: 개념
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/config/annotation/WebMvcConfigurer.html#addInterceptors-org.springframework.web.servlet.config.annotation.InterceptorRegistry-
스프링 웹 MVC-07.Formatter, 도메인 클래스 컨버터
WebMvcConfigurer 1부
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/config/annotation/WebMvcConfigurer.html#addFormatters-org.springframework.format.FormatterRegistry-
스프링 웹 MVC-06.스프링 부트 JSP, War 파일 배포
스프링 부트 JSP
“If possible, JSPs should be avoided. There are several known limitations when using them with embedded servlet containers.”
- https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-spring-mvc-template-engines
스프링 웹 MVC-05.스프링/부트 MVC 설정
스프링 MVC 설정
스프링 MVC 구성 요소 직접 빈으로 등록하기
- @Configuration을 사용한 자바 설정 파일에 직접 @Bean을 사용해서 등록하기
스프링 웹 MVC-04.DispatcherServlet, 스프링 MVC 동작원리
DispatcherServlet 동작 원리 1부
문자열로 리턴, 문자열만 화면 출력 (@ResponseBody를 활용 리턴)
스프링 웹 MVC-03.스프링 IoC 컨테이너, MVC 연동(ContextLoaderListener, DispatcherServlet)
스프링 IoC 컨테이너 연동
참고: https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc
스프링 웹 MVC-02.서블릿 소개, 애플리케이션 개발, 리스너와 필터
서블릿 소개
서블릿 (Servlet)
- 자바 엔터프라이즈 에디션은 웹 애플리케이션 개발용 스팩과 API 제공.
자바로 웹 애플리케이션을 개발할 수 있는 스펙과 API 제공(자바로 웹을 만들기 위해 필요한 기술)
좀 더 설명하면, 클라이언트가 어떠한 요청을 하면 그에 대한 결과를 다시 전송해 주어야 하는데, 이러한 역할을 하는 자바 프로그램.
스프링 웹 MVC-01.스프링 MVC 소개
스프링 MVC 소개
M: 모델
V: 뷰
C: 컨트롤러
스프링 데이터 JPA-06.리포지토리(스프링 데이터 Common)
구분 | 설명 |
---|---|
스프링 데이터 | SQL & NoSQL 저장소 지원 프로젝트의 묶음. |
스프링 데이터 Common | 여러 저장소 지원 프로젝트의 공통 기능 제공. |
스프링 데이터 REST | 저장소의 데이터를 하이퍼미디어 기반 HTTP 리소스로(REST API로) 제공하는 프로젝트. |
스프링 데이터 JPA | 스프링 데이터 Common이 제공하는 기능에 JPA 관련 기능 추가. |
스프링 데이터 JPA-05.스프링 데이터 JPA 원리
스프링 데이터 JPA 원리
JpaRepository<Entity, Id> 인터페이스
- 매직 인터페이스
- @Repository가 없어도 빈으로 등록해 줌.
스프링 데이터 JPA-04.Fetch, 쿼리
JPA 프로그래밍 6. Fetch
연관 관계의 엔티티를 어떻게 가져올 것인가? 지금(Eager)? 나중에(Lazy)?
- @OneToMany의 기본값은 Lazy
- @ManyToOne의 기본값은 Eager
스프링 데이터 JPA-03.관계 매핑, 엔티티 상태와 Cascade
JPA 프로그래밍 4. 관계 매핑
스프링 데이터 JPA-02.세팅 및 엔티티, Value 타입 맵핑
JPA 프로그래밍 1. 프로젝트 세팅
스프링 데이터 JPA-01.관계형 데이터베이스와 자바, ORM
관계형 데이터베이스와 자바
JDBC
- DataSource / DriverManager
- Connection
- PreparedStatement
부트 개념과 활용-34.스프링 부트 어드민(스프링 부트 운영)
스프링 부트 Actuator 3부: 스프링 부트 어드민
스프링 부트 어드민은 스프링 진영에서 제공하는 프로젝트가 아니라, 제 3자가 오픈소스로 제공한다.
앞선 포스팅의 Actuator 정보들을 UI에서 확인할 수 있게 해 준다.
부트 개념과 활용-33.Actuator 소개, JMX와 HTTP(스프링 부트 운영)
스프링 부트 Actuator 1부: 소개
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#production-ready-endpoints
애플리케이션의 각종 정보를 확인할 수 있는 Endpoints
- 다양한 Endpoints 제공.(공식문서 표 확인)
- JMX 또는 HTTP를 통해 접근 가능 함.
- shutdown을 제외한 모든 Endpoint는 기본적으로 활성화 상태.
- 활성화 옵션 조정
- management.endpoints.enabled-by-default=false
- management.endpoint.info.enabled=true
부트 개념과 활용-32.RestTemplate과 WebClient, 커스터마이징(스프링 REST 클라이언트)
스프링 REST 클라이언트 1부: RestTemplate과 WebClient
RestTemplate
Blocking I/O 기반의 Synchronous API
RestTemplateAutoConfiguration
프로젝트에 spring-web 모듈이 있다면 RestTemplateBuilder를 빈으로 등록해 줍니다.
https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#rest-client-access
구현 코드(RestTemplate)
~~~java @RestController public class SampleController {
부트 개념과 활용-31.시큐리티 설정 커스터마이징(스프링 시큐리티)
스프링 시큐리티 2부: 시큐리티 설정 커스터마이징
웹 시큐리티 설정
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/", "/hello").permitAll() // 해당 요청 모두 허용
.anyRequest().authenticated() // 나머지 요청은 인증 필
.and()
.formLogin()// 폼 로그인을 사용하고
.and()
.httpBasic(); // http 베이직 사용
}
}
이렇게 구현하면 / 와 /hello 요청은 인증 없이 사용이 가능하다.
부트 개념과 활용-30.Starter-Security(스프링 시큐리티)
스프링 시큐리티 1부: Starter-Security
스프링 시큐리티
- 웹 시큐리티
- 메소드 시큐리티
- 다양한 인증 방법 지원
- LDAP, 폼 인증, Basic 인증, OAuth, …
부트 개념과 활용-29.Neo4j(스프링 데이터)
스프링 데이터 11부: Neo4j
Neo4j는 노드간의 연관 관계를 영속화하는데 유리한 그래프 데이터베이스 입니다.
부트 개념과 활용-28.MongoDB(스프링 데이터)
스프링 데이터 10부: MongoDB
MongoDB는 JSON 기반의 도큐먼트 데이터베이스
부트 개념과 활용-27.Redis(스프링 데이터)
스프링 데이터 9부: Redis
캐시, 메시지 브로커, 키/밸류 스토어 등으로 사용 가능.
부트 개념과 활용-26.데이터베이스 초기화/마이그레이션(스프링 데이터)
스프링 데이터 7부: 데이터베이스 초기화
부트 개념과 활용-25.스프링 데이터 JPA(스프링 데이터)
스프링 데이터 5부: 스프링 데이터 JPA 소개
ORM(Object-Relational Mapping)과 JPA(Java Persistence API)
부트 개념과 활용-24.PostgreSQL(스프링 데이터)
부트 개념과 활용-24.PostgreSQL(스프링 데이터)
의존성 추가
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
부트 개념과 활용-23.DBCP와 MySQL(스프링 데이터)
부트 개념과 활용-23.DBCP와 MySQL(스프링 데이터)
DBCP(데이터베이스 커넥션 풀)
데이터베이스의 커넥션을 만들고 하는 작업들은 과정이 많은 작업이 이루어지기 때문에 짧지 않고 복잡하다.
커넥션을 미리 만들어 놓고, 미리 만들어 놓은 커넥션을 가져다 쓰는 방법.
부트 개념과 활용-22.인메모리 데이터베이스(스프링 데이터)
부트 개념과 활용-22.인메모리 데이터베이스(스프링 데이터)
지원하는 인-메모리 데이터베이스
- H2 (추천, 콘솔 때문에…)
- HSQL
- Derby
Spring-JDBC가 클래스패스에 있으면 자동 설정이 필요한 빈을 설정 해줌.
- DataSource
- JdbcTemplate
부트 개념과 활용-21.CORS(웹 MVC)
스프링 웹 MVC 11부: CORS
- Cross-Origin Resource Sharing의 약자.
- Single-Origin Policy를 우회하기 위한 표준 기술.
SOP과 CORS
- Single-Origin Policy - 같은 오리진에만 요청을 보낼 수 있다.
- Cross-Origin Resource Sharing - 서로다른 오리진끼리 리소스를 쉐어할수 있는 방법을 제공하는 표준
부트 개념과 활용-20.Spring HATEOAS
스프링 웹 MVC 10부: Spring HATEOAS
- HATEOAS를 구현하기 위해 필요한 기능을 제공하는 일종의 툴.
HATEOAS
- HATEOAS는 Hypermedia As The Engine Of Application State의 약자
- 하이퍼미디어를 REST API의 상태 정보를 관리하기 위한 매커니즘으로 활용하는 것
하이퍼미디어 : 하이퍼미디어 정보는 이용자가 정보를 탐색할 때 어떤 제목에서 관련 제목으로 뛰어넘어 갈 수 있도록 연결.
연결된 정보가 주로 문자 정보로 되어 있으면 하이퍼텍스트이고, 음악, 영상, 애니메이션 또는 다른 요소가 포함되어 있으면 하이퍼미디어.
부트 개념과 활용-20.ExceptionHandler
스프링 웹 MVC 9부: ExceptionHandler
부트 개념과 활용-19.HtmlUnit
스프링 웹 MVC 8부: HtmlUnit
부트 개념과 활용-18.Thymeleaf
스프링 웹 MVC 7부: Thymeleaf
부트 개념과 활용-17.웹JAR / index와 파비콘(웹 MVC)
스프링 웹 MVC 5부: 웹JAR
부트 개념과 활용-16.정적 리소스 지원(웹 MVC)
스프링 웹 MVC 4부: 정적 리소스 지원
부트 개념과 활용-15.HttpMessageConverters/ViewResolve(웹 MVC)
스프링 웹 MVC 2부: HttpMessageConverters
부트 개념과 활용-14.Spring-Boot-Devtools
Spring-Boot-Devtools
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
해당 의존성을 추가해주면 (Spring-Boot-Devtools 추가)
부트 개념과 활용-13.테스트/테스트 유틸
테스트
부트 개념과 활용-12.로깅(기본 로거 설정/커스터마이징)
로깅 1부 : 스트링 부트 기본 로거 설정
부트 개념과 활용-11.프로파일
프로파일
부트 개념과 활용-10.외부 설정 2부
외부 설정 2부
부트 개념과 활용-09.외부 설정 1부
외부 설정
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config
부트 개념과 활용-08.SpringApplication
SpringApplication 1부
부트 개념과 활용-07.독립적으로 실행 가능한 JAR
독립적으로 실행 가능한 JAR
부트 개념과 활용-06.내장 웹 서버 응용(HTTPS와 HTTP2)
내장 웹 서버 응용 2부 : HTTPS와 HTTP2
부트 개념과 활용-05.내장 웹 서버 응용(컨테이너와 포트)
내장 웹 서버 응용 1부 : 컨테이너와 포트
https://docs.spring.io/spring-boot/docs/current/reference/html/howto-embedded-web-servers.html
부트 개념과 활용-04.내장 웹 서버 이해
내장 웹 서버 이해
부트 개념과 활용-03.자동 설정 이해/만들기(Starter와 AutoConfigure/@Configuration)
자동 설정 이해
@EnableAutoConfiguration
- @SpringBootApplication 안에 @EnableAutoConfiguration이 들어있다. (@ComponentScan도 마찬가지.. 이미 앞에서 정리했으니 생략)
부트 개념과 활용-02.의존성 관리 이해/응용
의존성 관리 이해
부트 개념과 활용-01.스프링 부트 시작하기
Spring Boot?
스프링 핵심 기술-14.Null-safty
Null-safty
스프링 프레임워크 5에 Null 관련 애노테이션이 추가되었습니다.
- @NonNull
- @Nullable
- @NonNullApi (패키지 레벨 설정)
- @NonNullFields (패키지 레벨 설정)
스프링 핵심 기술-13.스프링 AOP
스프링 AOP : 개념 소개
앞서 Spring Triangle에서 정리한 AOP 내용과 겹치는 내용들은 정리만 하고 넘어가고,
자세한 내용 및 설명은 이전 글을 참고하면 될 것 같다. (대부분 겹치는 내용)
스프링 핵심 기술-12.SpEL(스프링 Expression Language)
SpEL(스프링 Expression Language)
- 객체 그래프를 조회하고 조작하는 기능을 제공한다.
jsp 사용시와 비슷한 ${} 등 스프링 3.0 부터 개발 및 지원
스프링 핵심 기술-11.PropertyEditor/Converter와 Formatter(데이터 바인딩 추상화)
in Back-end on Spring, Propertyeditor, Data binding, Databinder, Propertyeditor, Converter, Formatter
데이터 바인딩 추상화: PropertyEditor
데이터 바인딩?
기술적인 관점: 프로퍼티 값을 타겟 객체에 설정하는 기능
사용자 관점: 사용자 입력값을 애플리케이션 도메인 모델에 동적으로 변환해 넣어주는(할당하는) 기능
스프링 핵심 기술-10.Validation 추상화
Validation 추상화
Validator
org.springframework.validation.Validator
애플리케이션에서 사용하는 객체 검증용 인터페이스.
스프링 핵심 기술-09.Resource 추상화
Resource 추상화
java.net.URL 클래스를 추상화 한 것 (스프링 내부에서 많이 사용하는 인터페이스)
= org.springframework.core.io.Resource 클래스로 java.net.URL 클래스를 감싼 것.
스프링 핵심 기술-08.ResourceLoader 및 후기(IoC 컨테이너)
IoC 컨테이너 9부 : ResourceLoader
스프링 핵심 기술-07.ApplicationEventPublisher
IoC 컨테이너 8부 : ApplicationEventPublisher
ApplicationEventPublisher?
이벤트 프로그래밍에 필요한 인터페이스를 제공하기 때문에,
이벤트 기반의 프로그래밍을 할 때 유용한 인터페이스이며, 옵저버 패턴 구현체입니다.
스프링 핵심 기술-06.MessageSource
IoC 컨테이너 7부 : MessageSource
스프링 핵심 기술-05.Environment 프로파일/프로퍼티
in Back-end on Spring, Applicationcontext, Environment, Profile, Properties
IoC 컨테이너 6부 : Environment 1부.프로파일
스프링 핵심 기술-04.빈의 스코프
in Back-end on Spring, Bean, Bean scope, Singleton, Prototype
IoC 컨테이너 5부 : 빈의 스코프
스프링 핵심 기술-03.@Component와 컴포넌트 스캔
in Back-end on Spring, Ioc, Component, Componentscan, Functional bean definition
IoC 컨테이너 4부 : @Component와 컴포넌트 스캔
스프링 핵심 기술-02.@Autowire
in Back-end on Spring, Ioc, Bean lifecycle, Beanpostprocessor, Autowiredannotationbeanpostprocessor
IoC 컨테이너 3부 : @Autowire
이번 장도 마찬가지로 이전 포스트와 겹치는 내용들이 많았지만,
중간중간 에러 사례를 보여주며 자세한 옵션들 등 도움이 되는 추가 정보들이 있었던 것 같다.
자세한 설명은 이전 포스트를 참고하면 될 것 같다.
스프링 핵심 기술-01.스프링 IoC 컨테이너와 빈/ApplicationContext과 다양한 빈 설정 방법
IoC 컨테이너 1부 : 스프링 IoC 컨테이너와 빈
Spring Triangle-03.스프링 PSA
스프링 PSA
PSA?
우선 참고 문서를 보면
PSA(Portable Service Abstraction)란 환경의 변화와 관계없이 일관된 방식의 기술로의 접근 환경을 제공하려는 추상화 구조를 말한다. 이는 POJO 원칙을 철저히 따른 Spring 의 기능으로 Spring 에서 동작할 수 있는 Library 들은 POJO 원칙을 지키게끔 PSA 형태의 추상화가 되어있음을 의미한다. 가령 일반적인 JUnit이나 Mybatis 등의 여러 Java Framework 에서 사용가능한 라이브러리들은 Spring 에서 지원하는 JUnit 이나 MyBatis 라이브러리와 다르다. 또한 JPA를 사용할 때에 있어서도 Spring JPA가 추상화 시켜준다.
따라서 개발자가 Hibernate를 사용하건 EclipseLink 를 사용하건 신경쓸 필요가 없다.
따라서 이러한 외부 라이브러리들은 Spring에서 사용할 때 내부구현이 달라지더라도 동일한 인터페이스로 동일한 구동이 가능하게끔 설계되어 있으며 의존성을 고려할 필요가 없다.
Spring 은 이렇듯 특정 기술에 직접적 영향을 받지 않게끔 객체를 POJO 기반으로 한번씩 더 추상화한 Layer 를 갖고 있으며 이를통해 일관성있는 서비스 추상화를 구현한다.
그냥 쉽게 말하면 잘 만든 인터페이스로 이해하면 될 것 같다.
스프링의 철학처럼, 비침투성, POJO 등..
내가 어떤 코드를 짰는데, 그게 JPA를 쓰던, MyBatis 쓰던 코드의 변경이 없어도 된다. 어떤 특정 기술에 특화된 코드가 아니다.
(잘 만든 인터페이스를 사용하기 때문에)
Spring Triangle-02.스프링 AOP
AOP?
AOP(Aspect-oriented programming) 관점 지향 프로그래밍이란?
먼저 코드로 살펴보자.
Spring Triangle-01.스프링 IoC
시작
본격적인 로드맵 시작으로 예제로 배우는 스프링 입문(개정판)을 스타트했다.
대충은 아는 개념들이긴 했지만, 예제 특히 코드로써 직접 구현해보기도 하고,
그냥 매번 쓰는 방식대로 사용만 해오다가 명확하게 어떤 방식으로 구현되는지, 동작 원리나 라이프사이클 그리고 다른 구현 방식들에 대해서도 알게되었다.
추가적으로 기존에 명확히 정리되지 않던 개념들은 찾아보고 정리하면서 더 좋은 공부가 된 것 같다.
스프링 공식 예제 프로젝트 PetClinic
들어가며
스프링을 활용 웹 개발을 주로 하긴 하지만..
단순 구현이 아니라, 자세한 동작 원리부터 시작해서 깊게 한번 공부를 해 보고 싶다는 생각이 들었다.
(사실 입사하자마자 난 인정받는 에이스 개발자가 될거야! 하며 뿜뿜 열심히 그때 당시 도움이 될만한 공부들을 했는데,
기록하지 않고 혼자 공부하니 까먹는 것들이 생기더라.. 나중에 내가 정리한 걸 찾아보기도 어렵고..
또 대학시절 블로그를 운영하며, 정리하며 하게 되는 공부의 중요성, + 기타 나중에 찾아볼때 등 장점을 알고 있기 때문에
물론 그냥 공부한 하는것보단 훨씬 많은 시간이 소요될 테지만, 내 시간을 좀 더 추가해서 깊고, 오래가는 공부를 꾸준히 하려고 한다.
스프링 뿐만 아니라 꾸준히 계속해서 다른 분야까지도..