Spring
스프링 핵심원리 고급편 - threadLocal, 템플릿 메서드 패턴 & 콜백 패턴
스프링 핵심원리 고급편 - threadLocal, 템플릿 메서드 패턴 & 콜백 패턴
2024.01.14강의 하나를 완강해야 겠다고 생각이 들었는데 빠르게 보고 싶은 강의가 생겼다. 강의 들으면서 정리도 겸하고 싶어 주저리 주저리 이 페이지에 옮겨놓으려고 한다. 조금 길어지면 2편으로 .. 로그 추적기 프로젝트에 병목이 생긴다면 로그를 통해 확인해봐야 한다. 아래 요구사항으로 로그를 개선하는 작업이다. 시간 정상호출 과 예외호출 구분 메서드 호출 깊이 구분 실제로 소스를 보면 알겠지만 로그 추적기 수정이 일어날 때마다 피처들에 대한 버전을 계속 관리해야 한다. 이 말은 로그 추적기를 달아야할 피처가 많아지면 많이질수록 그만큼 소스양이 나온다는 뜻..! 아래 구조에서는 traceId를 넘겨줘야 하는 구조여서 새 클래스를 생성할 때마다 의존관계도 계속 추가되고 그러면 응집도가 떨어지고 결합성이 높아질 수 밖에..
Spring Boot CORS 설정하기
Spring Boot CORS 설정하기
2023.02.11CORS 란? Cross-Origin Resource Sharing, CORS 다른 출처의 자원을 공유할 수 있도록 설정하는것을 말합니다. CORS를 제대로 설정하지 않으면 원하는 리소스를 공유받지 못한다. CORS 문제를 Spring으로 해결하는 방법을 체크해본다. Configuration 해결하기 addMapping registry.addMapping 을 이용해서 CORS를 적용할 URL패턴을 정의할 수 있다. 아래처럼 "/**" 와일드 카드를 사용할 수 있다. @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { regi..
Spring Boot AOP
Spring Boot AOP
2023.02.11AOP란? AOP는 Aspect Oriented Programming 즉, 관점 지향 프로그래밍의 약어이다. 여러 클래스에 나눠져 있는 책임을 Aspect 로 캡슐화하는 접근 방식이다. AOP는 로깅, 트랜잭션, 보안, 인증, 캐싱 공통적인 로직이 요구된다. 이러한 공통의 로직을 횡단 관심사(cross-cutting concern) 라고 부른다. 공통 로직을 애플리케이션, 비즈니스, 데이터 계층에서 구현하게 되면 코드 유지관리가 어렵게 된다. AOP 주요 용어 Aspect: 흩어진 관심사를 모듈화 하는 것, 부가기능을 모듈화 한다. Target: Aspect를 적용되는 곳 Advice: 실질적으로 어떤 일을 해야하는지 적어놓은것, 부가기능을 담은 구현체다. JointPoint: Advice가 적용될 위치..
Spring Bean
Spring Bean
2023.02.04Spring Bean 이란? Spring IoC 컨테이너가 관리하는 자바 객체를 Bean 이라고 한다. 즉, Spring에 의해서 생성되고 관리되는 자바 객체라고 한다. Spring Container Spring Container를 구성하는 ApplicationContext 다형성으로 구현된다. 여기에서 ApplicationContext가 인터페이스이고 AnnotationConfigApplicationContext 구현체가 된다. 만약에, 빈에 대한 설정정보를 AppConfig.class 에 등록해두면 이 정보를 보고 객체 생성을 하게 된다. 스프링 컨테이너는 (빈 이름 | 빈 객체)로 등록된다. 이러한 동적인 의존관계를 스프링이 설정해준다. ApplicationContext applicationCont..
의존성 주입
의존성 주입
2023.01.21의존성 주입이 필요한 이유 의존성 주입이 필요한 이유는 객체 간에 결합도를 줄일 수 있기 때문이다. 의존성 주입 방법 스프링에서 의존성 주입(DI)을 위한 4가지 방법을 제공한다. 생성자 주입 Setter 주입 필드 주입 메서드 주입 1. 생성자 주입 생성자를 통해 의존 관계를 주입할 수 있는 방법이다. 이 방법은 생성자 호출시점에서 1번만 호출되는것이 보장된다. 불변인 상태에서 사용할 수 있다. @Component public class quackServiceImpl implements diService { private final QuackRepository quackRepository; @Autowired public quackServiceImpl(QuackRepository quackReposit..
Spring JPA 와 Transaction
Spring JPA 와 Transaction
2023.01.13시작 Spring JPA로 CRUD를 사용하는 경우 Repository 메소드를 이용하게 될텐데 기본적으로 @Transaction이 적용되어 있다. Spring에서 트랜잭션 처리를 지원해서 어노테이션 방식으로 @Transactional로 선언하여 사용할 수 있다. 이번 포스팅에서는 Transaction에 대해 알아보고 Spring에서 어떻게 사용할 수 있는지 정리해보았다. Transaction 설정하기 Transaction 설정하는 방법에는 크게 3가지 방법이 있다. 1. Spring 3.1부터 @EnableTransactionManagement 어노테이션을 이용해 @Configuration이 붙은 클래스에 트랜잭션 설정이 가능한 방법이 있다. @Configuration @EnableTransaction..
컴포넌트 스캔
컴포넌트 스캔
2021.12.12컴포넌트 스캔 등록해야 하는 @Bean이 많아지면 프로그래머는 굉장히 힘들것이다. 누락될 수도 있고 자동으로 @Bean을 등록해주는 @ComponentScan 기능이 있다. 이런 경우 보통 클래스를 @Component으로 등록하고 각 메소드에 대한 의존관계를 위해 @Autowired를 등록해준다. @ComponentScan을 사용하면 @Configuration 이 붙은 설정 정보도 자동으로 등록된다. 그래서 이러한 의존관계 중 일부를 제외하고 싶다면 excludFilters를 사용해서 컴포넌트 스캔 대상에서 제외시킨다. @ComponentScan 은 @Component 가 붙은 모든 클래스를 스프링 빈으로 등록한다 package hello.core; import org.springframework.con..
객체 지향 원리 적용
객체 지향 원리 적용
2021.12.10애자일 소프트웨어에 인상적인 글귀 - "계획에 따르기 보다는 변화에 대응하기를" Mac 기준으로 Method쪽에 CMD+SHIFT+T 를 누르면 Test 코드를 작성할 수 있다. Test 코드 작성 시 꿀팁은 given, when, then given 에 객체를 만들어주고 when 에 테스트 로직을 추가하고 then 에서 마지막으로 검증해준다. Test 코드에서 고려해야할 것은 성공, 실패 코드 두가지 이다. class RateDiscountPolicyTest { RateDiscountPolicy discountPolicy = new RateDiscountPolicy(); @Test @DisplayName("VIP는 10% 할인이 적용되어야 한다.") void vip_o() { //given Member..
Spring 예제
Spring 예제
2021.12.10Spring Spring build 할 때 프로퍼티에서 gradle보다 intellij를 쓰는것이 더 빠르다. Client에서 회원서비스를 통해 인터페이스에서 회원 저장소오아 연동될 DB를 구현한다. 예를들어서, MemberService 인터페이스를 구성하고 구현체로 MemberServiceImpl을 구현한다. 개발자가 구체적인 클래스 다이어그램을 구현한다. Spring에서 프로그래밍 처리하다보면 동시성 이슈가 생길 수 있기 때문에 Concurrent 를 고려해야한다. 아래 코드를 확인해보면 MemberRepository는 인터페이스이고 실제 구현은 MemoryMemberRepository에서 수행한다. 여기서 구현체가 존재하지 않는다면 NullPointException이 발생한다. private fin..
Spring 프로젝트를 GCP VM에 배포 하는 과정
Spring 프로젝트를 GCP VM에 배포 하는 과정
2021.06.04시작 생각 외에 많은 이슈들이 발생해서 해결하는데 시간이 걸렸습니다. 기록해 두고, 다음에 배포할 땐 오류를 최소화 하기 위해 작성합니다. :( 개요 Spring boot project를 클라우드로 배포하는 과정을 수행합니다. CentOS GCP 이하 Google Cloud Platform 에서 운영체제 CentOS(ver7)을 선택하였습니다. 배포하기 위한 작업들 가상 머신 : centos 환경설정 → java 11버전, mvn 설치 Spring Project : spring project git에 commit & push, centos에 접속 후 git clone 후 mvn package Google Cloud Platform : firewall 8080 port open 발생했던 이슈들 1) cne..
Spring03 :: Spring boot에 필요한 설정
Spring03 :: Spring boot에 필요한 설정
2020.09.07buildscript { ext { springBootVersion = '2.1.9.RELEASE' } repositories { mavenCentral() jcenter() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") } } apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'org.springframework.boot' apply plugin: 'io.spring.dependency-management' group 'com.jojoldu.book' version '1.0-SNAPSHOT' sourceCompat..
Spring02 :: Spring boot jar 파일 배포
Spring02 :: Spring boot jar 파일 배포
2020.08.21maven 환경에서 tomcat 이 내장된 spring boot 프로젝트를 jar파일로 바로 배포하는 것을 실습해본다. ㅡ. pom.xml 셋팅 spring-boot-starter-tomcat을 추가해줬습니다. (https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-tomcat/2.3.3.RELEASE) 프로젝트 우클릭 - Maven Build 를 실행합니다. build를 통해서 package 를 진행하자. ㅡ. 테스팅 java -jar [jar파일명.jar] jar 파일이 있는곳으로 가서 위 명령어를 실행하게 되면 아래와 같이 동작하는것을 확인할 수 있습니다.