AOP란?애플리케이션의 횡단 관심사를 모듈화하는 방법이다.AOP를 통해 로깅, 트랜잭션 관리, 보안 등 공통 기능을 애플리케이션의 다른 부분에 영향을 주지 않고 분리하여 관리한다.Spring AOP는 프록시 패턴으로 구현되었다.메소드 실행 전후, 예외 발생 시점에 추가적인 행동을 정의한다. 적용 방식컴파일 시점 적용AspectJ 컴파일러가 .java파일 컴파일 시에 부가기능을 넣어 .class 파일로 컴파일한다.이를 위빙이라 한다. 클래스 로딩 시점 적용JVM내 클래스로더에 .class 파일을 올릴때 바이트코드를 조작하는 방식이다. 런타임 시점 적용애플리케이션 main 메서드 실행 이후에 자바가 제공하는 범위에서 부가기능을 적용한다.코드를 조작하기 어려워, 프록시를 통해 부가기능 적용한다. Spring ..

Filter와 Interceptor [Spring] Filter와 InterceptorFilter? url 패턴이 맞는 요청에 대해 Dispatcher Servlet으로 요청되기 전, 후에 부가적인 작업을 한다. DIspatcher Servlet은 스프링의 가장 앞단에 존재하며, Filter는 스프링 컨테이너 밖, 톰캣 등의 웹 컨테sm-jeon-develop.tistory.com Dispatcher Servlet이란?Http 프로토콜로 들어오는 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러이다.과거에는 모든 서블릿을 URL 매핑을 위해 web.xml에 모두 등록해야 했다.DispatcherServlet이 모든 요청을 핸들링하고, 공통 작업을 처리하게 되어, 컨트롤러를 구현하기만 하..
실시간 업데이트 기능 구현 방법1. Polling클라이언트가 주기적으로 서버에 요청을 보내는 방식이다.구현이 단순하지만, 계속 요청하는 점에서 리소스 낭비가 발생할 수 있다.2. Long Polling클라이언트가 요청을 보내면, 서버에서 변경이 일어날 때까지 (이벤트 발생할 때까지) 대기한다.Connection이 연결된 동안의 이벤트 발생을 실시간으로 감지한다.주기적으로 요청을 보내지 않는다. (유지 시간 내 이벤트가 발생한다면) 유지 시간을 짧게 설정하면, Polling과 차이가 없다.지속적으로 연결되어있어 순간적으로 부담이 증가할 수 있다.3. WebSocketConnection을 지속해 연결에 드는 비용 제거한다.양방향으로 데이터를 주고받을 수 있다.HTTP가 아닌 ws 프로토콜을 사용한다.4. S..
클라이언트 요청으로 이미지를 받아 S3에 업로드하면, S3에서 반환해주는 이미지 url을 DB에 저장해 사용한다. build.gradle에 의존성 추가하기implementation("org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE") application.properties에 액세스 키 등 등록하기aws.credentials.access-key=aws.credentials.secret-key=aws.credentials.region=aws.s3.bucket= Config 등록하기@Configurationclass S3Config ( @Value("\${aws.credentials.access-key}") val accessKey: ..
클라이언트에서 이미지나 파일, 데이터 등을 보낼 때, multipart/form-data 타입으로 보낸다.이를 request 파라미터로 MultipartFile 객체를 통해 데이터를 받는다.multipart/form-data 요청의 일부를 @RequestPart 를 사용해 컨트롤러 메소드 파라미터와 연결한다.Spring MVC에서는 MultipartResolver가 Bean으로 등록되어 있어야 한다. (Spring Boot에서는 따로 등록할 필요가 없다.)@PostMappingfun uploadImage( @RequestPart image: MultipartFile, @RequestPart description: String) {} 이제, multipart/form-data 형식으로 HTTP ..
기본적으로 Redis는 id를 통해서만 검색이 가능하기 때문에, 검색하고자 하는 필드에 @Indexed를 붙여 해당 필드로도 검색이 가능하도록 한다. 보조인덱스를 지정하면, 해당 값이 실제로도 저장된다. @RedisHash("User") class User( @Id id: String = null? @Indexed name: String = null? ) 위 객체를 사용해 Redis에 저장할 때, 아래와 같이 저장된다. "User:exampleId", "_class" "com.example.User", "name" "exampleName" "User:name:exampleName", "exampleId" "User:exampleId:idx", "User:name:exampleName" @Indexed는 ..
RestClient? 외부 api를 호출하여 데이터를 받아와야 할 때가 있다. api 호출을 위해 사용한다. RestTemplate와 동일한 기술 기반으로, WebClient와 유사한 사용 방식으로 사용한다. RestClient는 동기적으로 작동하지만, WebClient는 비동기 방식을 지원한다. 그럼에도 RestClient를 사용하는 이유는, WebClient는 Spring Webflux 의존성이 강제되기 때문에 외부 api호출만을 필요로 하기에는 부적합할 수 있다. RestClient 객체 생성 RestClient.create(); RestClient.create(restTemplate); RestClient.builder() .build(); RestClient로 요청 보내기 restClient.g..
Jedis, Lettuce Java의 Redis Client이다. Jedis는 멀티 쓰레드에서의 불안정함 등의 단점때문에, Lettuce를 쓰는 추세이다. Spring 2.0에서, Jedis가 Deprecate되었다고 한다. Redis 사용 설정하기 의존성 추가하기 implementation("org.springframework.boot:spring-boot-starter-data-redis") application.properties에 호스트와 포트 정보 등록하기 spring.redis.host=localhost spring.redis.port=6379 Configuration 정의하기 @Configuration class RedisConfig ( @Value("\${spring.redis.host}"..

Filter? url 패턴이 맞는 요청에 대해 Dispatcher Servlet으로 요청되기 전, 후에 부가적인 작업을 한다. DIspatcher Servlet은 스프링의 가장 앞단에 존재하며, Filter는 스프링 컨테이너 밖, 톰캣 등의 웹 컨테이너에 존재한다. Filter는 아래 3가지의 메소드를 가지고 있다. init 웹 컨테이너가 실행될 때 1회 실행한다. doFilter url pattern이 맞는 http 요청이 Dispatcher Servlet으로 전달되기 전에 실행된다. 파라미터에 FilterChain이 있는데, 이 파라미터의 doFilter 메소드를 호출해 다음 대상으로 요청을 전달한다. 이 메소드 호출 전/후에 필요한 처리 로직을 넣는다. destroy 필터를 서비스에서 제거할 때 호..
단방향, 양방향 암호화 단방향 암호화: 복호화가 불가능한 암호화 양방향 암호화: 복호화가 가능한 암호화 단방향 암호화가 보안관점에서 더 좋지만, 예를 들어 비밀번호 찾기가 불가능하다는 단점이 있다. (비밀번호 재설정하는 방식으로 대체 가능) Spring Security가 제공하는 BCrypt 알고리즘을 이용해 단방향 암호화를 하는 예시를 참고할 것이다. Spring Security 의존성 추가 implementation ("org.springframework.boot:spring-boot-starter-security") Config 설정 @Configuration @EnableWebSecurity class SecurityConfig { @Bean fun passwordEncoder() = BCrypt..
- Total
- Today
- Yesterday
- ECN 패킷
- 세션 연결
- 데이터링크 계층
- IP
- 교환 시스템
- 사설 IP 주소
- TTL
- 통합점
- 네임 서버
- Internetworking
- OSI 7계층
- 동기점
- 서비스 프리미티브
- 라우팅
- 전송 계층
- 링크 상태 라우팅
- 포트 주소
- 리키 버킷
- 혼잡
- 와일드카드 마스크
- 세션 계층
- 네트워크
- 네트워크 계층
- Service Primitive
- 가상 회선
- 거리 벡터 라우팅
- 데이터링크
- 표현 계층
- HTTP
- 오류 제어
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |