안녕하세요.이번 게시글에선 자연키 기반 복합키와 인조키 기반 단일키를 PK로 사용하는 상황에 대해 비교해보겠습니다. 자연키 기반 복합키 VS 인조키 기반 단일키 1. 자연키 기반 복합키란?- 자연키는 실제 데이터를 기반으로 한 고유 식별자이며, 복합키는 두 개 이상의 컬럼을 결합하여 유일성을 보장하는 키 2. 인조키 기반 단일키란?- 실제 데이터와는 무관하게 시스템에서 생성된 임의의 고유 식별자. 주로 자동 증가 값이 쓰임 예상하는 상황) 복합키가 더 빠르다? 일반적으로 생각을 해보자면 복합키가 더 빠르다고 생각할 수 있습니다.'복합 인덱스가 더 빠르다'라는 문구가 익숙하기 때문일 것 같은데요. 복합 PK키와 복합 인덱스키를 구분해야합니다. 일반적으로 조회 조건이 여러가지인 경우, 복수의 조..
안녕하세요. 미더덕입니다. 이번 시간엔 Spring MVC 프로젝트에서 WebClient를 사용 시 내부 동작이 어떻게 이루어지는 지에 대해 알아보도록 하겠습니다. 1. Spring MVC (톰캣 -서블릿 - 동기 멀티스레드) VS Spring WebFlux (네티 - 이벤트루프-비동기 단일/멀티스레드)우선 해당 상황을 이해하기 위해 Spring MVC의 기술적 바탕과 WebClient를 사용하기 위한 Spring WebFlux의 기술적 바탕이 다르다는 사실을 인지하고 있어야합니다. 2. Spring MVC - 톰캣 & 서블릿 기반의 동기 멀티스레드 기술 우리에게 익숙한 Spring MVC는 톰캣 서블릿 기반의 동기 멀티스레드 기술입니다. 톰캣 컨테이너는 스레드 풀에 미리 스레드를 생성시켜두고 HT..
8장 레이어드 아키텍처 - 레이어드 아키텍처는 구체적인 사양이 아님. 레이어드 아키텍처의 조건 (제약) - 레이어 구조를 사용 (필수) - 레이어 간 의존 방향은 단방향 (필수) - 레이어 간 통신은 인접한 레이어에서만 이뤄지게 함 -> 작가는 필수는 아니라 생각함 아키텍처란? - 제약 - 아키텍트들이 아키텍처를 설명할 때 항상 빠지지 않고 말하는 한 가지 특징은 제약조건 - 아키텍처는 제약 조건을 이용해 개발자가 해도 되는 것과 하지 말아야 하는 것을 결정한다. - 더 나아가, 해서는 안되는 일이 개발 단계에서 일어나지 않게 원천적으로 차단함. 제약 - 목적을 달성하기 위한 것 - 제약 조건은 목적에 따라 변경될 수 있음 잘못된 레이어드 아키텍처 JP..
콜백함수함수를 변수처럼 사용하는 개념분기문으로 다른 로직을 담긴 함수들을 선언하여 처리하기 어려운 상황에 유용void make_donut(func f){ //.. f(); //..}make_donut 함수를 사용하고 싶은 프로그래머는 자신이 정의한 현지화 함수를 전달위의 함수 변수를 콜백 함수라고 함일반적으로 인자로 사용되는 콜백 함수는 호출되는 함수를 사용하는 개발자가 작성따라서 콜백함수를 호출하는 것은 보통 다른 모듈 혹은 스레드 비동기 콜백콜백 함수의 처리 속도가 오래걸리는 상황인데 이를 기다려줄 수 없다면?// 호출 스레드make_donut(formed_D); // 아래 작업을 기다려줄 수 없을 때 -> 비동기 콜백함수를 사용하기something_important(); // 기다려..
yml 파일 생성 중에 모델을 아직 만들지 않았을 경우 에러 발생-> 더미로 에러 발생 안하게 하면서 수정 url -> subscription -> subscriptionssubscriptions 하나만으로 '사용자 구독한 블로그 목록을 요청'/blogs/subscriptions구독 해지 요청 -> 사용자가 특정 블로그 구독 해지 요청 url에 버전을 넣는게 좋을까 고민 -> 상위호환성 하위호환성url로 호환성을 챙기는게 좋은 것 같지 않는 의견api가 많으면 복잡성이 많아짐프로토콜 버퍼 상위호환성 하위호환성논쟁이 있는 영역 블로그 상태메시지 생성에서 id인자는 사용자 아이디로 필요가 없을 것블로그 인증 -> body에 url 으로 요청 상태 코드 관한 고민201 코드 같은 것은 쓰면 좋음4045..
개요운영체제 목적운영체제 없이 프로그램 실행은 가능자동 적재 및 멀티 태스킹 지원프로세스 목적프로그램 동시 실행하기 위해프로세스는 상황정보 저장된 구조체임운영체제는 이 상황정보를 통해 스레드를 효율적으로 할당스레드 목적가용 cpu를 최대한 이용하고자 프로세스 진입함수를 추가로 생성하여 스레드 활용운영체제가 스레드 할당하며 프로세스 일시 중지 및 재시작 가능코루틴 목적동기 프로그래밍으로 비동기 가능하도록코루틴 정의로 함수의 실행 일시 중지 및 재시작 가능 CPUcpu는 메모리에서 명령어를 가져오고 명령어를 실행하는 작업만 할 수 있음 운영체제프로그램을 자동으로 적재, 멀티태스킹을 실현 해주는 역할을 함운영체제가 없어도 cpu가 프로그램을 실행하도록 할 수 있지만 적절한 메모리 영역 찾기, pc 레지스..
비동기 논의- https://hyeon9mak.github.io/why-occurs-deadlock-from-select-query/- https://happy-coding-day.tistory.com/299- https://happy-coding-day.tistory.com/299 # 레이어드 아키텍처 vs 헥사고날 아키텍처 비교- 레이어드 아키텍처에서 무리한 DIP를 추구하려고 하면- 퍼시스턴스 레이어의 메서드를 추가할 때도- 비스니스 레이어 먼저 봐야하는 복잡함이 있음- 헥사고날-> 포트 인 아웃이 많음- 기능을 찾을 때 포트먼저 봄- 퍼시턴스 어댑터를 먼저 보지 않음 - 무신사 집중 채용 중 -> 써보기 .. - 반버논 도메인주도 설계 핵심-> 얇은 책 추천 - 도메인 vs 성능 고민 - 성..
7장 - 서비스도메인 서비스가 무엇인지?스프링에서 서비스는 왜 서비스인지?서비스 컴포넌트에 추가적으로 기대하는 역할이나 책임은 무엇인지? 서비스의 컴포넌트의 역할 크게 3가지1 도메인 객체를 불러오기2 도메인 객체나 도메인 서비스에 일을 위임하기3 도메인 객체의 변경 사항을 저장하기 스프링에서의 Service @Service의 자바독 요약@Service는 에릭 에반스의 DDD에서 영감을 받아 만들어진 애너테이션서비스는 J2EE 패턴 중 하나인 비즈니스 서비스 파사드처럼 사용될 수 있음 DDD (도메인 주도 설계)DDD에서 정의하는 '서비스'란? -> 연산을 위한 컴포넌트DDD에서의 서비스 컴포넌트 (에릭에반스가 한 말)자신의 본거지를 엔티티나 값객체에서 찾지 못하는 중요한 연산이 있다. 일부는 본질..
개발 방식- 거친 도메인 모델링 > 도메인 탐구(요구사항 파악) > 시퀀스/상태 다이어그램 > api 문서 (OAS spec) ... 도메인 개발 API 개발오늘도 여러분의 API는 안녕하신가요?https://www.inflearn.com/course/lecture?courseSlug=%EC%9D%B8%ED%94%84%EC%BD%982023-%EB%8B%A4%EC%8B%9C%EB%B3%B4%EA%B8%B0&unitId=177892&tab=curriculum- 클린 아키텍처 구조에서 애플리케이션 레이어를 얇게, 프리젠테이션과 도메인 레이어를 두겁게 지향- API 기능 빨리 만들어서 배포해보기 1. 도메인 모델링 해오기 - 너무 만약에라는 가정을 너무 많이 하진 않기.. 2. AC 조건 (리스트 따로..
5장 순환참조두개 이상의 객체나 컴포넌트가 서로를 참조함으로써 의존관계에 사이클이 생기는 상황@Data class Team { private long id; private String name; private List members;} @Data class Member { private long id; private String name; private Team myTeam;}팀과 팀원의 관계를 표시한 클래스 -> 순환참조임양방향 매핑JPA Entity의 양방향 매핑은 순환참조다. 순환참조의 문제점 무한루프순환참조가 있다는 것은 무한 루프가 발생할 수 있다는 것임. 시스템 복잡도순환참조는 시스템의 복잡도를 높임. (의존성 전이 등..