본문 바로가기

spring14

[Spring] 스프링 빈과 스프링 컨테이너 0. 스프링 부트로 처음 접하면.. 스프링 부트로 스프링 개발을 처음 접하게 되면, 스프링 빈이라는 개념을 인지하지 못한체 개발을 시작하게 될 것이다. 책, 혹은 구글링한 코드를 보며 @SpringBootApplication, @RequiredArgsConstructor, @Controller, @Service와 같은 어노테이션을 쓰기만 해도 프로젝트가 정상적으로 작동하기 때문이다! 하지만 개발을 해보다 보면 "그래서 이게 어떤 원리로 작동하는 거지?", "이 어노테이션은 왜 붙이는거지?" 와 같은 궁금증이 생기게 된다. "@RequiredArgsConstructor가 final 혹은 @NotNull이 붙은 생성자를 생성해주는 건 알겠는데, 생성자가 왜 필요하지?" 같은 고민들을 해결하기 위해서는 우선 .. 2023. 1. 9.
[Spring] 예시 스프링 프로젝트 설계 0. 개요 이 게시물은 앞으로 작성할 스프링 게시물들에 등장할 예시 프로젝트의 구성을 설명하는 글이다. 1. 비즈니스 요구사항과 설계 예시 프로젝트의 구조는 크게 회원, 주문, 할인 정책 3가지로 나뉜다. - 회원 - 회원을 가입하고, 조회할 수 있다. - 회원은 일반, VIP 2가지 등급이 있다. - 회원 데이터는 자체 DB를 구축할 수도 있고, 외부 시스템과 연동할 수도 있다. - 주문과 할인 정책 - 회원은 상품을 주문할 수 있다. - 회원 등급에 따라 할인 정책을 적용할 수 있다. - 할인 정책은 변경 가능성이 높으며, 현제 2가지 정책을 고민하고 있다. - 1) 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용하자. - 2) 모든 VIP는 구매 금액의 10%를 할인해주는 정책을 적용하.. 2023. 1. 9.
[Spring] 객체 지향 설계와 스프링 1. 스프링 - 이전 글에서 다형성만으로는 OCP와 DIP를 지킬 수 없다는 내용을 작성하였다. - 스프링은 아래의 기술들로 다형성과 OCP, DIP를 가능하도록 지원해줌 -> DI(Dependency Injection): 의존관계, 의존성 주입 -> DI 컨테이너 제공 - 위 기능들을 활용하면, 클라이언트 코드의 변경 없이, 기능이 확장 가능해진다. (즉, 쉽게 부품을 교체하듯이 개발 가능) 2. 지금까지 내용 정리 - 해당 카테고리의 첫번째 게시물부터 지금까지 내용들을 한번 정리해보자. - 모든 설계에 역할과 구현을 분리하자. - 애플리케이션을 설계할 때, 마치 공연을 설계하듯 배역만 만들어두고, 배우는 언제든지 변경할 수 있도록 유연하게 설계하는 것 -> 이것에 좋은 객체 지향 설계이다. -> 이것.. 2022. 5. 26.
[Spring] 좋은 객체 지향 설계 5가지 원칙(SOLID) 0. SOLID란? - 로버트 마틴(클린코드 저자로 유명)이 좋은 객체 지향 설계의 5가지 원칙을 정리함 - SRP: 단일 책임 원칙(single responsibility principle) - OCP: 개방-폐쇄 원칙(open/closed principle) - LSP: 리스코프 치환 원칙(liskov substitution principle) - ISP: 인터페이스 분리 원칙(interface segregation principle) - DIP: 의존관계 역전 원칙(dependency inversion principle) 1. SRP 단일 책임 원칙 (Single Responsibility Principle) - 하나의 클래스는 하나의 책임만 가져야 한다. - 하나의 책임이라고 하면, 기준이 모호해.. 2022. 5. 26.
[Spring] 좋은 객체지향 프로그래밍이란? 0. 객체 지향의 특징 - 추상화 - 캡슐화 - 상속 - 다형성 1. 객체 지향 프로그래밍 - 다들 알고있겠지만, 객체 지향 프로그래밍은 프로그램을 명령어의 목록으로 보는 것에서 벗어나, "객체"(독립된 단위)들의 모임으로 파악하는 것이다. - 각각 객체는 서로 메세지를 주고받고, 데이터를 처리하는 등 서로 협력한다. - 객체 지향 프로그래밍은 프로그램을 유연하고, 변경에 용이하도록 만들어 주므로, 대규모 개발에 자주 사용된다. -> 유연하고 변경이 용이하다? -> 마치 레고 블럭을 조립하듯이, 컴포넌트를 유연하게 변경하면서 개발하는 방법 -> 객체 지향의 핵심인, 다형성(Polymorphism) 2. 다향성이 왜 중요한가? - 다향성에 대해 이해해 보기 위해 실생활의 상황을 역할과 구현으로 구분해보자... 2022. 5. 17.
[Spring] 스프링이란? 1. 스프링 구성 요소? - 스프링은 하나의 기술이 아닌, 여러가지 기술로 나누어져 있다. - 필수 - 스프링 프레임워크: 스프링의 기본 - 스프링 부트: 스프링 설정을 쉽게 해주는 장치 - 선택 - 스프링 데이터: 데이터(CRUD)를 쉽게 관리할 수 있는 장치, JPA를 많이 씀 - 스프링 세션: 세션 기능을 편하게 사용할 수 있도록 함 - 스프링 시큐리티: 보안 관련 - 스프링 Rest Docs: 스프링의 api를 문서화 시켜 편하게 볼 수 있도록 함 - 스프링 배치: 다량의 데이터중 일부를 가져오고 저장하는 기술이 배치, 이를 스프링 특화되게 함 *이 외에도 많은 기술들이 있다.(링크 참고) https://spring.io/projects Spring | Projects Spring Framewor.. 2022. 4. 19.