분류 전체보기
카디널리티와 복합키 순서 그리고 PK Index
카디널리티와 복합키 순서 그리고 PK Index
2020.10.12PK 복합키 순서에 따라 인덱스가 타지 않을 수 있다! JPA는 복합키를 생성할 때 컬럼명의 알파벳 순으로 생성한다. Entity Class에 정의된 순서로 생성되는 게 아니기 때문에 조회할 때 기대했던 PK Index가 타지 않을 가능성이 높다. 먼저 PK index 실행 조건에 대해 알아보겠다. PK 인덱스 실행 조건 (MySQL/Oracle) DB에 테이블을 생성할 때 PK Key 들에 대해서 자동으로 Index를 생성해준다. 이를 PK 인덱스라고 한다. 생성된 PK 순서대로 PK Index가 적용되기 때문에 큰 범위에서 작은 범위의 컬럼으로 나열하는 것이 좋다. 아래와 같은 테이블이 있을 때, 조회 조건에 어떤 PK컬럼을 매핑하느냐에 따라 옵티마이저가 PK Index를 탈지 말지 결정한다. PK ..
[책] 객체지향의 사실과 오해 요약(5)
[책] 객체지향의 사실과 오해 요약(5)
2020.10.105. 책임과 메시지 자율적인 책임 설계의 품질을 좌우하는 책임 자신의 의지에 따라 증언할 수 있는 자유 객체가 자율적이기 위해서는 객체에게 할당되는 책임의 수준 역시 자율적이어야 한다. (어떤 책임이 있는 지 구체적으로 세세하게 정하지 말라는 뜻) 너무 추상적인 책임 어떤 책임이 자율적인지를 판단하는 기준은 문맥에 따라 다르다는 사실에 유의하라. 재판이라는 협력 안에서는 '증언하라'라는 책임이 무자 장수의 자율권을 보장하는 가장 적절한 수준의 책임이지만 다른 상황에서는 오히려 '설명하라'라는 책임이 자율권을 보장하는 최선의 선택이 될 수 있다. 어떤 책임이 가장 적절한가는 설계 중인 협력이 무엇인가에 따라 달라진다. 성급한 일반화의 오류를 피하고 현재의 문맥에 가장 적합한 책임을 선택할 수 있는 날카로운..
[책] 객체지향의 사실과 오해 요약 (4)
[책] 객체지향의 사실과 오해 요약 (4)
2020.10.104장 역할, 책임, 협력 최후 통첩 게임을 통해 인간이 어떤 본직절인 특성을 지니고 있느냐가 아니라 어떤 상황에 처해있느냐가 인간의 행동을 결정한다는 것을 설명한다. 즉, 각 개인이 처해 있는 정황 또는 문맥(context)이 인간의 행동 방식을 결정한다는 것이다. 여기서 인간의 행동을 결정하는 문맥(context)는 타인과의 협력이다. 가장 흔한 실수는 문맥을 고려하지 않은 채 객체가 가져야 할 상태와 행동부터 고민하기 시작하는 것이다. 객체의 행동(책임)보다는 협력을 먼저 고민하라. 훌륭한 객체지향 설계자는 객체들 간의 요청과 응답 속에서 창발하는 협력에 초점을 맞춰 설계한다. 협력이 자리를 잡으면 저절로 객체의 행동이 드러나고 뒤이어 적절한 객체의 상태가 결정된다. 어떤 협력에 참여하는 지가 객체에..
[책] 객체지향의 사실과 오해 요약 (3)
[책] 객체지향의 사실과 오해 요약 (3)
2020.10.093장 타입과 추상화 해리 백이 창조한 지하철 노선도의 핵심은 지도가 당연히 가져야 한다고 생각되는 정확성을 버리고 목적에 집중한 결과다. 승객이 꼭 알아야 하는 사실만 정확하게 표현되고 몰라도 되는 정보는 무시함으로써 이해하기 쉽고 단순하며 목적에 부합하는 지하철 노선도를 창조해낸 것이다. 해리 벡의 가장 위대한 업적은 지하철 노선도를 추상화한 것이다. 추상화를 통한 복잡성 극복 추상화의 정의 어떤 양상, 세부 사항, 구조를 좀 더 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법이다. 추상화는 현실에서 출발하되 불필요한 부분을 도려내가면서 사물의 본질에 집중하여 복잡성을 극복한다. 추상화의 목적은 복잡성을 이해하기 쉬운 수준으로 단순화하는 것이다. 복잡성..
[책] 객체지향의 사실과 오해 요약 (2)
[책] 객체지향의 사실과 오해 요약 (2)
2020.09.27이상한 나라의 객체 객체지향 패러다임은 지식을 추상화하고 추상화한 지식을 객체 안에 캡슐화함으로써 실세계 문제에 내재된 복잡성을 관리하려고 한다. 객체를 발견하고 창조하는 것은 지식과 행동을 구조화하는 문제이다. - 레베카 워프스브록 객체지향 패러다임 객체지향 패러다임은 실세계와 같이 소프트웨어 세계 역시 인간이 인지할 수 있는 다양한 객체들이 모여 이루어져 있다는 믿음에서 출발한다. 하지만 현실세계와 소프트웨어 세계의 유사성은 여기까지이다. 객체지향 패러다임의 목적은 현실 세계를 모방하는 것이 아니라 그를 기반으로 새로운 세계를 창조하는 것이다. 객체 객체란 식별 가능한 개체 또는 사물이다. 객체는 자동차처럼 만질 수 있는 구체적인 사물일 수도 있고, 시간처럼 추상적인 개념일 수도 있다. 객체는 구별 ..
[책] 객체지향의 사실과 오해 요약 (1)
[책] 객체지향의 사실과 오해 요약 (1)
2020.09.26조영호님의 책 객체지향의 사실과 오해를 통해 그 동안 맹신에 가까웠던 객체지향에 대한 미신을 되짚어 보고, 진정한 객체지향이란 무엇인가에 대한 생각의 실마리를 열어 준다. 기존에 객체지향을 설명할 때 들었던 붕어빵 틀(클래스)과 붕어빵(객체)라는 것에서 벗어나보자. 총 7장으로 이루어져있으며, 각 장별 내용을 요약하여 실제 코딩할 때에도 객체지향적으로 설계할 수 있도록 연습할 계획이다. 1장 협력하는 객체들의 공동체 객체지향의 목표 : 실세계를 모방하는 것이 아니라, 고객과 사용자를 만족시킬 수 있는 새로운 세계를 창조하는 것 객체 지향을 설명할 때 실세계를 비유하는 이유? 실세계 모방이라는 개념은 실무적으로 부적합하지만, 객체지향이라는 용어에 담긴 기본 사상을 이해하고 학습하는 데는 효과적이기 때문이다..
[React] useEffect 내 무한루프 원인 (Error Maximum Update depth exceeded)
[React] useEffect 내 무한루프 원인 (Error Maximum Update depth exceeded)
2020.09.19배경 김뉴비는 사내 관리자페이지를 React, Redux-saga로 만들기로 했다. 천천히 학습시간을 갖고 개발하면 좋았겠지만, 시간이 부족해 개발부터하고 버그를 수정하며 React를 알아가는 중이다. 원하던 기능 DB에서 type별로 최신 컨텐츠 목록을 조회해서 store에 담는 것 (아래 코드는 예제를 위해 변형한 것입니다.) const ContentListContainer = () => { const type = 'help'; const dispatch = useDispatch(); const {list, error, loading} = useSelector((contentList) => ({ list: contentList.list, error: contentList.error, })); useE..
ORM 뉴비가 바라본 JPA 학습 방법
ORM 뉴비가 바라본 JPA 학습 방법
2020.09.13Springboot + JPA 조합의 시스템을 처음으로 개발하게 되면서 JPA를 어떻게 방식으로 접근해서 공부해야할지 생각해봤다. JPA, 엄밀히 말하면 ORM을 처음 만났을 때의 나의 모습이다. "웹어플리케이션이 실행될 때 마다 테이블을 매번 생성한다고?" (옵션 변경 가능) "단순히 DB 모델링을 @Entity class로 단순히 형상화한게 아니라 DB에 직접 관여하는 객체라고?" "아니, update가 auto commit이라고? commit 시점은 언젠데?" "아, transaction을 잘 설정해야하는구나. 근데 self Invocation에서는 안된다고ㅠㅠ?" (Spring AOP는 proxy기반이라 Self Invocation 상황에서는 proxy 객체를 가르키는게 아니라 this를 가르키기..
[책 리뷰] 비추 후기 - 배워서 바로 쓰는 스프링 프레임워크
[책 리뷰] 비추 후기 - 배워서 바로 쓰는 스프링 프레임워크
2020.08.19도서명 : 배워서 바로 쓰는 스프링 프레임워크 도서정보 : https://www.hanbit.co.kr/store/books/look.php?p_code=B6796857324 비추 예제 불친절 본문과 예제의 흐름 자연스럽지 못함 스프링에 대한 지식 정보는 문제가 없으나(일단 나는 스프링 지식의 깊이를 판단할 수 있는 수준이 아님) 인상쓰면서 보게 됨 나는 이 책을 샀으니 완독할거지만 추천하지는 않겠음 지식을 즐겁게 배울 수 있는 책을 고르기 바람
네이버 클라우드 DB서버에 공인IP 없이 외부 원격 접속하기
네이버 클라우드 DB서버에 공인IP 없이 외부 원격 접속하기
2020.08.14처음에는 네비어 클라우드 플랫폼(NCP)에서 말하는 포트포워딩 이 무슨 의미인지 몰랐었다. 메뉴 뒤적거리고, 가이드를 여러 개 읽어본 뒤에야 조금 감이 잡혔다. 네이버 클라우드 플랫폼(NCP) 구조 간략하게 구조에 대해서 설명하겠다. 네이버 공식 가이드 : https://docs.ncloud.com/ko/database/database-9-10.html 파란색 부분은 NCP 계정 내 사설 네트워크 영역이다. 처음 계정을 생성하면 NCP에서 제공하는 네트워크 영역이 할당된다. 예제에서는 106.x.x.x가 나에게 할당된 사설IP 영역이라고 보면 된다. 노란색 부분은 각 인스턴스에 대한 부분이다. 인스턴스는 NCP에서 제공하는 사설 네트워크 영역에 생성되고, 각 인스턴스별로 사설 네트워크 망에서 접근할 수 ..
AWS S3 버킷 생성 중 "버킷 이름이 이미 있습니다."
AWS S3 버킷 생성 중 "버킷 이름이 이미 있습니다."
2020.07.31Amazon AWS S3에 버킷을 생성했는데 이미 존재하는 이름이라고 메시지가 나왔다. 나는 버킷을 생성한 적이 없는데?! According to the AWS docs: An Amazon S3 bucket name is globally unique, and the namespace is shared by all AWS accounts. This means that after a bucket is created, the name of that bucket cannot be used by another AWS account in any AWS Region until the bucket is deleted. Someone else has already created a bucket with this name..
개발자가 서비스 운영 측면에서 커뮤니케이션 비용을 줄이는 방법
개발자가 서비스 운영 측면에서 커뮤니케이션 비용을 줄이는 방법
2020.07.28개발자는 회사 서비스에 주도적으로 기여할 수 있는 부분이 많다. 회사 내의 각 직군들은 각자의 방법으로 서비스에 기여하고 있지만, 개발자는 업무 특성상 시스템 내부에서 서비스를 바라볼 수 있기 때문에 다른 직군보다 기여할 수 있는 요소를 파악하기 쉽기 때문이다. 개발자가 서비스 운영 비용을 줄이는 데에는 다양한 방법이 있을 테지만, 이 포스팅에서는 '커뮤니테이션 비용' 측면에서 이야기해보려고 한다. 이걸 위해 엔지니어링 지식이나 엄청난 기술 역량이 필요하지는 않다. 토이 프로젝트에서도 작게 시도해볼 수 있는 부분이 많으니, 한번 생각해보자! 고객님, 잠시만 기다려주세요 김개발이 진행 중인 프로젝트에서 외부 API를 응답하는 데에 10초가 소요된다(!) User flow상 해당 API는 5분 내로 3~4번..