전체 글 410

Data Source 이해

커넥션을 얻는 방법은 JDBC 드라이버 매니저를 통해 획득하던지 커넥션 풀로 접근하는 두가지 방법이 있다. 드라이버 메니저를 통해 커넥션을 획득하다가 커넥션 풀로 변경시 문제 전반적인 코드 변경이 일어난다. 위 문제를 해결하기위해서 추상화를 해놨는데 DaraSource를 통해 커넥션을 획득하는 방법을 추상화 해놓은 인터페이스가 있다. 대부분의 커넥션 풀은 DataSoure 인터페이스를 이미 구현해 두었다. 스프링은 DriverManagerDataSorce 라는 DataSoure의 구현체가 있다. 그렇기때문에 DriverManagerDataSorce맞춰서 커넥션 풀을 사용할 수 있음 driverManager와 DataSoure의 차이 driverManager는 커넥션할때마다 url,username,pass..

Springboot 2023.08.16

DB 커넥션풀

커넥션풀 db가 커넥션을 할때의 과정 애플리케이션 로직이 db드라이버를 통해 커넥션을 조회한다. db드라이버는 db와 tcp/ip 커넥션 연결을 한다. db 드라이버는 id,pw와 기타 부가 정보를 db에 전달한다. db는 id,pw를 통해 내부인증을 완료해고 내부에 db 세션을 생성한다. db는 커넥션이 생성이 완료되었다는 응답을 보낸다. db드라이버는 커넥션 객체를 생성해서 클라이언트에 반환한다. 위와같은 과정을거치기때문에 생각보다 복잡한 과정과 많은 시간이 소모 되는 일이다. 데이터베이스마다 커넥션 시간은 다 다르다. 위 와같은 문제를 해결하기 위해 생긴 방법이 커넥션 풀이다. 커넥션 풀 이해 커넥션풀은 커넥션을 미리 생성해두고 사용하는 방법이다. 보통 기본 커넥션 값은 보통 10개이다. 미리 10..

Springboot 2023.08.16

Spark 개념

Apache Spark?Apache Spark는 대규모 데이터 처리를 위한 오픈 소스 분산 컴퓨팅 시스템입니다.용어 정리기본 개념RDD (Resilient Distributed Dataset): Spark의 기본 데이터 구조.DAG (Directed Acyclic Graph): 작업의 실행 계획을 나타냅니다.Partitioning: 데이터의 분할 방식.Transformation and Action: Spark에서의 주요 작업 유형들.Spark ArchitectureDriver와 Executor의 역할과 동작 방식Spark Application, Jobs, Stages, Tasks의 관계와 흐름Spark APIsDataFrame & Dataset API: 선언적 데이터 처리를 위한 인터페이스Spark St..

DB 2023.08.16

Springboot DataJPA 선택적으로 수정하기

선택적으로 수정하기?? 프로그램을 작성하다보면 이런경우가 있다. dto로 작성된 필드가 있을수도 있고 없을수도 있는 상황에서 해당필드값들을 선택적으로 업데이트하고 만약에 값이 들어와 있지 않다면 그대로 값을 두는것이다. 하지만 스프링에서 기존에 기본형태로 업데이트를 하는 방법은 Entity 객체에 값을 다 넣은다음 save함수에 Entity객체를 인자값으로 넣어주거나 아니면 그냥 리턴해서 더티체킹을 하는 방법이 있는데 이 두가지 방법은 위의 경우에서 적합하지 않다 왜냐하면 값이 들어오지 않는다면 null이 업데이트가 되기때문... 이럴때 사용하는것이 Optional 클래스를 활용하는 방법이 있다. 예시 public Optional updateItem(Integer id, TodoUpdateItemDTO ..

Springboot 2023.08.14

Spring boot-Cache Control Headers 하는법

Cache Control Headers 요청 데이터가 무겁지만 변경이 잘 없는 데이터는 Headers에 케시컨트롤을 통해서 사용자와 서버가 서로 윈윈할수 있는 방법이 있다. 한번 최초 요청시에 request 요청이 캐싱돼서 이후 제요청시에는 http 통신을 하지 않고 클라이언트쪽에서 바로 캐싱돼서 데이터를 띄운다. spring boot Cache Control Headers 굉장히 간단하다. 캐싱하고 싶은 컨트롤러에서 header 설정을 해주면된다. maxAge 는 캐싱되는 최대 시간이다. 이 내에 요청이 오면 캐싱 돼서 http요청없이 서비스를 진행한다. docs https://www.baeldung.com/spring-security-cache-control-headers

Springboot 2023.08.14

JPA 복합키 작성기초

대표 PK를 사용하는 게 유리할 때 클라이언트 쪽에서 복합키의 정보를 모두 알지 않아도 간편하게 리소스 관리가 가능함 (ex: 책ID, 사용자ID) 데이터를 식별할 수 있는 컬럼의 조합이 유니크하지 않을 때 (ex: 이름+저자+출판사로는 책 식별 불가할 수 있음. 동일한 명칭의 개정판이 나오기 때문) 식별가능한 복합키의 값이 변경 가능할 때 (책 이름, 저자의 필명, 출판사는 언제든 변경 가능함) 주의할 점* 인덱스가 기본적으로 하나 추가됨 (대표PK + 복합컬럼 인덱스) 복합키를 사용하는 경우 특정 데이터를 식별하는 게 의미가 없는 도메인 (ex: 걸음기록과 같은 통계성 데이터) 사용 예) 걸음기록 저장 조회 : 사용자별 최근 일주일간 평균 걸음 수 위와같은 통계성, 기록성 데이터는 id가 존재하더라도..

Springboot 2023.08.14

Springboot JUnit and Mockito

Junit Junit 이란? java 진영의 대표적인 test Framework 단위 테스트를 위한 도구를 제공 단위 테스트란? 코드의 특정 모듈이 의도된 대로 동작하는지 테스트 하는 절차를 의미 모든 함수와 메소드에 대한 각가의 테스트 케이스를 작성하는것 어노테이션을 기반으로 테스트를 지원 단정문으로 테스트 케이스의 기대값에 대해 수행 결과를 확인할 수 있음 Spring boot 2.2.버전부터 junit5 버전을 사용 Junit 5는 크게 Jupiter,Platfrom,Vintage 모듈로 구성 모듈 설명 Junit Jupiter TestEngine api 구현체로 Junit 5를 구현하고 있다. 테스트의 실제 구현체는 별도 모듈 역할을 수행하는데, 그 모듈 중 하나가 jupiter-engine 이다..

Springboot 2023.08.14

@Transactional원리

@Transactional spring에서 디비접근시에 트랜잭션을 관리하는 방법은 아주 추상화가 잘 돼 있습니다. 바로 @Transactional 을 사용해주면 트랜잭션이 되기 때문입니다. 이 마법의 내부를 공부해 봤습니다. Transaction 동작 원리 jdbc가 트렌잭션을 다루는 코드 import java.sql.Connection; Connection connection = dataSource.getConnection(); // (1) try (connection) { connection.setAutoCommit(false); // (2) // execute some SQL statements... connection.commit(); // (3) } catch (SQLException e) { ..

Springboot 2023.08.14