CS/Spring
-
JPA - N+1 문제 해결하기, 성능개선(페이징 처리)CS/Spring 2024. 7. 22. 06:08
N+1 문제1:N 관계의 엔티티를 JPA코드로 표현하면 다음과 같다.( Member 엔티티(1), Post 엔티티(N) 관계라고 생각하면 된다. )@Entitypublic class One { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long idx; private String str; @OneToMany(mappedBy = "one") private List manyList = new ArrayList();}@Entitypublic class Many { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long idx..
-
Spring Security - 동작 과정, 로그인 구현하기CS/Spring 2024. 7. 4. 01:18
인증 Authentication사용자가 누구인지 확인하는 단계. 예를들어 서비스를 이용할 수 있는 사용자인지를 확인하는 '로그인'이 인증 단계이다.인가 Authorization접근 권한을 확인하는 과정. 예를들어 관리자 페이지에 대해 페이지에 접근한 사용자가 관리자 회원인지 일반 회원인지 확인하는 과정이 인가 단계이다. 일반적으로 인증 단계에서 바릅한 토큰에 사용자 접근 권한 정보를 포함시켜, 토큰을 통해 권한 유무를 확인해 인가를 수행한다. Spring Security 동작 구조 다양한 서비스에서 인증 또는 인가 등의 보안 기능이 필요하다. spring security는 spring에서 인증, 인가 기능을 제공하는 프로젝트이다. 서블릿에서 서블릿 필터가 인증, 인가 등의 보안 기능을 제공하는데, 스..
-
📬JPA, Spring Mail 사용해 이메일 인증 기능 구현하기 (+SMTP,IMAP)CS/Spring 2024. 6. 29. 00:12
SMTP (Simple Mail Transfer Protocol)이메일을 주고받을 때에는 세개의 주요 구성 요소가 있다user agents : 메일을 작성하거나 읽는 것을 수행 (간단히 말해 우리가 매일 사용하는 gmail, naver mail 이라고 생각하면 된다.)mail server : 메세지를 agents로부터 받고, 전달하는 역할을 한다. SMTP : 메일 client와 메일 server 사이에 메세지를 주고받기 위한 프로토콜SMTP 특징이메일을 주고받을 때에는 신뢰성 있는 전달이 필수이기 때문에 TCP를 사용한다. 송신자 agent와 송신자 mail server 사이, 송신자 mail server와 수신자 mail server 사이에서 메일을 주고받을 때 사용된다push protocol💡HT..
-
-
JPA - save 메서드에 대하여🤯 (엔티티 생명주기, isNew(), @GeneratedValue, persist(),merge())CS/Spring 2024. 6. 26. 03:26
save메서드를 보기 전에 Entity 생명주기에 대해 알아보자Entity 생명주기비영속 상태 (Transient) : 엔티티가 새로 생성되었지만 아직 영속성 컨텍스트에 추가되지 않은 상태. 데이터베이스와 관련 x영속 상태 (Persistent): 엔티티가 영속성 컨텍스트에 포함되어 있으며, 변경 사항이 자동으로 데이터베이스에 반영된다.분리된 상태 (Detached): 엔티티가 한때 영속성 컨텍스트에 포함되어 있었지만, 현재는 영속성 컨텍스트의 관리에서 벗어난 상태.삭제된 상태 (Removed): 엔티티가 영속성 컨텍스트에 포함되어 있지만, 데이터베이스에서 삭제될 예정인 상태. SAVE() 메서드JPA를 사용해 테이블에 값을 insert할 때 JpaRepository의 save메서드를 사용한다.prod..
-
Spring - 제어의 역전, 의존성 주입CS/Spring 2024. 6. 19. 23:56
스프링 핵심 기능 2가지 - 제어의 역전, 의존성 주입제어의 역전 (IoC : Inversion of Control)일반적인 자바 개발에서는 클래스를 사용하려면 클래스 객체를 생성해 사용해야 한다. 따라서 객체를 생성하고 사용하는 작업들을 모두 개발자가 직접 제어를 한다. 하지만 스프링에서는 개발자가 사용할 객체를 직접 사용하지 않고 객체의 생명 주기 즉, 객체가 생성되고 소멸되는 모든 과정을 스프링 컨테이너가 관리한다. 말그대로 객체 관리권이 개발자가 아닌 컨테이너로 역전된 것이다.제어의 역전을 통해 의존성 주입, 관점 지향 프로그래밍 등이 가능해진다. 아래와 같은 코드가 있을 때, Class01 클래스의 method를 사용하기 위해서는 Class02에서처럼 new를 통해 객체를 생성해야 한다. 하지만..