분류 전체보기
-
[Spring] spring boot entity에 enum 사용시 주의사항Spring 2021. 11. 9. 18:29
enumtype에는 두가지 종류가 있다. string, ordinal ordinal이 디폴트 값이며, ordinal은 DB에 숫자로 들어가며, string은 문자 그래도 들어간다. 얼핏 들으면 ordinal이 편해보이지만 여기엔 큰 단점이 있다. 바로 컬럼값이 추가될 경우 인덱스가 다 바뀌어 디비가 엉망이 된다. 그러니 항상 변경을 고려해서 디폴트값인 ordinal을 쓰지말고 string을 써야한다. 출처 : 스프링 핵심 원리 - 기본편 - 인프런 | 학습 페이지 (inflearn.com)
-
[Spring] 쿼리문 콘솔창에서 쉽게 확인하는 법Spring 2021. 11. 8. 16:08
jpa를 사용할 때 실제 디비에 전해지는 쿼리의 파라미터를 정확하게 알고싶을 때, 외부 라이브러리를 쓰면 좋다. gavlyukovskiy/spring-boot-data-source-decorator: Spring Boot integration with p6spy, datasource-proxy, flexy-pool and spring-cloud-sleuth (github.com) GitHub - gavlyukovskiy/spring-boot-data-source-decorator: Spring Boot integration with p6spy, datasource-proxy, flexy-pool and s Spring Boot integration with p6spy, datasource-proxy, f..
-
[CS] 객체지향(OOP)의 5원칙 (SOLID)Computer Science 2021. 11. 5. 16:22
★단일 책임 원칙(SRP : Single responsibility principle) 한 클래스는 하나의 책임만 가져야 한다. ★개방 폐쇄 원칙(OCP : Open/closed principle) 확장에는 열려 있으나, 변경에는 닫혀 있어야한다. 리스코프 치환 원칙(LSP : Liskov substitution principle) 프로그램의 객체는 프로그램의 정확성을 깨트리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야한다. 인터페이스 분리 원칙(ISP : Interface segregation principle) 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다. ★의존관계 역전 원칙(DIP : Dependency inversion principle) 추상화에 의존한다. ..
-
[CS] 객체지향(OOP)의 4가지 특징Computer Science 2021. 11. 5. 16:09
1. 캡슐화 a. 객체의 속성을 보호하기 위해 사용 b. 변수와 메소드를 하나로 묶음 c. 데이터를 외부에서 직접 접근하지 않고 함수를 통해서만 접근 2. 상속 a. 자식 클래스가 부모클래스의 특성과 기능을 물려받는 것 b. 기능의 일부분을 변경하는 경우 자식 클래스에서 상속받아 수정 및 사용함 c. 상속은 캡슐화를 유지, 클래스의 재사용이 용이하도록 해줌 3. 추상화 a. 인터페이스로 클래스들의 공통적인 특성(변수, 메소드)들을 묶어 표현하는 것 4. 다형성 a. 어떤 변수, 메소드가 상황에 따라 다른 결과를 내는 것
-
[Spring] 웹 스코프와 requestSpring 2021. 11. 4. 20:48
싱글톤은 스프링 컨테이너의 시작과 끝까지 함께하는 매우 긴 스코프이고, 프로토타입은 생성과 의존관계 주입, 그리고 초기화까지만 진행하는 특별한 스코프이다. 그리고 두개와 다른 웹스코프라는 것이 존재한다. 웹 스코프의 특징 - 웹 스코프는 웹 환경에서만 동작한다. - 웹 스코프는 프로토타입과 다르게 스프링이 해당 스코프의 종료시점까지 관리한다. 따라서 종료 메서드가 호출된다. 웹 스코프 종류 - request : HTTP 요청 하나가 들어오고 나갈 때 까지 유지되는 스코프, 각각의 HTTP 요청마다 별도의 빈 인스턴스가 생성되고, 관리된다. - session : HTTP session과 동일한 생명주기를 가지는 스코프 - application : 서블릿 컨텍스트(ServletContext)와 동일한 생명주..
-
[Spring] 빈 생명주기 콜백과 그 방법Spring 2021. 11. 4. 16:49
데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 어플리케이션 시작 시점에 필요한 연결을 미리 해두고, 어플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다. 스프링을 통해 이러한 초기화 작업과 종료 작업을 어떻게 진행하는지 알아보고, 방법을 얘기한다. 보통 객체의 생성과 초기화를 구분지어야 한다. 이는 유지보수 관점에서 장점을 가져가기 때문인데, 이렇게 생성과 초기화를 분리하게 되면, 개발자는 객체의 의존관계 주입 완료 시기를 알기 쉽지 않다. 때문에 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공한다. 또한 스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 준다. 따라서 안전하게 종료작..
-
[Spring] 조회한 빈이 모두 필요할 때 방법Spring 2021. 11. 4. 16:20
의도적으로 정말 해당타입의 스프링 빈이 다 필요한 경우도 있다. 예를 들어서 할인 서비스를 제공하는데, 클라이언트가 할인의 종류(rate, fix)를 선택할 수 있다고 가정해보자. 스프링을 사용하면 소위 말하는 전략 패턴을 매우 간단하게 구현할 수 있다. public class AllBeanTest{ @Test void findAllBean(){ ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class); DiscountService discountService = ac.getBean(DiscountService.class); Member member = new Member..
-
[Spring] 스프링 빈의 자동, 수동의 올바른 실무 운영 기준Spring 2021. 11. 4. 15:09
설정 정보를 베이스로 어플리케이션을 구성하는 부분과 실제 동작하는 부분을 명확하게 나누는 것은 이상적이지만, 개발자 입장에서 스프링 빈을 하나 등록할 때 @Component만 넣어주면 끝나는 일을 몇차례로 나누는 과정은 상당히 번거롭다. 자동 빈등록을 사용해도 OCP, DIP를 지킬 수 있는 상황에서 자동을 사용하지 않을 이유는 없다. 그럼에도 불구하고, 수동을 사용할 때 장점이 있는 상황은 있다. 어플리케이션은 크게 업무 로직과 기술 로직으로 나눌 수 있다. - 업무 로직 빈 : 웹을 지원하는 컨트롤러, 핵심 비즈니스 로직이 있는 서비스, 데이터 계층의 로직을 처리하는 리포지토리등이 모두 업무 로직이다. 보통 비즈니스 요구사항을 개발할 때 추가되거나 변경된다. - 기술 지원 빈 : 기술적인 문제나 공통..