본문 바로가기

전체 글35

[Programming] - Builder 패턴이란? Lombok의 Builder 패턴을 반복적으로 사용하면서 빌더 패턴이 정확히 무언인지 궁금해서 조사해보게 되었다. 빌더 패턴이란? 빌더 패턴은 복잡한 객체들을 단계별로 생성할 수 있게하여, 다양한 구성의 인스턴스를 만드는 디자인 패턴이다. 예를 들어 음료 제조 레시피를 들 수 있다. 예를 들어 커피를 제작하려고 한다고 생각해보자. 같은 커피 음료라는 분류 속에서도, 아메리카노, 에스프레소부터 해서 카페 라떼까지, 손님에 따라 주문하는 원두의 종류도 다르고 각 음료의 레시피도 분명히 다를 것이다. 만약 위의 상황을 코드로 구현해보자 한다면, 커피 음료라는 큰 상위 객체(인스턴스)를 만들려고 생각할 것이다. 그리고 음료 제조에 들어가는 재료들을 객체의 속성으로 포함시킬 것이다. 그리고 음료 제조시마다 생성자.. 2024. 3. 20.
[Spring] 테이블 매핑, 영속성 전이 (cascade) 자주 쓰이는 다대일 매핑에 대해 알아보고 영속성 전이에 대해서도 알아보기 가장 일반적인 다대일 관계인 상품 테이블과 공급업체 테이블을 가지고 설명해보도록 하겠다. 🏷️ 다대일 단방향 매핑 위의 예시 테이블처럼, 여러 개(다)의 상품이 한 개(일)의 공급업체로 매핑되는 관계를 의미한다. 다대일 단방향 매핑을 하기 위해서는 한쪽에(매핑의 주인, 외래키를 갖는 엔티티), 아래와 같은 코드가 추가 되어야 한다. public class Product { @ManyToOne @JoinColumn(name = "provider_id") @ToString.Exclude private Provider provider; } 위의 코드에 대해 설명하자면, Product(상품) 엔티티에서 Provider(공급업체)에 대해 다.. 2024. 3. 13.
[Spring] - 인증과 인가 웹 애플리케이션을 구현할 때 아마도 가장 먼저 접하게 되는 부분이 회원가입 및 로그인 서비스 구현이다. 사용자가 서비스를 보다 더 안전하고 효율적으로 사용할 수 있도록 하는데 있어, 인증(Authentication) 과 인가(Authorization) 과정은 매우 중요하다. 인증과 인가가 필요한 이유 사용자와 관리자와 같이 특정 역할에 따라 접근할 수 있는 데이터에 제한을 두고자 할 때, 인증과 인가가 필요하다. 이렇게 권한별로 접근을 달리함으로써 데이터를 보다 안전하게 관리할 수 있게 된다. 🏷️ 인증 (Authentication)이란? ◽ 인증은 사용자가 누구인지 확인하는 단계이다. ◽ 인증의 대표적인 예로 '로그인'이 있다. 🏷️인가 (Authorization)란? ◽인증을 통해 검증된 사용자가 애.. 2024. 3. 7.
[네트워크] - HTTP(Hyper Text Transfer Protocol)란? HTTP 프로토콜은 웹 상에서 데이터를 주고 받기 위한 규칙을 정의한 프로토콜이다. HTTP의 특성을 이해하는 것은 웹 애플리케이션을 개발하는데 있어 매우 중요하기에 특징들을 정리해보고자 한다! 1. 비연결성 (Connectionless) HTTP는 비연결을 지향하는 프로토콜이다. "비연결"이란, 클라이언트가 서버에 요청을 하고, 서버가 그 요청에 응답을 하게 되면 연결이 바로 종료되는 형태를 의미한다. 이 방식은 요청을 응답과 함께 종료시킬 수 있어, 많은 수(대규모)의 클라이언트 요청 서비스에 적합하고, 서버 리소스를 효율적으로 사용할 수 있다는 장점이 존재한다. 그러나 상태 정보를 유지하지 않기에, 상태 정보를 필요로 하는 경우에는 단점으로 작용할 수 있다. 2. 무상태성 (Stateless) HT.. 2024. 3. 7.
[Spring] - @RestControllerAdvice를 통한 커스텀 예외 처리 작성 방법 Postman을 통해 request에 대한 response를 받을 수 있는데, 에러가 발생 시 이해하기 어려운 장문의 문장들이 뜨는 것을 볼 수 있다. 시스템적인 문제부터 클라이언트의 문제까지 에러의 종류는 다양한데, 서버측에서 명확하게 파악할 수 있는 에러들은 따로 정의해서 사용자가 알아보기 쉽게 할 방법을 찾아보기로 하였다. @RestControllerAdvice @ControllerAdvice + @ResponseBody 형태로, RESTfull한 웹 서비스를 개발할 시 예외 처리 로직을 구현할 때 적합하다. @RestControllerAdvice 를 사용함으로써, 컨트롤러 계층 전반에서 발생하는 예외들을 한 곳에 서 효율적으로 관리하고 처리할 수 있게 된다. 즉 @RestControllerAdvi.. 2024. 2. 27.
[Spring 🤔] - @Autowired vs @RequiredArgsConstructor 궁금증 배경 ) 스프링 부트 핵심 가이드 책을 보면서, 책에선 @Autowired를 통해 외부 인터페이스의 생성자를 작성하는 반면 나는 @RequiredArgsConstructor로 외부 인터페이스 의 생성자코드를 생략해서 쓰고 있었다. 이 둘의 차이점은 뭐고 사실 정확히 어떤 이유로 사용하는 이참에 알아보기 위해 조사해보게 되었다.! Q1. @Autowired와 @RequiredArgsConstructor의 공통점, 사용 목적은? A : @Autowired와 @RequiredArgsConstructor은 둘 다 의존성 주입!(Dependency Injection)을 달성하기 위한 목표를 가지고 있다. Q2. @Autowired와 @RequiredArgsConstructor의 차이점은? A : '@Aut.. 2024. 2. 22.
[Spring 🤔] - lombok @Builder, @NoArgsConstructor, @AllArgsConstructor의 사용에 대해 궁금증 배경 ) 강의를 듣다보니 자연스럽게 (무의식적으로) @Builder, @NoArgsConstructor, @AllArgsConstructor를 적고 있는 나를 발견했다.. 파악한 부분은 대강 @Builder는 그냥 써도 되지만, 만약 @NoArgsConstructor를 쓰게 된다면 @AllArgsConstructor를 필수적으로 붙여줘야 한다는 것이였다.. 그렇지만 왜? 쓰지는 궁금하여 찾아보게 되었다. ✅ 엔티티 클래스를 생성할 때 Builder 패턴을 쓰게 된다. 이유는 엔티티의 모든 속성들을 다 설정할 필요없이 필요한 값만으로 객체를 쉽게 생성할 수 있기 때문이다. Q1. 그렇다면 @Builder는 @AllArgsConstructor 와 함께 써야 하는걸까? A : 앞서 Builder는 생성.. 2024. 2. 19.
[Spring] - 데이터베이스 ORM(Object Relational Mapping) ▫ 뜻 : 자바와 같은 객체지향 언어에서 의미하는 객체와 RDB(Relational Database)의 테이블을 자동으로 매핑하는 방법 ⚠ 객체의 클래스와 데이터베이스의 테이블의 속성은 정확하게 일치하진 않는다. ➡️ ORM 이 이 둘의 불일치와 제약사항을 해결하는 역할을 해준다. ▫ ORM의 장점 데이터베이스 쿼리를 객체지향적으로 조작할 수 있다. 쿼리문을 작성하는 양이 줄어든다. 객체 지향적으로 DB에 접근할 수 있어 코드의 가독성이 높아진다. 재사용 및 유지 보수가 편리하다. 객체들은 각 클래스로 나누어져 있어 재사용 및 유지보수가 수월하다. 데이터베이스에 대한 종속성이 줄어든다. ORM을 통해 자동 생성된 SQL문은 객체를 기반으로 DB 테이.. 2024. 2. 13.
[Spring] - 스프링 (gradle) springdoc으로 Swagger3 추가하기 문서화 작업의 필요성 API를 개발하면 명세를 관리해야 한다. 명세란 해당 API가 어떤 로직을 수행하는지 설명하고 이 로직을 수행하기 위해서 어떤 값을 요청하며, 이에 따른 응답 값으로 무엇을 받을 수 있는지를 정리한 자료이다. 이번 글에서는 스프링 gradle 프로젝트에서 springfox가 아닌 springdoc으로 Swagger3를 추가하는 방법에 대해 작성하고자 한다. 기존 springfox로 추가할려고 시도해보니.. 버전 업된 swagger3를 적용하는데 있어, 기존과는 다른 방법을 써야함을 느꼈다.. 1. build.gradle에 아래의 의존성을 추가해준다. dependencies { implementation 'org.springdoc:springdoc-openapi-starter-webm.. 2024. 2. 6.