Backend

Backend/Spring

[Spring Security] 스프링 시큐리티 알아보기, 구조(Filter Chain) 및 인증 과정

🤔 스프링 시큐리티? 스프링 기반의 어플리케이션의 보안(인증과 인가)을 담당하는 프레임워크를 말합니다. 인증(Authentication) 로그인 과정처럼 사용자가 시스템에게 자신을 식별할 수 있는 자격증명(아이디, 비밀번호, 토큰 등)을 제공하고, 시스템이 이를 확인하는 과정을 말합니다. 인가(Authorization) 인증된 사용자가 어떤 리소스에 접근할 수 있는지 또는 어떤 동작을 수행할 수 있는지를 검증하는 것 즉, 접근 권한을 얻는 일을 말합니다. 다양한 보안 기능, 인증 방식, 제어 메커니즘을 지원하여 보다 경력한 보안을 구현할 수 있습니다. 개발자는 이러한 기능을 통해 보안 관련 로직을 작성하지 않아도 된다는 장점이 있습니다. 스프링 시큐리티를 사용하지 않았을 때에는 컨트롤러에서 직접 인증과 ..

Backend

테스트 코드 왜 작성할까요? (TDD?)

🤔 테스트 코드? 소프트웨어의 기능과 동작을 테스트하는 데 사용되는 코드입니다. 개발자가 작성한 코드를 실행하여 예상된 결과가 정상적으로 나오는지 확인하는 데 사용됩니다. E2E(End to End), 통합 테스트(Integration Test), 단위 테스트(Unit Test) 와 같은 다양한 테스트가 있습니다. 1. 단위 테스트 하나의 모듈(기능)이 의도한 대로 작동하는지 확인하는 과정입니다. 2. 통합 테스트 단위 테스트에서 검증된 개별 모듈(기능)들을 결합하여 예상대로 상호작용하고 있는지 확인하는 테스트입니다. 주로 외부 의존성(ex.데이터베이스)에 대해 테스트 합니다. 3. E2E(End to End) 실제 소프트웨어를 사용하는 사용자 시나리오를 테스트함으로써 소프트웨어가 의도한 대로 동작하는지..

Backend/JPA

[JPA] 프록시, 즉시&지연 로딩, 영속성 전이, 고아 객체

✔ 프록시(Proxy) 만약 비즈니스 로직에서 Member에 대한 정보를 가지고올 때 .find()를 통해 Member Entity와 연관관계 매핑된 Entity를 join하여 한번에 다 가지고온다. 하지만 Member에 대한 정보만 쓰려는 케이스는 불필요한 다른관계의 Entity정보까지 join을 통해 가지고오게 되는데 둘 다 쓰는 케이스에서는 편리하겠지만 Member에대한 정보만 사용하는 케이스에서는 낭비가 될 수 있다. 이러한 불필요한 낭비를 JPA는 프록시와 지연로딩을 사용하여 해결하고 있다. 실제클래스를 상속 받아서 만들어지고 겉 모양이 같다. EntityManager.find() - 데이터베이스를 통해 실제 엔티티 객체 조회 EntityManager.getReference() - 데이터베이스 ..

Backend/JPA

[JPA] 상속관계 매핑, @MappedSuperclass

🤔 상속관계 매핑? 관계형 데이터베이스는 상속관계라는 개념이 없다. 하지만 슈퍼타입과 서브타입 관계라는 모델링 기법이 객체의 상속과 유사하기 때문에 이점을 이용하여 상속관계 매핑을 하고있다. (객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑) DB에서 슈퍼타입과 서브타입의 논리모델을 디자인 했을때 실제 물리 모델로 구현하는 전략은 3가지가 있다. ✔ 조인전략(JOINED) 가장 정규화된 방법으로 각테이블을 join하는 방식으로 데이터 를 저장하게되며 데이터가 정규화 되어 저장되기 때문에 중복되는 데이터(name, price)를 줄일 수 있고, 객체의 관계와 가장 유사하다. @Inheritance(strategy = InheritanceType.JOINED)과 객체의 상속(extends)을 사용하..

Backend/JPA

[JPA] 다양한 연관관계 매핑 ( ManyToOne, OneToMany, OneToOne, ManyToMany )

✔ 연관관계 매핑시 고려사항 3가지 다중성 : @ManyToOne, @OneToMany, @OneToOne, @ManyToMany 단방향, 양방향 연관계의 주인 어노테이션을 사용하여 관계를 정확히 매핑해주고, 객체(Entity)를 단방향 또는 양방향으로 사용할지 충분히 고려한 후 양방향으로 설정 했다면 연관관계 주인을 설정함으로써 한쪽에서만 등록,수정이 일어날 수 있도록 한다. 🔎 @ManyToOne 다대일 [N:1] 💡 단방향 가장 많이 사용되는 연관관계로 한쪽(Member)에서만 조회, 등록, 수정 하도록 매핑 💡 양방향 양방향으로 설정하게 되면 Member와 Team객체에 서로 참조할 수 있는 필드를 생성하여 각각의 관계를 설정해준다. 이렇게되면 양쪽에서 등록, 수정이 일어날 수 있기 때문에 연관관..

Backend

[디자인 패턴] builder패턴

🤔 빌더 패턴(Builder Pattern) ? 복잡한 객체의 생성 과정과 표현 방법을 분리하여 다양한 구성의 인스턴스를 만드는 생성 패턴이다. 생성자에 들어갈 매개 변수를 메서드로 하나하나 받아들이고 마지막에 통합 빌드해서 객체를 생성하는 방식이다. 출처 : Inpa Dev ✔ 기존 패턴 🔎 생성자 패턴 생성자를 통해서 값을 설정하는 패턴이다. 오버로딩을 통해 필수로 설정해야하는 값들과 하지 않아도 되는 값들을 조절하여 만들 수 있다. 하지만 클래스의 필드가 많을경우 생성자의 매개변수 또한 늘어나게 되고 입력한 매개변수의 순서에 맞게 값들을 입력해야 하기 때문에 순서를 모두 기억하지 않는다면 실수를 유발할 수 있고, 생략하고싶은 매개변수를 선택적으로 생략할 수 없다. public class Member..

장용석
'Backend' 카테고리의 글 목록