일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 카카오
- 김영한
- JavaScript
- 자바스크립트
- 스프링부트
- 카카오 면접
- 오블완
- ElasticSearch
- 알고리즘정렬
- Effective Java 3
- 자바
- effectivejava
- 티스토리챌린지
- Sort
- 알고리즘
- Effective Java
- kubernetes
- 코딩테스트
- 예제로 배우는 스프링 입문
- k8s
- 이차전지관련주
- 이펙티브 자바
- 스프링핵심원리
- Spring
- 클린아키텍처
- 이펙티브자바
- java
- 스프링 핵심원리
- 엘라스틱서치
- 스프링
- Today
- Total
목록스프링 (17)
Kim-Baek 개발자 이야기
김영한님의 [스프링 핵심 원리] 강의를 정리하고, 내가 생각한 내용까지 정리하는 포스팅 이번에는 IoC와 DI, 컨테이너에 대해서 설명을 한다. 스프링을 하는 사람들은 다들 많이 들어본 내용일텐데, IoC, DI, AOP까지 해서 스프링 관련된 중요한 개념이라고 생각된다. 어려운 내용은 아니고 지금까지 우리가 강의를 통해서 해왔던 내용들이 다 여기에 담겨있어서 어떤 내용들과 매칭되는지 다시한번 기억을 되살려서 살펴보도록 하자. 제어의 역전 IoC ( Inversion of Control ) 우선 제어의 역전을 알아보기 전에 기존 프로그램의 동작과정을 살펴보도록 하자 클라이언트가 필요한 서버 구현 객체를 생성하고, 연결하고 실행했다. 구현 객체가 프로그램의 제어 흐름을 스스로 조종했다. 일반적으로 이게 개..
김영한님의 [스프링 핵심 원리] 강의를 정리하고, 내가 생각한 내용까지 정리하는 포스팅 지금까지 만들어오면서 적용한 객체 지향 설계의 원칙에 대해서 살펴보고자 한다. 객체 지향 설계의 5가지 원칙은 이전에 작성한 글에도 잘 정리가 되어있으니 생각이 나지 않는다면 해당 내용을 다시한번 보는 것을 권장한다. 1. SRP ( 단일 책임 원칙 ) - 한 클래스는 하나의 책임만 가져야 한다는 원칙이다. 우리가 처음에 만들었던 클라이언트 객체는 직접 구현 객체를 생성하고, 연결하고 실행까지 하는 다양한 첵임을 가지고 있었다. SRP 원칙에 따라서 관심사를 분리하게 된다. 더 이상 클라이언트는 구현 객체를 생성하거나 연결하지 않고, AppConfig 가 해당 역할을 담당하게 된다 클라이언트 객체는 실행하는 책임만 담..
김영한님의 [스프링 핵심 원리] 강의를 정리하고, 내가 생각한 내용까지 정리하는 포스팅 이제는 이전에 해보려고 했었던 할인 정책을 변경을 해보고자 한다. 기존에는 정액 할인 정책을 사용하여 어떤 주문이 들어오더라도 1000원만큼만 할인이 이루어졌다. 바꾸려고 하는 것은 정률 할인 정책으로 주문가격의 10%를 할인해주는 정책이다. FixDiscountPolicy -> RateDiscountPolicy 로 변경을 하게 되는데 이제 어떤 부분을 바꿔주면 되는지 살펴보자. 우리는 AppConfig를 만들게 되면서 애플리케이션이 실제 로직이 수행되는 사용 영역과 객체를 생성하고 구성(Configuration)하는 영역으로 분리되었다. 현재 애플리케이션의 구조는 이와 같은 상태라고 할 수 있다. 그렇다면 할인정책은..
김영한님의 [스프링 핵심 원리] 강의를 정리하고, 내가 생각한 내용까지 정리하는 포스팅 지난번에 새로운 할인 정책을 만들어서 테스트까지 했으니 이제 실제 코드에 적용을 해보는 시간이다. public class OrderServiceImpl implements OrderService { // private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); private final DiscountPolicy discountPolicy = new RateDiscountPolicy(); } FixDicountPolicy를 RateDiscountPolicy 를 위와같이 적용하면 된다. 이 코드는 어떤 상태라고 생각이 될까? 역할과 구현을 분리한 것은 ..
김영한님의 [스프링 핵심 원리] 강의를 정리하고, 내가 생각한 내용까지 정리하는 포스팅 주문과 할인 도메인에 대한 설계를 끝냈으니, 개발을 진행해보도록 하겠다. 이전과 마찬가지로 깃헙에 브랜치를 새로 따서 매 단계마다 올리고 있으니, 필요하신 분은 아래에 링크를 둘테니 확인하면 된다. package core.order.discount; import core.order.member.Member; public interface DiscountPolicy { /** * * @return 할인 대상 금액 */ int discount(Member member, int price); } 먼저 할인 정책 인터페이스이다. 할인 대상 금액을 리턴해주는 메소드 하나만 가진다. package core.order.discou..
김영한님의 [스프링 핵심 원리] 강의를 정리하고, 내가 생각한 내용까지 정리하는 포스팅 지난번에는 스프링 프로젝트를 세팅하는 것까지 완료를 했다. 이제 어떤 프로젝트를 만들면서 객체 지향을 익혀나갈 것인지 살펴보도록 하자. 만들 프로젝트의 요구사항에 대해서 보도록 하자. 기본적으로 배달의 민족 서비스처럼 주문 배달 서비스이다. 회원 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경 될 수 있다.) 할..
김영한님의 [스프링 핵심 원리] 강의를 정리하고, 내가 생각한 내용까지 정리하는 포스팅 이제부터는 실제로 코딩을 하면서 강의를 따라가게 된다. 먼저 프로젝트를 만들어야 되는데, 만드는 방법은 여러가지가 있을 수 있겠다. https://start.spring.io/ Spring initailizr 로 기본 프로젝트를 생성할 수 있고, intellij 와 같은 IDE에서도 바로 만들어도 상관이 없다. 강의를 따라서 스프링 이니셜라이져를 통해서 한번 만들어 볼 수 있도록 하겠다. 프로젝트는 Maven, Gradle 중 고르면 되는데 Gradle을 사용하도록 한다. 기능적인 차이는 없고, Dependency 추가하는 방식 같은 것이 조금 달라지는 거라서 상관없다. 언어는 자바를 선택하도록 한다. 다른 언어는 사..
김영한님의 [스프링 핵심 원리] 강의를 정리하고, 내가 생각한 내용까지 정리하는 포스팅 지금까지 강의에서는 스프링의 이야기가 아니라 객체 지향에 대한 이야기만 하고 있었다. 그렇다면 스프링관는 어떤 관계가 있어서 이런 이야기를 강의를 통해서 계속 했는지 궁금할 수 밖에 없다. 스프링과 객체 지향 설계 OCP DIP 이전 글에서 정리한 것 처럼 객체 지향 5대 원칙 중, OCP와 DIP는 순수하게 자바로 작성하면 제대로 지켜지지 않는 한계가 있었다. 스프링이 OCP, DIP 원칙을 지원하고, 추가적으로 다형성까지 제공해주는 프레임워크가 되는 것이다. DI ( Dependency Injection ) : 의존관계, 의존성 주입 DI 컨테이너 제공 위의 두 가지 기능을 제공하면서, 객체 지향 원칙을 지킬 수 ..
김영한님의 [스프링 핵심 원리] 강의를 정리하고, 내가 생각한 내용까지 정리하는 포스팅 이전 포스팅에서는 좋은 객체 지향 프로그래밍이 어떤 것인지에 대해서 알아보았다. 말로만 좋은 객체 지향을 하라고 하면 어렵기 때문에 이미 여러 뛰어난 개발자가 만들어놓은 좋은 객체 지향 설계의 원칙이 있다. 앞글자를 따서 SOLID 라고도 불리는데, 대학생 때 공부를 했던 기억이 나는데, 중요한 내용이 만큼 잘 알아두면 좋다. 클린 코드라는 책을 쓴 유명한 로버트 마틴이 정리한 내용이다. 로버트 마틴이라는 분은 클린 코드도 그렇고 코드를 보기좋고 깔끔하게 작성하는 것을 굉장히 강조하는 것 같다. SRP 단일 책임 원칙 말 그대로 하나의 클래스에서는 하나의 책임만을 가져야 한다는 것이다. 사실 상당히 애매한 말일 수 있..
김영한님의 [스프링 핵심 원리] 강의를 정리하고, 내가 생각한 내용까지 정리하는 포스팅 지난번 강의에서 스프링은 결국 객체지향을 잘 할 수 있게 만들어주는 프레임워크라는 것까지 내용이 나왔다. 그렇다면 이것을 알기 전에 객체 지향이란 것이 뭔지 잘 알아야지 스프링을 더 잘 이해할 수 있을 것이다. 객체 지향의 특징에는 추상화, 캡슐화, 상속, 다형성이 있다. 이 중에서 다형성을 가장 중요한 핵심개념이라고 설명한다. 그렇다면 우선 객체 지향의 정의는 무엇일까? 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지 를 주고받고, 데이터를 처리할 수 있다. (협력) 객체 지향 프로그래밍은..
김영한님의 [스프링 핵심 원리] 강의를 정리하고, 내가 생각한 내용까지 정리하는 포스팅 이전 글에서 스프링이 나오기 전 어떤 역사가 있었는 지를 알아봤다. 그렇다면 이제 스프링이 어떤 것인지 알아볼 차례인 것 같다. 스프링은 지금 하나의 오픈소스 프로젝트를 말하는 것이 아니다. 되게 다양한 프로젝트들이 모여서 스프링이라는 것을 구성하고 있다고 볼 수 있다. https://spring.io/projects 에 들어가보면 스프링을 구성하는 프로젝트들이 나열되어 있다. 그 중에서 스프링 부트와 스프링 프레임워크가 필수적으로 사용되는 프로젝트이다. 그리고 수 많은 프로젝트들이 더 많이 있다. 프로젝트 이름을 보면 어떤 기능을 제공하는 것인지 대충 유추가 가능한데, 스프링 클라우드는 클라우드 환경에 맞는 기능을 ..
김영한님의 [스프링 핵심 원리] 강의를 정리하고, 내가 생각한 내용까지 정리하는 포스팅 지금의 스프링이 나오기 전에 자바 진영에서 가장 많이 사용하고, 표준이라고 정해져 사용되었던 기술은 바로 EJB이다. EJB가 어떤 줄임말이냐 하냐면 바로, Enterprise JavaBeans 이다. 이름만 들어도 알 수 있겠지만, 기업용의 애플리케이션을 만들기 위해서 사용되는 기술이다. EJB는 말 그래로 종합선물세트와 같은 기술이였다. Spring 과 같은 기능, 분산 처리, 트랙잭션, ORM 인 Entity Bean 까지 정말 다양한 기능을 제공하는 시스템이였다. 말로만 들어서는 정말 좋을 것 같은데, 문제가 뭐였을까? 먼저 가격적인 부분이다. 지금이야 오픈소스가 활발하고 다들 사용하는 거에 익숙해져 있지만, ..
인프런에서 백기선 님의 [스프링 프레임워크 핵심 기술] 을 듣고 정리한 내용입니다 Inversion of Control: 의존 관계 주입(Dependency Injection)이라고도 하며, 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는게 아니라, 주입 받아 사용하는 방법을 말 함. - 추가적으로 토비의 스프링에서의 설명 어떤 프로그램을 만들 때, 각 기능들을 만들어 두더라도 이 기능들이 필요에 따라 순서대로 작동하지 않는다면 그 프로그램은 제대로 작동할 수 없습니다. 따라서 각 기능들이 순서대로 작동하게 하기 위해서 제어(Control)가 필요합니다. 위에서 이야기한 제어할 항목들이 적다면 프로그래머가 기능의 순서를 알고 관리할 수 있습니다. 하지만 기능들이 늘어나서 수천, 수만개의 제어..
인프런에서 백기선 님의 [스프링 프레임워크 핵심 기술] 을 듣고 정리한 내용입니다 참고: 스프링 프레임워크 레퍼런스 https://docs.spring.io/spring/docs/current/spring-framework-reference/index.html 스프링이란? https://docs.spring.io/spring/docs/current/spring-framework-reference/overview.html#overvie “소규모 애플리케이션 또는 기업용 애플리케이션을 자바로 개발하는데 있어 유용하고 편리한 기능을 제공하는 프레임워크" ● 스프링 프레임워크 그 자체 ● 스프링 프레임워크 포함 모든 스프링 프로젝트 (스프링 부트, 스프링 데이터, 스프링 시큐리티...) ● 이 강좌에서 스프링은..
인프런에서 백기선 님의 [예제로 배우는 스프링 입문] 을 듣고 정리한 내용입니다 프로젝트 살펴보기 ( Pet Clinic ) 프로젝트 구조 설명 일반적인 메이븐 프로젝트 src/main/java src/main/resources src/test/java src/test/resources 스프링 부트 기반 프로젝트 스프링 부트 스프링 데이터 JPA DB: HSQLDB 뷰: 타임리프 캐시: EHCache 코드가 어떻게 흘러가는 걸까? 로그로 분석하는 방법 application-properties 에서 스프링 프레임워크의 기본 로깅 레벨을 변경하면 더 자세히 볼 수 있다. 디버거로 분석하는 방법 디버깅 포인트를 찍고, Debug 모드로 실행하면 된다.
카카오 면접을 준비하면서, 공부했던 내용을 정리해놓고 다시 기억하기 위한 포스팅 스프링부트는 복잡한 프로젝트 의존성을 '스타터(Starter)' 의존성 수십 개로 해결한다. 그저 프로젝트에 필요한 기능들을 빌드에 선언을 하기만 하면, 그에 필요한 개별 라이브러리들을 자동으로 추가해준다. 스타터 의존성을 사용안한다고 생각해보자. 그렇다면 스타터 의존성의 장점을 바로 알 수 있을 것이다. 스프링 부트 없이 빌드하려면 어떤 의존성을 추가해야 할까? 스프링 MVC를 지원하려면 어떤 의존성들이 필요할까? 어떤 버전을 사용해야 잘 호환이 될까? 이렇듯 이미 코드 첫줄을 작성하기도 전에 빌드 명세에 어떤 것을 추가하여 기능을 만들어야 할지 많은 고민해야 한다. 이러한 많은 고민 끝에 그레이들 빌드 명세에 다음 의존성..
카카오 면접을 준비하면서, 공부했던 내용을 정리해놓고 다시 기억하기 위한 포스팅 @SpringBootApplication은 다음의 3개의 어노테이션을 포함한다. @SpringBootConfiguration @ComponentScan @EnableAutoConfiguration SpringBoot 어플리케이션 구동에 특히 눈여겨 볼 것은 @ComponentScan 과 @EnableAutoConfiguration @ComponentScan @Component @Configuration, @Repository, @Controller, @Service, @RestController 위 어노테이션을 포함한 모든 클래스를 Bean으로 등록한다. @EnableAutoConfiguration - 설정 자동 등록하기 S..