전체 글(64)
-
싱글톤 패턴(Singleton pattern)
싱글톤 패턴이란, 특정 클래스가 프로그램 전체에서 오직 하나만 생성되도록 보장하는 패턴입니다. 또한 전역적으로 하나의 인스턴스를 유지하며, 리소스의 중복사용을 방지하고, 전역적인 접근 지점을 제공합니다. 싱글톤패턴을 사용하기 위해선 몇 가지 사항을 고려해야 합니다. 스레드 안전성: 멀티스레드 환경에서 싱글톤 인스턴스의 생성과 접근은 스레드 안전하게 관리되어야 합니다. 예외 처리: 초기화 과정에서 발생할 수 있는 예외 사항들을 적절히 처리해야 합니다. 자원 관리: 싱글톤으로 생성된 인스턴스가 사용하는 자원(파일 핸들, 네트워크 연결 등)은 적절히 관리하고 해제해야 합니다. 프로그램을 작성하다 보면 하나만 가지고 있어도 괜찮은 요소들이 있어서 싱글톤 패턴을 활용하여 리소스를 크게 줄일 수 있습니다. 아래 예..
2023.11.21 -
SSL/TLS 와 mixed contents error
💡 웹사이트와 사용자 사이의 통신을 암호화하는 보안 프로토콜 SSL/TLS 는 개인 정보와 민감한 데이터를 안전하게 전송하기 위해 사용합니다. SSL/TLS? SSL(Secure Sockets Layer)은 웹 통신의 보안을 위해 사용되는 프로토콜로, 1996년에 SSL 3.0이 발표된 이후 업데이트되지 않았습니다. SSL은 알려진 여러 취약점이 있으며, 이로 인해 보안 전문가들은 SSL의 사용을 중단하고 TLS(Transport Layer Security)로 전환할 것을 권장하고 있습니다. 🛑 SSL이 취약한 공격 POODLE (Padding Oracle On Downgraded Legacy Encryption) 공격: SSL 3.0의 취약점을 이용한 공격으로, 암호화된 통신을 해독할 수 있습니다. D..
2023.11.06 -
도커 컨테이너에서 호스트 파일 접근 권한 문제 (docker uid)
Issue 도커 컴포즈로 도커 실행시 File 권한 관련 에러가 발생 원인 도커에서 volumes 로 로컬(리눅스) 파일들과 매칭을 시켜 사용 도커에서 로컬 (리눅스) 파일로 접근시 기타 유저로 권한이 잡힘 컨테이너 내부에서 UID 확인시 1000으로 확인 💡 리눅스 커널을 공유하는 도커의 시스템 특성으로 인해 발생한 문제 ( 아래의 오른쪽 그림 ) 해결 해야할 문제 리눅스에서 777 권한을 주지않고 문제를 해결해야함 해결 방법 1. 볼륨의 연결을 끊는다 . 도커에서는 프로덕션 레벨에서 볼륨의 연결을 끊고 배포하는 것을 권장한다. 💡 프로덕션 레벨의 환경에서 Docker 컨테이너를 사용할 때 볼륨을 끊고 배포하는 접근 방식을 선택하는 주된 이유는 보안과 데이터 격리 2. 도커를 실행할 때 user 를 지..
2023.09.15 -
DB 인덱스에서 Hash보다 B-TREE 를 사용하는 이유
기본적으로 Hash Table은 탐색속도가 빠른 자료구조에용 그런데 왜 DB 인덱스에서는 Hash 가 아닌 B-TREE 구조를 사용할까용? B-Tree (Balanced Tree) 의 탐색 시간 복잡도는 O(logN) 에용 인덱스에 일반적으로 사용되는 자료구조는 B+TREE 구조에용 Hash Table 해시 테이블은 연관배열 구조를 이용해 key 에 value 를 저장하는 자료구조에용 연관배열구조 = key와 value 가 1:1 로 매칭되어있는 자료구조, key를 통해 value를 도출할수있음 해시 테이블의 Search(검색) 의 시간 복잡도는 기본적으로 O(1)이다. KEY에 매칭되는 VALUE 를 바로 찾기 때문이다. 그런데 이렇게 탐색시간이 빠른 Hash가 왜 인덱스에서 사용 되지 않을까용? 해시..
2023.01.31 -
[DB] Index, B-Tree , B+Tree
Index 데이터베이스에서 인덱스란 테이블에 대한 검색성능 속도를 높여주는 자료 구조입니다. 특정컬럼에 인덱스를 생성하면, 해당 컬럼의 데이터들을 정렬하여 별도의 메모리공간에 데이터의 물리적 주소와 함께 저장 됩니다. 인덱스의 단점으로는 항상 최신의 데이터를 정렬된 상태로 유지해야 빠르게 값을 탐색할수있기에 INSERT, DELETE, UPDATE 구문이 실행 된다면 계속해서 정렬을 해줘야 하고 이로인한 부하가 발생합니다. 때문에 인덱스에서는 이런 부하를 최소화 하기위해 데이터 삭제라는 개념에서 인덱스를 사용하지않음이라는 작업을 합니다. INSERT = 새로운 데이터에 대해 인덱스를 추가합니다. UPDATE = 기존 인덱스를 사용하지않음 처리 후, 업데이트 된 데이터에 인덱스를 추가함. DELETE = ..
2023.01.27 -
[Leetcode] 1528. Shuffle String
Problem 이번 문제는 s 라는 문자열이 주어지고 indices에 s 문자열 각자리의 알맞는 인덱스가 들어가있고 정렬해서 return 해주는 문제이다. 나의 풀이 class Solution: def restoreString(self, s: str, indices: List[int]) -> str: res = '' zipped = sorted(zip(indices, s), key=lambda x: x[0]) for idx,char in zipped: res += char return res zip으로 두개를 묶고 , 인덱스를 기준으로 정렬한 뒤에 res에 더해주고 return 해 주었어용 다른 사람의 풀이 두가지를 보자 class Solution: def restoreString(self, s: str..
2023.01.12