이론 정리 153

RBAC과 ABAC 기초 정리

RBAC(Role-Based access Control)이란 접근이나 작업에 대한 권한을 역할에 따라 결정한다. 여기서 역할은 보통 부서 , 위치 , 연공서열 , 담당 업무 등등... 이다. 역할이 정의되면 다음에 대한 권한을 할당할 수 있다. 액세스 무엇에 접근할 수 있을지? 운영 무엇을 읽고, 무엇을 작성할 수 있을지? 파일을 생성하거나 삭제할 수 있을지? 세션 시스템에 얼마나 오래 머무를 수 있을지? 로그인은 언제 작동하고 언제 만료되는지? ABAC(Attribute-Based Access Control) 접근이나 작업에 대한 권한을 사용자, 리소스 속성 또는 환경에 따라 결정한다. 권한을 다음과 같이 할당할 수 있다. 사용자 사람의 직급과 연공서열에 따라서 등등.. 리소스 속성 파일유형, 만든사람..

이론 정리 2022.08.18

네트워크 입문 001

네트워크 시작하기 물리적 연결부터 네트워크 모든 것의 이론적 기반이 되는 OSI7계층, 그리고 패킷이 실제로 전송되는 인캡슐레이션(Encapsulation, 캡슐화) 과정까지 간단히 알아본다. 네트워크 구성도 살펴보기 네트워크는 크게 서비스를 받는 입장과 서비스를 제공하는 입장으로 나뉜다. 서비스를 제공하는 입장에서는 네트워크에 접속한 구성원 수, 필요한 네트워크 속도에 따라 여러 상황을 고려해야 한다. 홈 네트워크 홈 네트워크의 구성은 어떤 인터넷 회선을 연결하더라도 같다. 홈 네트워크를 구성하는 데는 모뎀, 공유기, 단말 간에 물리적 연결이 필요하다. 무선 연결은 무선 랜 카드와 무선 신호를 보낼 수 있는 매체(공기)가 필요하다. 유선 연결은 유선 랜 카드, 랜 케이블이 플요하다. 프로토콜 네트워크에..

Golang의 포인터

포인터 포인터는 C나 C++에서 지원하는 친구인데, Go도 이걸 지원한다. 참고로 java, python, JS등에서도 포인터를 쓰고는 있는데, 이걸 개발자가 직접 쓰는게 아니라 암묵적으로 내부에서 사용하는 것이다. 포인터는, 메모리 주소를 값으로 갖는 타입이다. var a int var p *int p = &a // a의 메모리 주소를 포인터 변수 p에 대입이거는 var p가 int타입의 메모리 주소값을 값으로 가지고 있다는 것이고, a의 메모리 주소를 p가 저장한다. *p = 20 이건 p가 a의 주소를 가지고 있었는데, 그 공간의 값을 20으로 넣어라 라는 것이다. 이렇게 되면 a의 값이 20이 될 것이다. 여러 포인터 변수가 하나의 변수를 가리킬 수 있다. package main import "f..

Golang의 구조체

구조체 여러 필드를 묶어서 사용하는 타입 구조체 선언 type 타입명 struct { 필드명 타입 ... 필드명 타입 }새로운 type을 선언하겠다고 한 뒤에 타입명 선언, 이후 구조체(struct)를 선언하면 된다. ex) type Student struct { Name string Class int No int Score float64 }var a Student 이후 a라는 변수가 구조체 Student타입이라고 선언해서 사용해줄 수 있다. 구조체 변수 초기화 var house House 모든 필드값이 기본값으로 초기화된다. var house House = House{"경기도 군포시", 50, 10, "아파트"} var house House = House{ "경기도 군포시", 30, 10, "아파트",..

Golang의 기초

Go언어에 관하여 Go의 역사 GO언어는 2009년에 Google에서 만들어진 오픈 소스 프로그래밍 언어이다. 그리고 GO는 UTF-8을 기본 문자로 갖는다. Go의 특징 pakage Go는 1개의 main package와 여러 개의 다른 package를 가지고 있다. 원하는 기능을 가진 package를 가져와서 사용하면 된다. main은 시작점이기 때문에 따로 설정해 줄 수 없고 단 한개만을 사용한다. fmt는 function의 약자이다.(un -> m) fmt는 함수를 정의하기 위해 사용한다. 변수 변수란 값을 저장하는 메모리 공간을 가리키는 이름이다. 값을 저장하는 공간은 크게 하드디스크, memory 두개로 나뉜다. 하드디스크는 느리지만 프로그램이 종료되어도 데이터가 유지된다. memory는 빠르..

Golang - 고랭 이란??

프로그래밍 언어 프로그램이란? 원하는 명령을 원하는 순서대로 실행될 수 있도록 적어 놓은 문서를 뜻한다. 프로그래밍은 어떠한 명령을 실행할 때에 결국 컴퓨터 언어로 실행하게 된다. 정적 컴파일 언어, 동적 컴파일 언어 이 컴퓨터 언어로의 변환 시점에 따라 정적 컴파일 언어와 동적 컴파일 언어로 나뉘게 된다. 정적 컴파일 언어 C, C++, Go 정적 컴파일 언어는 Code를 실행하기 전에 미리 기계어로 변환시킨다.(실행 파일 생성) 이 방식의 장점은 미리 기계어로 변환시켜두었기 때문에 한번 변환하게 되면 속도가 빠르게 사용할 수 있다. 동적 컴파일 언어 JS, python 등등.. 추가로 Java가 동적 컴파일 언어라고 나와있어서 이상해서 찾아 보았는데, java는 동적/정적의 특성을 모두 가지고 있는 ..

컬렉션 페치조인과 페이징 하기(feat. batch size)

디프만 프로젝트에서 댓글 관련 API중 하나를 담당했는데, 해당 내용은 어떤 맥주를 통해 이곳에 작성된 모든 기록들을 받아오고, 동시에 저장된 맛(최대 3개)를 가져와 보여준다. 그리고 여기 페이징을 적용한다. 였다. 즉 이 경우 기록 -> 맛을 가져올 때 일대다 조인이 생기게 된다. 맥주를 통해 기록을 가져옴(여기서 N개의 기록을 가져옴) 해당 기록에 있는 맛태그를 가져옴(최대 3개의 맛태그) 맛태그를 통해 맛을 가져옴(다대일) 2, 3번의 로직을 수행할 때에 문제가 여러개 생기게 된다. 먼저 일대다 조인의 경우 페치 조인만으로 페이징을 할 수 없다. 알다시피 일대다 조인을 페치조인하면 동일한 데이터가 여러 번 출력되어 데이터가 뻥튀기된다!! 그리고 비효율적인 쿼리가 생성되게 된다. 하나의 기록마다 맛..

페치 조인과 그 한계에 관하여

실무에서 매우 중요하다. SQL의 조인 종류에 해당하지는 않는다. JPQL에서 성능 최적화를 위해 제공하는 기능이다. 연관된 엔티티나 컬렉션을 SQL한 번에 조회하는 기능. join fetch 명령어 사용 예를 들어 회원을 조회하면서 연관된 팀을 함께 조회하려 한다(SQL한번에) select m from Member m join fetch m.team -> SELECT M., T. FROM MEMBER M INNER JOIN TEAM T ON M.TEAM_ID=T.ID 아래와 같이 inner join을 사용하여 Team이 있는 member들을 가져온다고 가정한다면 JpaMain public class JpaMain { public static void main(String[] args){ EntityMa..

FetchType Eager vs Lazy

JPA에서는 여러 엔티티가 서로 연관되어 있을 때에, 하나의 엔티티에서 다른 엔티티를 두가지 방법으로 찾는데, 간단히 말하면 해당 엔티티를 검색할때 바로 찾거나(Eager) 혹은 해당 엔티티를 사용할 때 찾거나(Lazy) 로 나뉜다. 이 내용들에 관해서 알아보도록 한다. LAZY전략 FetchType.LAZY 지연 전략이라고도 한다. fetchType을 LAZY로 설정하면, 이 지연로딩의 대상이 된 쪽은 프록시 객체로 가져오게 된다. 그리고 이후에 해당 대상을 실제로 사용하려 할 때에 초기화가 진행된다. XToMany의 기본 속성이 LAZY로 되어 있다. Eager전략 FetchType.EAGER 즉시 전략이라고도 한다. fetchType을 EAGER로 설정하면, 로딩할 때에 모든 값을 join하여 가져..