AWS LocalStack 이란AWS 클라우드 환경을 로컬에서 흉내 낼 수 있게 해주는 오픈소스 플랫폼즉 AWS 에서 제공하는 서비스들을 AWS 계정 없이, 인터넷없이, 비용없이 로컬에서 사용가능하다.S3SQSSNSDynamoDBLambdaAPI GatewayCloudWatch Logsaws CLI 와 100프로 동일하게 동작하는 awslocal 명령어도 포함되어있다.장점 👍🏻비용절감 : 실제 aws 를 사용하는게 아니기에, 무료로 사용이 가능하다.보안측면 : aws 실제 자격증명 (access keyd, secret key) 을 사용하지 않아서 테스트 중에 실수로 키 노출될 위험이 줄어든다.동작방식 🏗️Docker 위에서 AWS API 와 동일한 형태의 Mock 서버를 띄운다.예 ) 로컬에서 S3..
MSA 환경에서 ClientA 는 A 서버로, ClientB 는 B서버로 동적라우팅 이 필요하다💡 Spring Cloud Gateway 를 통해 동적라우팅을 구현할 수 있다 Spring MVC vs Spring WebFluxSpring MVC : 전통적인 동기(블로킹) 웹 프레임워크SpringWebFlux : 비동기(논블로킹) 리액티브 웹 프레임워크리액티브 : 요청을 보내고 결과를 기다리지 않은 채 다음일을 먼저 처리구분Spring MVCSpring WebFlux처리방식동기(Blocking)비동기(Non-blocking)대표의존성spring-boot-starter-webspring-boot-starter-webfluxHTTP server기본 : 톰캣기본 : Netty변수 주요 타입String, L..
인프런 스프링 입문 - 김영한 강의를 참고하였습니다. a. Spring AOP 가 필요한 경우ex) 모든 메서드의 호출 시간을 측정 ( 인프런 스프링 입문 - 김영한 강의)ex) 사용자 무슨 액션을 하는지 로그를 쌓는 경우/*** 사용자 상품 주문* - 상황 : 사용자가 몇시에, 어떤 액션을 했는지 알기 위해서 사용자 로그를 쌓아야한다. * - 핵심 로직 (상품 주문) + 부가 로직 (로그 쌓기) */@Transactionalpublic List saveOrder(Long goodsId){ log.debug("== 사용자 {} 상품 주문 시작 ==",goodsId); orderRepository.save(goodsId); log.debug("== 사용자 {} 상품 주문 저장 완료, 사용자 로..
a. DB Replication 란 동일한 DB를 복제하여, Master/Slave 구조를 활용하여 DB 의 부하를 분산시키는기술DB를 오랫동안 점유하는 쿼리는 DeadLock 이 발생할 확률 ⬆️⇒ 성능저하 ⇒ 분산시켜서 성능을 올리자!Insert/Update/Delete는 Master DB 로 바라보게 구성Select 는 Slave DB를 바라보게 구성왜 Select 일까?인덱스 없는 여러개 조인, 너무 많은 데이터로 ⇒ full Scan 을 생길 수 있음모든 테이블을 읽어야하는 full Scan 과 동시에 쓰기작업이 일어난다면 DeadLock 발생할 가능성 높아짐!다만, 락이 걸리는 방식과 데이터베이스마다 트랜잭션 격리수준은 다름!!API 를 통해 변경되는 데이터는 Master DB를 통해서 반영되..
@Column(updateable = false)JPA 엔티티속 수정되지 않은 컬럼에다가 @Column(updateable = false) 설정을 하곤한다. 위 애노테이션이 과연 어떻게 작동하는가? 알아보려 한다. @Column(updateable = false) 테스트 코드 작성테스트할 Customer 엔티티 생성@NoArgsConstructor@AllArgsConstructor@Builder@Getter@Entitypublic class Customer{ @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String firstName; private String lastName; ..
Cache 자주 사용하는 데이터를 빠르게 접근하기 위한 임시저장공간 데이터 조회 속도 향상과 성능최적화를 목적으로 한다. --> DB 부하를 줄일 수 있다. Spring Cache 동작 방식 캐시 애노테이션이 적용된 메서드를 호출캐싱된 데이터가 있는지 확인 있으면 바로 반환 없으면 DB 조회 후에, 결과 캐싱에 저장 이후 같은 메서드, 같은 키 값 호출시 캐시에서 값 가져옴 Spring Cache 저장 위치 기본 저장소 (JVM memory) 또는 외부 캐시 저장소 (Redis.. 등등) 필요기본 저장소 (JVM memory)간단한 개발단계에서만 사용, 실무에서는 외부 캐시 저장소 사용JVM Heap memory 에 저장되기에, 서버 재시작시 캐싱된 데이터 없어짐 Redis 인메모리 데이터 저장소..
관계형 DB 에서 M:N 연관관계 비즈니스 서비스를 DB 를 모델링 하는 과정에서 다대다 관계가 나올 수 있다.1개의 주문은 N개의 상품을 주문한다.1개의 상품은 M개 주문에 포함될 수 있다.이렇게 되면 관계형DB 입장에서는 관계를 표시할 수가 없다.하나의 레코드에서 하나의 FK 만 가져야 하기 때문이다.“콩나물” 상품을 M개 주문했다면 상품테이블에 주문 외래키로 뭐를 가져야할지?1번 주문에 여러개 상품을 주문했다면, 주문테이블에 상품 외래키로 뭐를 가져야할지?즉 서로의 외래키가 애매해진다.. b. 다대다 연관관계 해소를 위한 중간테이블 필요하나의 레코드에서 한 개의 FK 명시를 위해서는 중간테이블이 필요하다중간테이블을 만들어서, 1:N 관계를 2개를 만든다.1개 주문에 N개의 주문 상품을, 1개의 ..
a. 객체 설계 단계에서는 단방향 연관관계로 끝내야 한다. 단방향으로만으로도 관계 매핑이 완료된거임 → 양뱡향으로 해버리면 객체 입장에서 고려할것이 많아짐양방향은 사실 단방향의 2개일 뿐테이블 설계하면서 객체 설계 같이 진행할 것 → 이미 테이블간의 관계는 이미 정해짐무엇이 1:1 관계이고, 1:N 관계인지 N:M 관계인지는 테이블 설계하면서 나올것임 이때 → 외래키를 갖고 있는 객체가 주인으로 단방향 연관관계 맺으면 됌다중성이 헷갈릴때에는 반대로 생각해보기다중성 : @ManyToMany 인지, @OneToMany인지..실무에서 다대다는 지양해야함!양방향은 언제 ?설계 단계에선 하지 않음, 실무하다가 정말 필요하다 생각되면 그 때 추가하면 된다.테이블 수정할 필요도 없고! (테이블 영향도 없음) mapp..
값 입력받기 사용자가 직접 값을 입력할 때, System.in.read(), Scanner 를 사용할 수 있다. System.in.read() Scanner 1. System.in.read() 사용법 //System.in.read() 입력 받기 //정수, 문자 다 저장하는데, char 로 저장된 값은 아스키코드로 저장 import java.io.IOException; public class Main{ public static void main(String[] args)throws IOException{ char c1 = System.in.read(); } } 2. Scanner 사용 법 //Scanner 객체는 유니코드로 문자를 입력받는다. import java.util.Scanner; public cl..
- Total
- Today
- Yesterday
- JPA
- 자바
- 객체지향
- 객체지향모델링
- 코드업기초
- 자바기초
- web
- 안드로이드
- 파이썬기초
- eclipse
- 다이어그램
- 이클립스
- 코드업
- 모델링
- laravel
- set
- 스프링
- 기초100제
- 개인프로젝트
- 깃
- UML
- sql
- 레이아웃
- sourcetree
- Spring
- 파이썬
- 코딩
- 백엔드
- 유스케이스
- java
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |