본문 바로가기

Spring

(16)
Spring Dependecy Injection 알아보기 Spring Dependency Injection의 동작원리를 이해해보자 GOAL 객체지향에서의 의존성을 이해한다. DI의 개념과 도입 이유를 이해한다. Spring에서의 동작원리를 이해한다. 객체지향 프로그래밍 객체지향 프로그래밍은 무엇이고? 객체지향 프로그래밍에서 의존성이라는 단어는 어떻게 사용될까요? 컴퓨터 프로그래밍의 패러다임 중 하나로 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것입니다. 그리고 객체란 물리적으로 존재하는 실생활의 물건 또는 우리가 추상적으로 생각할 수 있는 개념 중 자신의 속성을 가지면서 다른 것과 식별이 가능한 것을 말합니다. 객체지향에서의 의존성이란? 의존이란 단어는 의지하여 생활하거나 존재하는 ..
DI(Dependency Injection)란? GOAL 객체지향에서 의존성을 이해한다 DI의 개념과 도입 이유를 이해한다. Spring에서 어떻게 사용하고 있는지 이해한다. 객체지향에서의 의존성이란? 객체지향 프로그래밍의 장점 중 하나는 모듈화를 통한 유연성 있는 프로그램을 설계하고 코드를 재사용하여 유지보수를 용이하게 만들 수 있다는 것이다. 객체지향에서는 의존성 있는 코드를 싫어한다. 의존성이 필요 없다면 제거해야 하며, 클래스 간의 양방향 의존성을 가지고 있다면 문제점이 발생할 수도 있다. 왜 그럴까? 아래 코드의 문제점은 무엇일까? room 객체는 Bed 객체에 의존하고 있다. -> new 연산자를 통해 Simons() 객체를 주입받아 의존성을 가지고 있다. 역할에 의존해야 되는데 구현에 의존하고 있다. 아니 뭐 가질수도 있지.. 참.. 어려..
SpringBoot와 Lombok의 기본 annotation 정리 스프링 프레임워크에서는 다양한 어노테이션 기능을 지원하고 있다. 이 글에서 각 어노테이션이 무슨 의미를 뜻하고 어떠한 기능을 사용자에게 제공해주는지 알아보자! @RestController Controller + ResponsBody 기존의 Controller 어노테이션의 Return 값에 ResponseBody를 적용한 것으로 json으로 결과를 반환한다. 기존의 Controller는 View(화면)을 리턴하고 json 형태의 데이터를 반환할 때 @ResponseBody를 추가해줘야 했는데 이러한 기능을 통합시킨 어노테이션이다. @RequsetMapping Controller 어노테이션이 클래스 위에 선언되었다면 RequestMapping은 클래스 내의 메서드 위에도 선언될 수 있다. 요청된 URL을 어..
스프링의 핵심 원리 - 2(좋은 객체 지향 설계의 5가지 원칙 SOLID) SOLID SRP: 단일 책임 원칙(single responsibility principle) OCP: 개방-폐쇄 원칙 (Open/closed principle) LSP: 리스코프 치환 원칙 (Liskov substitution principle) ISP: 인터페이스 분리 원칙 (Interface segregation principle) DIP: 의존관계 역전 원칙 (Dependency inversion principle) 클린 코드로 유명한 로버트 마틴이라는 분이 정리한 위의 5가지 용어의 앞글자를 따서 SOLID라고 부른다. SRP(Single Responsibility Principle) 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 사실 모호하다. - 클 수 있고..
스프링의 핵심 원리 - 1 (객체지향에서의 다형성) 스프링의 진짜 핵심은? - 자바 언어 기반의 프레임워크 - 자바 언어의 가장 큰 특징 -> 객체 지향 언어 - 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와준다. 그렇다면 좋은 객체 지향 프로그래밍이 무엇이지? 이 질문을 이해한다면 스프링을 온전히 이해하고 사용할 수 있게 된다. 객체 지향의 특징 4가지 추상화 캡슐화 상속 다형성 더보기 객체 지향 프로그래밍 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지 를 주고받고, 데이터를 처리할 수 있다. (협력) 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된..
Autowire 알아보기 - 2 이전 글에서는 빈의 의존성이 1개인 경우만 공부해봤습니다. 해당하는 타입의 빈이 복수개일 경우는 어떻게 처리되는지 살펴보겠습니다. BookRepository라는 인터페이스를 구현한 클래스 2개가 존재한다고 가정하겠습니다. 아래 스크린샷을 참고해주세요. 이 상황에서 BookService가 의존성 주입을 하게 되면 에러를 뱉게 됩니다. MyBookRepo랑 YourBookRepo중 어느 것을 선택해서 주입해야 될지 스프링이 판단하지 못하는 상황입니다. 3가지의 액션을 통해 이러한 상황을 해결할 수 있는데 하나씩 살펴보도록 하겠습니다. @Primary 원하는 빈에 @Primary를 선언하여 동일한 빈일 경우 @Priamry라는 어노테이션이 붙은 빈을 주입해주게 만들 수 있습니다. @Qualifier("빈의 이..
Autowire 알아보기 - 1 Autowire 어노테이션은 의존성 주입을 위해 자주 사용하게 되는데, 제대로 알고 사용하기 위해 한번 알아보겠습니다. @Autowired - Autowire의 required의 기본 값은 true( 의존성 주입에 실패하면 애플리케이션 구동이 실패한다.) 아래와 같이 BookService에서 Autowired를 생성자를 통해 진행하는 상황이라고 가정합니다. 만약 BookRepository가 빈으로 등록되지 않았을 경우 당연히 에러를 반환합니다. -> 당연한 생각이죠? 그런데 생성자가 아니라 setter를 통해 의존성 주입을 하는 상황이라고 가정해보겠습니다. 이건 왜 실패하는 걸까요? 첫 번째 예시의 생성자를 통한 의존성 주입은 빈을 만들기 위한 과정에서 빈에 필요한 다른 의존성인 bookRepositor..
AOP를 활용한 Logging 구현 AOP(Aspect Oriented Programming) AOP는 관점 지향 프로그래밍이라고 해석할 수 있습니다. 비즈니스 로직의 기준을 정하고 그 기준에 따라 나눈 부분을 관점이라고 한다면, 이 관점을 모듈화 하는 것입니다. AOP의 용어 Aspect : 여러 클래스에서 중복적으로 사용되는 공통된 관점을 모듈화 한 것 Joinpoint : method 또는 excepition와 같은 끼어들 수 있는 지점 Pointcut : 특정 Joinpoint에서 Aspect가 적용할 Advice를 일치시키기 위한 것 Advice: 특정 Joinpint에서 Aspect가 한 액션입니다. Target : Aspect를 적용하는 지점 Logging 구현 실제 서비스에서 로그를 남기는 것은 선택이 아닌 필수입니다. 로그..