Java
낙관적 LOCK 과 비관적 LOCK - (JPA, Mysql)
낙관적 LOCK 과 비관적 LOCK - (JPA, Mysql)
2022.07.06먼저 알고 가면 좋은 것들 ACID https://hanamon.kr/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98%EC%9D%98-acid-%EC%84%B1%EC%A7%88/ [데이터베이스] 트랜잭션의 ACID 성질 - 하나몬 트랜잭션이란 여러 개의 작업을 하나로 묶은 실행 유닛을 말한다. 데이터베이스 트랜잭션은 ACID라는 특성을 가지고 있다. ACID는 데이터베이스 내에서 일어나는 하나의 트랜잭션(transaction)의 안 hanamon.kr Transaction 격리수준 https://zzang9ha.tistory.com/381#:~:text=%ED%8A%B8%EB%9E%9C%E..
JPA - Proxy
JPA - Proxy
2022.07.02Proxy 란 ? porxy 클래스란 실제 클래스를 상속 받아서 만든 실제 클래스와 겉모양이 똑같은 클래스 이다. Client 입장에서는 진짜 객체인지 Proxy 객체인지 구분하지 않고 사용하면 된다는 특징이 있다. Proxy 구조 Proxy 객체는 실제 객체애 대한 참조 (Ref) 를 보관한다. 그리고 Proxy 객체의 메소드를 호출 하면 Prxoy 객체는 실제 Method 를 호출한다. Prxoy 객체 초기화 proxy 객체는 member.getName() 처럼 실제 값에 접근하려고 할때 데이터베이스를 조회해서 실제 엔티티 객체를 생성하는데 이것을 프록시 객체 초기화라 한다. 프록시 객체에 member.getName() 을 호출해서 실제 데이터를 조회한다. 프록시 객체는 실제 엔티티가 생성되어 있지 ..
Connection Pool 이해하고 사용하기
Connection Pool 이해하고 사용하기
2022.06.25connection pool 이란? client 에서 요청이 올때마다 매번 connection 을 맺게 되면 TCP/IP 의 3way handshake 가 발생하게 되고 그만큼 client 에게 응답이 늦어지므로 사용자의 편의성이 하락 할 수 있다. 그리고 Database 의 connection 이 무한하게 증가 함으로 그다지 좋은 방법은 아니라 실무에서는 필수적으로 Connection Pool 을 사용하여 Database 를 사용한다. Spring boot 2.0 의 Connection Pool spring boot 2.0 에서는 connection pool 의 기본을 hikaricp 를 사용하도록 되어 있다. hikaricp 가 궁금하시다면 밑에 링크를 참조하자 GitHub - brettwooldri..
Strategy pattern (전략 패턴)
Strategy pattern (전략 패턴)
2022.06.18Strategy pattern (전략 패턴) 은 Template pattern 의 단점을 보완하고자 나온 패턴이다. 먼저 Template pattern 의 단점이 무엇인지 알아봅시다 Template pattern 은 부모 클래스에 알고리즘의 골격인 템플릿을 정의하고, 일부 변경되는 비즈니스 로직을 자식 클래스에 정의 하도록 했다. 이렇게 하면 자식 클래스가 알고리즘 전체 구조를 변경하지 않고 특정 부분만 재정의 할 수 있다는 장점이 있는데 결국 상속과 오버라이딩을 통한 다형성으로 문제를 해결 하는 것이다. http://www.yes24.com/Product/Goods/65551284 이펙티브 자바 Effective Java 3/E - YES24 자바 플랫폼 모범 사례 완벽 가이드 - Java 7, 8, ..
상속 관계 매핑 Entity 를 QueryDsl 에서 사용하기
상속 관계 매핑 Entity 를 QueryDsl 에서 사용하기
2022.05.23Java 에서 말하는 상속 개념이 SQL 에서는 존재하지는 않지만 Jpa 를 사용하여 상속 전략 을 사용하여 두 객체관의 관계를 매핑 하고 상속 관계 전략을 구현한 여러개의 Entity 를 Querydsl 을 사용하여 select 해보겠습니다. https://ict-nroo.tistory.com/128 [JPA] 상속관계 매핑 전략(@Inheritance, @DiscriminatorColumn) 상속관계 매핑 객체는 상속관계가 존재하지만, 관계형 데이터베이스는 상속 관계가 없다.(대부분) 그나마 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. 상속관계 매핑이라 ict-nroo.tistory.com 부모 Entity @Getter @Entity @Inheritance(strategy = S..
Failed to start bean 'documentationPluginsBootstrapper' 오류 해결
Failed to start bean 'documentationPluginsBootstrapper' 오류 해결
2022.03.02Spring boot 2.6버전 이후에 spring.mvc.pathmatch.matching-strategy 값이 ant_apth_matcher에서 path_pattern_parser로 변경되면서 몇몇 라이브러리(swagger포함)에 오류가 발생합니다. application.yml 에 아래 설정을 추가하면 해결 가능 합니다. spring: mvc: pathmatch: matching-strategy: ant_path_matcher
programmer level 2 - 위장 (hash map)
programmer level 2 - 위장 (hash map)
2022.02.01https://programmers.co.kr/learn/courses/30/lessons/42578 코딩테스트 연습 - 위장 programmers.co.kr Hash map 과 순열 조합을 사용하여 문제를 해결 하였습니다. 예시 예를들어 headgear 가 3개고 eyewear 가 4 개라고 한다면 경우의 수는 headgear 가 총 4가지 eyewear 가 총 5가지 입니다. headgear (0, 1, 2, 3) eyewear (0, 1, 2, 3, 4) 그렇다면 4 * 5 = 20 이라는 값이 나옵니다. 요기서 스파이는 매일 하루에 한벌은 입어야 한다는 가정이 있으므로 모든날 아무것도 입지않는 경우의수 1개를 뺍니다. 20 - 1 = 19 이것을 코드로 구현 해보겠습니다. package io.pr..
JPA 성능 최적화 - N + 1 문제 해결 하기
JPA 성능 최적화 - N + 1 문제 해결 하기
2022.01.30JPA 성능 최적화 JPA 를 사용하면서 병목이 발생하는 구간 의 90% 는 조회에서 발생한다 그도 그럴것이 사실 insert 나 update delete 같은 method 들은 단건에 대해한 것들이 대부분이다. 하지만 select 로 여러 테이블을 join 하여 데이터를 가져올때 시간이 되게 오래 걸리는 경우 가 많다. jpa 에서는 조금 과장을 보태여 이 개념만 잘 알고 있어도 90%는 해결 할 수 있을 것처럼 보인다. 그게 무슨 문제인지 알아보자 회원 이 있고 그 회원은 책을 주문 할 수 있고 배송 정보가 담긴 테이블이 있다고 가정한다. Member.java @Entity @Getter @Setter public class Member { @Id @GeneratedValue @Column(name ..
Spring boot 에서 Fire base storage 연동 하여 사용하기
Spring boot 에서 Fire base storage 연동 하여 사용하기
2022.01.25Firebase 에 접속하여 Stroage 만들기 storage 를 생성 한뒤 private key 가 담긴 json 파일을 다운 받으러 갑니다. project settings 를 클릭 한뒤 generate new private key 를 누르셔서 잘 보관 해주세요 그런 다음 하나더 필요한 것은 방금 만든 storage 서버 의 bucket name 이 필요합니다. 버킷 네임은 파란색 업로드 파일 버튼 왼쪽에 보이는 링크 입니다. gs://dark-room-84532.appspot.com java 에 bucket name 을 입력 할땐 gs:// 을 뺀 그 뒤에 문자열을 입력 하면 됩니다. application.yml 에 다음과 같이 추가한뒤 아까 다운받은 json 파일을 application.yml 과..
Aop 를 활용하여 binding result 처리 공통화 하기
Aop 를 활용하여 binding result 처리 공통화 하기
2022.01.24AOP 란? AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다. 예로들어 핵심적인 관점은 결국 우리가 적용하고자 하는 핵심 비즈니스 로직이 된다. 또한 부가적인 관점은 핵심 로직을 실행하기 위해서 행해지는 데이터베이스 연결, 로깅, 파일 입출력 등을 예로 들 수 있다. AOP에서 각 관점을 기준으로 로직을 모듈화한다는 것은 코드들을 부분적으로 나누어서 모듈화하겠다는 의미다. 이때, 소스 코드상에서 다른 부분에 계속 반복해서 쓰는 코드들을..
좌표 정렬 구현하기 (Comparable)
좌표 정렬 구현하기 (Comparable)
2022.01.19좌표 정렬 설명 N개의 평면상의 좌표(x, y)가 주어지면 모든 좌표를 오름차순으로 정렬하는 프로그램을 작성하세요. 정렬기준은 먼저 x값의 의해서 정렬하고, x값이 같을 경우 y값에 의해 정렬합니다. 입력 첫째 줄에 좌표의 개수인 N(3
Spring Bean 주입하기
Spring Bean 주입하기
2021.12.08Controller 와 Service 에서 Autowired 가 없는이유 @RequiredArgsConstructor @Service public class PostsService { private final PostsRepository postsRepository; @Transactional public Long save(PostsSaveRequestDto requestDto) { return postsRepository.save(requestDto.toEntitiy()).getId(); } } Bean 을 주입받는 방식들이 다음과 같습니다. @Autowired setter constructor 이 중 가장 권장되는 방식이 생성자(constructor) 로 주입받는 방식입니다. (@Autowired 는..