본문 바로가기

Spring53

트랜잭션의 개념과 이해 우리가 데이터를 파일이 아닌 데이터베이스에 저장하는 이유는 데이터베이스는 트랜잭션이라는 개념을 지원한다. 트랜잭션은 데이터베이스 안에서 하나의 거래를 안전하게 처리하도록 보장해주는 것을 뜻한다. 예를 들어 A가 B에게 5000원을 계좌이체 하는 상황에서 1. A의 잔고 5000원 감소 2. B의 잔고 5000원 증가 이 두가지 작업이 하나의 작업처럼 진행되어야 한다. 트랜잭션이 없다면 1이 성공했을때 2는 실패하거나 2가 성공했을 때 1이 실패하면 큰 문제를 야기할 수 있다 트랜잭션 기능을 사용하면 둘 다 성공해야 결과를 저장(Commit)하고 하나라도 실패하면 그 전의 상황으로 롤백(Rollback)한다. 트랜잭션은 ACID를 보장해야한다. 원자성 (Atomicity) - 트랜잭션 내에서 실행한 작업들.. 2022. 7. 24.
Spring Boot 와 JWT JWT는 JSON 객체를 사용해서 토큰 자체에 정보들을 저장하고 있는 Web Token이라고 정의할 수 있다. JWT를 이용하는 방식은 헤비하지 않고 아주 간편하고 쉽게 적용할 수 있어서 사이드 프로젝트를 진행할 때 유용하다. JWT의 장점 중앙의 인증서버 의존성 없음 데이터 스토어에 대한 의존성 없음 시스템 수평 확장 유리 Base64의 URL Safe Encoding을 이용하기 때문에 URL, Cookie, Header 모두 사용 가능 JWT의 단점 Payload의 정보가 많아지면 네트워크 사용량 증가 -> 데이터 설계 고려 필요 토큰을 클라이언트에 저장 -> 서버에서 토큰을 조작할 수 없음 실습을 진행중인데 어려워서 좀 더 공부하고 적어야 할듯 싶다. 2022. 7. 20.
파일 업로드 파일을 업로드 하려면 파일은 문자가 아니라 바이너리 데이터를 전송해야 한다. 문자를 전송하는 이 방식으로 파일을 전송하기는 어렵다. 이 문제를 해결하기 위해 HTTP는 multipart/form-data 라는 전송 방식을 제공한다. 첫 예제에서는 서블릿을 이용한 파일 업로드를 구현함. application.properties logging.level.org.apache.coyote.http11=debug 이 옵션을 사용하면 HTTP 요청 메시지를 확인할 수 있다. 멀티파트 사용 옵션 spring.servlet.multipart.max-file-size=1MB : 파일의 최대 용량 제한 가능 spring.servlet.mulitpart.enabled=true (기본) : false로 설정하면 멀티파트 데이.. 2022. 6. 26.
스프링 타입 컨버터 애플리케이션을 개발하다 보면 문자를 숫자로 변환하거나, 반대로 숫자를 문자로 변환해야 하는 것처럼 타입을 변환해야 하는 경우가 상당히 많다. TypeConverter 이때 타입 컨버터를 이용하여 타입을 바꿀 수 있다. @Slf4j public class IntegerToStringConverter implements Converter { @Override public String convert(Integer source) { log.info("convert source = {}", source); return String.valueOf(source); } } 하지만, 이렇게 타입 컨버터를 하나하나 직접 사용하면, 개발자가 직접 컨버팅 하는 것과 큰 차이가 없다. ConversionService 이렇게 타.. 2022. 6. 25.
로그인 처리 - 필터, 인터셉터 서블릿 필터 필터는 서블릿이 지원하는 수문장과 같다. 웹의 공통 관심사항을 처리하는데 쓰이는데 이는 스프링에서 AOP로도 가능하지만, 서블릿 필터와 인터셉터를 이용하는 것을 추천한다. 관심사항은 모든 고객의 요청을 로그를 찍거나 로그인 여부를 확인하는 필터 등 다양하다. 필터를 통과하면 서블릿 페이지로 이동하고, 통과하지 못하면 서블릿 페이지를 보여주지않는다. 필터는 체인형식으로 여러개를 이을 수 있다. 참고) 실무에서 HTTP 요청시 같은 요청의 로그에 모두 같은 식별자를 자동으로 남기는 방법은 logback mdc 검색. 스프링 인터셉터 스프링 인터셉터는 스프링 MVC가 제공하는 기술이다. 스프링 인터셉터가 더 많은 기능을 제공하고 더 좋다. 인터셉터는 스프링 MVC 구조에 특화된 필터 기능을 제공한.. 2022. 6. 18.
로그인 처리 - 쿠키와 세션 스프링 프레임워크 기말고사 프로젝트를 진행하면서 쿠키를 사용해서 로그인을 유지할 수 있었다. 그런데 쿠키에는 심각한 보안문제가 있다. 보안문제 쿠키값은 임의로 변경 가능 쿠키에 보관된 정보는 훔쳐갈 수 있음 해커가 쿠키를 훔쳐가면 평생 사용 가능 대안 쿠키에 중요한 값을 노출하지 않고, 사용자 별로 예측 불가능한 임의의 토큰(랜덤 값)을 노출하고, 서버에서 토큰과 사용자 id를 매핑해서 인식한다. 그리고 서버에서 토큰을 관리한다. 토큰은 해커가 임의의 값을 넣어도 찾을 수 없도록 예상 불가능 해야 한다. 해커가 토큰을 털어가도 시간이 지나면 사용할 수 없도록 서버에서 해당 토큰의 만료시간을 짧게(예: 30분) 유지한다. 이러한 보안책들을 한번에 해결할 수 있는 방법이 서버 세션이다. 세션 ID를 추정이 .. 2022. 6. 17.