일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
- 객체지향프로그래밍
- 스프링부트
- aspect
- response
- MYSQL
- 인터셉터
- exception
- aop
- java
- 디자인패턴
- spring boot
- Filter
- proxy pattern
- Transaction
- git
- RestControllerAdvice
- Spring Security
- http
- Spring
- SQL
- 스프링 시큐리티
- OOP
- mybatis
- 관점지향프로그래밍
- 자바
- request
- Interceptor
- 트랜잭션
- 스프링
- network
- Today
- Total
목록spring boot (21)
장쫄깃 기술블로그
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/0ze8Z/btrFGOlLsuH/7xvSbZK5qDvZeFg3tAzwkK/img.jpg)
들어가며 Spring 에서는 Annotation 사용에 대한 기능을 많이 제공하고 있다. @Controller, @Service, @Component, @Repository 등 많은 Annotation이 존재한다. 해당 Annotation은 각 기능에 필요한 만큼 많은 기능을 내포하고 있으며, 이러한 내용을 잘 알지 못해도 필요한 기능만 쉽게 사용할 수 있도록 제공되어지고 있다. 하지만 이러한 Annotation에 대해 불필요한 내용이 포함되거나 새롭게 필요한 내용이 있는 경우 Custom을 하기도 한다. 그 중 주로 사용되는 @Target과 @Retention에 대해 알아보도록 하겠다. Meta-Annotation meta-annotation은 다른 annotation 에서도 사용되는 annotatio..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/5gSrC/btrFKGN0pgf/vy205gADUyranuoKqxf7Xk/img.jpg)
들어가며 스프링 프레임워크로 개발시 빈을 등록할 때 빈의 의존관계로 인해 빈들이 등록되는 순서를 지정할 필요가 있다. (예를 들어, C 빈은 A빈과 B빈 등록 후에 등록되어야 한다.) 이 때 사용하는 어노테이션은 @DependsOn 에 대해 알아보려고 한다. @DependsOn @DependsOn 은 어떤 빈이 다른 빈보다 먼저 초기화되도록 강제하며, 에러가 발생하더라도 개발자가 원인을 찾을 수 있도록 메시지를 보여준다. @Component("A") public class ComponentA { // ... } @Component("B") public class ComponentB { // ... } @Component("C") @DependsOn(value={"A", "B"}) public class ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bRLczU/btrFKH0n8SZ/wu88HPhR8QtNSkHYhksYZk/img.jpg)
들어가며 @Autowired는 Component Scan + @Component로 스프링 빈에 등록된 객체를 찾아서 필요한 의존관계를 설정한다. (우선적으로, 타입(Type)으로 해당 빈(Bean)을 찾는다.) 만약 @Autowired를 통한 자동 의존관계 주입 시 여러개의 빈이 존재한다면 어떻게 될까? 어떤 빈을 의존주입을 해야할 지 판단하지 못하는 경우 UnsatisfiedDependencyException 이 발생한다. UnsatisfiedDependencyException은 예외명에서도 알 수 있듯이 스프링 빈 객체들이 생성되는 과정에서 의존주입을 하게 되는데, 필드에 해당하는 의존관계를 만족시킬 수 없을 때 발생하는 예외이다. 그 중에서 대표적으로 NoUniqueBeanDefinitionExce..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/lONN3/btrDjNhkqUF/XxTCADPOAOsIA0vKBt57y1/img.jpg)
들어가며 스프링을 이용한 Web IDE를 만들어보았다. 웹 화면에서 코드를 치고 실행하면 실행시간, 결과 등을 확인할 수 있다. 필자는 해당 프로젝트를 Docker Container로 실행시켜 문제 발생 시 프로젝트를 종료시켜버리고 Docker에서 자동으로 재시작해주는 방법을 사용했다. 해당 글에서는 Docker 환경에 프로젝트를 배포하는 방법은 생략하고, 코드를 실행하고 실행시간과 결과를 반환해주는 방법에 대해서만 설명하려고 한다. 1. Java Reflection 이란? 해당 프로젝트에서는 Java Reflection을 사용하였다. 때문에 Reflection에 대해서 알아야 한다. 자바의 리플렉션(Reflection)은 클래스, 인터페이스, 메소드들을 찾을 수 있고, 객체를 생성하거나 변수를 변경할 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cwvUtT/btrzFFA6zfN/fz44pp126rIT77Ou9EgGDk/img.jpg)
들어가며 프로젝트 진행 중 Client, Server Filter에서 Request, Response을 자동으로 암/복호화해주는 로직 개발을 맡았다. 자세한 내용은 아래 흐름도를 참고하면 된다. 그런데 개발 진행 중 문제가 발생했다. Request, Response 값을 한번 읽으면 다시 사용할 수 없는 문제였다. Request 값을 암호화 후 전송할 경우 빈 값이 전송되고, Response 값을 복호화할 경우 최종적으로 빈 값이 수신되었다. 해당 문제에 대한 트러블슈팅 과정에서 배운 점과 해결 방법에 대해서 설명해보려고 한다. HttpServletRequest, HttpServletResponse의 InputStream 문서를 보면 해당 현상에 대한 설명이 있다. If the parameter data..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/8m8RI/btrzvyPwXLY/WkLZqWfQC6KZ3qxlRcjAo1/img.jpg)
Advice 언제 공통 관심 기능을 핵심 로직에 적용할 지를 정의하고 있다. 예를 들어, '메서드를 호출하기 전'(언제)에 '트랜잭션을 시작한다.'(공통기능)기능을 적용한다는 것을 정의하고 있다. Target 클래스에 조인 포인트에 삽입되어져 동작(적용할 기능)할 수 있는 코드를 '어드바이스'라 한다. 관점으로서 분리되고 실행시 모듈에 위빙된 구체적인 처리를 AOP에서는 Advice라고 한다. Advice를 어디에서 위빙하는지는 뒤에 나오는 PointCut이라는 단위로 정의한다. 또한 Advice가 위빙되는 인스턴스를 '대상객체'라고 한다. advice는 Pointcut에서 지정한 Jointpoint에서 실행되어야하는 코드이다. cp.) 스프링의 Advice 타입 - Around Advice: Joinp..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b2cvZC/btrzuYHJujq/6wAsUPkx8HZo6YSkVBL2GK/img.jpg)
들어가며 이전 글들에서 AOP에 대해 설명한 적이 있다. 그런데 AOP가 파면 팔수록 알아야 할 부분이 많다고 느꼈다. 그래서 별도로 AOP에 대한 세부적인 사항들에 대해 다뤄보려 한다. AOP(Aspect Oriented Programming) 란? AOP 는 관점 지향 프로그래밍이다. AOP는 자바와 같은 객체 지향 프로그래밍(OOP)을 더욱 OOP 답게 사용할 수 있도록 도와주는 역할을 한다. AOP에서 관점은 핵심적인 관점과 부가적인 관점으로 나눌 수 있다. 핵심적인 관점은 핵심 비즈니스 로직을 의미하고, 부가적인 관점은 공통으로 처리되어야 하는 코드를 의미한다. 예를 들어, 위 상황에서 필수적으로 처리되어야 하는 권한, 로깅, 트랜잭션 등의 공통 기능이 정말 커다란 시스템에서 각각 추가된다면 똑..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cGoilH/btrzuNMMmvT/dsAu5loWf4GKgwpBqGzrDk/img.jpg)
AOP에 대한 설명은 해당 글을 참고 링크 : https://jangjjolkit.tistory.com/6 [Spring Boot] Filter, Interceptor, AOP 들어가며 자바 웹 개발을 하다보면, 공통적으로 처리해야할 업무들이 많다. 예를들어 로그인, 권한, XSS, pc/mobile 등 사용자 agent 체크, 로그, 페이지 인코딩 변환 등이 있다. 공통업무에 관련된 코 jangjjolkit.tistory.com AOP 상세 설명 참고 링크 : https://jangjjolkit.tistory.com/10 [Spring Boot] AOP(Aspect Oriented Programming) 란? 들어가며 이전 글들에서 AOP에 대해 설명한 적이 있다. 그런데 AOP가 파면 팔수록 알아야 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/byFB3X/btrzuQhT9hV/Ee3t1QEqZQkz8Ikj5cxHr1/img.jpg)
Interceptor에 대한 설명은 해당 글을 참고 링크 : https://jangjjolkit.tistory.com/6 [Spring Boot] Filter, Interceptor, AOP 들어가며 자바 웹 개발을 하다보면, 공통적으로 처리해야할 업무들이 많다. 예를들어 로그인, 권한, XSS, pc/mobile 등 사용자 agent 체크, 로그, 페이지 인코딩 변환 등이 있다. 공통업무에 관련된 코 jangjjolkit.tistory.com 1. HandlerInterceptorAdapter를 상속받아 인터셉터 구현하기 스프링에서 인터셉터는 HandlerInterceptorAdapter를 상속받아 구현할 수 있다. 해당 클래스는 preHandle, postHandle, afterCompletion, ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/OD58h/btrzrL9ebRX/CZZ95gjVsl3aQtaNKeoXU0/img.jpg)
Interceptor에 대한 설명은 해당 글을 참고 링크 : https://jangjjolkit.tistory.com/6 [Spring Boot] Filter, Interceptor, AOP 들어가며 자바 웹 개발을 하다보면, 공통적으로 처리해야할 업무들이 많다. 예를들어 로그인, 권한, XSS, pc/mobile 등 사용자 agent 체크, 로그, 페이지 인코딩 변환 등이 있다. 공통업무에 관련된 코 jangjjolkit.tistory.com 1. @Component or @ServletComponentScan WebFilter 임베디드 WAS의 경우, 자동 설정에 의해서 Filter를 구현할 클래스에 @Component만 붙여줘도 필터가 등록된다. @Component public class SomeF..