본문 바로가기

스프링41

로그인 처리 - 필터, 인터셉터 서블릿 필터 필터는 서블릿이 지원하는 수문장과 같다. 웹의 공통 관심사항을 처리하는데 쓰이는데 이는 스프링에서 AOP로도 가능하지만, 서블릿 필터와 인터셉터를 이용하는 것을 추천한다. 관심사항은 모든 고객의 요청을 로그를 찍거나 로그인 여부를 확인하는 필터 등 다양하다. 필터를 통과하면 서블릿 페이지로 이동하고, 통과하지 못하면 서블릿 페이지를 보여주지않는다. 필터는 체인형식으로 여러개를 이을 수 있다. 참고) 실무에서 HTTP 요청시 같은 요청의 로그에 모두 같은 식별자를 자동으로 남기는 방법은 logback mdc 검색. 스프링 인터셉터 스프링 인터셉터는 스프링 MVC가 제공하는 기술이다. 스프링 인터셉터가 더 많은 기능을 제공하고 더 좋다. 인터셉터는 스프링 MVC 구조에 특화된 필터 기능을 제공한.. 2022. 6. 18.
로그인 처리 - 쿠키와 세션 스프링 프레임워크 기말고사 프로젝트를 진행하면서 쿠키를 사용해서 로그인을 유지할 수 있었다. 그런데 쿠키에는 심각한 보안문제가 있다. 보안문제 쿠키값은 임의로 변경 가능 쿠키에 보관된 정보는 훔쳐갈 수 있음 해커가 쿠키를 훔쳐가면 평생 사용 가능 대안 쿠키에 중요한 값을 노출하지 않고, 사용자 별로 예측 불가능한 임의의 토큰(랜덤 값)을 노출하고, 서버에서 토큰과 사용자 id를 매핑해서 인식한다. 그리고 서버에서 토큰을 관리한다. 토큰은 해커가 임의의 값을 넣어도 찾을 수 없도록 예상 불가능 해야 한다. 해커가 토큰을 털어가도 시간이 지나면 사용할 수 없도록 서버에서 해당 토큰의 만료시간을 짧게(예: 30분) 유지한다. 이러한 보안책들을 한번에 해결할 수 있는 방법이 서버 세션이다. 세션 ID를 추정이 .. 2022. 6. 17.
검증 - Bean Validation Bean Validation 이란? 먼저 Bean Validation은 특정한 구현체가 아니라 Bean Validation 2.0(JSR-380)이라는 기술 표준이다. 쉽게 이야기해서 검증 애노테이션과 여러 인터페이스의 모음이다. Bean Validation을 사용하려면 build.gradle에 implementation 'org.springframework.boot:spring-boot-starter-validation' 의존관계를 추가한다. 테스트 코드 @Data public class Item { private Long id; @NotBlank private String itemName; @NotNull @Range(min = 1000, max = 1000000) private Integer pri.. 2022. 5. 29.
메시지, 국제화 메시지 기획자가 화면에 보이는 문구가 마음에 들지 않는다고, 상품명이라는 단어를 모두 상품이름으로 고쳐달라고 하면 어떻게 해야할까? 여러 화면에 보이는 상품명, 가격, 수량 등, label 에 있는 단어를 변경하려면 다음 화면들을 다 찾아가면서 모두 변경해야 한다. 왜냐하면 해당 HTML 파일에 메시지가 하드코딩 되어 있기 때문이다. 이런 다양한 메시지를 한 곳에서 관리하도록 하는 기능을 메시지 기능이라 한다. 국제화 메시지에서 설명한 메시지 파일( messages.properties )을 각 나라별로 별도로 관리하면 서비스를 국제화 할 수 있다. 영어를 사용하는 사람이면 messages_en.properties 를 사용하고, 한국어를 사용하는 사람이면 messages_ko.properties 를 사용하.. 2022. 5. 26.
타임리프 - 기본기능(2) URL 링크 단순한 URL @{/hello} -> /hello 메뉴얼 https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#link-urls 리터럴 리터럴은 소스 코드상에 고정된 값을 말하는 용어이다. String a = "Hello" int a = 10 * 20 "Hello"는 문자 리터럴, 10과 20은 숫자 리터럴이다. 타임리프에서 문자 리터럴은 항상 ' ( 작은 따옴표 ) 로 감싸야 한다. 공백 없이 쭉 이어진다면 하나의 토큰으로 인지해서 작은 따옴표를 생략할 수 있다. 연산 비교연산 : HTML 엔티티 사용만 조심 조건식 : 자바와 동일 Elvis 연산자 : 조건식의 편의 버전 No-Operation : _ 인 경우 타임리프 실행하지 .. 2022. 5. 25.
JPA 프로젝트 환경설정 프로젝트 생성 롬복 적용 1. Prefrences plugin lombok 검색 실행 (재시작) 2. Prefrences Annotation Processors 검색 Enable annotation processing 체크 (재시작) 3. 임의의 테스트 클래스를 만들고 @Getter, @Setter 확인 IntelliJ Gradle 대신에 자바 직접 실행 최근 IntelliJ 버전은 Gradle로 실행을 하는 것이 기본 설정이다. 이렇게 하면 실행속도가 느리다. 다음과 같이 변경하면 자바로 바로 실행해서 실행속도가 더 빠르다. Preferences -> Build, Execution, Deployment -> Build Tools -> Gradle Build and run using: Gradle -> .. 2022. 4. 17.