Spring 17

Spring의 핵심 Concept는 무엇인가

들어가기에 앞서 Spring은 자바 언어 기반의 프레임워크입니다. 자바언어는 객체지향언어라는 주된 특징을 지니고 있습니다. 스프링은 객체지향언어가 가진 특징을 극대화시켜 주는 프레임워크입니다. 다시 말해 스프링은 좋은 객체지향 애플리케이션을 개발할 수 있도록 도와주는 프레임워크입니다. 좋은 객체지향이란 무엇인가? 해당 부분에 대해 간략하게 정리해 놓은 내용을 참고 부탁드립니다. 좋은 객체 지향 설계의 5가지 원칙 좋은 객체 지향 설계의 5가지 원칙 Robert Martin의 클린코드에서 좋은 객체 지향 설계의 원칙을 SOLID로 정의 하였다. S : SRP(Single Responsibility Principle) 단일 책임 원칙 O : OCP(Open/Closed Principle) 개방-폐쇄 원칙 L..

Spring 2023.05.23

Enum Validation

Backend Service를 구축 시 Controller 단에서 요청을 받을 때 해당 요청이 유효한 요청인지 검증하기 위해 Dto와 @Valid를 함께 자주 사용합니다. @Valid 어노테이션과, Validation이 제공하는 어노테이션을 사용하면 유효하지 않은 요청사항이 올 경우 미리 MethodArgumentNotValidException을 발생시켜 줍니다. 자세한 설명에 앞서 간단한 예시를 확인하고 넘어가도록 하겠습니다. 가정 사항은 Controller단에서 Dto로 요청을 받아 Service에서 회원을 가입시키는 상황입니다. // RequestDto @Getter public class RequestDto { @NotNull(message = "null 일 수 없습니다.") @NotBlank(m..

Spring 2023.04.24

Spring Bean의 생명주기

스프링 빈의 라이프 사이클은 다음과 같습니다다. 스프링 컨테이너 생성 => 스프링 빈 생성 => 의존관계 주입 => 초기화 콜백 => 사용 => 소멸 전 콜백 => 스프링 종료 바로 예제와 함께 스프링 빈의 라이프 사이클을 알아보려고 합니다. 다음과 같은 Client 가 있다고 가정합니다. [Client Code] public class Client{ private String clientName; public Client() { System.out.println("생성자 호출, clientName = " + clientName); init(); call("Client 초기화 메세지"); } public void setClientName(String clientName) { this.clientName ..

Spring 2023.04.21

싱글톤에 대해서

싱글톤이란 객체지향 프로그래밍에서 사용되는 디자인 패턴 중 하나로, 해당 클래스의 인스턴스가 오직 하나만 생성되도록 보장하는 패턴이다. 현재 주제에서는 다음과 같은 class가 있다고 가정하고 설명을 해보려 한다. 싱글톤 패턴이 적용되지 않았을 때, 싱글톤 패턴이 적용되었을 때로 나누어 알아보려고 한다. AppConfiguration에서 DI(의존성 주입)을 하고 있는 상황. AppConfiguration은 다음과 같다. @Configuration public class AppConfiguration { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public Mem..

Spring 2023.04.10

Dependency Injection (의존 관계 주입)

의존관계 주입은 크게 4가지 방법이 존재한다. 생성자 주입 수정자 주입(setter) 필드 주입 일반 메서드 주입 생성자 주입 생성자를 사용해 의존관계를 주입받는 방식 생성자 호출시점에 딱 1번만 호출되는 것이 보장됨 불변, 필수 의존관계에 사용 public class UserService { private UserRepository userRepository; public void setUserRepository(UserRepository userRepository) { this.userRepository = userRepository; } // ... } 수정자 주입(setter 주입) 필드의 값을 변경하는 setter 메서드를 활용하여 의존관계를 주입하는 방법 선택, 변경 가능성이 있는 의존관계에 ..

Spring 2023.04.10

Spring Rest Docs Tutorial

backend 개발자들이 API 문서화를 하는 방법에는 여러 가지 방법이 있다. 1. 수기를 통한 문서화 2. postman publish 기능을 통한 문서화 3. swagger를 활용한 문서화 4. Spring REST Docs를 활용한 문서화 ... 각각의 API 문서화마다 장단점이 있을 것이다. 특히 1번, 2번 방식은 별로 추천하지 않는 방식이다. [추천하지 않는 이유] api 명세가 바뀌었을 때 까먹고 바꿔주지 않는다면 api 명세 기능을 잃어버린다. 개발자가 실수로 오타를 내었을 때 누군가 알려주지 않는 이상 이를 발견하기 힘들다. Swagger와 Rest Docs 방식을 통한 API 문서화 방법 중 이번 장에서는 Spring Rest Docs를 활용한 API 문서화 방법을 알아보려고 한다. ..

Spring 2023.04.06

DI 와 IOC에 대해서

IOC란 무엇인가? IOC는 Inversion Of Control의 약자로 제어의 역전을 의미한다. 다음 예시로 설명을 해보려고 한다. PostService, PostRepository는 인터페이스이며 PostServiceImpl, PostRepositoryImpl은 각 인터페이스를 구체화 한 구체 클래스이다. PostServiceImpl은 PostRepository를 의존하고 있는 상황이다. [PostServiceImpl] public class PostServiceImpl implements PostService { private final PostRepository postRepository; public PostServiceImpl(PostRepository postRepository) { thi..

Spring 2023.04.05