목록Web (11)
개발지식 먹는 하마 님의 블로그

Spring 기반 애플리케이션의 인증(Authentication)과 권한 부여(Authorization)를 담당하는 강력한 보안 프레임워크이다principal - credential 패턴 principal (주체) - 인증을 받으려는 사용자나 시스템의 '식별자'credential (자격 증명) - 사용자가 인증/인가를 위해 제공하는 것Filter 기반Bean으로 설정 가능Spring Security 구조 및 기능 Authentication Manager는 인증을 담당하고 Authentication Provider가 실제 로직을 수행한다.Security Context인증된 사용자의 정보를 저장한다.SecurityContextHolder를 통해 애플리케이션 어디서나 인증된 사용자 정보에 접근할 수 있다!Au..

QueryDSL데이터 조회 시, 간단한 조회는 JPA를 통한 메서드명 설정만으로 조회를 할 수 있지만, 복잡한 조회를 위해서는 JPQL로 쿼리문을 문자열로 작성해야 한다.이는 가독성이 떨어지고 오타와 같은 휴먼 에러가 발생하기 쉽다.QueryDSL은 JPQL을 Java 코드로 안전하게 작성할 수 있도록 도와주는 프레임워크로 JPQL의 단점을 보완한다.가독성이 좋다.문법 오류 없이 안전하게 작성할 수 있다.IDE 자동완성이 지원된다.QueryDSL 설정 방법1. 의존성 추가✅ 의존성dependencies { implementation 'com.querydsl:querydsl-jpa' annotationProcessor 'com.querydsl:querydsl-apt' annotationPr..

로그인 관련 처리와 같이 공통으로 처리해야 하는 로직들이 있다.이러한 공통 로직은 Filter, Interceptor, AOP를 활용하여 처리할 수 있다.사용 범위는 제한적이지만 필수적으로 사용되는 요소들이다.이 셋은 동작 시점, 목적, 사용 방식에서 차이가 있다. Request가 들어올 때, Filter ➡️ Interceptor ➡️ AOPResponse가 나갈 때, AOP ➡️ Interceptor ➡️ Filter FilterRequest, Response를 걸러서 전달한다.Servlet 기반, Dispatcher Servlet 이전에 동작한다.클라이언트 → 서버로의 요청 전/후에 처리여러 필터가 체인으로 연결되어 연속으로 수행될 수 있다.인코딩 처리, 로깅, 보안 검사, 인증, CORS 등을 위..

즉시 로딩 Eager모든 연관 데이터를 한 번에 로드한다.여러 개의 엔티티가 자주 함께 사용될 때 유용하다.쿼리 수행 횟수를 줄여 성능을 향상할 수 있다.@ManyToOne, @OneToOne지연 로딩 Lazy데이터가 실제로 필요한 시점에만 로드한다.연관 데이터가 필요하지 않은 경우에 유용하다.네트워크 트래픽을 줄이고 메모리 사용을 최적화한다.@OneToMany, @ManyToMany즉시 로딩과 지연 로딩 비교 테스트N:1 관계의 게시글과 유저가 있다고 가정하고, 아래의 테스트 코드로 테스트를 해보자.//Board 목록만 조회 List boards = em.createQuery("SELECT b FROM Board b", Board.class).getResultList();//조회 결과 출력 for (B..

🍪 Cookie클라이언트에 저장되는 작은 데이터서버는 무상태 Stateless이기 때문에 클라이언트의 상태를 보존하지 않는다.따라서, 쿠키를 사용해 사용자의 상태 또는 세션을 유지한다.🍪 Cookie를 사용하는 과정클라이언트가 로그인을 시도한다.로그인에 성공하면, 서버는 쿠키를 만들고 Set-Cookie 헤더를 통해 응답에서 쿠키를 함께 보낸다.클라이언트는 웹 브라우저 내에 있는 쿠키 저장소에 받은 쿠키를 저장한다.이후의 요청마다 클라이언트는 가지고 있는 쿠키를 요청에 함께 보낸다.🍪 Cookie의 단점쿠키는 탈취되기 쉬우며 한번 탈취된 정보는 반영구적으로 사용할 수 있다.또한, Client가 임의로 값을 변경하면 다른 유저로 인식할 수 있다.쿠키에 중요한 값을 저장하지 않는다.암호화된 Token을..
DTODTO는 Controller - Service - Repository 계층 간 데이터를 전달하는 객체이다.(Entity에서 필요한 부분만 꺼내서 포장하는 부분이라고 생각할 수 있을 것 같다.)Entity를 직접 노출하지 않기 때문에 필드를 보호한다.또한 필요한 필드만 포함하여 성능을 최적화한다. DTO와 Entity의 차이항목DTOEntity목적데이터 전달데이터 저장사용 범위Controller - Service - Repository JPA, 데이터 베이스캡슐화비즈니스 로직 없이 데이터만 포함비즈니스 로직 포함 가능변경 가능성API에 따라 유연한 변경데이터베이스 스키마 변경 필요설계사용자(데이터를 사용하는 개발자) 친화적데이터베이스 친화적 DTO에서 Validation으로 검증하지 못한 부분을 서..

웹 서비스의 전체적인 구조와 관계, 흐름, 각 요소의 역할을 좀 더 쉽게 이해하고 떠올릴 수 있도록특정 상황에 비유해 정리하였다.일부 내용은 간략화를 위해 생략되었고 별도의 글에 자세히 정리하였다.⚙️ Web Service웹을 통해 클라이언트와 서버가 HTTP 기반으로 데이터를 주고받으며 동작하는 서비스웹 서비스 구조는 우리가 일상 생활에서 흔히 볼 수 있는 가게 운영 시스템과 굉장히 유사하다.다만, 일하는 직원이 전자기기 또는 어떤 개념으로 대체될 뿐이다.📌클라이언트 - 서버 간 통신프로토콜에 따라 클라이언트와 서버를 연결하고 데이터를 전송한다. 서로 다른 공간에 있는 고객과 가게는 인터넷으로 연결 되어있다.IP는 데이터 패킷을 목적지까지 전달하는 배달기사다. IP 주소와 Port 번호(동호수 같은 ..

API애플리케이션이 서로 통신할 수 있도록 해주는 인터페이스이다.문서 양식이라고 생각하면 이해하기 쉽다.이렇게 요청서를 작성해서 넘겨주면 그에 따라서 필요한 걸 드릴게요!라고 양식에 대한 규칙과 명령어를 정의한 것이다.📌 REST (REpresentational State Transfer) = 자원의 표현에 의한 상태 전달자원(데이터)을 이름으로 구분, 해당 자원의 상태(데이터 요청 시점의 자원 상태)를 주고받는 모든 것을 의미한다.HTTP Method로 CRUD Operation을 적용하는 것을 Rest라 칭한다.🟩 구성 요소자원 : URI (URL + URN)표현 : 데이터를 주고 받는 형태, JSON, XML행위 : HTTP 프로토콜 MethodGET정보 요청POST정보 입력PUT정보 업데이트 ..

📌 HTTP ( HyperText Transfer Protocol )웹에서 데이터를 주고받기 위한 프로토콜요청과 응답을 주고받는다.✅ 무상태성(Stateless)서버는 클라이언트의 이전 요청 정보를 저장하지 않음이를 보완하기 위해 쿠키(Cookie) / 세션(Session) / 토큰(Token) 사용✅ 비연결성(Connectionless)클라이언트가 요청을 보내고 서버가 응답하면 연결이 바로 종료새로운 요청을 보낼 때마다 새로운 연결을 생성해야 함✅ 지속연결 ( Persistent Connection )비연결성을 개선한 방법으로 한 번의 TCP 연결로 모든 요청과 응답을 주고받은 후 연결을 종료함TCP 3-Way HandShake와 연결 종료 횟수 감소지연 시간이 감소네트워크 리소스를 절약Keep-Al..

인터넷상에서는 데이터를 안전하게 전달하기 위한 규칙이 있다.이를 전송 계층 프로토콜이라고 한다. 대표적인 전송 계층 프로토콜에는 TCP와 UDP가 있다.두 방법의 가장 큰 차이는 신뢰성을 고려하는 지의 여부이다.프로토콜TCPUDP신뢰성 고려3 Way HandShake로 신뢰성 있는 연결비신뢰성속도느림빠름공통점PORT가 존재한다📌 TCP ( Transmission Control Protocol )신뢰성 있는 데이터 전송을 보장하는 연결 지향형 프로토콜신뢰성 있는 데이터데이터를 송수신하기 전에 3 Way HandShake를 통해 연결을 설정한다.오류 처리손상된 패킷 감지 후 재전송한다.흐름 제어 및 혼잡 제어데이터가 올바르게 전송될 수 있도록 전송 속도 등을 조절한다. 📌 3 Way HandShake데이..