책 인증: 사용자를 식별하는 것 인가: 자원에 대한 접근을 통제하는 것(특정 자원에 접근할 때 적절한 권한이 있는지 확인하는 과정) 어떤 API에 접근하려고 할 때, 인증과 인가를 위해 각 API에 대응되는 메소드마다 로직을 추가할 수 있지만 이러면 중복된 코드가 발생할 것임 따라서 모든 요청이 공통적으로 통과해야하는 서블릿 필터에 이 로직을 한 번만 구현해주면 들어오는 모든 요청을 지정한 조건에 따라 인증과 인가 절차를 진행할 수 있을 것 스프링 부트에서 시큐리티 스타터 의존성을 설치 시 관련 의존성들이 추가되고 자동설정들도 적용됨 그 중 하나로, 메모리에 인증에 필요한 사용자가 자동으로 등록됨. 아이디는 user, 비밀번호는 콘솔에 Using generated security password 라는 텍..
screen -X -S [session # you want to kill] quit
다음과 같은 명령어를 우분투 환경에서 실행하였을 때, conda activate test 다음과 같은 에러를 만났습니다. CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'. To initialize your shell, run $ conda init Currently supported shells are: - bash - fish - tcsh - xonsh - zsh - powershell See 'conda init --help' for more information and options. IMPORTANT: You may need to close and restart your shell af..
Swift에서 프로토콜은 다른 유형이 준수할 수 있는 인터페이스를 정의합니다. 프로토콜은 적합한 유형이 구현해야 하는 메서드, 속성 및 기타 요구사항을 정의할 수 있습니다. 프로토콜은 다른 객체 지향 언어의 인터페이스와 비슷하지만 스위프트에서 더 유연하고 강력하다. 프로토콜 지향 프로그래밍(Protocol-oriented programming)은 스위프트에서 프로토콜을 사용하는 코드를 설계하고 구성하는 방법이다. 프로토콜 지향 프로그래밍의 아이디어는 당신의 유형의 인터페이스와 요구 사항을 지정하는 프로토콜을 정의하는 데 초점을 맞춘 다음, 그러한 프로토콜을 사용하여 당신의 유형의 동작을 정의하는 것이다. 이렇게 하면 유형의 공통적인 측면을 캡처하는 프로토콜을 정의한 다음 이러한 프로토콜을 사용하여 프로토..
delegate 패턴은 특정 이벤트가 발생할 때 한 개체가 다른 개체로 정보를 보낼 수 있도록 하는 디자인 패턴입니다. 특정 이벤트가 발생할 때 한 개체(Observer)가 다른 개체(Subject)로부터 알림을 수신하기 위해 등록하는 옵저버 패턴을 구현하는 데 종종 사용됩니다. delegate 패턴의 작동 방식을 설명하는 데 도움이 되는 비유는 다음과 같습니다. 파티를 조직하고 있으며 일부 작업을 다른 사용자에게 위임한다고 가정합니다. 여러분은 파티에서 친구에게 DJ와 음악 연주를 부탁할 수도 있고, 다른 친구에게 파티에서 사진작가와 사진을 찍어달라고 부탁할 수도 있습니다. 이 경우 사용자는 "주체"이고 친구는 "위임자"입니다. 파티에서 음악이 재생되기를 원하고 사진이 찍히기를 원하지만 이러한 작업이 ..
xcode 14 업데이트 이후 pod init 에러 문제 상황 1) pod init을 실행할 때, 2) Podfile이 생성되기를 기대했지만 3) 다음과 같은 에러가 발생하였음 RuntimeError - [Xcodeproj] Unknown object version (56). /opt/homebrew/Cellar/cocoapods/1.11.3/libexec/gems/xcodeproj-1.21.0/lib/xcodeproj/project.rb:228:in initialize_from_file' /opt/homebrew/Cellar/cocoapods/1.11.3/libexec/gems/xcodeproj-1.21.0/lib/xcodeproj/project.rb:113:inopen' /opt/homebrew/Ce..
vi/vim 안에서 :source ~/.vimrc를 입력해서 해결했다
지은이: 마크 랜돌프(Marc Randolph) 원제: THAT WILL NEVER WORK(2020) 쪽수: 468 옮긴이: 이선주 출판사: Denstory 출간일: 2020-05-01 ISBN: 9791185716923 정가: 18,000원 판매가: 16,200원(알라딘) 작년의 끝과 올해의 시작을 함께 한 책. 삼성, 현대, 디즈니, 애플, 테슬라와 같이 굴직한 대기업 혹은 그 창업주들의 창업 스토리를 담은 책은 굉장히 많다. 월터 아이작슨이 쓴 혹은 애슐리 반스가 쓴 등이 대표적이다. 여태까지 이런 창업 스토리를 재구성해 쓰여진 책을 여러 권 읽어 보았지만, 이 책은 다른 책들에 비해 손에서 놓고 싶지 않게끔 하는 여러가지 특징들이 있었다. 몇 가지를 꼽아보자면, 책을 정말 솔직하게 썼다. 책을 ..
웹이 왜 이런 스펙을 가지게 되었는지 (HTTP, URI, HTML) 이 스펙을 가지고 웹 서비스를 설계하는 방법 API: 프로그램을 위한 인터페이스이기 때문에 프로그램에서 다루기 쉬운 데이터 포맷 사용 Ex. XML, JSON API 로서의 웹: 웹 서비스 URI: HTML로 표현되는 온갖 정보를 가리킴 URI ↔ HTTP ↔ HTML — 심플함 웹 하이퍼미디어 Memex → Xanadu → HyperCard 문제점 단방향 링크 링크 단절 위험 버전 관리 못함 트랜스클루젼 지원 안 함 분산시스템 중앙 집중 → RCP(분산 시스템 실현 위한 기술) → CORBA, DCOM(RPC에서 객체중심으로) 문제점 성능 프로그래밍 언어 혼재, 데이터 형 변환 버전업 호환성 부하 분산 이를 웹으로 해결 팀 버너스 리..
모든 것은 시스템의 일부 - 맥락을 고려하자 기술 습득의 드라이퍼스 모델: 초보자 -> 전문가가 되어가는 5단계 과정 1단계: 규칙을 단순히 따름 2단계: 규칙을 조금씩 벗어나지만, 여전히 큰 그림에는 관심없음 3단계: 문제를 스스로 찾아서 해결하는 단계 4단계: 큰 그림을 보려고 노력하고, 자가 교정을 시도하고, 다른 사람의 경험으로부터 배우는 것이 가능(격언의 현실 적용 능력) 5단계: 더 나은 방법을 갈구하고, 직관을 활용한다. 중요한 것과 그렇지 않은 것을 구분하는 능력 규칙 -> 직관 모든 것을 고려하기 -> 중요한 것에 집중하기 유리되어 관찰하기 -> 시스템의 일부라는 것을 인식하기 R&D: Rip off and Duplicate 실습을 통한 진정한 경험 사려깊은 연습 + 10년 = 전문가 사..
인덱스 - 테이블 안의 데이터를 쉽고 빠르게 찾을 수 있도록 만든 데이터베이스 객체 - 책에서 원하는 내용이 설명된 페이지를 목차나 색인을 통해 쉽게 찾는 것과 같은 원리 필요성 - 실제 데이터베이스 안의 테이블 데이터가 저장되는 곳은 디스크와 같은 보조기억장치 - SQL 실행 시 디스크로부터 필요한 데이터를 찾음 - 디스크 안의 데이터베이스 파일로부터 필요한 블록을 반복해서 주기억장치로 읽어오게 되는데, 문제는 디스크 접근 속도가 주기억장치 접근 속도보다 훨씬 느리다는 점 - 디스크 접근 횟수를 줄여 검색 속도를 높이기 위해 인덱스 사용 인덱스의 구조 - 대부분의 DBMS는 B-트리 구조의 인덱스 지원 - 루트노드, 중간 노드, 리프노드로 구성 - 리프노드들이 같은 레벨에 존재하는 균형 트리 - 리프 ..
정규화와 이상 현상 - 잘못된 스키마 정의는 원하지 않는 여러 이상 현상을 발생 - 잘못된 스카 정의를 바로 잡는 데이터베이스 설계 방법이 정규화 정규화의 필요성 - 잘못된 데이터베이스 설계는 여러 부작용 - 데이터 관리가 어려워지고, 일관성/무결성 훼손 - 부작용은 대부분 불필요한 데이터 중복 때문에 발생 - 좋은 설계는 데이터 중복을 최소화하는 형태로 릴레이션 스키마를 정의하는 것 이상 현상 - 릴레이션 처리 과정에서 불필요한 데이터 중복으로 인해 발생하는 부작용 - 이는 잘못된 릴레이션 스키마 설계 때문 종류 1) 삽입 이상 - 불필요한 데이터를 함께 입력하지 않고서는 원하는 데이터만 입력하는 것이 불가능한 상황 2) 갱신 이상 - 중복된 속성 값 중 일부가 수정되지 않을 경우 데이터 불일치가 발생..
트랜잭션 - 한 묶음으로 처리되어야 하는 SQL 문들의 집합 - 트랜잭션에 속한 SQL 문들은 모두 정상처리 되어야 트랜잭션이 완료될 수 있음 - 트랜잭션의 실행 결과를 데이터베이스에 최종적으로 반영하는 것을 커밋이라 함 - 실행 결과를 반영하지 않고, 취소하여 원래 상태로 되돌리는 것을 롤백이라 함 - 커밋되기 전까지는 데이터베이스에 완전하게 반영되었다고 할 수 없는 임시 실행 결과일 뿐 필요성 - 여러 사용자의 동시 접근성을 제어하고 장애 발생 시 안정적으로 데이터를 복구하기 위해 트랜잭션의 4가지 특성(ACID) 1) 원자성(Atomicity) - 트랜잭션 안의 SQL 명령문을 모두 성공적으로 실행하여 완료하거나 아니면 모두 철회하여 무효화해야함을 의미 2) 일관성(Consistency) - 데이터..
내장 함수 - SQL 명령문 안에서 검색 결과를 반환하거나 원하는 결과로 가공하는 SQL 함수 사용 가능 - DBMS가 제공하는 내장 함수와 사용자가 직접 정의하는 사용자 정의 함수로 구분 MySQL 주용 내장 함수 표 저장 프로시저 - 미리 작성하여 데이터베이스 안에 저장한 SQL 문의 묶음 - 독립된 프로그램으로 데이터베이스 안에 하나의 객체로 저장 - 보통 DBA가 데이터베이스 관리를 수행하기 위해 사용하는 기능들이 DBMS에 의해 저장 프로시저로 제공됨 - 직접 저장 프로시저를 정의하면, 복잡한 조건의 SQL 작업을 함수처럼 인자만 전달해서 실행 가능 - 최적화된 SQL문을 미리 데이터베이스에 작성해둘 수 있고, 복잡한 SQL문을 전달할 필요가 없어 네트워크 부하가 줄어들며 여러 응용 프로그램간의..
뷰 - 실제 데이터를 저장하지 않는 가상 테이블 - 사용자에게는 똑같은 테이블로 보이지만 CREATE TABLE 명령어로 만들어진 물리적인 기반 테이블과는 다름 - 테이블이 전체 조직의 관점에서 여러 사용자 요구를 수용하여 최적의 저장단위로서 만들어졌다면 뷰는 개인 관점에서 필요로 하는 접근 구조로서 자유롭게 정의할 수 있음 - 데이터베이스에 저장된 테이블 구조를 각 사용자별로 서로 다르게 볼 수 있도록 한다 - 뷰는 주로 기반 테이블로부터 정의되지만 또 다른 뷰를 기반으로도 정의될 수 있음 장점 1) 편의성, 재사용성 - 복잡한 질의문 작성이 쉽고 간단해짐 - 조인, 중첩 질의 등을 사용하여 뷰를 미리 생성하면, 복잡한 SQL문을 다시 작성할 필요가 없음 - 작성 빈도가 높거나 빈번하게 참조되는 검색 ..
1. 관계 대수 연산 - 릴레이션을 내부적으로 처리하기 위한 연산들의 집합 - SQL 데이터베이스 언어의 이론적 토대를 제공 - 모든 연산의 적용 대상도 릴레이션이고, 연산 결과 또한 릴레이션 - 2개의 그룹으로 분류; 수학 집합 이론에 기반을 둔 집합 연산 그룹과 관계형 데이터 모델을 위해 추가된 관계 연산 그룹 1.1 집합 연산 - 일반적인 수학의 집합 연산과 의미와 기능이 같음 - 합집합, 교집합, 차집합 연산은 두 입력 릴레이션이 서로 합병 가능(union compatible)해야 함 - 합병 가능하려면, 두 릴레이션의 차수가 같고 대응하는 속성의 순서와 도메인이 같아야 함 - 속성 이름은 서로 달라도 되며 연산 적용 후 결과 릴레이션의 속성 이름은 첫번째 릴레이션의 속성 이름을 따름 합집합 - ..
1. 관계형 데이터 모델 1.1 데이터 모델의 구성 요소 - 데이터 모델은 데이터 구조와 연산, 제약 조건와 같이 3가지 요소로 구성된다. 데이터 구조 - 데이터를 어떤 형태로 저장하는지를 표현 연산 - 데이터를 어떤 방식으로 처리하는지를 표현 제약 조건 - 데이터 구조를 지정할 때의 구조적 제약 사항과 연산을 적용할 때의 행위적 제약 사항을 표현 1.2 관계형 데이터 모델의 구성 요소 - 관계형 데이터 모델은 테이블 형태의 릴레이션을 통해 데이터를 저장하고 데이터 간의 관련성도 표현 - 데이터 구조는 릴레이션, 연산은 관계 대수, 제약 사항은 무결성 제약 조건으로 명세 2. 관계형 데이터 구조 2.1 관계형 데이터 구조의 개념 - 릴레이션 - 1970년대 IBM 연구소의 E. F. Codd가 제안한 데..
데이터베이스 사용자의 종류와 역할 데이터 언어의 종류 데이터베이스 관리 시스템의 구성요소와 기능 데이터 모델의 종류와 DBMS와의 관계 3단계 데이터베이스의 구조와 데이터 독립성 1. 데이터베이스 시스템의 구성요소 - 데이터베이스, 사용자, 언어, DBMS, 서버, 모델 등 6가지로 구성 1.1 데이터베이스 시스템의 개념 데이터베이스와 DBMS를 포함. 사용자, 데이터베이스에 접근하기 위해 사용하는 데이터 언어, 데이터베이스에 대한 다양한 접근 요청을 효율적으로 실행하는 데이터베이스 서버까지 추가적으로 포함하는 포괄적 개념 1.2 데이터베이스 사용자 접근 목적에 따라 분류 일반 사용자 - end user 응용 프로그래머 - 응용 프로그램을 개발할 목적으로 데이터베이스에 접근하는 사용자 유형 데이터베이스 ..
정보시스템의 유형과 발전 과정 데이터베이스 시스템의 장단점 데이터베이스의 정의와 특성 1. 데이터베이스와 정보 시스템 정보 시스템과 그 안의 데이터베이스와의 상호 작용 일상 속 예시 1.1 데이터와 정보 데이터란? 정보란? 상대적 개념 1.2 정보 시스템의 발전 정보시스템의 구조 데이터를 수집, 저장, 처리 가공, 의사 결정에 필요한 정보 생성 정보 시스템의 발전 과정 파일 정보 시스템 -> 데이터베이스 시스템 전통적 파일 정보 시스템의 문제점 응용 프로그램마다 서로 다른 데이터 파일 사용. 따라서 각 개별 데이터 파일 안의 데이터에 대한 검색, 삽입, 갱신 및 삭제 코드를 직접 개발해야했음 이에 따른 문제점 1) 데이터의 종속성 증가 - 각 응용 프로그램 속에 데이터 파일의 저장 방식이나 저장 데이터의..
JDK 설치 방법 2가지 1. Oracle 홈페이지 아래의 주소에서 다운로드 받는다. 현재 Apple Silicon 버전이 나와있지 않기 때문에 OpenJDK를 통해 설치하는 것을 추천한다. www.oracle.com/kr/java/technologies/javase-downloads.html 2. OpenJDK https://www.azul.com/downloads/?os=macos&architecture=arm-64-bit&package=jdk Downloads Download Azul Platform Prime Azul Platform Prime extends Core, adding unique Azul innovations to improve the runtime characteristics of..
최근 맥북 M1을 쓰다가 Monterey로 OS를 업그레이드 해서 쓰던 중 유독 Visual studio code를 사용하기 시작하면 노트북이 뜨거워지고 배터리가 급감하는 현상이 발생하였다. 원인을 추적하기 위해 먼저 프로그램 별 배터리 사용률을 확인하였다. 아래처럼 Visual studio code가 주된 원인으로 보였다. 그래서 M1 + VS code + batter drain이라는 키워드로 구글링을 하다가 많은 사람들이 같은 현상을 겪는 것을 확인하였다. 주된 문제 해결 방법으로 거론된 것은 아래와 같다. 1. VS code가 Apple silicon 버전으로 설치되어 있는 지 확인한다. 그렇지 않다면 아래와 같이 VS code 홈페이지에 접속하여 Apple silicon로 재설치한다. 2. VS ..
데카르트 곱을 계산할 때 사용하는 itertools 라이브러리의 product 함수에 대해 예시를 통해 알아본다. 아래와 같이 test 변수에, 튜플의 리스트를 담았다. 이후 product 함수를 통해 파라미터로 test 변수를 언패킹하여 전달하여 그 결과를 line by line으로 출력해보면 다음과 같다. from itertools import product test = [(1, -1), (1, -1), (1, -1)] for elem in product(*test): print(elem) (1, 1, 1) (1, 1, -1) (1, -1, 1) (1, -1, -1) (-1, 1, 1) (-1, 1, -1) (-1, -1, 1) (-1, -1, -1)
Decision Tree 분류와 회귀, 다중 출력도 가능한 알고리즘이다. 매우 복잡한 데이터셋도 학습할 수 있다. 강력한 머신러닝 알고리즘 중 하나인 랜덤 포레스트의 기본 구성 요소이기도 하다. 확률 추정 먼저, 어떻게 결정 트리가 예측을 만들어내는지 위 그림을 통해 보자. 새로 발견한 꽃의 품종을 분류하려고 한다고 하자. 먼저 루트 노드에서 시작하여 그 꽃의 길이가 2.45보다 짧은 지 검사한다. 만약 짧다면 왼쪾 노드로 이동한다. 이 경우 자식 노드가 없는 리프 노드이므로, 추가적인 검사를 하지 않고 노드에 있는 예측 클래스를 보고 setosa를 예측 값으로 내뱉는다. 노드의 구성 요소를 보면 gini라는 것이 있다. 이는 지니 불순도를 말하는 것이고, 그 노드의 불순도를 측정한다. 한 노드의 모든 ..
소프트맥스 회귀(Softmax regression) 로지스틱 회귀 모델 사용 시 1 혹은 0, 즉 이진 클래스가 아니라 다중 클래스를 예측하고 싶다면 여러 개의 로지스틱 회귀를 연결하면 되지만 소프트맥스 회귀(혹은 다항 로지스틱 회귀)를 사용하여 다중 클래스를 예측할 수 있다. 확률 추정 입력 특성의 가중치 합을 구한 후(각 클래스에 대한 소프트맥스 점수), 그 결과에 소프트맥스 함수(정규화된 지수 함수)를 적용하여 각 클래스의 확률을 추정한다. 각 클래스 k에 대한 소프트맥스 점수 $$s_k(x) = (\theta^{k(k)})Tx$$ 소프트맥스 함수 $$\hat p_k = \sigma(s(x))_k = \frac {exp(s_k(x))} {(\sum exp(s_j(x)))}$$ 예측은 다음과 같이 추..
로지스틱 회귀(Logistic Regression) 분류에서 사용되는 회귀 알고리즘이다. 샘플이 특정 클래스에 속할 확률을 추정하는 데 사용된다. 확률이 50%가 넘으면 해당 클래스에 속한다고 예측한다. 확률 추정 입력 특성의 가중치 합에 편향을 더한 후, 그 결과에 로지스틱 함수를 적용한 결과 값을 출력한다. $$\hat p = h(x) = \sigma(\theta^Tx)$$ 로지스틱은 0과 1 사이의 값을 출력하는 시그모이드 함수이며, 아래와 같다. $$\sigma(t) = \frac {1}{1+exp(-t)}$$ $${\hat p}$$를 추정하면 이에 대한 에측 값 $$\hat y$$를 다음과 같이 구할 수 있다. $$ \hat y= \begin{cases} 0,\;if\;\hat p