인스타그램 클론 프로젝트 - (1)

Claudia Hong·2021년 8월 12일
0

Project

목록 보기
7/26

1) Security - 로그인창 연결
권한이 없는 유저가 접근하면 그걸 가로채서 리다이렉션

17줄 : 명시된 주소로 들어올 때는 인증이 필요하다.
18줄 : 그 외에는 접근을 허용한다.
19~21줄 : 인증이 필요한 페이지를 요청했을 때, 폼태그와 인풋 태그가 있는 폼로그인을 하게 하는데, 그 로그인 페이지가 /auth/signin 이다.
22줄 : 로그인에 성공하면 / 페이지로 가게 한다.

302번 확인할 수 있음 >> 리다이렉션

2) 회원가입

post 이유 : 이 4개의 데이터를 줄 테니, DB에 인서트 해라 (~줘 라는 의미가 아님)

CSRF 토큰??

회원가입창인 클라이언트의 데이터가 서버에 도착하기 전에 시큐리티가 CSRF토큰 검사를 함(=자신이 달아준 토큰이 있는지 검사 >> 정상적인 회원가입페이지를 준 정상적인 사용자라는 것을 알게 됨 / 비정상적인 루트로 들어온 사용자인지를 구분하기 위해)

응답할 때 CSRF토큰을 달아서 응답

SecurityConfig에서 CSRF 기능 비활성화한다.(디폴트 : 활성화)
http.csrf().disable();

DTO Data Transfer Object 통신을 위해서 통신할 때 필요한 데이터를 담아두는 오브젝트

@Data >> getter와 setter를 만들어줌

DTO를 이용해 브라우저에서 입력한 데이터를 받아오게 하고(컨트롤러에서 로그로 확인) 그걸 DB에 Insert하기 위해 모델을 만듦

JPA Java Persistance API : 자바로 데이터를 영구적으로 저장(DB)할 수 있는 API를 제공


12줄 : 전체생성자
13줄 : 빈생성자
15줄 : DB에 테이블을 생성해주는 어노테이션
33줄 : DB에 항상 LocalDateTime을 넣어준다.
35줄 : DB에 INSERT 되기 직전에 실행하는 어노테이션
36~37줄 : LocalDateTime.now()로 DB가 만들어진 현재시각을 자동으로 넣어준다.

이렇게만 하면 PK가 없다는 오류가 발생하므로, 아래와 같이 해준다.

21줄 : id를 PK로 만들고,
22줄 : 번호가 증가할 때 번호증가전략이 DB를 따라간다.
(= MySQL은 incresement, Oracle이면 sequence)

Java에서 오브젝트를 만들면 그 오브젝트를 기반으로 DB에서 table이 만들어짐 >> ORM

빌더 패턴???
@Builder

16줄 : toEntity 함수
18~23줄 : 위의 4개의 데이터(username,password,email,name) 기반으로 만들어진 User 객체를 바로 리턴

DB에 집어넣기 위해 Service~

@Service >> Ioc 등록/트랙잭션 관리

회원가입 진행을 위해서는 레포지토리가 필요 >>인터페이스로 레포지토리 만들기

어노테이션을 하지 않아도 JpaRepository를 상속해 IoC 자동등록 된다.
5줄 : 오브젝트/PK의 타입

Service를 사용하기 위해 불러오기 위한 방법은 2가지이다.
20줄 : 1) @Autowired
23~4줄 : 2) 컨트롤러의 생성자를 아래 만든다. (@Controller가 붙어 있으므로 Ioc에 등록하기 위해서는 컨트롤러 객체를 만들어야 하고, 그러기 위해선 생성자를 실행시켜야 한다. 그러나 생성자 안에 들어가는 서비스가 없으면 오류 발생 >> 의존성 주입=DI)

그러므로,

16,21줄 : final 필드를 DI(의존성주입)할 때 사용

user 오브젝트에 담은 데이터를 저장한 것을 userEntity라고 한다.
????????이 부분 잘 모르겠음..

3)비밀번호 암호화 및 권한

비밀번호를 암호화하기 위해 BCryptPasswordEncoder를 아래와 같이 빈등록 해준다.이후에 서비스에서 DI해서 사용

AuthService

23줄 : 비밀번호를 가져와서 rawpassword에 넣는다.
24줄 : 가져온 비밀번호를 해시암호화 해서 encPassword에 넣는다.
25줄 : 암호화된 비밀번호를 user에 담는다.

27줄 : 가입하는 사용자는 'ROLE_USER'라는 권한을 디폴트로 가진다.

4) 중복가입 방지

도메인의 User.java에서 username에 Unique 설정을 넣는다.

어떤 제약조건에 위배되는 상황을 앞단에서 걸러내느냐, 서버와 DB를 거쳐 뒷단에서 걸러내느냐에 따라,

전처리 validation 유효성검사
후처리 exceptionhandler

로 나뉜다. 길이 제약 등은 전처리로 가능하나 아이디 중복금지 제약 등은 후처리로 해야한다.

회원가입과 같은 핵심기능에 대한 전,후처리를 공통기능이라고 한다. (공통기능이 있어야 깔끔하게 돌아간다) 이를 'AOP 관점 지향 프로그래밍' 이라고 한다.

0개의 댓글

관련 채용 정보