728x90

전체 글 331

(DB 구조) 마스터-슬레이브 구조

개요 소프트웨어를 개발하는데 가장중요한것은 DB를 설계하는 것이라고 생각합니다. 많은 소스를 보면서 DB구조가 Master & Slave로 되어있는것 을 볼 수 있었는데, 자세한 개념을 알아 보도록 하겠습니다. Master & Slave 개념 MySQL Replication(복제)은 말 그대로 DB인 데이터를 갖다가 물리적으로 복사해 다른곳에 넣어두는 기술을 의미합니다. 복제 매커니즘 - Master DB에서 DATA변경이 일어나면(1), 이를 Master DB에 반영합니다(2). - 변경이력을 Binary Log로 저장합니다(3). - 관련 이벤트를 Slave DB들에게 넘깁니다(4). - Slave IO Thread에서 이벤트를 캐치하면(5) Binary Log를 Slave DB 각각의 Relay L..

Database 2022.10.14

영속성 전이(CASCADE)에 관해

영속성 전이 : CASCADE 특정 엔티티를 영속 상태로 만들때 연관된 엔티티도 함께 영속 상태로 만들고 싶을때 사용합니다. eg. 부모 엔티티 저장시 자식 엔티티도 저장하게끔. 언제 쓰느냐? 하나의 부모가 자식들을 관리할 때 ( 단일 엔티티에 종속적인 경우) 라이프사이클이 같을때, 단일 소유자 쓰면 안되는 케이스? 자식의 연관 관계가 2개 이상일때 예를 들어 다음과 같은 경우에는 쓰면 안된다. 그림처럼 C 라는 엔티티가 A, B 에 의해서 관리된다고 하자. 이런 경우에서는 영속성 전이를 사용해서는 안된다. 참고 CASCADE 의 옵션은 ALL, PERSIST, REMOVE, MERGE, REFRESH, DETACH 가 있지만 주로 사용되는건 ALL, PERSIST, REMOVE 정도이고 실무에서 사용되..

JPA 2022.10.06

SpringBoot JPA Multiple Databases 설정

1. 다중 DB 설정 시, 알아야 할 것 다중 DB설정은 Auto Configuration 되지 않기 때문에 설정파일(application.yml or application.properties) 값을 읽어와서 연동 할 DB 수 만큼 Datasource를 수동 설정해야함 주요 설정 내용 리소스 경로 설정 Repository basePackages 경로 설정 Entity 경로 설정 DB 정보 설정(Datasource) driver 이름 URL Id/Password Hibernate 설정 ddl-auto dialect 설정된 다중 DB는 Repository package 명으로 구분 초기 설정이 복잡한 편이나, 천천히 살펴보면 크게 어렵지 않음 2. 소스코드 이 글에서는 1개의 Entity로 2개의 Datab..

JPA 2022.10.02

(Springboot 관련) mongoDB 초기 설정

몽고 DB 초기 설정 몽고 DB가 설치되면 https://start.spring.io/ 로 이동하여 다음 세 가지를 dependencies를 모두 추가하자. Spring Data JPA도 빼먹지 말고 추가하자. 이제 project를 open 하여 다음 코드들을 추가해보자. (공식 문서 참조했습니다.) public class Recipe { @Id public String id; public String name; public String type; public Recipe() {} public Recipe(String name, String type) { this.name = name; this.type = type; } } public interface RecipeRepository extends Mo..

Spring 2022.10.01

(Amazon AWS ELB 관련) 로드 밸런싱이란

인터넷의 발달로 인해 데이터 통신이 활발해졌고, 이는 트래픽의 폭발적인 증가로 이어졌다. 방금 누른 페이스북 ‘좋아요’와 친구에게 카톡으로 전송한 동영상, 좋아하는 유튜버의 채널 시청까지 어느 것 하나 인터넷을 통하지 않은 것이 없을 정도이다. 그 결과 아무리 성능이 뛰어난 서버라고 해도 단 한대의 서버로는 모든 트래픽을 감당해내기 어려워졌다. 이에 기업들은 서버를 추가로 구비하고 여러 대의 서버에 동일한 데이터를 저장해 수많은 트래픽을 효과적으로 분산하여 처리한다. 그런데 단순히 다수의 서버를 구축해 운영한다고 해서 모든 클라이언트의 요청에 일관성 있게 응답할 수 있을까? 쏟아지는 트래픽을 여러 대의 서버로 분산시켜주는 기술이 없다면 한 곳의 서버에 모든 트래픽이 몰리는 상황이 발생할 것이다. 이때 필..

AWS 2022.10.01

map() 과 flatMap() 의 차이

.map() .map()은 단일 스트림의 원소를 매핑시킨 후 매핑시킨 값을 다시 스트림으로 반환하는 중간 연산을 담당한다. 필터가 조건을 충족시키는 새로운 스트림을 생선한다면, Map은 각각의 아이템을 변경하여 새로운 컨텐츠를 생성하는 기능이다. List list = Arrays.asList( new Person(20,"kim"), new Person(21,"moon"), new Person(22,"sub"), new Person(23,"park") ); list.stream().map(Person::getName) .forEach(System.out::println); kim moon sub park .flatMap() flatMap() 은 여러개의 스트림을 한개의 스트림으로 합쳐준다. 복잡한 스트림을..

JAVA 2022.09.22

queryDsl로 like 문 구현

회원 페이지를 개발했는데 검색 기능이 필요하다. Querydsl의 like로 코드를 작성하고 확인해보니 컬럼의 풀텍스트가 일치하는 것만 출력이 된다. 앞뒤로 %를 붙이니 부분 텍스트만 입력해도 일치하는 것으로 리스트가 출력된다. contains는 어떨까 싶어서 확인해보니 %를 넣지 않아도 like에다가 %를 앞뒤로 붙인 것과 같은 결과가 출력된다. 차이를 레퍼런스를 통해서 확인했는데 둘 다 StringExpression 클래스에 속해있고 간단한 설명은 다음과 같다. query = query.where(qUserEntity.email.like(userEmail)); //지정된 str(userEmail)과 같으면 return query = query.where(qUserEntity.email.contains..

QueryDSL 2022.09.19

JWT 초기 설정

프로젝트 생성 자바 버전은 11로 하였고 아래의 Dependencies를 추가해줍니다. Spring Web Spring Security Spring Data JPA H2 Database Lombok Validation 테스트 컨트롤러 생성 해당 프로젝트가 잘 작동하는지 테스트 하는 컨트롤러를 만들어줍니다. @RestController @RequestMapping("/api") public class HelloController { @GetMapping("/hello") public ResponseEntity hello(){ return ResponseEntity.ok("hello"); } } Postman으로 GET요청을 했을때 401인증오류가 뜨는 것을 볼수 있습니다. SecurityConfig를 생성..

JWT 인증 2022.09.16

GSON 라이브러리에 대해(편리한 JSON 변환에 관해)

GSON 라이브러리란? Gson은 Java에서 Json을 파싱하고, 생성하기 위해 사용되는 구글에서 개발한 오픈소스입니다. Java Object를 Json 문자열로 변환할 수 있고, Json 문자열을 Java Object로 변환할 수 있습니다. Gson 라이브러리 추가하기 Maven 에 설정 추가 JSON 파싱에 사용할 json-simple 라이브러리를 추가하기 위해 pom.xml 파일에 아래와 같이 dependency를 추가합니다. com.google.code.gson gson 2.8.7 Object -> Json 변환하기 Student 클래스 public class Student { private int id; private String name; public Student(int id, String..

JAVA 2022.09.15

AOP - 관점 지향 프로그래밍

스프링 AOP ( Aspect Oriented Programming ) AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다. 예로들어 핵심적인 관점은 결국 우리가 적용하고자 하는 핵심 비즈니스 로직이 된다. 또한 부가적인 관점은 핵심 로직을 실행하기 위해서 행해지는 데이터베이스 연결, 로깅, 파일 입출력 등을 예로 들 수 있다. AOP에서 각 관점을 기준으로 로직을 모듈화한다는 것은 코드들을 부분적으로 나누어서 모듈화하겠다는 의미다. 이때..

Spring 2022.09.13
728x90