스프링

스프링/JPA

[JPA] EAGER Loading Vs LAZy Loading N+1이란?

먼저 N+1문제란 무엇인지 알기 전에EAGER Loading (즉시 로딩), Lazy Loading (지연 로딩)에 대해 이해하고 넘어가야만 한다.예시를 살펴보며 이해해보자1. Member Entity, Post Entity가 존재한다.2. Member : Post -> 1 : N 연관관계를 맺는다. @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToMany(mappedBy = "member", fetch = FetchType.LAZY) private List posts = new ArrayList();}  @Enti..

스프링/JPA

[Spring] JPA에서 Entity Life의 Cycle은 어떻게 이루어지나?(면접 질문 있음)

들어가기에 앞서Spring Boot 개발을 하면서 JPA를 활용하여 개발을 하지만 JPA에서 Entity가 어떻게 관리되는지 얕게 공부한터라 다시 한번 상기하고,  더불어 면접 질문에 대해 대비하려고 한다.JPA에서 Entity는 여러 Life Cycle(생명 주기) 단계 를 거치며, 각각의 단계는 Entity가 DB어떻게 상호작용하는지를 결정한다.크게 New 상태, Managed 상태, Detached 상태, Removed 상태로 4가지로 나뉜다.1. NEW(Transient)상태Entity가 아직 영속성 컨텍스트에 의해 관리되지 않는 상태이다.특징-  DB에 저장되지 않은 상태-  아직 EntityManager를 통해 persist()메소드가 호출되지 않은 상태이다.MyEntity entity = n..

스프링

[Spring] Github OAuth 2.0 + Jwt를 통해 로그인하기

들어가기에 앞서 프로젝트를 진행도중 Github OAuth 2.0을 도입하고자 처음부터 마음먹었다. 그런데 OAuth가 처음이라 개념이 너무 헷갈리기도 했고 Github OAuth2.0을 대상으로 커스텀한 글이 많이 적어 시간이 많이 오래걸렸다. 다른 글들을 많이 참고하고 비슷한 부분이 많지만 그래도 Github로 한 것은 없기에 글을 써봅니다. https://velog.io/@jkijki12/Spring-Boot-OAuth2-JWT-%EC%A0%81%EC%9A%A9%ED%95%B4%EB%B3%B4%EB%A6%AC%EA%B8%B0 해당글을 참고해서 쓴 글입니다!! OAuth 구조에 대한 많은 의견이 있지만 저는 이렇게 구현하기로 했습니다. 많은 과정이있지만 간략하게 코드와, 주석, 설명으로 대체하겠습니다..

스프링

[Spring] TDD vs BDD 무엇인지알고 비교하기

TestCode를 작성하는 이유와 그 습관을 가져보기전에 정리를 한 번 하고 넘어가려고 합니다 TDD(Test Driven Development)란? 소프트웨어 개발 방법론 중 하나입니다 TDD는 개발자가 작성할 코드에 대한 테스트를 먼저 작성하고 그 뒤에 구현할 코드를 작성하는 방식입니다. TDD를 구현하는 팀은 개발에서 더 많은 시간이 걸릴수도 있습니다 하지만 시간이 오래걸린만큼 결함이 거의없는 경향이 있습니다 이처럼 TDD를 사용하면 코드 품질이 형샹되며 재사용이 가능한 코드가 생성 되겠죠? TDD의 사이클은 6단계로 나뉩니다 1. 테스트 케이스 작성: 요구 사항에 따라 자동화 된 테스트 사례를 작성합니다. 2. 모든 테스트 케이스를 실행: 현재 개발된 코드에서 자동화 된 테스트 케이스를 실행합니다..

스프링

[Spring] Slice를 이용하여 무한스크롤 구현하기

가장 중요한 것 Pagination이란 무엇인가 우리가 구현하기에 앞서 먼저 알고가야 하는 용어입니다 꼭 보세요!! 아니면 나중에 헷갈려요 만약 DB에 수만 수억가지 데이터들이 있는데 그 데이터들을 한 번에 불러와서 본다면 당연히 좋겠죠? 하지만 그렇다면 부하가 생길수 밖에 없습니다 무수히 많은 쿼리들 때문이죠 그래서 우리는 많은 어플에서 보듯이 무한스크롤등을 구현하는 곳이 많습니다 예를들어 오른쪽에 인스타그램 처럼요! 그렇다면 각각의 내용들을 어떻게 효율적으로 불러올까요? 먼저 많은 방식들이 있지만 저는 오늘 Slice이용한 무한스크롤을 다룰예정입니다 1. No offset 사용하기 No offset이란 말 그대로 페이지 번호가 없는 방식을 이야기합니다 기존에는 페이지번호(offset)와 페이지 사이즈..

스프링

[Spring] Spring Security이용한 JWT 로그인 구현기

프로젝트에서 사용한 Spring Secutiry이용한 JWT 로그인 API를 정리하고자 글을 씁니다 목차 Spring Secutiry란 무엇인가 JWT란 무엇이고 RefreshToken 저장 방법 Spring Secutiry + JWT 구현하기 Spring Secutiry 가장 중요한 흐름도입니다 이것만 이해하면 구현은 쉽게 할 수 있습니다 듀얼 모니터라면 다른 모니터에 띄우고 계속 보시면서 구현하면 구조를 파악하기 수월하실 겁니다 하나 하나 알아봅시다 사용자가 어떤 정보를 서버에 요청합니다 여기서 정보는 어떤 정보든 상관없습니다 새로고침, Url검색등등을 통해 요청(Request)이 발생합니다 그러면 AuthenticationFilter가 그 요청을 가로챕니다 ex) PostMapping -> memb..

스프링

[Spring] JWT Refresh Token 어디에 저장해야 할까? 그리고 꼭 저장해야 할까?

들어가기에 앞서 Refresh Token을 Cookie로 처리할까 고민 하던 도중 막상 왜 그렇게 저장하는지 자세히 모르고 사용했던 것 같다. 그래서 Jwt의 문제점들을 파악한 후에 써야 후에 고생하지 않을 거 같아서 문제점들을 알아보기로 했다 JWT의 문제점들 XSS(Cross Site Scripting) 웹 해킹 중 하나인 XSS는 게시판이나 웹 등에 JS와 같은 스크립트 코드를 삽입 해 개발자가 생각하지 못한 기능이 작동하도록 하는 공격 대부분의 웹 해킹 공격 기법과는 다르게 사용자-> 클라이언트를 대상으로한 공격이다 ex) 해커가 원하는 링크를 클릭하면 사용자가 가지고 있는 Cookie등을 사용하고 있는 서버로 Request를 보낸다 그러면 서버는 Response로 응답하기 때문에 해커가 원하는 ..

스프링/JPA

[Spring] JPA Save메소드를 이용한 양방향 매핑 (Gradle)

양방향 연관관계에서 중요한 것 알고 가야할 것 1. DB는 FK(외래키)하나로 관계를 맺은 Table을 탐색할 수 있다 2. DB랑은 다르게 객체는 객체안에 탐색하고 싶은 객체와 참조를 맺어놔야 탐색이 가능하다 3. 양방향 매핑은 단방향 매핑과 다르게 주인을 정해줘야 한다 (주인이 아니라면 조회밖에 하지 못한다) 코드를 보면 Member @Entity @Table(name = "member") @Getter @Setter @Data @NoArgsConstructor @AllArgsConstructor public class Member { @Id @Column(name = "member_id") private Long member_id; @Column(name = "id") private String i..

Sleeg
'스프링' 카테고리의 글 목록