전체 글 65

+23 스프링부트 필터 Filter

스프링 부트에서 필터(Filter)는 클라이언트와 서버 간의 통신에서 요청과 응답을 가로채어 처리하는 역할을 수행합니다. 필터는 서블릿 컨테이너 내에서 작동하며, 클라이언트의 요청이 서블릿으로 전달되기 전이나 응답이 클라이언트에게 전송되기 전에 중간에서 작업을 수행할 수 있습니다. @slf4j 로그 수행 작업을 하려면 해당 에노테이션을 사용 Filter Chain 필터체인은 필터는 우선 한개만 존재하는 것이 아니다. 여러개가 chain 형식으로 묶여서 처리가 가능하다 @Order 필터의 순서를 정함 필터의 기능 중 인증 및 인가 처리 필터 ▼ @Slf4j(topic = "AuthFilter") @Component @Order(2) public class AuthFilter implements Filter..

TIL 2023.07.07

+22 JWT 토큰기반 무엇일까?

JWT 진행 순서 1. 클라이언트 사용자가 ID, PASSWORD를 통해 웹서비스 인증 // 여기서 로그인 성공 시 서버에서 "로그인 정보" => JWT로 암호화 (이때 secret key 사용) 2. 서버에서 서명된 JWT를 생성해서 클라이언트에 응답으로 돌려주기 (쿠키에 담아 전달) 3. 클라이언트가 서버에 데이터를 추가적으로 요구할 때 JWT를 HTTP Header에 첨부 4. 서버에서 클라이언트로 부터 온 JWT를 검증 순서도 JWT 장점 * 동시 접속자가 많을 때 서버 측 부하 낮춤 * 클라이언트, 서버가 다른 도메인을 사용할 때, 카카오 OAuth2 로그인 시 API JWT 토큰 사용 JWT 단점 * 구현 복잡함 * 네트워크 비용 증가 (클라 -> 서버) * secret key 유출시 jwt ..

TIL 2023.07.06

+21 Spring DATA JPA란 무엇??

JPA와 Spring DATA JPA는 다르다. :: 스프링부트에서 사용하는 JPA는 Spring DATA JPA로 , JPA를 더 쉽게 사용하기 위해 스프링부트에서 제공하고 있는 프레임워크임 Spring 부트에서 DB에 접근하기위해 사용할 때는 Repository를 사용했고, 이 레포지토리가 Spring Data JPA의 핵심이다. Spring Data JPA는 Spring에서 제공하는 모듈 중 하나로, 개발자가 JPA를 더 쉽고 편하게 사용할 수 있도록 도와준다. 이는 JPA를 한 단계 추상화시킨 Repository라는 인터페이스를 제공함으로써 이루어진다. 사용자가 Repository 인터페이스에 정해진 규칙대로 메소드를 입력하면, Spring이 알아서 해당 메소드 이름에 적합한 쿼리를 날리는 구현체..

TIL 2023.07.05

+20 영속성 컨텍스트란? 영속성 컨텍스트의 기능

영속성 컨텍스트는 엔티티를 영구 저장하는 환경이라는 뜻이다. 영속성 컨텍스트는 애플리케이션과 DB 사이에서 객체를 보관하는 가상의 DB 역할을 한다. 엔티티 매니저(EntityManager)를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리하게 된다. --> 엔티티 객체를 효율적으로 쉽게 관 리하기 위해 만들어진 공간 효율적으로 처리하기 위해 JPA는 영속성 컨텍스트에 Entity 객체들을 저장하여 관리하면서 DB와 소통합니다. 영속성 컨텍스트에 접근하여 Entity 객체들을 조작하기 위해서는 EntityManager가 필요합니다. EntityManager는 이름 그대로 Entity를 관리하는 관리자입니다. 개발자들은 EntityManager를 사용해서 Enti..

TIL 2023.07.04

+19 JPA란 무엇일까?

JPA(Java Persitance API) "자바에서 데이터를 영구히 기록할 수 있는(DBMS에) 환경을 제공하는 API" API란 "인터페이스(어떤 약속)을 토대로 요청에 대한 응답을 제공해주는 프로그램"정도로 이해할 수 있다. JAVA Persistence Application Programming Interface JPA는 자바 프로그램을할 때 영구적으로 데이터를 저장하기위해 필요한 인테페이스를 제공해주는 것 ORM이란? // ORM의 등장 배경 : 반복적이고 번거로운 애플리케이션단에서의 SQL 작업을 줄여주기 위해서 등장 *의미 객체와 관계형 데이터베이스를 맵핑해주는 기술 객체는 객체대로, 관계형 데이터베이스는 관계형 데이터베이스대로 설계 ORM 프레임워크는 그 중간에서 맵핑! 장점 SQL문이 ..

TIL 2023.07.03

WIL 3주차

이번 주차 공부했던 것들 * 항해 스프링커리큘럼 입문 + 숙련 1주차 (TIL에 기록!) * 스프링과제 1주차 코드리뷰 * 2주차 과제 진행중 [IoC Container 와 Bean에 대한 공부 기록] https://java-develooooop.tistory.com/38 + 16 springboot IoC Container 와 Bean 용어 정리 IoC : 제어의 역전 DI : 의존성 주입 Bean : spring이 관리하는 객체 IoC Container : Bean을 모아둔 컨테이너 DI (의존성 주입)을 한다? 가장 먼저 해야할 일은 객체 생성! 의존성 주입이란? 디자인 java-develooooop.tistory.com [어려운 점] 1. JPA 2. JWT 3. Spring Securtiy ※ ..

WIL 2023.07.02

+ 18 인증 // 인가 그것이 무엇인가 + JWT기반 인증

* 인증 (Authentication) :: 식별 가능한 정보(이름, 이메일)를 이용해서 서비스에 등록 유저의 신원 입증하는 과정 다시말해 서비스에 등록된 사용자에게만 서비스를 제공한다는 뜻 * 인가 (Authorization) :: 유저에게 특정 리소스에 대한 접근을 "인가" :: 인증만 가지고는 서비스를 운영하기에는 무리! :: 인증을 한 사용자에게 모든 서비스를 제공하게 된다면? :: 다른사람이 작성한 글이 다른사람에 의해서 수정되거나 삭제될 수 있다. :: 또한 인가는 항상 앞에 인증이라는 선행 프로세스가 필요함!!!! (이유 : 인증하지 않은 유저의 권한을 알지 못하기 때문) 인증 의 방식 1. 쿠키 - 세션 방식 (=서버 기반 인증 시스템 = 세션 기반 인증 시스템) ★해당 방식의 핵심은 사용..

TIL 2023.07.01

+17 Springboot DTO, CREATED, READ

DTO (Data Transfer Object) - 계층 간의 데이터를 교환을 하기 위해 사용하는 객체 // 데이터 전송 객체 - 로직을 가지지 않는 순수한 데이터 객체 (getter & setter만 가진 클래스) - 어떠한 비즈니스 로직을 가져서는 안되며, 저장, 검색,직렬화, 역직렬화 로직만 가져야 함. - 즉 Entity를 DTO형태로 변환 후 사용 직렬화란? DTO를 byte, Json, Xml 등의 형태로 변환하는 것 // 네트워크 통신에 사용하기 위한 형식으로 변환 역직렬화란? 디스크에 저장한 데이터를 읽거나, 네트워크 통신으로 받은 데이터를 메모리에 쓸 수 있도록 변환 DAO (Data Access Object) - 데이터베이스의 data에 접근하기 위한 객체 - 데이터베이스에 접근하기 위..

TIL 2023.06.30

+ 16 springboot IoC Container 와 Bean

용어 정리 IoC : 제어의 역전 DI : 의존성 주입 Bean : spring이 관리하는 객체 IoC Container : Bean을 모아둔 컨테이너 DI (의존성 주입)을 한다? 가장 먼저 해야할 일은 객체 생성! 의존성 주입이란? 디자인결합도를 느슨하게 되도록 하며, 의존관계 / 역전원칙 / 단일책임 원칙 을 따르도록 클라 단에서 생성에 의한 의존성을 클라이언트의 행위로부터 분리하는 것 ex) public class Dog{ private Animal animal; public Dog(){ this.animal = new Dog; } } 의존성주입에 대한 예시 :: Dog객체는 Animal객체에 의존한다. 하지만 이렇게 되면 문제점이 생긴다. - Animal을 수정하면 Dog도 수정이됨 - 부모객체..

TIL 2023.06.29

+15 제네릭스(Genrics)

스프링을 공부하면서 더욱 더 제네릭스의 필요성을 느껴 간단하게 정리해보려 한다. 제네릭(Generics) :: 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법 사용 :: 꺽쇠 기호 사용, 기호 안에 타입명을 기재 :: 타입을 변수화 한 기능이라고도 표현함 / 객체에 타입을 지정해주는 것이라 보면 된다 :: 여러 개가 필요한 경우 2개, 3개 등 계속해서 추가활 수 있다, ※ 클래스 초기화할때는 제네릭 타입을 갯수에 맞게 넘겨주면 된다. 주의사항 :: !!!! static 멤버에는 제네릭 타입이 올수가 없다!!!! class Sample { public void someMethod() { // Type parameter 'T' cannot be instantiated directly T t =..

TIL 2023.06.28