Framework/Spring

    Spring Cloud - Netflix Eureka, Spring Gateway

    Spring Cloud - Netflix Eureka, Spring Gateway

    MSA- 어플리케이션을 목적에 따라 여러 개의 독립적인 서비스로 분할하여 개발하고 배포하는 방식   MSA의 특징- 독립된 각 서비스 마다 고유의 ip와 port를 가진다.- 각각의 서비스가 분산되어 있기 때문에, 배포와 테스트가 어렵다 MSA를 왜 쓸까?느슨하게 결합된 서비스들의 모임으로 프로젝트를 구성함으로써, 전체 시스템 구조를 논리적으로 구분해 이해하고, 고가용성(부분 장애가 전체 장애로의 확장을 막음)을 높이며, 분산 처리를 가능하도록 하기 위함  MSA를 편리하게 하기 위한 아키텍처 컴포넌트  스프링 클라우드(Spring Cloud)분산 시스템의 몇가지 공통된 패턴들을 빠르게 빌드할 수 있도록 다양한 툴을 제공해 준다.예를 들어, Configuration management(설정 관리), Se..

    [Spring Cloud & MSA] Spring Cloud Netflix Eureka

    [Spring Cloud & MSA] Spring Cloud Netflix Eureka

    1. Spring Cloud Netflix Eureka - 유레카는 Service Discovery 중 하나이다. - Service Discovery는 말 그대로 서비스를 찾아주는 것으로써, 어느 위치에 어떤 서버가 있는지를 찾아준다. rf. key / value 형태로 서비스를 등록하고 검색할 수 있도록 해준다. - 넷플릭스 자사의 기술들을 Java Spring 재단에 기부를 하면서 만들어진 것이 Eureka이다. - Eureka를 쓰려면 먼저 서비스를 등록해야 한다. - Client에서 요청이 Load Banlancer로 들어오면 Service Discovery가 서비스의 위치를 찾아준다. 2. 프로젝트 환경 구성 [1] 프로젝트 생성 - 마인드챗이라고, 내 마음 속 이야기를 채팅창에 적을 수 있는 ..

    [Spring Cloud & MSA] MSA와 Spring Cloud

    [Spring Cloud & MSA] MSA와 Spring Cloud

    시간이 지날 수록 소프트웨어는 Antifragile한 아키텍처를 구성하고자 하였으며, Cloud Native한 아키텍처를 구성하고자 했다. 아래는 그러한 소프트웨어 아키텍처의 특징을 정리한 내용이다. 1. Antifragile 아키텍처 1) AutoScaling (자동확장성) : 상황에 따라 인스턴스의 갯수를 자동으로 늘리는 등 자동 확장이 가능한 것 2) Microservices : 세밀한 단위로 모듈과 기능을 세분화한 서비스. 넷플릭스와 아마존에서 가장 잘 구축했음 3) chaos engineering : chaos, 급격하고 예측 불가한 상황에서도 견딜 수 있을 만큼 안정적인 서비스 구축 4) continuous deployments : 지속적인 통합/배포를 의미 2. Cloud Native 아키텍..

    [스프링] Build.Gradle & application.yml 관련 메모

    [스프링] Build.Gradle & application.yml 관련 메모

    1. 운영 서버와 테스트 서버의 DB 설정을 나누고 싶을 때 (1) 먼저 application.yml 에서 개발/운영 환경에 따라 DB 설정을 나눠준다. https://1minute-before6pm.tistory.com/12 https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-Config-Data-Migration-Guide#profile-groups (2) 그리고 나서 아래와 같이 Edit Configuraton의 Active prifiles를 설정한 profile 이름으로 바꾼다. ㄴ [추가] Build.Gradle 의존성에 대한 이해 - 너무나 복잡하게 profile을 쓰고 db를 application.yml에서 나눴는데, 그럴 필요가..

    [스프링] @AutoWired 동작 원리 및 DI injection 관련 설명 모음

    1. @AutoWired 동작원리 https://beststar-1.tistory.com/40 @Autowired의 동작원리 @Autowired란? 의존관계 주입(DI)을 할 때 사용하는 어노테이션(Annotation)이며, 의존 객체의 타입에 해당하는 빈(Bean)을 찾아 주입하는 역할을 한다. 💡 의존관계 주입에 대해서는 IoC(Inversion of Control, beststar-1.tistory.com 2. 생성자 주입과 관련한 설명 https://jackjeong.tistory.com/41 [Spring] 생성자 주입 vs 필드 주입 (@Autowired) 안녕하세요~ 잭코딩입니다! 이번에는 스프링 프레임워크에서 의존성을 주입하는 방법을 살펴보고 어떤 방식으로 주입하는 게 좋은지 살펴볼까요? ..

    [HTTP] @RequestParam vs @RequestBody

    [HTTP] @RequestParam vs @RequestBody

    | 개요 - @RequestParam, @RequestBody - @RequestParam은 URI를 통해서 넘겨 받는 값을 말하고, - @RequestBody는 Http body에 데이터를 묶어서 받는 값을 말한다. - 일반적으로 RequestParameter는 ?key=value와 같이 단일 데이터를 넘겨 받고, RequestBody는 x-www-form-urlencoded나 Json과 같이 특정 데이터 포맷으로 묶여서 담겨지는 경우가 많다. - Post 방식으로 넘겨 받는 URI 모습 *body 값으로 다양한 데이터 포맷이 존재하는 걸 볼 수 있다. | 실험 - POST 방식으로 Body에 담겨 넘어오는 데이터의 타입을 크게 두 가지로 분류해보았다. (물론 데이터 타입은 더 다양하다) 1) x-ww..

    [HTTP] User IP와 Agent(Device) 정보 가져오기

    | User IP와 User Agent 정보란? - 클라이언트가 HTTP를 통해 어떤 요청을 보내면 HTTP header에 사용자 IP주소와 기기정보(Agent)가 담기게 된다. - User IP 주소는, 다양한 종류의 proxy를 고려하여 각 header를 전부 확인하는 것이 필요하다. - 만약 IPv4 형식으로만 IP주소를 얻길 원한다면 [Run]-[Configuration] Arguments VM에 설정을 걸어줄 수 있다. -Djava.net.preferIPv4Stack=true - 사이트 정책 : 로그인 시 히스토리 내역 저장한 후 메인화면으로 이동한다. - 위 정책에 따라 1) 히스토리를 저장할 Entity를 만들고, 2) 스프링 시큐러티를 이용해 로그인 성공시 사용자 IP주소와 Agent정보를..

    [Validation] 데이터 검증, 비즈니스 로직 검증

    | Validation - 지난 번 스프링을 처음 배울 당시 아래와 같이 Validation에 대한 개념을 배웠었다. ✅ Validation은 유효성 검증을 말하며, 주로 HTTP Request에서 잘못된 내용을 검증할 때 사용한다. - 데이터 검증 : 필수 데이터 / 문자열 길이 및 숫자형 데이터 범위 / 이메일 및 신용카드 번호 등 형식 확인 - 비즈니스 검증 : 서비스 정책에 따라 데이터 검증 ✅ Validation 방식 1) Java Bean Validation : dto클래스 맴버에 Annotaion(ex. @NotBlank, @Size, @Email...)을 붙이는 방식 2) Spring validator 인터페이스 구현을 통한 validation ✅ Validation 주의사항 : Valid..

    [스프링] Entity 객체를 생성 : 영속성의 개념 + 자동 Auditing

    [스프링] Entity 객체를 생성 : 영속성의 개념 + 자동 Auditing

    | 정리하게 된 계기 - 오늘 수업에서는 계좌 관련 프로그램을 만드는 걸 시작했고, 계좌 생성 API를 만들며, 사용자 및 계좌에 대한 Entity를 만들었었다. - 만들다보니, @Entity, @EntityListeners, @id, @Generated의 상위 패키지가 persistence로 되어 있는게 보였다. - 더불어, 객체 이벤트 발생 시간을 알려주는 @EntityListeners(AuditingEntityListener.class) 코드의 AuditingEntityListener.class로 가, 설명을 읽어보니, "이건 Entity에 persist 또는 update 이벤트가 발생하는 시간을 알려주는 일회성(stateless) 클래스이다" 라고 적혀있어, persist가 뭐지? 하는 생각을 하..

    [스프링] 개발을 시작하기 전에 - 요구 사항 분석, 기본 구조 잡기

    1. 프로젝트 생성 및 요구사항 분석 - 오늘 수업시간에서는 프로젝트 생성 및 요구사항 분석 + 설계 및 기본 구조 개발에 대해서 들었다. - 각 회사마다 분위기는 다 다르겠지만, 요구사항 분석 시엔 일반적으로 아래의 단계를 거친다고 한다. 1) 외부 고객 및 내부 고객의 의견에 따라 어떤 사업을 하겠다는 목표가 생기면, 2) 기획자가 기획안을 만들어 연관됨 팀들과 의견을 나눈 뒤 사용할 기술 및 주요 기능에 대해 보완한다. 3) 기획자의 기획안을 토대로 개발팀은 개발을 위한 기술 스택 및 구체적인 명세서를 작성한다. (1) 기술 스택이란 뭔가 - 위 3) 단계에서 "기술 스택"이라함은, - 어떤 프레임워크와 언어를 쓸 것인가 - 어떤 DB vendor를 쓰고 - 어떤 api를 사용할 것이며 - http..