Spring Framework/Spring Core: 70개의 글
[Spring] 스프링 AOP 개념 이해 및 적용 방법 1. AOP(Aspect Oriented Programming) Spring은 Spring Triangle이라고 부르는 세 가지 개념을 제공해준다. 각각 IoC, AOP, PSA를 일컫는다. AOP는 Aspect Oriented Programming의 약자로 '측면/양상 지향적인 프로그래밍'이라는 의미이다. '측면/양상 지향 프로그래밍'이 무엇을 의미하는가? class A { method a() { AAAA method a가 하는 일들 BBBB } method b() { AAAA method b가 하는 일들 BBBB } } class B { method c() { AAAA method c가 하는 일들 BBBB } } 위와 같이 동일한 일을 하는 코드..
[Spring] 의존성 주입(DI, Dependency Injection)의 세가지 방법 Spring은 @Autowired 애노테이션을 이용한 다양한 의존성 주입 방법을 제공한다. @Autowired 애노테이션은 Spring에게 의존성을 주입하라는 지시자 역할로 쓰이는데 생성자, 필드, 세터에 붙일 수 있다. 🚨 Spring IoC 컨테이너에 의한 의존성 주입은 빈(Bean) 끼리만 가능하다. 1. 생성자 주입 @Component public class SampleController { private SampleRepository sampleRepository; @Autowired public SampleController(SampleRepository sampleRepository) { this.sam..
[Spring] 스프링 빈(Bean)의 개념과 생성 원리 빈(Bean) Spring IoC 컨테이너가 관리하는 자바 객체를 빈(Bean)이라는 용어로 부른다. 우리가 new 연산자로 어떤 객체를 생성했을 때 그 객체는 빈이 아니다. ApplicationContext.getBean()으로 얻어질 수 있는 객체는 빈이다. 즉 Spring에서의 빈은 ApplicationContext가 알고있는 객체, 즉 ApplicationContext가 만들어서 그 안에 담고있는 객체를 의미한다. 어떻게 Spring IoC 컨테이너에 빈을 등록할까? 빈을 만드는 방법은 다양하지만 기본적으로 크게 두가지 방법이 있다. ① Component Scanning ② 빈 설정파일에 직접 빈을 등록 Component Scan @Comp..
[Spring] 스프링 예제 PetClinic 프로젝트 분석 및 기능 변경 1. 프로젝트 로그 레벨 변경 로그를 통해 프로젝트의 실행 흐름을 살펴볼 수 있다. PetClinic 프로젝트는 기본 로그 레벨이 INFO로 되어있어서 자세한 로그를 확인할 수 없다. 어플리케이션에서 이것저것 눌러봐도 딱히 출력되는 로그가 없다. 로그 레벨을 DEBUG로 변경하자. Spring boot 프로젝트는 src/main/resources/application.properties 파일에 로그 레벨을 설정한다. application.properties # Logging #logging.level.org.springframework=INFO logging.level.org.springframework.web=DEBUG 기존에는..
[Spring] 스프링 예제 프로젝트 PetClinic 빌드 및 실행하기 1. GitHub에서 Spring 프로젝트 clone 받기 Spring의 공식 예제인 spring-petclinic을 사용한다. Clone받기 위해 https://github.com/spring-projects/spring-petclinic 에 접속한다. Clone or download를 클릭하고 클립보드에 카피하는 버튼을 클릭한다. IntelliJ 메인 메뉴에서 VCS - Get from Version Control...을 클릭한다. 복사한 github url을 입력한다. 디렉토리는 레파지토리 이름인 spring-petclinic으로 자동으로 지정된다. 변경이 필요하면 변경 후 Clone을 클릭한다. spring-petclinic..
참조문서 https://docs.spring.io/spring/docs/4.3.18.RELEASE/spring-framework-reference/html/websocket.html https://d2.naver.com/helloworld/1336 먼저 웹소켓 이전부터 천천히 알아보자 1. 클라이언트는 어떻게 이벤트를 받아왔나? 전통적으로 웹 클라이언트(브라우저)와 웹 서버는 http request - response 방식으로 동작한다. 그런데 서버에서 일방적으로 클라이언트에게 (요청을 안했는데도) 응답을 내려줘야하는 경우도 있을 수 있다. 바로 채팅이나 알림같은 경우이다. 메세지가 왔거나, 친구신청이 왔다거나 하는 경우들이다. 이런 경우들에 기존의 req - res 방식은 자연스럽지 못했는데, 애초에 ..
1. 다양한 intercept 방법들과 주 사용처 Servlet Filter : 인코딩, 인증, 압축, 변환 등 HandlerInterceptor : 세션, 쿠키, 검증 등 AOP : 비즈니스단 로깅, 트랜잭션, 에러처리 등 2. Servlet Filter 와 HandlerInterceptor 차이 Servlet Filter : Dispatcher Servlet의 앞단에서 들어오는 요청을 처리 J2EE 스펙 spring과 무관 HandlerInterceptor : Dispatcher Servlet의 뒤의 Handler 영역에서 요청을 처리 org.springframework.web.servlet.handler 패키지가 제공 흐름 정리 : Request -> Servlet Filter -> Dispatch..
1. AOP란? Aspect Oriented Programming 의 약자로 관점지향 프로그래밍이라고 부른다. IoC가 낮은 결합도와 관련된 것이라면 AOP 는 높은 응집도와 관련되어 있다. 서비스들의 비즈니스 메소드들은 복잡한 코드로 구성되어있는데, 그 중 핵심 로직은 얼마안되고 대부분은 트랜잭션, 로깅 처리, 인증과 관련된 코드들이 있을 수 있다. 이럴 때 비핵심이지만 꼭 필요하고, 공통화할 수 있는 부분을 따로 빼서(횡단 분리) 관리하는 것이다. 2. AOP 용어 조인포인트(Joinpoint) : 클라이언트가 호출하는 모든 비즈니스 메소드, 조인포인트 중에서 포인트컷되기 때문에 포인트컷의 후보로 생각할 수 있다. 포인트컷(Pointcut) : 특정 조건에 의해 필터링된 조인포인트, 수많은 조인포인트..
컨트롤러에서 request 들을 다양한 타입으로 받을 수 있다. 1. Servlet API ServletRequest, ServletResponse HttpServletRequest, HttpServletResponse : 위에꺼를 상속받음 HttpServletRequest.getInputStream() : InputStream, Reader 등을 얻을 수 있다. HttpServletResponse.getOutputStream() : OutputStream, Writer 등을 얻을 수 있다. HttpSession : HttpServletRequest 에서 세션관련한 것들만 있음 2. Spring API WebRequest : HttpServletRequest 와 비슷하지만 Servlet 과 의존성이 없다..
참조문서 : https://projectlombok.org/ 1. lombok 을 왜 쓰는가? 모델 Class (VO, DTO, Entity) 를 만들때, 제일 귀찮은 것이 생성자, 접근자, 설정자, toString() 등이라고 한다. 나는 별로 안 귀찮지만...ㅋㅋㅋ 그래도 lombok을 사용하면 @Getter, @Setter 같은 어노테이션만 붙이면 자동으로 해준다하니 알아보고 좋다면 써보자 기존 방식의 문제점 멤버변수를 제어하기위해 모델객체마다 반복적으로 메소드들을 생성해야 한다. IDE에서 generate 를 이용해서 편하게 생성할 수 있지만, 변수명이 바뀌면 다시 만들어야한다. lombok의 특징 생성자, 접근자, 설정자, toString() 자동생성 라이브러리이므로 위와 같은 번거로움이 없다...