다오의 개발일지

WIL-6 7주차 WIL 본문

WTIL

WIL-6 7주차 WIL

다오__ 2023. 7. 3. 09:43

시큐리티 인증과정

1. UsernamePasswordAuthenticationToken객체를 생성합니다.

2. AuthenticationManager(인증관리자)에게 넘겨 인증을 시도합니다.

3. 인증관리자는 username을 전달하고 UserDetails를 요청합니다.

4. UserDetailsService에서 username을 전달받아 회원DB와 연동해 회원을 조회합니다. UserDetailsImpl을 로드합니다.

5. 인증관리자는 UserDetailsImpl과 UsernamePasswordAuthenticationToken 객체와 비교하여 인증을 수행합니다.

6. 인증이 완료되면 SecurityContextHolder안의 SecurityContext안의 Authentication객체로써 유저 정보를 저장합니다.

7. Authentication 객체를 통해 인증된 사용자의 정보를 관리하게 됩니다.

 

3계층으로 나누는 이유

SRP 단일 책임 원칙

컨트롤러는 라우터의 역할, 서비스는 비즈니스로직, 레포지토리는 데이터관련의 역할만 맡는다.

 

싱글톤패턴

객체를 한개만 생성하여 공유하여 사용해 코드 재사용성을 높인다.

 

무상태성

스프링에서는 일반적으로 무상태성을 지향한다.

DTO를 제외하고 객체를 만드는 행위를 상태를 유지한다라고 표현한다.

서비스단, 컨트롤러단에서 new Bean하여 객체를 생성하는것을 하지 말아야 한다.

재 사용할수 있게끔 해야한다.

RepositoryDto,Entity, new Entity()..생성하는것은 Dto만 존재해야한다.

 

가비지 컬렉션

사용하지않는 객체가 있다면 자연적으로 소멸한다.

 

OCP

확장에는 열려있고 변경에는 닫혀있다.

메모레포지토리가 변경이되더라도 서비스계층은 영향을 받지않게끔 설계한다.

예를들어 같은 인터페이스를 구현한 레포지토리라면 멤버변수와 생성자만을 변경해 추가 코드수정없이 레포지토리를 갈아끼울 수 있다.

 

public static final int STANDARD = 3

스택과 힙영역 static같은 경우도 어떻게 보면 빈이라고도 할 수 있다. 선언하면 힙영역으로 가게 된다. 힙 영역은 만들어 놓고 재사용할 수 있는 메모리 영역이다

 

DB-

jdbctemplate의 preparedstatement도 결국 객체를 매번 생성하기 때문에 리소스 관리가 효율적이지 못하다.

코드가 복잡하다.

sql에 의존적이어서 변경에 취약하다.

 

 

 

 

IoC :

제어의 역전으로, 개발자가 직접 new 를 해서 객체를 생성하는 것이 아닌 IoC 컨테이너가 제어를 맡아 객체를 생성해주는 것

DI :

의존성 주입으로, 사용하려는 객체를 직접 생성하는 것이 아니라 외부(IoC 컨테이너 등)으로부터 객체를 주입받는 것

 

장점으로는 객체간 결합을 느슨하게 하여 계층간 코드가 변경이 되어도 다른 계층은 영향을 받지 않도록 설계가 가능, SOLID의 5대 원칙중 OCP(개방-폐쇄원칙)를 위반하지 않음

 

 

ORM : 객체와 데이터베이스를 맵핑해주는 도구

 

JPA는 자바 ORM기술의 표준 명세

JPA를 사용하면 데이터베이스 연결과정을 직접 개발하지 않아도 자동으로 처리를 해줌

 

Hibernate : JPA를 실제로 구현한 Framwork중 사실상 표준 Hibernate

 

 

Entity 이해하기

Entity : JPA에서 관리되고 있는 클래스, 즉 객체를 의미. 데이터베이스의 table하고 맵핑이 되어서 JPA에 의해서 관리

 

 

어노테이션 정리

@Entity : JPA가 관리할 수 있는 Entity 클래스 지정

@Table(name="memo") :매핑할 테이블의 이름을 지정

 

@Id : 영속성 컨텍스트 내에서 Entity를 구분할때 사용합니다. 식별자 역할

@GeneratedValue(strategy = GenerationType.IDENTITY) : auto_increment

@Column(name = "username" nullable = false, unique = true, length = 500)

 

 

영속성 컨텍스트 (persistence)

객체가 생명이나 공간을 자유롭게 유지하고 이동할 수 있는 객체의 성질

즉 Entity객체를 효율적으로 관리하기 위해 만들어진 공간

 

Entity Manager : 영속성 컨텍스트에 접근하여 Entity객체들을 조작하는 객체 

Entity Manager는 EntityManagerFactory를 통해 생성하여 사용

EntityManagerFactory는 일반적으로 DB 하나에 하나만 생성

EnttiyManagerFactory를 만들려면 DB에 대한 정보를 전달

*@BeforeEach : test의 메서드가 각각 실행하지 전에 먼저 실행

 

 

트랜잭션

데이터베이스 데이터들의 무결성과 정합성을 유지하기 위한 하나의 논리적 개념

데이터들을 안전하게 관리하기 위해 생겨난 개념

commit : 최종적으로 DB에 반영하는 명령어