본문 바로가기

Server Development/Spring Basic

(12)
Spring - Image Save 이번 블로그에서는 이미지를 저장하는 방법에 대해서 정리해보고자 한다. API를 하나 작성하면서 이미지 저장에 대해서 알아보고자 하는데 기본적인 API 과정은 다음과 같다. 1. 클라이언트가 이미지 입력 2. 이미지 인코딩해서 전송 3. 서버에서 이미지 디코딩 4. DB에 저장 또는 파일 시스템에 저장 1. 클라이언트가 이미지 전송 테스팅을 위해 직접 프론트를 만들 수 있지만 insomnia의 multipart로 데이터를 전송받아 테스팅을 하였다. Multipart Form을 사용하면 Key-Value 형태로 서버에 데이터 전송이 가능한데 이미지 전송 또한 가능하다. 2. 이미지 인코딩해서 전송 기본적으로 이미지는 바이너리 형태의 데이터로 저장되어 있다. 보통 네트워크를 통해 이미지 파일을 서버에 전송시 ..
Spring - @Transactional Spring에서 Transaction 처리 - ACID에 대한 설정 - 설정은 config 파일, xml, 애너테이션 등으로 가능하다. - 일반적으로 애너테이션을 많이 사용하는데, @Transactional 사용시 프록시 객체를 생성하고 적용된 부분에 사용된다. PlatformTransactionManager 를 사용하여 트랜잭션을 시작하고 정상 여부에 따라 커밋/롤백이 수행된다. (AOP 구조와 같음 -> 설정된 메서드나 클래스 전/후에 동작) - private, protected는 무시한다. 설정 Propagation Type : propagation(동작 도중 다른 트랜잭션 호출시 처리할 내용) Isolation Level : isolation(일관성없는 데이터 허용 수준) Timeout : tim..
Spring - Spring Security 이번에는 로그인 등 인증/인가, API에 대한 접근 제한에 사용되는 Spring Sequrity에 대해서 정리해보고자 한다. 인증 - 해당 API를 접근 가능한지 인증 인가 - 특정 리소스에 접근 가능한지 인증 Security의 기본 원리 이해 기본적으로는 Servlet Context(tomcat)와 Spirng Dispatcher Servlet 사이에 Filter를 이용해 Sequrity를 적용한다. 하지만 이런식으로 Filter에 구현하게 되면, Filter는 Spring Bean을 인식하지 못하기에 문제가 발생한다. 예를들어, API 접근에 대한 권한을 부여할 때, 로그인 후 접근이 가능한 API가 있다고 가정하자. 이 때, FIlter에서 접근 제한을 한다면, 여러가지 Bean들에 대한 접근이 불..
Spring - Interceptor Interceptor - DispatcherServlet과 Controller 사이에서 Client의 요청을 가로채서 특정 작업을 수행 후 Controller에게 전달하는 역할 - Spring Boot에서는 HandlerInterceptor로 구현 HandlerInterceptor를 추가한 Spring의 기본 동작 구조는 다음과 같다. Client(Request) -> WAS(HttpServletRequest, HttpServletResponse 생성)-> Filter(Encoding등 처리) -> DispatcherServlet -> HandlerMapping(Controller Mapping) -> Dispatcher Servlet -> HandlerInterceptor -> Handler(Contr..
Spring - Jasypt JASYPT - 프로젝트에 간단한 암호화 기능을 제공해주는 JAVA 라이브러리 이다. - 단방향, 양방향 암호화 기능을 제공한다. - 스프링과 같은 싱글톤 환경에서 멀티스레드의 동기화 문제 걱정없이 사용 가능. (여러개의 스레드가 하나의 자원에 동시에 접근할 때 생기는 문제가 없다.) - 다양한 언어를 지원해 원본 문자 사용에 대한 제약이 없다. (인코딩에 대한 제약이 없다, 즉, 한글을 암호화하는 것도 가능하다.) 1. Dependancy 설정 com.github.ulisesbocchio jasypt-spring-boot-starter 3.0.5 2. Config 클래스 설정 package com.ReservationServer1.config; import org.jasypt.encryption.Str..
Spring - Multiple Requests, Threads 스프링에서는 많은 요청을 기본적으로 어떻게 처리되는지 그 방식이 궁금했다. 예를 들어, JPA에서는 영속 컨텍스트 안에 데이터 처리 요청이 들어오면 인스턴스가 생기고 그런 인스턴스들을 관리하다 트랜잭션이 끝남과 동시에 영속 컨텍스트는 종료된다. 스프링에서는 자체 내장된 tomcat container(context)를 사용한다. 앞서 설명한 영속 컨텍스트와 기본적으로는 동일한 개념이다. 사용자가 서버에 접속하면 스레드(인스턴스)가 생성되고 이를 활용해 여러 작업을 하는 것이다. 방식은 다음과 같다. 1. 서버 시작시 Tomcat은 스레드의 컬렉션으로 Thread Pool을 생성 2. HttpServeletRequest(Client의 요청, HTTP통신 , ServerSocket에서 accept한 객체)시 ..
Spring - AOP Spring에서는 기본적으로 여러가지 기능을 제공한다. IoC, DI, AOP, ORM, MVC, Test 등이 있는데 전반적으로 개발을 하는데 있어서 쉽게 하기위해서 제공해주는 기능 같다. 그 중에 스프링 AOP가 무엇인지 알아보려고 한다. AOP - Aspect Oriented Programming - 관점 지향 프로그래밍 - Object Oriented Programming(객체 지향 프로그래밍)을 보완하여 여러곳에서 쓰이는 공통기능을 모듈화하여 필요한곳에 연결함으로써 유지보수 또는 재사용이 용이해진다. 개발을 하다보면 자주 쓰이는 기능이 있다. 이들을 따로 모듈화하여 비지니스 로직과 분리해두지만 동작은 똑같게 만들어주는 방식을 AOP라고 한다. 코드를 분리할때, 핵심적인 관점과 부가적인 관점 둘로..
Spring - Exception 예외처리에는 크게 두가지로 볼 수 있다. Spring에서 기본적으로 제공해주는 Exception, 우리가 직접 구현해서 사용해는 Exception이 있다. 그 둘에 대해서 모두 알아보려고 한다. 우선, Exception은 다음과 같은 계층구조를 갖는다. Exception -RuntimeException - NullPointerException -IOException 기본 예외 처리 방식(Handler 생성) " @ControllerAdvice 또는 @RestControllerAdvice 로 모든 컨트롤러에서 발생할 수 있는 예외를 정의하고, @ExceptionHandler를 통해 발생하는 예외마다 처리할 메서드를 정의 " - Exception을 처리 - @RestControllerAdvice는 예외발생시..