전체 글
-
커스텀 validation 만들기☕️ java 2023. 1. 28. 17:46
스프링 프레임워크가 기본적으로 제공하는 Validator Annotation으로 충분하지 않을 수 있다. 필요에 따라 직접 Validator를 구현해야 하는 경우가 생길 수 있다. ❗Annotation Custom Constraint Annotation을 만들 때에는 message groups payload 위 3개는 꼭 정의를 해주어야 한다. @Constraint(validatedBy = PasswordValidator.class) @Target({METHOD, FIELD, ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface PasswordValidation { String message() default "Password i..
-
ThreadLocal🌱 spring 2023. 1. 18. 19:08
📌 ThreadLocal 💡 한 스레드에 의해서만 일고 쓰일 수 있는 변수 서로 다른 두 스레드가 하나의 변수에 접근했을 때, 해당 변수는 공유자원으로 동시성 문제가 발생할 가능성이 있다. ThreadLocal은 오직 한 스레드에 의해 읽고/쓰일 수 있는 변수를 생성한다. 두 스레드가 같은 코드를 실행하고 이 코드가 하나의 threadLocal 변수를 참조하더라도 서로의 threadLocal 변수를 볼 수 없다. 예시 ThreadA가 ThreadLocal 변수에 접근하여 1이라는 값을 저장. 동시에 ThreadB가 ThreadLocal 변수에 접근해 2라는 값을 저장 1이라는 값을 2가 덮는 것이 아니다 ❌ 각 스레드별 전용 저장소에 각각의 값이 저장된다. ⇒ 멀티 스레드 환경에서 공유 자원의 동시성 문..
-
4장. 카프카 상세 개념 - 토픽과 파티션📕 book/아파치 카프카 2023. 1. 17. 13:52
4장. 카프카 상세 개념 - 토픽과 파티션 ⭐ 토픽과 파티션 토픽은 카프카의 시작과 끝이다. 토픽을 만들면서 카프카를 사용하기 시작한다. 토픽에 대해 잘 이해하고 설정을 잘하는 것이 카프카를 통한 데이터 활용도를 높이는 것이다!! 📌 적정 파티션 개수 토픽의 파티션 개수는 카프카 성능과 관련있다. 토픽 생성 시 파티션 개수 고려사항 데이터 처리량 메시지 키 사용 여부 브로커, 컨슈머 영향도 데이터 처리량 파티션은 카프카 병렬처리의 핵심이다. 파티션의 개수가 많아질 수록 매핑되는 컨슈머 개수가 증가하기 때문 따라서, 파티션 개수를 정할 때 토픽에 필요한 데이터 처리량을 측정해 정하는 것이 중요 파티션 개수만큼 컨슈머 스레드를 운영하면 토픽의 병렬처리를 극대화 할 수 있다. 👀 컨슈머 전체 데이터 처리량이 ..
-
11장 - CQRS📕 book/도메인 주도 개발 시작하기 2023. 1. 16. 11:05
📌 단일 모델의 장점 조회를 하는 과정에 여러 애그리거트의 데이터가 필요한 경우 조회 속도를 빠르게 하기 위해서 구현 방법을 고민해야 한다. 식별자를 이용해 애그리거트를 참조하는 방식 즉시 로딩방식과 같은 JPA의 쿼리 관련 최적화 기능을 사용할 수 없다. 애그리거트 간 연관을 직접 참조하는 방식 조회 화면의 특성에 따라 즉시 로딩, 지연 로딩으로 처리해야 한다. 이런 고민이 발생하는 이유 상태를 변경할 때와 조회할 때 단일 도메인 모델을 사용하기 때문 ORM 기법은 도메인 상태 변경 기능을 구현하는데 적합하다 하지만, 여러 애그리거트에서 데이터를 가져오는 기능을 구현하기에는 고려할 것이 많아 복잡하게 만든다. 복잡도를 낮추기 위해 상태 변경을 위한 모델과 조회를 위한 모델을 분리하는 것이 좋다. ⭐ C..
-
10장 - 이벤트📕 book/도메인 주도 개발 시작하기 2023. 1. 16. 09:44
📌 시스템 간 강결합 문제 외부에서 제공하는 서비스를 파라미터로 전달받고 도메인 기능에서 도메인 서비스를 실행할 경우 문제가 발생할 수 있다. 외부 서비스가 정상이 아닐 경우 트랜잭션 처리를 어떻게 해야 할지 애매하다는 것이다. 외부 기능을 실행하는 과정에서 익셉션이 발생할 경우 롤백 or 커밋 중에 무엇을 해야 할까 ❓ ex) 환불 서비스를 실행하는 경우 외부의 환불 서비스를 실행하는 과정에서 익셉션이 발생하면 환불에 실패했으므로 주문 취소 트랜잭션을 롤백하는 것이 맞을 것 같지만 반드시 트랜잭션을 롤백 해야 하는 것은 아니다. 주문은 취소 상태르 변경하고 환불만 나중에 다시 시도하는 방식으로 처리할 수도 있다. 2. 성능 문제 외부 시스템의 응답 시간이 길어지면 그 만큼 대기 시간도 길어진다. 즉, ..
-
9장 - 도메인 모델과 바운디드 컨텍스트📕 book/도메인 주도 개발 시작하기 2023. 1. 13. 22:09
📌 도메인 모델과 경계 한 도메인은 여러 하위 도메인으로 구분된다. 따라서, 한 개의 모델로 여러 하위 도메인을 모두 표현하려고 하면 오히려 모든 하위 도메인에 맞지 않는 모델을 만들게 된다. 하위 도메인마다 사용하는 용어가 다르기 때문에 올바른 도메인 모델을 개발하려면 하위 도메인마다 모델을 만들어야 한다. 모델은 특정한 컨텍스트(문맥) 하에서 완전한 의미를 갖는다. 컨텍스트마다 의미가 서로 다를 수 있다. 이렇게 구분되는 경계를 갖는 컨텍스트를 바운디드 컨텍스트(Bounded Context)라고 한다. 📌 바운디드 컨텍스트(Bounded Context) 바운디드 컨텍스트는 모델의 경계를 결정하고 한 개의 바운디드 컨텍스트는 논리적으로 한 개의 모델을 갖는다. 용어를 기준으로 구분 서로 다른 용어를 사..
-
🌊 Connection Pool🌱 spring 2023. 1. 13. 16:26
인프런 김영한 님의 스프링 DB 1 강의를 듣고 정리한 글 (결제하고 못 들은 강의 듣고 다시 내용 정리하기) 커넥션풀 ❓ 데이터베이스 커넥션을 획득 과정 DB 드라이버를 통해 커넥션 조회 TCP/IP 커넥션 연결 (DB 드라이버 - DB) 커넥션이 연결되면 Id, PW와 같은 부가정보 DB에 전달 내부 인증을 완료 후 내부에 DB 세션 전달 DB는 커넥션 생성 완료 응답을 보낸다. DB 드라이버는 커넥션 객체를 생성해 클라이언트에 반환 매번 커넥션을 새로 만드는 것은 매우 복잡하고 시간도 많이 걸린다. ⇒ 커넥션을 미리 생성해두고 사용하는 ‘커넥션 풀’ 이라는 방법을 사용. 커넥션 풀 초기화 애플리케이션을 시작하는 시점에 커넥션 풀은 필요한 만큼 커넥션을 미리 풀에 보관 default - 10개 ❗커넥..
-
JDBC ❓🌱 spring 2023. 1. 13. 15:11
인프런 김영한 님의 스프링 DB 1 강의를 듣고 정리한 글 (아직 듣지 않고 결제한 강의 들으면서 다시 정리하기) ❓JDBC 애플리케이션을 개발 시 데이터는 대부분 데이터베이스에 저장한다. 애플리케이션 서버와 DB - 일반적인 사용법 1. 커넥션 연결 주로 TCP/IP를 사용해서 커넥션을 연결한다. 2. SQL 전달 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 DB에 전달한다. 3. 결과 응답 DB는 전달된 SQL을 수행하고 그 결과를 응답한다. 애플리케이션 서버는 응답 결과를 활용한다. ⚠️ 문제 : 데이터베이스마다 커넥션 연결 방법, SQL 전달 방법, 결과 응답받는 방법이 모두 다르다. ⇒ 다른 종류의 DB로 변경시 애플리케이션 서버에 개발된 DB 사용 코드도 함께 변경..