분류 전체보기
![[도메인 주도 설계 철저 입문] 10. 데이터의 무결성 유지하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FT8Hd5%2FbtrAFMyNZiS%2FAAAAAAAAAAAAAAAAAAAAABdvr-ARAMd2zomgSfLMQJIXcXS8P4tXGiSbaju3pLb2%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DSbLatnDTxT7%252B8rfSDySSjpU3wHs%253D)
[도메인 주도 설계 철저 입문] 10. 데이터의 무결성 유지하기
무결성이란 : 정보가 서로 모순이 없고 일관적이라는 뜻. 무결성 위배되는 경우 : 사용자 중복 검사를 시행할 때, 사용자 A 가 회원 등록 시도 => 중복 검사 => 중복되지 않음! (사용자 A 의 회원 등록이 db 에 적용되기 전) 사용자 B 가 동일한 회원 등록 시도 => 중복검사 => 중복 안됨! 사용자 A 의 회원 정보 저장 사용자 B 가 A와 동일한 회원 정보 저장 데이터 무결성을 지키는 방법 1. 유일 키 제약 : 가장 강력한 수단이지만, 코드 상으로 드러나지 않고 비지니스 코드가 db 에 의존적이라는 단점이 존재. 트랜젝션과 함께 사용하는 것이 좋다. 2. 트랜젝션 1. db 트랜젝션 객체 이용 : 아래 코드는 트랜잭션 코드를 통해 무결성을 확보한다. 하지만 이 경우에는 인프라 객체인 con..
![[Python 뜯어보기] 4. WSGI 와 Python](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FIBEFV%2FbtrAGfU6T0V%2FAAAAAAAAAAAAAAAAAAAAAAHgo1nR9-eSZA9RNYw3mJqkGiL1giVxTzbEqZTXevRq%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DZL%252FxLqC6%252FtWfW0ZMOCmgyKkOjow%253D)
[Python 뜯어보기] 4. WSGI 와 Python
1. WSGI 란? "웹 서버 게이트웨이 인터페이스"라는 의미로, WS 와 WAS 사이의 인터페이스를 제공한다. (1) WS 를 변경해야할 일이 있거나 추가해야 할 때, (2) 또는 반대로 다른종류의 WAS 를 추가해야하거나 변경해야할 때 등의 경우에 ws 와 was 사이의 추가적인 설정을 하지 않아도 손쉽게 갈아낄울 수 있도록 돕는듯하다. (추상화 수준이 높은 것을 의존한다는 제어의 역전 개념과 비슷한듯) (제어의 역전 개념은 이전 포스팅(https://letsmakemyselfprogrammer.tistory.com/63) 참고) 2. UWSGI - wsgi 의 수많은 종류 중 하나. (gunicorn, Bjoern, CherryPy 등). - 다양한 언어 지원 - unix 소켓을 지원 3. WSGI..
![[Python 뜯어보기] 3. 파이썬 Thread 와 GIL](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbiErUr%2FbtrwLiiATtp%2FAAAAAAAAAAAAAAAAAAAAAKsdyfdlCv4NGgPMFdHY_QSsKCRJA8DAdbK9MFw66cPT%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DsbasVapzCzUuSh9RJG81OcpEVo8%253D)
[Python 뜯어보기] 3. 파이썬 Thread 와 GIL
자료 출처: http://www.dabeaz.com/python/UnderstandingGIL.pdf 1. Thread Execution Model (with GIL) - 파이썬을 실행시키면 => 하나의 프로세스, 하나의 인터프리터 - 파이썬 쓰레드는 real system(os) thread 이다.(unix 계열 posix thread, window 계열 window thread.) 완전히 os 가 관리한다. - GIL(global interpreter lock): 한 프로세스에는 여러 스레드가 존재할 수 있는데, 한 스레드가 인터프리터를 사용할 때 다른 쓰레드는 인터프리터를 사용할 수 없다. (인터프리터를 사용한다는 말은 파이썬 코드를 해석->실행시킨다는 말) - 즉 한 스레드가 cpu bound jo..
[Django 웹프로젝트] 11. 인메모리 캐시 사용해도 될까? 심층분석 - (2) uwsgi 와 python
[Django 웹프로젝트] 11. 인메모리 캐시 사용해도 될까? 심층분석 을 위한 분석 게시글 2편입니다. uWSGI 에 의해 특정 웹 요청이 특정 pid 로 연결된다고 하면, 인메모리 캐시를 사용해도 되므로 웹 요청에 대한 load balancing 방식을 알아보기 위해 wsgi 를 알아보기로 했다. (아래에 정리했음) [Python 뜯어보기] 4. WSGI 와 Python 1. WSGI 란? "웹 서버 게이트웨이 인터페이스"라는 의미로, WS 와 WAS 사이의 인터페이스를 제공한다. (1) WS 를 변경해야할 일이 있거나 추가해야 할 때, (2) 또는 반대로 다른종류의 WAS 를 추가해야하 letsmakemyselfprogrammer.tistory.com
![[Django 웹프로젝트] 11. 인메모리 캐시 사용해도 될까? 심층분석 - (1) 파이썬 스레드, GIL](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fv4OK0%2FbtrwDOH4xAA%2FAAAAAAAAAAAAAAAAAAAAAOQWrsJiOBD0QAATpJtVFxevxa1WfoZH6BW4YGkoH8py%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DrbrpSbcEQ63zI67fABEKkjWyIf0%253D)
[Django 웹프로젝트] 11. 인메모리 캐시 사용해도 될까? 심층분석 - (1) 파이썬 스레드, GIL
[Django 웹프로젝트] 11. 인메모리 캐시 사용해도 될까? 심층분석 을 위한 분석 게시글 1편입니다. 아래의 카테고리에 정리했습니다. [Python 뜯어보기] 3. 파이썬 Thread 와 GIL [Python 뜯어보기] 3. 파이썬 Thread 와 GIL [파이썬 쓰레드와 GIL] 굉장히 좋아보이는 자료 출처: http://www.dabeaz.com/python/UnderstandingGIL.pdf - 파이썬을 실행시키면 => 하나의 프로세스, 하나의 인터프리터 - 파이썬 쓰레드는 real system(os).. letsmakemyselfprogrammer.tistory.com
[SpringBoot] 6. ManyToMany 를 "일대다/다대일"로 풀어서 사용하기 (+ 영속성 전이 문제)
1. 배경 인가 시스템을 고민하면서, 수직적인 권한과 수평적인 권한을 분리했다. 수직적 권한 : (비회원->미승인회원->일반회원->회장단->회장->관리자) 수평적 권한 : 부서 (IT 부, 운영부, 총무, 홍보부 등) 수평적 권한을 처리하기 위해 Team 이라는 도메인을 추가하기로 했다. 지금 동아리 운영 상황을 보자면, 두 부서에서 동시에 활동하는 사람은 없지만 한 부서에서 다른 부서로 이동하는 경우, 중간에 임시로 동시 활동하는 경우 등이 있었고, 꼭 한 부서만 속해있으리라는 법은 없으니까. Member 와 Team 을 다대다 관계로 설정했다. 2. 다대다의 문제 jpa 에서 ManyToMany 관계를 지원하고 있어서, 해당 어노테이션을 사용해 풀어내면 정말 쉽다. 하지만 두 엔티티 사이의 관계가 그..
![[Django 웹프로젝트] 11. 인메모리 캐시 사용해도 될까? 심층분석](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FOBjHr%2FbtrwKGa9YAD%2FAAAAAAAAAAAAAAAAAAAAAEmqwAV2RtU8N3IPXhOY2ntjVpdduhSyOtvl0xKf1UU7%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DJVHvNAP64ItZ7Zf8zW8oTulWCx0%253D)
[Django 웹프로젝트] 11. 인메모리 캐시 사용해도 될까? 심층분석
[Django 웹프로젝트] 10. 호환성을 고려한 소셜로그인 버그 수정 (2022-03-14~15) (문제상황) - 소셜로그인을 통해서만 로그인이 가능하도록 구현되어있다. - OAuth2 인증 후 제공받는 사용자의 이메일 정보와, 회원가입 시 기재한 프로필 정보를 매핑해서 보관하고 있었다. - (로 letsmakemyselfprogrammer.tistory.com 위 작업 중, 소셜 계정 추가 연동 부분에서 보안처리를 변경할 때 했던 고민을 찾아봤다. 1. 상황 [기존 방식] - 단방향 md5 로 사용자id 를 암호화하여 넘김. => 복호화를 할 수 없으니 모든 사용자를 순회하면서 일치하는 확인했어야했다. [수정 방식] - key 를 이용하여 signature 를 생성하고 id 를 제외한 signatur..
[Java의 정석] 09. java.lang 패키지
모르는 것만 짧고 빠르게 정리한 노트입니다. 1.1 Object 클래스 hashCode() : 객체의 주소값을 이용해서 해시코드를 만들어 반환한다. str 클래스는 문자열 내용이 같으면 도일한 해시코드를 반환하도록 오버라이딩되어 있다 toString() : 클래스이름 + @해시코드 값이 기본으로 설정되어있다. clone() : 객체의 값을 복사한다.. 참조타입의 경우에는 주소값을 복사하므로, 얕은복사문제가 있다. Cloneable 인터페이스를 상속받아 오버라이딩해야한다. 1.2 String 클래스 생성자를 이용한 경우에는 항상 새로운 String 인스턴스가 생성된다. 리터럴은 클래스가 메모리에 로드될 때 미리 생성되어있다. 따라서 같은 리터럴로 초기화되는 변수들은 모두 같은 주소의 문자열 리터럴을 갖는다..