본문 바로가기

Java, Kotlin, Spring/Spring, Spring Boot53

Spring - 프로파일, 프로퍼티 Spring IoC - Enviornment ApplicationContext 가 가진 속성 중 Enviornment 를 알아보자. 간단히 말하면 프로파일 (빈들의 모음), 프로퍼티 (환경 설정) 설정을 도와준다. 프로파일 ApplicationContext 는 spring IoC 최상위 클래스인 BeanFactory 뿐만 아니라 EnvironmentCapable 도 상속받는다. 이 외에도 여러가지 클래스를 상속받는다. 따라서 getEnviornment() 메소드를 사용할 수 있다. Enviornment 에서 프로파일을 받아올 수 있는데, 프로파일이란 빈들이 모인 그룹을 말한다. Enviornment의 역할은 활성화(active) 할 프로파일을 확인하고 설정을 도와주는 것이다. 따라서 사용하고 싶은 특정 .. 2021. 1. 11.
Spring IoC - ComponentScan, Bean scope ComponentScan 스프링부트 어노테이션인 @SpringBootApplication 은 @ComponentScan 을 포함하고 있다. @SpringBootApplication 이 Application 클래스 위에 붙어있다고 해보자. 컴포넌트 스캔은 빈을 찾아 등록하는데, 스캔하는 범위는 Application 와 같은 경로에 있는 모든 파일 / 하위 파일들이다. @ComponentScan 은 @Repository, @Service, @Controller, @Configuration 을 포함하고 있다. 또한 스캔할 애노테이션을 필터할 수 있는 기능도 제공한다. 컴포넌트 스캔에서 초기에 등록해야할 빈이 많을 경우, 초기 구동 시간이 오래 걸릴 수 있다. 하지만 일단 구동이 되면 후에 느려지진 않는다. 이.. 2021. 1. 10.
Spring IoC - @Autowired @Autowired 의존성을 주입할 때 사용한다. 필드, 세터, 생성자 위에 붙여 의존성을 주입할 수 있다. A클래스에 B클래스를 연결지어 보자(의존성을 주입해보자) 이 때, A는 빈에 등록되었고, B는 빈에 등록되어있지 않다. A클래스의 생성자에 @Autowired를 붙일 경우, 주입하려는 B클래스가 빈에 등록되어 있지않으므로 바로 에러가 난다. 파라미터로 받는 B클래스가 빈 공장에서 찾을 수 없으므로 생성자가 생성되지 않아 A클래스가 만들어지지 않기 때문이다. A의 필드나 세터 위에 붙일 경우도 에러가 난다. 하지만 이 때는 required 옵션으로 에러발생은 방지할 수 있다. @Autowired(required = false) required 기본값은 true 이다. 생성자에는 이 옵션을 넣어봐도 .. 2021. 1. 10.
Spring IoC - 빈 등록 방법 5가지 스프링 2003년 등장해서, java EE 와 호환관계이다. 서블릿 기반 애플리케이션을 만들 때 사용한다. 스프링 5부터는 WebFlux 지원으로 서블릿 기반 아닌 애플리케이션도 만들 수 있게 되었다. 디자인 철학 모든 선택은 개발자의 몫이다. 다양한 관점을 지향한다. 하위 호환성을 지킨다. API를 신중히 설계한다. 높은 수준의 코드를 지향한다. 컨테이너와 빈 IoC(Inversion of Control, 제어의 역전)은 의존성주입 (Dependency Injection)이라고도 하며 의존성있는 객체를 직접 만드는 것이 아닌, 주입 받아 사용하는 방법이다. BeanFactory 는 스프링 IoC 컨테이너의 가장 최상위 인터페이스이다. 빈이란? 빈(bean)은 스프링 IoC 컨테이너가 관리하는 객체이다... 2021. 1. 10.
Spring PSA 예시 Spring PSA Portable Service Abstraction PSA는 잘 만들어진 인터페이스라고 할 수 있다. 각각의 개발자들이 만든 코드는 확정성이 좋지 못하거나 특정 기술에 특화되어 있을 수 있다. 개발자들이 공동으로 쓰는 모듈은 그 서비스가 추상화되어 각 개발자들이 통일적, 효율적, 그리고 보다 쉬운 코드 개발이 가능하다. 스프링 웹 MVC를 예를 들어보자. (Model View Controller) @Controller 애노테이션이 붙은 클래스에서 @GetMapping, @PostMapping 등을 이용해서 원하는 url을 매핑시킬 수 있다. 한편 @RequestMapping 어노테이션을 붙인 클래스에서 @RequestMapping(method=RequestMethod.GET), @Re.. 2021. 1. 9.
Spring AOP 예제 Spring AOP 스프링의 트라이앵글로 IoC, AOP, PSA 가 있다. 그 중 AOP를 공부해보자. AOP Aspect Oriented Programming, 관점지향 프로그래밍 OOP 는 같은 종류의 대상을 최상위 클래스로 부터 아래 클래스를 긴밀한 관계(추상화, 캡슐화, 상속, 다형성)로 설계를 지향하는 프로그래밍이라면, AOP는 종류가 다른 클래스 사이에서 효율적인 코드 설계(중복 제거 등)를 지향하는 프로그래밍이다. AOP를 구현하는 방법은 아래와 같다. sample.java 를 컴파일하여 sample.class 가 되는 사이에 AOP를 구현한다. (AspectJ) 바이트코드를 조작하여 sample.java ➞ sample.class 로 컴파일 후 실행시키는 과정에서 메모리에서 AOP를 구현.. 2021. 1. 8.
Spring IoC란 스프링 IoC IoC Inversion of Control, 제어의 역전 일반적인 의존성 제어권은 내가 사용할 의존성은 내가 만드는 것이다. 제어의 역전 (IoC)은 내가 사용할 의존성은 이미 만들어져 있는 것에 연결한다는 의미이다. 의존성 주입(DI, Dependency Injection)은 일종의 IoC 이다. IoC 컨테이너 BeanFactory 는 IoC 컨테이너다. ApplicationContext 는 BeanFactory 를 상속받는다. ApplicationContext 빈을 만들고, 의존성을 엮어주고 제공한다. Bean 인텔리제이에서 Bean은 '녹색 콩'으로 표시해준다. 애노테이션이 붙어있거나 특정 인터페이스를 상속한다. Bean 애노테이션으로 직접 빈으로 등록할수도 있다. Applicat.. 2021. 1. 8.
[Spring Boot] 16 - DataBinder, 템플릿 엔진, 에러 핸들링 Spring Boot 016 - DataBinder, 템플릿 엔진, 에러 핸들링 7.1.9 ConfigurableWebBindingInitializer Spring MVC 는 특정 요청이 들어올 때 WebDataBinder를 초기화 시키기 위해 WebBindingInitializer를 사용합니다. ConfigurableWebBindingInitializer @Bean 을 생성하기 위해 스프링부트는 자동적으로 스프링 MVC를 설정합니다. 7.1.10 템플릿 엔진 REST 웹 서비스 뿐 아니라, 스프링부트를 사용해서 동적 HTML 컨텐츠를 서비스할 수 있습니다. Spring MVC는 다양한 템플릿 기술을 지원합니다. FreeMarker Groovy Thymeleaf Mustache 가능하다면 JSP는 사용을.. 2020. 4. 7.
[Spring Boot] 15 - WebJar, 컨텐츠 협상 Spring Boot 14 이어서... 또한 /webjars/** 경로에 있는 모든 리소스는 jar 파일로부터 서비스됩니다. 애플리케이션이 jar로 패키지되어있다면 src/main/webapp 폴더는 사용하지 않습니다. 스프링 부트는 Spring MVC에 의해 제공되는 심화된 소스 핸들링 특징을 지원합니다. version agnostic URLs : 버전을 명시할 필요없게 만들어 줌 cache-busting : 캐시값으로 변경된 내용을 계속 반영하도록 업데이트시킴 Webjars를 위한 버전 agnostic(배우지 않아도 사용하기 쉬운) URL을 사용하기 위해서는 webjars-locator-core의존성을 추가해야 합니다. 예시) resource/static/hello.html Hello Static 이.. 2020. 4. 7.
[Spring Boot] 14 - HttpMessageConverter, Static 리소스 맵핑 Spring Boot 014 - HttpMessageConverter, Static 리소스 맵핑 jackson : Java Object를 JSON로 또는 반대로 변환하는 라이브러리 gson : json 을 생성하고 파싱하는 라이브러리 단축키 Tip: Search everything(including code and menus) (Press Shift twice) RestController는 return 타입을 @ResponseBody 를 붙여준 것이나 다름없습니다. 따라서 RestContoller를 사용한다는 것은 httpMessageConverter를 쓴 것과 동일합니다. String converter는 복합객체에서 사용되지 않습니다. 기본적으로 json 형태로 변환되고, 불러올 클래스에 @XmlRoo.. 2020. 4. 7.
728x90