본문 바로가기

Back-End173

[Spring Security] CORS(Cross-Origin Resource Sharing) 설정 🍕 CORS(교차 출처 자원 공유)란? 요청을 받는 백엔드 쪽에서 이를 허락할 다른 출처들을 미리 명시하여 다른 출처 간에 리소스를 공유할 수 있도록 한다. 브라우저는 다른 출처끼리의 요청이 보내질 때 요청에 Origin이라는 header(데이터가 전송될 때 데이터의 맨 앞쪽에 붙은 보충 정보 - 받는 쪽의 IP 주소, 사용할 프로토콜이나 옵션 등)를 추가한다. Origin에는 요청하는 쪽의 scheme(요청할 자원에 접근할 방법인 프로토콜 http, ftp, telnet)과 도메인, 포트가 담긴다. https:// : scheme naver.com : 도메인 :443 : 포트 요청을 받은 서버는 답장의 헤더에 지정한 Access-Control-Allow-Origin 정보를 실어서 보낸다. 여기에 요청을.. 2022. 11. 6.
MapStruct 구현체의 분석과 DTO에서 필요한 Lombok 애너테이션 Mapper는 DTO 클래스와 엔티티 클래스를 서로 변환해 주는 변환자이다. 계층간 역할 분리를 위해 사용한다. Mapper의 한 종류인 MapStruct는 컴파일 타임에 매핑 구현체를 모두 생성한다. DTO를 Inner class로 관리하던 중에 각 Inner class에 어떤 Lombok 애너테이션을 붙여야 하는지 판단이 되지 않아서 DTO 클래스와 MapStruct가 생성하는 구현체 코드를 분석하여 정리했다. 🪄 MapStruct가 매핑을 정상적으로 하기 위한 우선 순위 조건 Builder 패턴이 적용된 경우 모든 필드를 파라미터로 가지는 생성자가 있을 경우 👉 이때 기본 생성자가 포함되어 있으면 제 역할을 하지 못한다. setter 메서드가 있는 경우 1. RequestBody → Member R.. 2022. 10. 20.
[솔로 프로젝트] To-do App 보호되어 있는 글 입니다. 2022. 10. 17.
[솔로 프로젝트] TodoList - Tomcat 수동 배포, Ngrok 터널링 프로그램 보호되어 있는 글 입니다. 2022. 10. 17.
생성자에 매개변수가 많다면 빌더를 고려하라 | Builder pattern, Lombok @builder Builder pattern 빌더 패턴은 "복잡한 객체의 구성과 그 표현을 분리하여 동일한 구성 과정이 서로 다른 표현을 만들 수 있도록 하는 것"을 목표로 한다. 복잡한 개체를 단계별로 구성하는 데 사용되며, 마지막에는 개체를 반환한다. 생성자에 대한 매개변수가 축소되고, 가독성이 높은 메서드 호출로 제공된다. 때문에 선택적 매개변수에 대해 null을 전달할 필요가 없다. 객체는 완전한 상태로 인스턴스화되며, 불변 객체는 복잡한 논리 없이 구축될 수 있다. 코드 라인 수는 두 배 이상으로 증가하지만, 가독성 있는 코드를 작성할 수 있다. 유용한 예시 Member 클래스가 있다고 가정하자. name, age, email, phone 필드를 갖고 아래의 특성을 갖는다. 한 번 생성되면 읽기만 가능해야 한다.. 2022. 10. 15.
Hello, Reactive | 명령형 프로그래밍과 선언형 프로그래밍 명령형 프로그래밍 vs 선언형 프로그래밍 코드가 어떤 식으로 실행되어야 하는지에 대한 구체적인 로직이 코드 안에 그대로 드러나는 명령형 프로그래밍 방식과는 달리 선언형 프로그래밍의 경우는 코드 상에 보이지 않는 내부 반복자가 존재한다. // 명령형 for(int number : numbers){ if(number > 4 && (number % 2 == 0)){ sum += number; } } // 선언형 int sum = numbers.stream() .filter(number -> number > 4 && (number % 2 == 0)) .mapToInt(number -> number) .sum(); Java의 Stream API를 떠올려 보면 메서드 체인(중간 연산)에서는 선언하는 람다 표현식을 .. 2022. 10. 12.