스프링은 어떻게 이런 다양한 설정 형식을 지원하는 것일까? 그 중심에는 'BeanDefinition'이라는 추상화가 있다. 쉽게 이야기해서 '역할과 구현을 개념적으로 나눈 것'이다 XML을 읽어서 BeanDefinition을 만들면 된다. 자바 코드를 읽어서 BeanDefinition을 만들면 된다. 스프링 컨테이너는 자바 코드인지, XML인지 몰라도 된다. 오직 BeanDefinition만 알면 된다. 'BeanDefinition'을 빈 설정 메타정보라 한다. '@Bean', ''당 각각 하나씩 메타 정보가 생성된다. 스프링 컨테이너는 이 메타정보를 기반으로 스프링 빈을 생성한다. "코드 레벨로 조금 더 깊이 있게 들어가보자." 'AnnotationConfigApplicationContext'는 'An..
분류 전체보기
https://github.com/ParkPeom ParkPeom - Overview 백엔드 개발을 공부 중입니다. 깃허브 블로그 👍 https://parkpeom.github.io/#/ - ParkPeom github.com 제 깃허브 입니다. 지금부터라도.. 깃허브에 공부했던 소스코드들을 올리려고 합니다..
그냥 쿠키를 활용하는 방식이 아니라 세션을 통해서 로그인 가능하도록 만들어 보겠습니다. 이전과 가장 큰 차이점은 보안!! 입니다. 1. 세션 Session - Cookie, 보안에 취약한 너는 버린다 => Session 세션과 쿠키의 가장 큰 차이점은 아무래도 '보안' 에 집중된다. 쿠키는 기본적으로 위, 변조가 가능하기 때문에 잘못했을 경우 해커에게 쿠키값이 털려서 회원정보, admin 으로 로그인이라도하는 날에는 DB까지 전부 털리는 경우가 있기 때문이다. Session은 서버 - 클라이언트간 통신 시 쿠키의 취약점을 많이 줄 일 수 있다. 그렇다면 세션은 어떻게 동작할까? 아래 그림을 살펴보자 회원이 로그인 페이지에서 로그인을 시도한다. 로그인 정보가 POST 방식으로 서버에 전달된다. 서버는 전달..
로그인 기능을 사용하는 가장 기본적인 방법은 쿠키와 세션 2가지의 방법이 있습니다. 먼저 쿠키를 활용하여 로그인 하는 방법에 대해서 알아보고, 쿠키를 활용한 로그인 방식의 취약점도 알아보겠습니다. 1. 쿠키 Cookie - 서버가 '나' 를 기억해서 로그인하려면? 기본적으로 HTTP 는 무상태(Stateless) 프로토콜이다. 이때 클라이언트와 서버가 요청과 응답을 주고 받으면 연결이 끊어지며 클라이언트가 다시 요청하면 서버는 이전 요청을 기억하지 못하고, 서로 상태를 유지하지도 않는다. 그렇다면 기본적인 http 만을 사용해서 서버가 'parkpeom' 라는 클라이언트를 알고 응답할 수 있도록 하는 방법은 무엇일까? 바로 GET 방식으로 모든 요청과 링크에 사용자 정보를 포함해서 주는 것이다. 만약 쿠..
글 그림은 참고 스프링 부트 3 백엔드 개발자 되기 - 자바 편 를 참고하여 정리하였습니다. 이번 글에서는 스프링의 중요한 콘셉트인 IoC(제어의 역전), DI(의존성 주입), AOP(관점 지향 프로그래밍), PSA(이식 가능한 서비스 추상화)에 대해 알아보겠습니다. 이 글을 읽게 됨으로써 얻을 수 있는 지식은 아래와 같습니다. - IoC(제어의 역전)이 무엇인지 - DI(의존성 주입)이 무엇인지 - 스프링 컨테이너와 빈이 무엇인지 - AOP(관점 지향 프로그래밍)이 무엇인지 - PSA(이식 가능한 서비스 추상화)이 무엇인지 위 네 개념을 쉽게 이해하고 싶어하시는 분들에게 도움이 되고자 스프링 부트 3 백엔드 개발자 되기 - 자바 편의 일부 내용을 공개하기로 했습니다. 이 내용은 책의 2.2장을 거의 그..
Bean Validation 도메인 로직에서 값을 검증할 수 있게 도와주는 인터페이스이다. (참고:Java와 Spring의 Validaiton) 주요 어노테이션들은 아래와 같다. /** * 직접 검증을 하고 싶을 때 사용 */ @AssertTrue @AssertFalse /** * 문자열을 다룰 때 사용 */ @NotNull // null 불가능 @NotEmpty // null, 빈 문자열(스페이스 포함X) 불가 @NotBlank // null, 빈 문자열, 스페이스만 포함한 문자열 불가 @Size(min=?, max=?) // 최소 길이, 최대 길이 제한 @Null // null만 가능 /** * 숫자를 다룰 때 사용 */ @Positive // 양수만 허용 @PositiveOrZero // 양수와..