개발공부/Spring

스프링을 사용하면서 싱글톤 패턴이든, 스프링 같은 싱글톤 컨테이너를 사용하든, 객체 인스턴스를 하나만 생성해서 공유하는 싱글톤 방식은 여러 클라이언트가 하나의 같은 객체 인스턴스를 공유하기 때문에 싱글톤 객체는 상태를 유지(stateful)하게 설계하면 안된다.무상태(stateless)로 설계?무상태 설계특정 클라이언트에 의존적인 필드가 있으면 안된다.특정 클라이언트가 값을 변경할 수 있으면 안된다.가급적 읽기만 가능해야 한다.필드 대신에 자바에서 공유되지 않는 지역변수 파라미터, ThreadLocal 등을 사용해야 한다.스프링 빈의 필드에 공유 값을 설정하면 정말 큰 장애가 발생할 수 있다.상태를 유지할 경우 발생하는 문제점 예시public class StatefulService { private..
이 글은 김영한님의 강의를 기반으로 기록하기 위한 글임. SOLID 란 무엇일까? SRP: 단일 책임 원칙 (single responsibility principle) ОСР: 개방-폐쇄 원칙 (Open/closed principle) LSP: 리스코프 치환 원칙 (Liskov substitution principle) ISP: 인터페이스 분리 원칙 (Interface segregation principle) DIP: 의존관계 역전 원칙 (Dependency inversion principle) SRP 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. 클 수도 있고, 작을 수도 있다. 문맥과 상황에 따라 다르다. 중요한 기준은 변경이다. 변경이 있을 때 파급 효과..
좋은 객체지향프로그래밍이란? 해당 글은 김영한강사님의 스프링 핵심 원리 - 기본편 강의를 들으면서 정리를 하기 위해 블로그에 작성을 하는 글임을 밝힌다. 좋은 객체 지향 프로그래밍이란 인터페이스의 구현체가 바뀌어도, 클라이언트는 여전히 그 동작을 하는 것이 가능하도록 하는 것을 말한다. 즉, 어떤 인터페이스에 대한 어떠한 구현체도 넣을 수 있다는 점에서 다형성을 보장한다. 즉 다시 말해 인터페이스의 내부 구조와는 상관없이 클라이언트는 인터페이스만 이해하고 있다면 그 구현체랑은 독립적이라는 이야기가 되겠다. 말이 조금 어려워졌는데 이를 사진으로 이해해보자. 위 그림은 대표적인 객체지향프로그래밍의 예시인 운전자-자동차의 예시이다. 자동차라는 인터페이스에 K3, 아반떼, 테슬라 모델3중 어느 것이 들어와도 운..
Object Mapper 사용하기 구글 - maven- repository 검색 후 object mapper를 검색 jackson databind 에서 gradle을 복사 gradle project의 dependencies 란에 붙여넣고 빌드를 새로 고친다. - Main.java import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson..
AOP ( Aspect Oriented Programming , 관점지향 프로그램 ) 스프링 어플리케이션은 대부분 특별한 경우를 제외하고는 MVC 웹 어플리케이션에서는 Web Layer, Business Layer, Data Layer로 정의된다. Web Layer : REST API를 제공하고, Client 중심의 로직 적용 Business Layer : 내부 정책에 따른 logic을 개발하며, 주로 해당 부분을 개발 Data Layer : 데이터 베이스 및 외부와의 연동을 처리 횡단 관심 주요 Annotation AOP를 사용하기에 앞서 AOP를 사용하기 위해서는 Dependencies를 추가해야함. build.gradle -> Dependencies -> implementation 'org.spri..
IoC IoC (Inversion of Control) - 스프링에서는 일반적 Java 객체를 new로 생성하여 개발자가 관리하는 것이 아닌 Spring Container에 모두 맡긴다. 즉 개발자에서 프레임워크로 제어의 객체 관리의 권한이 넘어 갔으므로 "제어의 역전" 이라 함. DI 장점 의존성으로부터 격리시켜 코드테스트이 용이하다. DI를 통하여 불가능한 상황을 Mock과 같은 기술을 통하여 안정적으로 테스트 가능하다. 코드를 확장하거나 변경할 때 영향을 최소화한다 (추상화) 순환참조를 막을 수 있다. 아래의 코드들은 DI, IoC의 과정을 간략하게 테스트해보는 것이다. - ApplicationContextProvider.java package com.example.springioc; import ..
- Pointcut은 중요한 기능. 원하는 메서드만 weaving 될 수 있도록 경계선을 두는 것은 중요함. but - Advisor 설정이 조금 불편한 점이 있었음. Advisor에서 Pointcut 기능을 내재하는 Advisor가 있음. 이러한 Advisor를 통해 코드를 줄일 수 있음. 기존의 코드에서 - 원래는 Pointcut을 생성하고 Advisor도 생성해서 Advisor 내에 생성하는 까다로운 작업을 진행 - class 명의 마지막을 NameMatchMethodPointcutAdvisor로 변경 - - 이런 방법으로 진행시 Pointcut을 따로 만들지 않아도 Advisor 한 번으로 가능. property name = mappedName 뒤에 s를 붙이고, list형식으로 value값으로 ..
Pointcuts란? Spring이 갖고 있는 AOP를 구현할 때는 포인트컷, 조인포인트, 위빙이라는 용어가 사용됨. AOP는 Proxy를 갖고있음. 호출할 때 보조 업무를 호출할 때는 proxy을 통해서 보조 업무를 호출하고, target을 통해서 주업무에다가 꽂아넣게됨. 이러한 작업이 뜨개질하여 연결하는 과정과 비슷하다고 하여 Weaving 이라고 함. - 뜨개질할 때 보조 업무가 대상으로 삼고있는 메소드가 연결해야할 포인트점이 됨. (Join point) - 타겟으로 삼고있는 내용이 있다면 proxy는 타겟을 대상으로 모든 메서드를 조인포인트로 생각함. - 만약 우리가 avg()와 total() 이 있다면, total 메서드만 weaving이 되면 좋겠다고 하면 별도의 설정이 필요한데, 그것을 Po..
환타몬
'개발공부/Spring' 카테고리의 글 목록