본문 바로가기

legacy/Spring

(60)
[Spring] 스프링 프레임워크 동작 과정, 서블릿, 핸들러, 어댑터, 뷰리졸버 김영한 님 MVC1 강의 정리본입니다. 전체 구조 1. 핸들러 매핑 정보 클라이언트(사용자)가 웹페이지에 접속을 하면 Front Controller가 해당 요청을 받는다. 가장 먼저 사용자가 접속한 URL을 처리할 수 있는 handler(핸들러)를 찾는다. 핸들러 매핑 정보에는 URL과 handler가 매핑되어 있다. 즉 URL 별로 handler가 여러 개 존재한다. ex) localhost:8080/front-controller/v5/v4/members/new-form로 접속하면 MemberFormControllerV4 핸들러가 해당 요청 URL을 처리하기 위해 사용된다. // 핸들러 매핑 정보를 담는 Map private final Map handlerMappingMap = new HashMap()..
[Spring, JAVA] LocalDateTime <-> Timestamp 변환 회원가입 할 때 회원 정보에 계정 생성 날짜를 넣기 위해 DB에는 Timestamp를 서버에는 LocalDateTime 형식을 사용하였다. Timestamp -> LocalDateTime Timestamp 클래스에 아래 메서드가 정의되어 있다. public LocalDateTime toLocalDateTime() { return LocalDateTime.of(getYear() + 1900, getMonth() + 1, getDate(), getHours(), getMinutes(), getSeconds(), getNanos()); } LocalDateTime -> Timestamp Timestamp 클래스에 아래 메서드가 정의되어 있다. public static Timestamp valueOf(Local..
[Spring] 메일 전송 1편, JavaMailSender 본 글은 스프링부트의 구글 smtp 설정 방법입니다. 1. 앱 비밀번호 생성 비밀번호를 기억하고 있어야 한다. 2번 사진을 보면 사용 방법에 비밀번호를 교체하라고 나오는데 절대로 교체해서는 안된다. 저거 따라 했다가 계속 오류 나서 시간만 날렸다. 생성된 비밀번호를 메모장이든 어디든 간에 저장하자. 2. 스프링부트 설정 application.properties에 다음 정보를 저장한다. 구글 이메일하고 앱 비밀번호만 본인의 것으로 수정하면 된다. 아래 정보를 입력하면 자동으로 JavaMailSender의 구현체인 JavaMailSenderImpl 클래스가 bean으로 등록된다. # JavaMailSender 자동으로 빈 등록 spring.mail.host=smtp.gmail.com spring.mail.p..
[Spring-Error] html 글자 깨짐, 메시지 국제화 연습 삼아 프로젝트를 만들어 보고 있는데 따로 메시지 파일(추후 국제화를 위한..)을 만들어서 html에 적용했는데 한글 적용이 안 됐다. 오류 발생 코드 @SpringBootApplication public class TestApplication { public static void main(String[] args) { SpringApplication.run(TestApplication.class, args); } @Bean public MessageSource messageSource() { ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); messageSource.setBasenames("messages")..
[Spring] Session 직접 구현하기, 쿠키와 세션 직접 구현하지 않고 세션을 사용하는 방법이 있으나 세션이 어떻게 만들어지는지 이해를 하고 쓰는 것과 아닌 것은 큰 차이가 있을 거라 생각합니다. 편하게만 개발하려고 하면 발전이 없다고 생각합니다. 본 글은 쿠키와 세션에 대한 이해를 하고 있음을 가정하고 작성된 글입니다. 쿠키와 세션 쿠키에 중요한 정보를 담아 사용하게 된다면 누군가가 악용할 위험이 있다. 개발자 모드에 진입에서 네트워크 정보를 보면 쿠키에 대한 정보가 그대로 드러난다. 따라서 쿠키에는 세션하고 연결할 정보만 저장해야 한다. 쿠키에 담을 정보를 세션에 담으면 된다. 세션은 서버에서 관리되기 때문에 클라이언트 차원에서 노출에 대한 위험이 없다. 사진을 보면 쿠키의 mySessionId와 세션의 sessionId가 동일하다. 중요한 정보는 세..
[Spring] @PostConstruct 호출 순서 @PostConstruct가 뭐야? 의존성 주입(DI)이 완료된 후 호출되어야 하는 메서드에 사용하는 애너테이션이다. 예를 들어 로컬환경에서 테스트할 때, 매번 같은 행동(ex. 가입된 사용자)을 반복할 필요 없이 @PostConstruct가 붙은 메서드에 반복되는 코드를 작성하면 된다. @PostConstruct 호출 순서 생성자 호출 의존성 주입 @PostConstruct 메서드 호출 다음은 실제로 호출되는 과정이다. Repository @Repository @Slf4j public class UserRepository { private Map stored = new HashMap(); private static Long sequence = 0L; public UserRepository(Map sto..
[Spring-Error] @NotBlank 검증 오류, No validator could be found 문제 발생 @NotBlank @Range(min=10, max=100) private Integer userAge; 필드에 @NotBlank을 사용하였는데 다음과 같은 오류를 발생시켰다. No validator could be found for constraint 'javax.validation.constraints.NotBlank' validating type 'java.lang.Integer'. Check configuration for 'userAge' 보아하니 @NotBlank 애너테이션에 문제가 있어 보인다. 해결 일단 @NotBlank의 역할은 "", " ", null 세 개를 허용하지 않는다. 생각해보니 userAge 필드는 Integer 타입이다. Integer 타입은 애초에 문자열이 들어..
[Spring] Validator 2개 이상 등록하기 1개의 Controller에서 2개 이상의 Validator를 등록하려면 어떻게 해야 할까? WebDataBinder의 addValidators()에 그냥 2개를 저장하면 될까? 바로 알아보자. 오류 코드 나는 회원가입용 검증기와 로그인용 검증기 2개를 등록하려고 하였다. 처음에 WebDataBinder에 2개를 바로 저장하였다. 참고로 registerValidator와 loginValidator는 주입받은 상태이다. // Controller @InitBinder public void init(WebDataBinder webDataBinder) { webDataBinder.addValidators(registerValidator, loginValidator); } 그러나 바로 IllegalStateExc..