반응형

Spring 51

태태개발일지 -TestCode 편

단위별 테스트 작성Test코드를 작성하기 위해서 Test라는 Directory에 Resources라는 폴더를 추가하고,application-test.yml을 추가해주었다. spring: config: activate: on-profile: test #'test' 프로파일이 활성화 되었을 때 아래 설정이 적용된다. datasource: username: sa password: driverClassName: org.h2.Driver # H2 데이터베이스 드라이버 클래스 이름 url: jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL # DB_CLOSE_DELAY=-1: 메모리 데이터베이스가 ..

Spring/Test 2024.06.09

Spring redis 총정리

- Cache - LocalCache   ex) ehcache     - 로컬 캐시는 애플리케이션 내부에서만 유효하며, 동일한 어플리케이션 내의 여러 모듈이나 서비스 간에 공유하지 않는다.     - 메모리 내에 데이터를 저장하므로 매우 빠른 읽기 및 쓰기 성능을 제공한다.     - 로컬 캐시는 애플리케이션의 JVM 내부 또는 로컬 서버에 저장되며 외부에서 접근 할 수 없다.  - global cache.  ex) redis      - 글로벌 캐시는 여러 서버 또는 애플리케이션 간에 데이터를 공유할 수 있다.      - 글로벌 캐시는 주로 네트워크를 통해 데이터에 접근해야하므로 로컬 캐시에 비해 상대적으로 느린 읽기 및 쓰기 성능을 가질 수 있다.      - 글로벌 캐시는 주로 네트워크를 통해 외..

Spring/Redis 2024.05.27

태태개발일지 - spring batch 대용량 처리

- 배치 데이터 처리에서 즉시성을 필요로 하지 않을 경우, 일정량 또는 일정 기간 데이터를 수집한 후 일괄 처리를 하는 방식 ex) 1. 정산 시스템 2. 데이터 마이그레이션 3. 약관 변경 메일 4. 통계 5. 게임 랭킹 6. 쇼핑몰 배송요청 장점: - 자원을 효율적으로 사용 (대량의 데이터를 실시간으로 매번 처리하면 자원의 낭비가 크다) - 대량의 데이터 처리 - 주로 정해진 시간에 반복적으로 실행 - 사용자와의 상호작용 없이 동작 단점: - 실시간성 결핍 - 잘못 동작하면 큰 문제가 된다. Read - Process - Writes DB읽고 - 처리하고 - 저장하고 근데 왜 Spring batch?? Spring의 특징을 그대로 사용하여 Spring에 익숙하다면 금방 배울 수 있다. 대용량 처리에 ..

Spring/Batch 2024.04.13

태태개발일지 - spring cloud 기본

Antifragile의 조건 - Auto Scaling ex) 사용자가 많을 때와 사용자가 적을 때에 따라 서버를 자동으로 Scale up | Scale out하는 것. - Microservices ex) 개별적인 모듈이나 기능을 개별적으로 운용하고 개발할 수 있는 것. - Chaos enginerring ex) 급격하고 예측하기 힘든 상황에서 대해 실험하기 위한 규칙이나 방안. -CI/CD 지속적인 통합 Cloud native - Microservices 방식으로 개발되고, CI/CD로 자동으로 통합되고, 빌드, 배포된다. 문제가 발생했을 때 다시 배포하는 과정인 DEVOPS가 있다. 어플리케이션을 Containers가상화 기술을 통해서 사용하게 된다. CI/CD 카나리 배포 -> 95%만 이전버전 5..

Spring/Cloud 2024.03.02

태태개발일지(EVENT)

서비스 로직을 처리할 때 하나의 로직 이후에 연계되어서 일어나는 로직을 실행할 때, 하나의 도메인 서비스에 다른 도메인 서비스를 넣어서 강력한 결합을 사용하고 있었다. ex) @Service @Slf4j @RequiredArgsConstructor public class PostService { private final PostRepository repository; private final MessageRepository messageRepository; } 이런 것을 해결하기 위해서 중간에 event publisher를 둠으로써 결합의 강도를 줄일 수 있는 event를 알게되었다. @Entity @Table(name = "post") @AllArgsConstructor @NoArgsConstructo..

Spring/JPA 2023.12.04

태태개발일지(query method)

Query Optinal findByName(String name); -> Optinal값으로 return이 된다. findBy -> selete로 가장 많이 사용된다. getByEmail readByEmail queryByEmail searchByEmail streamByEmail 여러가지가 존재한다. countBy-> 숫자 새기 -첫번째 원소 가져오기 findFirst1By findTop1ByName -> 첫번째 원소를 가져온다 -And OR 연산자 사용 findByEmailAndName -> and연산자와 or연산자등 여러 연산자를 사용할 수 있다. -범위 사용 findByIdAfter(Long id); findByIdbefore(); -> 매개변수보다 크거나 작다 but ecual 포함 x Gre..

Spring/JPA 2023.08.21

태태개발일지(연관관계 JPA)

관계에는 1:1 , 1:N , N:N 관계가 있고, JPA에서는 이의 연관관계를 나타내는 방법이 있다. @OneToOne private Class class; --> 이렇게만 설정하면 서로에 서로에대한 FK가 생기고 , 그렇기때문에 mapped by option을 통해서 지정을 해줘야한다. mapped by: 다른 클래스의 변수명을 입력해주면된다. , 연관 키를 해당테이블에서는 가지지 않게되는 효과를 받을 수 있다. @OneToMany -> 1:N중에 1인 클래스에 선언 private List class = new ArrayList(); -> 초기화 시켜주는 습관 @JoinColum(name = " ") -> 어떤 colum과 join할지 지정하는 어너테이션 @OneToMany + @JoinColumn:..

Spring/JPA 2023.08.17

태태개발일지(JPA트러블 슈팅)

-N+1 문제란? 연관 관계에서 발생하는 이슈로 연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 갯수(n) 만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오게 된다. 이를 N+1 문제라고 한다. -그렇다면 Lazy를 사용하면 해결되는가? 결과는 아니다 EAGER 객체를 부르면 연관된 데이터를 그냥 다 불러온다. lazy -> get을 했을경우 가능하다. -> @Transtaion으로 되어있어 영속성이 가능할 때 까지 라는 특성을 가지지만 결국 lazy로 get을 통해 불러올경우 쿼리가 N만큼 늘어나 동일 하다는 것이다. Json으로 파싱할때 엔티티를 getter로 참조하게되는데 그때 lazy로 되어있다고해도 쿼리가 발생하기떄문에 @ToSTring.Exclude를 사용해줘야 재 역할을 ..

Spring/JPA 2023.08.16

태태개발일지(Spring Security)

Q. 사이트 자체에 리소스가 있을 것이고, 개인정보들이 있을 것이다. 사람이 악의적으로 정보를 탈취하거나, 변형시키는 것을 막아야하는 데 그것을 도와주는 라이브러리가 - 스프링 시큐리티다. 즉 스프링 시큐리티는 인증, 권한을 다룬다. 인증 -> 이메일과 password로 로그인한다. -Session관리 -토큰 관리 (서버를 여러대 두다보니깐 동기화와, 여러군대 저장문제로 토큰을 사용하기 시작했다) SNS 로그인으로 인증 위임-> Oauth2 인가 혹은 권한 - Secured -PrePostAuthorize 에너테이션을 통해서 권한을 측정한다. SecurityContextHolder.getContext()를 통해서 저장된 정보를 가져올 수 있다. -> mypage 정보 불러올때 사용 @PrePostAuth..

Spring/Security 2023.08.14
반응형