ㅡ 세션 인증 방식 : 인증 정보를 서버에 저장하는 방식
(서버 확장이 어려운 이유) 유저는 처음 로그인한 서버에만 요청하는 문제가 발생 -> 서버 간 공유가 되지 않아 로그인 등의 상태 유지가 안 됨
ㅡ 토큰 인증 방식 : 인증 정보를 클라이언트가 직접 들고 있는 방식
(서버 확장이 가능한 좋은 설계인 이유) 어떤 서버로 요청이 가도 토큰 인증만 하면 로그인 가능
토큰 인증 절차
(필요한 비밀키(암/복호화)를 서버에서 저장하고 있음
ㅡ> 사용자가 로그인
ㅡ> 서버에서 유효한 토큰[정보(Id, Pw)]인지 확인
ㅡ> 인증받은 사용자에게 토큰을 발급
ㅡ> 사용자는 로컬 스토리지 또는 쿠키에 토큰을 저장
ㅡ> 사용자가 토큰을 http 헤더에 담아 데이터를 요청하면, 서버에서 요청한 데이터에 대해 응답 처리)
리프레시 토큰 : 만료된 토큰을 갱신하여 새로 발급하는 토큰(보안 강화)
토큰(PK) 인증 중에서도, JWT(Json Web Token) 인증이 유리
ㅡ 클레임(jwt를 편집 가능한 상태로 만들어주는 것) = 헤더 + 페이로드 + 서명
Authorization: Bearer dlkjgkl9438590DFSkgjpr(헤더).jgoprjpgjERJ1908RJO(페이로드).jgrkljgkEJO124lnj(서명)
ㅡ 'DTO'를 쓰는 이유 : 중요 데이터를 보호하면서 API(스프링)와 서버(웹)간 통신 + 엔터티 객체의 변경을 가급적 피하기 위함
ㅡ Entity와 DTO의 차이점
Entity(반드시 key값을 가짐)
DTO(key값이 없음)
ㅡ '의존성 주입'하는 이유 : 코드의 재사용이 가능해짐
ㅡ '시큐리티'를 사용하는 이유 : 앱의 인증(로그인)과 권한을 담당하기 위함
ㅡ 'redis'를 사용하는 이유 : 동시성(싱글 코어에서 멀티 스레드 환경을 구성하여 동시에 실행되는 것처럼 보임)을 회피하기 위함
ㅡ 'JPA'를 사용하는 이유 : 패러다임 불일치를 해결하여(SQL == JAVA), 객체 지향 코드를 짜기 위함
ㅡ 'Hibernate구현체'를 사용하는 이유 : JPA 구현이 가능해짐
ㅡ 'Spring-Data_Jpa'를 호출하는 이유 : Hibernate와 Spring을 연결하기 위함
ㅡ 'Repository'를 만드는 이유 : 쿼리문을 DB쪽으로 보내기 위함
// 리포지토리에서 선언하면 -> 서비스와 컨트롤러에도 import하여 반영할 것
ㅡ 'Optional'을 사용하는 이유 : 참조형 변수에 대해서 null검사 및 처리를 쉽게 할 수 있도록 제공하는 generic
// JPA는 Optional을 쓰도록 권장하는 것을 강요함(JPA의 findById()에는 Optional을 리턴해야 함)
// Sol) -> 코드 뒤에 .get()이 붙으면, Optional리턴이 필요없는 일반 객체가 됨
ㅡ '페이징 처리'하는 이유 : 로딩 속도를 빠르게 하기 위함
ㅡ 'Migration'을 사용하는 이유 : 더 좋은 운영환경으로 이전하기 위함
ㅡ 'uuid'식별키를 사용하는 이유 : A table insert into B table 시(DB Migration에서 구분 가능해 짐)
(+ auto_increment은 DB Migration에서 겹치게 됨)
ㅡ @ID를 사용하는 이유 : PK를 설정하기 위함
ㅡ @GeneratedValue를 사용하는 이유 : key값 생성하기 위한 전략임
ㅡ 동기식(화면을 새로 그리는 형태) vs 비동기식(버튼을 누르면, 화면이 바뀌는 형태)
save() ㅡ 영속성 컨텍스트에 저장되어있다가, (Commit or Flush)수행 후에 DB에 저장
saveAndFlush() ㅡ 실행중(트랜잭션)에 즉시 (Flush)수행하여 DB에 저장
IoC(제어의 역전) 또는 DI(의존성 주입)
ㅡ 객체지향 프로그래밍에서 프로그램 구조를 변경하는 디자인 패턴 중 하나입니다. 일반적으로 객체 간의 의존성을 줄이고 결합도를 느슨하게 만들기 위해 사용됩니다.
스프링 Core
ㅡ 결론 : 생성자 주입을 사용하자
따라서, 생성자 주입은 객체 생성 시점에 필요한 의존성을 완전히 제공하고, 불변성을 유지하며, 의존성 변경에 유연하게 대처할 수 있도록 해주므로, 스프링에서도 생성자 주입 방식을 권장하고 있습니다.
정말 좋은 글 감사합니다!