블로그

 집사

첫번째 발자국

'그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)'수강생 여러분께 하고 싶은 말외우려 하지 말고 이해해라 어렵다면 그림으로 풀어서 이해해라당장 이해하기 어렵다면 특징만 외우고 나중에 다시 공부하기이해를 했다면 기억도 오래 남고 특징들을 유추할 수 있다자료구조와 알고리즘이란?자료구조는 데이터가 어떤 구조로 저장되고 사용되는지를 나타낸다. (ex. int, float, 정적배열, 동적배열, 연결리스트 등)알고리즘은 어떤 문제를 해결하기 위한 확실한 방법이다.자료구조에 따라 알고리즘이 달라진다.어떤 구현을 할 때 하나의 자료구조가 하나의 알고리즘만을 사용할 수 있는건 아니다. 상황에 맞는 적절한 자료구조와 알고리즘을 적용할 수 있어야 한다.시간복잡도더 좋은 알고리즘이란 무엇일까? 이는 사용자의 요구에 따라 변한다. 보통 메모리, 속도로 구분되며 일반적으로 알고리즘의 속도를 성능의 척도로 사용시간복잡도란 특정 알고리즘이 어떤 문제를 해결할 때 걸리는 시간이며 사용자의 PC성능에 따라 시간 측정은 달라질 수 있으므로 코드에서 성능에 많은 영향을 주는 것을 찾아 실행 시간을 예측하는 것이다.시간복잡도는 최악의 경우를 표현하는 빅 오 표기법을 사용한다.빅 오 표기법은 가장 큰 영향을 미치는 항으로만 표현한다.보통 자료구조의 시간복잡도는 평균, 최악의 경우를 생각한다.자료구조배열연속된 메모리 공간을 할당 받는다.운영체제는 배열의 시작 주소만 기억한다.순차적으로 메모리가 적재되고 운영체제가 배열의 시작 주소를 알기에 인덱스를 통해 접근 가능하다.삽입, 삭제 시 공간이 부족하거나 중간에 있는 요소를 삭제 시 데이터에 대한 이동이 필요해서 오버헤드가 많이 발생한다.인덱스 참조 O(1) / 삭제, 삽입 성능 O(n)연길리스트배열의 단점을 해결하기 위해 만들어진 자료구조저장하려는 데이터들을 메모리 공간에 분산하여 할당하고 이 데이터들을 서로 연결이는 노드라는 것을 만들어 수행노드의 구조는 데이터를 담는 변수 하나와 다음 노드를 가리키는 변수 하나이러한 노드끼리 연결시킨것을 연결리스트라 한다.연결리스트는 첫 노드의 주소만 알고 있으면 다른 모든 노드에 접근 가능.삽입, 삭제시 다음 가리키는 노드만 바꿔주면 된다. / 삽입, 삭제 O(1)메모리 공간이 분산되어 있기에 인덱스 참조가 불가능 즉, 모든 노드 순회해야함 / 참조 O(n)스택First In Last Out (FILO)먼저 들어간 데이터가 나중에 나오는 자료구조삽입, 삭제, 참조 O(1) / 맨 위에 요소만 가능연결리스트, 배열 등으로 구현 가능사용 예제명령 / Undo, Redo문법 괄호 검사큐와 병행하여 회문 검사큐First In First Out (FIFO)먼저 들어간 데이터가 먼저 나오는 자료구조삽입, 삭제, 참조 O(1) / 맨 앞에 요소만 가능이중 연결리스트, 배열등으로 구현 가능사용예제대기열 / 마트 계산대, 게임 큐, 식당 줄 등운영체제 프로세스 작업 요청 / FIFO 스케줄링덱데이터의 삽입과 제거를 Head와 Tail 양쪽에서 자유롭게 할 수 있는 자료구조양방향 끝 삽입 삭제, 참조 O(1) / 가운데 O(n)해시테이블Key와 Value로 이루어진 자료구조Key를 이용한 해시함수를 통해 데이터를 저장만약 해시 충돌이 발생할 경우, 해당 인덱스의 연결리스트에 삽입해시함수의 구현에 따라 공간의 낭비가 극대화될 수도 최적화될 수도 있다.최고의 효율 : 참조, 삽입, 삭제 O(1)최악의 효율 : 참조, 삽입, 삭제 O(n)셋데이터의 중복을 허용하지 않는 자료구조해시 테이블을 활용하기에 해시 셋이라고도 불린다.셋은 헤시 테이블의 Value값은 사용하지 않고 Key만 사용해 구현한다.Key가 Key인 동시에 데이터로 사용하는 것'그림으로 쉽게 배우는 운영체제'운영체제 개요프로세스 관리 메모리 관리 하드웨어 관리 파일 시스템 관리운영체제의 구조운영체제의 핵심 커널은 프로세스와 메모리, 저장장치를 관리한다.사용자는 커널에 직접 접근할 수 없고 인터페이스를 통해 접근 가능하다. (GUI, CLI)어플리케이션은 시스템 콜을 통해 커널에 접근 가능하며, 이를 통해 메모리를 사용할 수 있다.하드웨어는 드라이버를 통해 커널에 접근 가능하다. 컴퓨터 하드웨어와 구조하드웨어로 프로그램을 만들었기에 프로그램이 달라질 때마다 매번 스위치와 배선을 다시 조정해야 했다.폰 노이만은 이를 해결하기 위해 CPU와 메모리를 두고 이들 사이는 버스로 연결한다.버스는 데이터를 전달하는 통로이다.메모리에 올라간 프로그램은 명령에 따라 처리된다.컴퓨터 하드웨어메인보드다른 하드웨어를 연결하는 장치장치 간에 데이터를 전송하는 건 메인보드의 버스가 담당.CPU메모리하드디스크그래픽카드마우스, 키보드, 사운드, 모니터 입출력 장치  CPU(Central Processing Unit)산술논리연산장치(Arithmetic and Logic Unit, ALU) : CPU 에서 실제로 데이터 연산을 담당제어장치 : 모든 장치들의 동작을 지시하고 제어레지스터 : CPU 내에서 계산을 위해 데이터를 임시로 보관하는 장치 메모리 종류RAM(Random Access Memory)랜덤으로 데이터를 읽어도 저장된 위치와 상관 없이 읽는 속도가 같다.전력이 끊기면 데이터를 잃는다(휘발성) / 메인 메모리로 사용ROM(Read Only Memory)전력이 끊겨도 데이터를 계속 보관 가능데이터를 한 번 쓰면 수정 불가능컴퓨터의 부팅과 관련된 바이오스를 저장하는데 사용컴퓨터의 부팅과정ROM에 저장된 BIOS 실행BIOS는 전원, CPU, 메모리, 키보드, 마우스, 하드디스크 등 주요 하드웨어에 이상이 없는지 확인하드디스크에 있는 마스터 부트 레코드에 저장된 부트로더를 메모리에 가져와 실행설치된 운영체제 실행, 메모리에 불러온다.바탕화면이 나오고 실행되는 모든 응용 프로그램은 메모리에 올라가 운영체제가 관리인터럽트입출력 처리 방식폴링CPU가 주기적으로 입출력 장치의 상태를 확인하는 방식효율성이 떨어지고 자원 낭비 심함인터럽트폴링 방식을 개선한 현재 사용되는 방식입력이나 출력이 발생하면 CPU에 인터럽트를 발생CPU는 현재 작업을 중단하고, 이 인터럽트를 처리하기 위해 인터럽트 처리 루틴(Interrupt Service Routine, ISR)로 이동 및 처리완료 후 다른 작업 수행프로세스와 쓰레드프로그램과 프로세스프로그램은 저장장치에 저장된 명령문의 집합체프로세스는 프로그램이 메모리에 올라가 실행중인 프로그램을 의미멀티프로그래밍과 멀티프로세싱멀티프로그래밍은 메모리에 여러 개의 프로세스가 올라간 것.멀티프로세싱은 CPU를 시분할로 여러 개의 프로세스를 처리하면서 동시에 실행되는 것처럼 보이게 하는 것.과거에는 메모리가 작기에 멀티프로그래밍이 불가하여 다른 저장장치에 있는 프로그램을 메모리에 올리는 스와핑을 통해 멀티프로세싱을 처리했다.PCB프로세스가 생성될 때 운영체제는 해당 프로세스의 정보를 가지고 있는 PCB(Process Control Block)를 만들어 저장한다.운영체제는 PCB들을 연결리스트로 관리한다.PCB의 구조포인터 : 부모와 지식 프로세스에 대한 포인터 / 할당된 자원에 대한 포인터 / 프로세스 상태 전환시 저장하는 포인터프로세스 상태 : 생성, 준비, 실행, 대기, 완료프로세스 ID : 식별자프로그램 카운터 : 다음에 실행될 명령어의 주소 저장 / 프로세스가 실행되던 지점 저장레지스터 정보 : 프로세스가 실행될 때 사용했던 레지스터 값들메모리 관련 : 프로세스가 메모리에 있는 위치 정보, 메모리 침범을 막기 위한 경계레지스터 값등 저장CPU 스케줄링 정보 : CPU 스케줄링에 필요한 우선순위, 최종 실행시간, CPU 점유시간 등이 저장등등프로세스 상태운영체제는 시분할 시스템을 활용하여 여러 개의 프로세스를 빠르게 전환하며 실행시킨다.시분할 처리를 위한 다섯가지 상태생성(New) : PCB를 생성하고 메모리에 프로그램 적재를 요청한 상태준비(Ready) : CPU를 사용하기 위해 기다리는 상태대기(Waiting) : 프로세스가 입출력 요청을 하면 입출력이 완료될 때 까지 기다리는 상태 / CPU는 굉장히 빠르고 입출력 작업은 상당히 느리다. 입출력 요청을 하는 프로세스가 완료될 때 까지 CPU를 기다리게 하는 것은 비효율적이기에 대기 상태가 만들어졌다.실행(Running) : CPU 스케줄러에 의해 CPU를 할당받아 실행되는 상태 / 실행상태에 있는 프로세스의 수는 CPU의 개수만큼 존재할 수 있다.완료(Terminated) : 프로세스가 종료된 상태 / 프로세스가 사용했던 데이터를 메모리에서 제거하고 PCB도 제거 컨텍스트 스위칭컨텍스트 스위칭은 프로세스를 실행하는 중에 다른 프로세스를 실행하기 위해 실행중인 프로세스 상태를 저장하고 다른 프로세스의 상태값으로 교체하는 작업을 의미.컨텍스트 스위칭이 일어날 때 PCB의 내용이 변경된다.실행중인 프로세스의 작업내용을 PCB에 저장하고 실행될 프로세스의 PCB의 내용대로 CPU가 다시 세팅된다.컨텍스트 스위칭이 일어날 때 PCB에 변경되는 값들은 아래와 같다.프로세스 상태프로그램 카운터레지스터 정보메모리 관련 정보 프로세스의 CPU 점유시간을 초과하거나 입출력 작업요청 등이 들어오면 인터럽트가 발생하며 컨텍스트 스위칭이 일어난다.프로세스 생성과 종료실행파일이 실행되면 운영체제는 해당 프로그램의 코드영역과 데이터영역을 메모리에 로드하고빈 스택과 빈 힙을 만들어 공간을 확보하며 이 프로세스를 관리하기 위한 PCB를 만들어서 값을 초기화해준다.해당 프로세스 생성 과정은 운영체제가 부팅되고 0번 프로세스가 실행될 때 딱 한번 실행된다.그 이후에 프로세스는 새로 생성하지 않고 0번 프로세스를 복사(fork함수)해서 사용한다.새로 생성하는 것 보다 복사를 하는 게 더 빠르다.exec함수를 통해 부모를 복사한 자식 프로세스의 코드와 데이터 영역을 원하는 값으로 덮어쓴다.exit함수는 자식 프로세스가 부모 프로세스에게 정상 종료를 알리는 함수이다. / 부모 프로세스의 경우 종료부모 프로세스는 자식 프로세스의 Exit Status를 읽고 자식 프로세스를 정리한다.만약 부모 프로세스가 자식 프로세스보다 먼저 종료 되거나 자식 프로세스가 비정상적으로 종료되어 exit()신호를 주지 못해서 Exit Status를 읽지 못해 메모리에 계속 살아 있는 상태를 좀비 프로세스라고 한다.컴퓨터를 오래 켜두면 느려지는 현상이 발생하곤 하는데 메모리에 많은 프로세스가 올라오는 경우거나 좀비 프로세스가 메모리를 차지하기 때문이다.컴퓨터를 껏다키면 메모리가 초기화 되기에 다시 빨라진다.쓰레드사용자가 운영체제에게 작업을 요구하면 그만큼 프로세스 수가 증가프로세스는 메모리에 코드, 데이터, 스택, 힙영역, PCB를 할당해준다.프로세스끼리의 통신은 IPC(Inter Process Comunication)를 이용 / 해당 작업은 비용이 많이 든다.이러한 단점들을 해결하기 위해 고안된 것이 쓰레드이다.쓰레드는 프로세스 내에 존재하는 것으로 1개 이상이 있을 수 있다.쓰레드는 프로세스의 PCB, 코드, 데이터, 힙영역을 공유한다.스택은 공유하지 않고 쓰레드 마다 고유하다.한 프로세스 내에 쓰레드가 여러개 존재하기에 쓰레드 ID, TCB(Thread Control Block)가 생겼다.이제 운영체제가 작업을 처리하는 단위는 프로세스 내에 쓰레드이다.특징안전성 : 프로세스는 서로 독립적이기에 하나의 프로세스가 문제가 있더라도 다른 프로세스는 영향을 받지 않는다.반면 쓰레드는 하나의 프로세스 내에 존재하기에 해당 프로세스에 문제가 생기면 그 안에 모든 쓰레드에 문제가 생긴다.속도, 자원 : 각각의 프로세스는 서로 고유한 자원을 가진다 / 코드, 데이터, 힙, 스택영역을 전부 따로 둔다. 프로세스간의 통신을 하려면 IPC를 이용해야해서 오버헤드가 크고 속도가 느리다.반면 쓰레드는 한 프로세스내에서 스택영역을 제외한 영역은 모두 공유하기에 오버헤드가 굉장히 작다. 쓰레드간의 통신은 데이터를 공유할 수 있으니 쉽게 가능하지만 공유되는 공간에서 문제(공유자원 문제)가 발생할 수 있다. CPU 스케줄링CPU 스케줄링 개요CPU 스케줄링은 운영체제가 모든 프로세스에게 CPU를 할당/해제하는 방식을 의미한다.CPU 스케줄링에서 스케줄러(운영체제)가 고려해야할 사항은어떤 프로세스에게 CPU 리소스를 줘야하는가?CPU를 할당받은 프로세스가 얼마의 시간동안 CPU를 사용해야하는가?두 가지이다.이 두 가지 고려사항이 컴퓨터의 성능에 굉장히 큰 영향을 미친다.이 고려사항을 통해 여러 CPU 스케줄링 방식이 만들어진다.CPU를 할당받아 실행하는 작업을 CPU Burst라 부른다.입출력 작업을 I/O Burst라고 부른다.다중큐해당 프로세스의 우선순위를 보고 준비큐에 넣는다.CPU 스케줄러는 준비상태의 다중큐에 들어있는 프로세스들 중에 적당한 프로세스의 정보(PCB)를 선택해서 실행상태로 전환시킨다프로세스 정보를 담고 있는 PCB가 준비상태의 다중큐에 들어가서 실행되기를 기다리고 있고CPU 스케줄러에의해 실행상태로 전환된다.이때 CPU 스케줄러는 준비상태의 다중큐를 참조해서 어떤 프로세스를 실행시킬지 결정.스케줄링 목표리소스 사용률 : CPU 사용률을 높이는 것, I/O 디바이스 사용률 높이는 것오버헤드 최소화 : 스케줄링을 위한 계산, 컨텍스트 스위칭 오버헤드 비용 최소화공평성 : 모든 프로세스에게 스케줄링 기법에 맞춰 공평하게 CPU가 할당되어야 한다.처리량 : 같은 시간 내에 더 많은 처리를 할 수 있는 방법을 목표로 한다.대기시간 : 작업을 요청하고 실제 작업이 이루어지기 전까지 대기하는 시간이 짧은 것을 목표로 한다.응답시간 : 응답시간이 짧은 것을 목표로 한다.모든 목표를 만족할 수 없기에 사용자가 사용하는 시스템에 따라서 목표를 다르게 설정해야 한다.특별한 목적이 없을 경우, 밸런스를 유지하는게 중요.FIFO먼저 들어온 작업이 먼저 처리되는 스케줄링 방식스케줄링 큐에 들어온 순서대로 CPU를 할당받는 방식 / 해당 방식은 프로세스가 완전히 끝나야만 다음 프로세스가 실행될 수 있다.단점실행중인 프로세스가 완전히 끝나야 다음 프로세스가 실행되는데, 만약 현재 실행중인 프로세스 작업이 길고, 다음 프로세스가 엄청 짧아도, 다음 프로세스는 대기해야 한다. / 효율성(처리량, 대기시간)이 떨어진다.I/O 작업이 있다면 해당 작업이 끝날때까지 CPU가 쉬게되어 CPU 사용률이 떨어진다.스케줄링의 성능은 평균 대기 시간으로 평가된다.평균 대기 시간은 프로세스들 모두가 실행되가끼지 대기시간의 평균을 의미한다. Burst Time이 짧은게 먼저 실행되면 평균 대기 시간 짧아짐.Burst Time이 긴게 먼저 실행되면 평균 대기 시간 길어짐. FIFO알고리즘은 프로세스의 Burst Time에 따라 성능의 차이가 심하게 나기에 현대 운영체제에서 잘 쓰이지 않고 일괄처리 시스템에 쓰인다. 

감자인프런강의발자국

[인프런 찍먹클럽] 언리얼엔진5 스파르타 클래스 - 심화편 후기

언리얼 엔진5를 공부를 하다보면, 영어 강의들을 보게 된다. 수많은 영어 강의들한국어 강의를 찾던 중, 인프런의 언리얼엔진5 스파르타 클래스 - 심화편을 알게 되었다.심화편이라.. ㄷㄷ 벌써부터 궁금해지지 않나?! 강사님은 YAL 선생님!실전, 심화로 나누어 2개의 강의를 제작하셨다. 실전편은 무료이니 모든 분들이 체험할 수 있다. 언리얼엔진5 스파르타 클래스 - 심화편 : https://bit.ly/3T7YBbd 특히, 나는 애니메이션을 더욱 알고 싶어서 이번에 참가하게 되었다.언리얼 엔진의 애니메이션의 다양한 방식들을 알 수 있다. IK,FK를 보면 무슨 생각이 들까요? 피하고 싶어진다...😥하지만, 강의를 들으면서 애니메이션에 사용되는 용어들을 쉽게 알 수 있었다. IK: Inverse Kinematic 축을 활용해 bone을 움직임FK: 관절 인형 처럼 관절들을 조종해서 움직임을 구현출처: 언리얼 엔진5 스파르타 클래스 - 심화편, 섹션 8. UE5 리타게팅  리타게팅! 애니메이션을 다른 캐릭터에 복사를 하는 것이다. 당연히 그대로 사용하면 bone의 사용방식이 다를테니 망가진다. 동기화를 해주기 위해서 사용하게된다. 1. 먼저 리타겟팅을 위해 bone 체인을 설정해준다.출처: 언리얼 엔진5 스파르타 클래스 - 심화편, 섹션 8. UE5 리타게팅2. 리타겟팅 에셋에서 Source IK Rig와 Target Ik Rig를 비교하면서 오차들을 수정하며 동기화 시킨다.출처: 언리얼 엔진5 스파르타 클래스 - 심화편, 섹션 8. UE5 리타게팅 3. 리타겟한 결과를 볼 수 있다.https://youtu.be/b9l-7svKbP4출처: 언리얼 엔진5 스파르타 클래스 - 심화편, 섹션 8. UE5 리타게팅 이 방식들을 강의를 들으면서 따라하면 쉽게 제작이 가능하다.중요한 사실은 이 강의를 기반으로 자신의 애니메이션을 제작하는데 활용 할 수 있다. 물론, 강의를 따라해도 안되는 경우들이 생긴다. 나도 물론 생겨서 당황스러웠지만, 커뮤니티 게시판으로 해결을 하였다.언리얼 엔진5 스파르타 클래스 - 심화편 커뮤니티 게시판여기 게시판을 활용해서 선생님께 직접 질문을 하고 답변을 받을 수 있으니, 걱정 안해도 될 것이다. 후기나는 이번 찍먹클럽을 통해서 애니메이션에 대한 두려움이 사라지게 되었다. 배운 것들을 기반으로 나의 프로젝트에서 애니메이션을  활용할 수 있음을 확인하여 나에게 만족스러운 강의가 되었다. 이 강의를 자신이 들어도 괜찮을까 고민 하는 분들!난이도가 매우 쉽게 구성되어 있고 커리큘럼이 단계적으로 잘 구성되어 있다. 선생님과 함께 따라서 제작한다면 무리가 없을 것이다.언리얼 엔진5 에디터도 무려 한국어로 되어 있어, 영어가 어려워 접근하기 쉽지 않은 분들도 할 수 있는 쉬운 접근 중 하나가 될 것이다. 모두 스파르타 클래스 - 심화편을 듣고 언리얼 엔진5를 마스터 할 수 있도록 노력하자! 화이팅!

게임 프로그래밍인프런인프런강의후기게임개발게임개발강의인강후기강의후기게임개발자인프런강의

언니복이

인프런 워밍업 클럽 3기 백엔드 스터디

프로젝트에 필요한 상수는 어떻게 관리할까?자바 코드에 직접 넣기같은 값을 여러 클래스에서 사용한다면 값이 수정될 때마다 모든 클래스에서 값을 찾아 바꿔줘야 할까?개발 서버와 운영 서버에서 다른 상수 값을 쓰고 싶다면?스프링 Profile과 application.yml스프링은 애플리케이션의 Profile을 정의할 수 있는 기능을 제공한다.실행 시 환경 변수로 정의 가능한다.따로 정의되지 않고 실행되면 default로 설정된다.No active profile set, falling back to 1 default profile: "default" application-{Profile} 형식으로 yml 또는 properties 파일을 생성하면 Profile에 따라 상수 값 설정 가능하다. 소스 코드상에서는 Enviromnent를 이용해 키로 값을 가져올 수 있다.환경별로 세팅해주기~git status :No commits yet, Untracked files 추적하지 않는 파일들도 보여줌https://www.toptal.com/developers/gitignore/ 사이트에 가면 gitgnore이 만들어짐  thymeleafhtml 엔진에 데이터를 넣어 동적으로 움직이게 해줌데이터베이스에서 가져온 데이터를 model에 넣어주고 어떤 템플릿을 쓸 건지 해서 템플릿 + 데이터가 된 html 최종을 만들어줌브라우저에서 html에 그려줌Validation어노테이션을 클라이언트에서 들어오는 값 검증문제가 생긴다면setting > grale > gradle jvm을 다시 다운 받자 타입datetime : 날짜와 시간을 같이 가지고 있는 자료형 컬럼명변경 사항을 추적하기 위함created_date_time : 메타 데이터updated_date_time : 메타 데이터 name을 기반으로 github 링크 라던지, 부트스트랩 아이콘를 보여줌 experience : experience_detail1: N으로 묶인 테이블project_skill : project skill은 다 대 다 관계로 매핑해주는 테이블http_interface : 사용자가 요청하는 테이블 확인 할 수 있음 domainconfiguration : 암호화constant : 도메인 패키지에서 사용하는 함수들entity : 데이터 베이스 테이블에 상응하는 객체repository : entity 별로 C/R/U/D 작업하는 것 들어감 presentation : domin이랑 합치면 하나의 독립된 프로젝트로 볼 수 있음controllerdto : 화면에서 필요하는 데이터들을 따로 묶음interceptor : 컨트롤러까지 요청 들어가기 전 모든 컨트롤러에 대해 공통 처리를 해주는 class, 각 화면을 조회할 때 요청에 대한 정보를 따로 db에 저장하는 기능 개발repository : 데이터 베이스와 직접 상호 작용 x 도메인 repository 레이어에서 필요로 하는 데이터를 중간에서 매핑해주는 역할service adminadvice : 예외 처리data : api 응답 공통 포맷, 입력 폼 정보, 테이블 정보를 담는 데이터 클래스exception : admin 페이지의 예외interceptor : 화면에서 보여지는 사이드바를 초기화하는 interceptorsecurity : 로그인 관련된 것들context : 만들 테이블, 확장성 있게achievementcontrollerserviceformdashboardexperienceintroductionlinkprojectskill [이론] JPA란JPA는 ORM(Obeject Relational Mapping) 기술이다.건물을 짓는 설계도로 건물을 올리게 되면 3D로 나오게 되는 것을 모델링이라고 한다.모델링 한다는 것은 추상화적인 개념을 현실세계에 구체화하는 것을 말한다.자바가 가지고 있는 데이터 타입과 데이터베이스가 가지고 있는 데이터 타입은 다르다. class를 통해서 데이터베이스에 있는 테이블을 모델링해야 한다.원래대로라면, 첫 번째로는 DB 테이블을 만들고 2번째로 자바세상에 모델링한다. ⇒ TRM(Table Relational Mapping)class Team{ int id; String name; String year; } 하지만, JPA경우 첫 번째로 자바에서 코드를 작성한 것인 클래스를 만들어서 두 번째로 데이터베이스 테이블을 자동으로 생성 수 있다. 이때 필요한 것이 인터페이스이다.ORM이란?Object Relational Mapping의 약어로, 객체 관계 매핑이라고 번역됨개발자가 직접 쿼리를 작성하는 과정이 생략되어 생산성이 향상됨데이터를 객체지향적인 관점에서 접근할 수 있게 한다.구체적인 DBMS에 대한 의존성이 줄어듦.단점JPA로 데이터베이스를 정확히 다루려면 충분한 학습이 필요성능이 악화되거나, 의도하지 않은 데이터베이스 수정이 발생할 수 있다.ORM만으로 원하는 모든 기능을 구현하기엔 한계가 있다.불가피하게 구체적인 DBMS에 의존하는 네이티브 쿼리를 작성해야 할 수 있다.JPA를 사용하기 위해 꼭 알아야하는 트랜잭션정의여러 개의 데이터베이스 작업을 하나로 묶어주는 논리적인 단위다 같이 안되거나 다 같이 되거나 => 트랜잭션영속성 컨텍스트영속성이란데이터 ⇒ 영구적 저장(파일시스템 X, DB O)컨텍스트란?(Context)Context란 대상의 모든 정보를 가지고 있는 것개발에서 컨텍스트 개념은 조금 애매하다. 이렇게 이해하면 좋다고 한다. 길동이가 영숙이에게 난 영숙이 너의 모든 컨텍스트를 가지고 있어 = 영숙이의 모든 것을 알고 있다.Context를 넘겨준다. = 보고가 길동이에게 영숙이의 Context(모든 정보)를 넘겨영속성 컨텍스트란?JPA에서 엔티티를 관리하는 임시 메모리, 버퍼와 같은 개념자바가 데이터베이스를 저장해야 하는 모든 데이터를 아는 것이 영속성 컨텍스트자바에 있는 동물 데이터를 영속성 컨텍스트에 넣고 나서 DB에도 저장 후 영속성 컨텍스트에서 삭제를 하면 동기화가 되어 있기에 DB에서도 삭제가 된다.일단 자바는 1. 영속성 컨텍스트에 먼저 요청을 한다. 2. 영속성 컨텍스트에 데이터가 없기에 DB에 요청 한다. 3. DB에서 가져와 자바 object로 영속성 컨텍스트에 저장한다. 4. 자바에 과일데이터를 준다.일단 자바는 1. 영속성 컨텍스트에 먼저 요청을 한다. 2. 영속성 컨텍스트에 데이터가 없기에 DB에 요청 한다. 3. DB에서 가져와 자바 object로 영속성 컨텍스트에 저장한다. 4. 자바에 과일데이터를 준다.데이터 베이스에 있는 데이터를 select해서 가져오고 update하는 등 일련의 모든 정보를 영속성 컨텍스트를 통해 확인 할 수 있다. 자바가 데이터베이스에 저장해야 하는 모든 메타 데이터 정보들을 영속성 컨텍스트가 가지고 있다. java에서 과일 데이터를 딸기로 바꾸면..영속성 컨텍스트의 과일데이터도 딸기로 바뀌고데이터베이스에 commit해서 밀어넣으면 원래 셋은 같은 데이터 인데 3번은 사과로 되어 있어 딸기로 바꾸기위해 update가 자동으로 일어난다.데이터베이스 정의(위키피디아) 여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합이다.이론적으로 데이터의 집합을 의미한다. 엑셀에 표로 정리된 학생부, 입출금 내역 등도 데이터베이스라고 할 수 있다. 하지만 일반적으로웹 개발에서 데이터베이스라고 하면 DBMS를 의미하는 경우가 많다.관계를 꼼꼼히 따져보는 것이 좋다 특히 1:1, 1:N, N:M 등의 관계가 중요하다대표적인 관계형 DBMS(RDBMS)Oracle Database오라클 사에서 만든 데이터베이스입니다. 막강한 성능과 안정성이 장점이지만 유료라는 단점이 있다.MySQL오픈소스로 시작했지만 현재는 오라클 소유PostgreSQL꾸준히 점유율이 올라가는 오픈소스 데이터베이스비관계형 데이터베이스? NoSQL?관계형 데이터베이스를 제외한 모든 종류의 데이터베이스를 비관계형 데이터베이스라고 부른다. 키-값형, 문서형 등이 있다.대표적인 비관계형 DBMSMongoDB문서형 데이터베이스데이터를 비정형적으로 저장할 수 있다.RedisKey-Value 스토어 데이터베이스캐시 용도로 주로 사용 [이론] HTTP와 REST API복잡한 비즈니스에서는 모든 기능을 REST를 준수하며 개발하기가 매우 어렵습니다. 가능한 REST 규칙을 따르되, 불가피한 부분에서 개발자가 참고할 수 있는 팀의 컨벤션을 만들어두는 것이 좋다.구글 API 디자인 가이드https://cloud.google.com/apis/design?hl=ko 클라이언트에서 서버로 데이터를 전달하는 방법Query Paratmeter쿼리 스트링이라고도 부른다. 스프링에서는 컨트롤러에 @RequestParam 어노테이션으로 간편하게 가져올 수 있다.HTTP Request Body스프링에서는 컨트롤러에 @RequestBody 어노테이션으로 간편하게 가져올 수 있다.Path Variable경로 변수라고도 한다. URL에 접근하고자 하는 자원의 식별자를 표현한다. 스프링에서는 @PathVariable 어노테이션으로 간편하게 가져올 수 있다get으로 모든 로드맵 가져옴 : https://www.inflearn.com/roadmaps뒤에 숫자를 붙여 id를 가져옴으로 특정 페이지를 가지고 옴https://www.inflearn.com/roadmaps?terms=5&page=1에서 terms=5&page=1가 쿼리 파라미터임[이론] 웹 프레임워크와 Spring웹 프레임워크프레임워크를 사용한다면 포크레인, 덤프트럭을 사용한다고 할 수 있습니다.프레임워크도 시간이 지남에 따라 발전하며 점점 사용성이 좋아진다.프레임워크? 라이브러리?프레임워크와 라이브러리를 구분하는 키는 ‘제어의 주도권’비유하면 프레임워크는 DIY 가구 키트라고 할 수 있다. 라이브러리는 가구를 만들기 위한 망치와 같은 공구, 또는 그런 공구들을 모아둔 공구 상자라 할 수 있습니다. 사용자가 주도권을 가지고 원하는 것을 만들 수 있다.물론 가구 키트를 만들며 망치를 사용할 수 있듯이, 프레임워크 안에서도 라이브러리를 사용할 수 있다.Spring FrameworkJava 기반의 웹 프레임워크이다.MVC 패턴(Model-View-Controller)MVC 패턴은 소프트웨어 아키텍처 디자인 패턴요청의 처리(비즈니스 로직), 데이터, 화면 간의 결합도를 낮추면서 유지보수를 용이Model: 데이터를 담는다. Controller는 데이터를 넣고, Views는 데이터를 꺼내올 수 있다.View: 사용자에게 보여지는 화면을 담당한다. Model에서 데이터를 꺼내올 수 있다.Controller: 요청을 받아 작업을 수행한다. 작업의 결과 데이터를 Model에 넣을 수 있다.레이어드 아키텍처(Controller-Service-Repository)Presentation(Controller): 클라이언트가 요청할 수 있는 인터페이스를 정의한다. 전달받은 데이터를 검증하고, Service의 메소드(처리 로직)을 호출한다.Business(Service): 목적에 맞게 데이터를 처리한다. 일반적으로 Repository의 다양한 데이터베이스 처리 메소드를 호출하여 저장,수정, 조회, 삭제 등을 수행한다.Data Access(Repository): 데이터베이스에 접근하여 작업을 요청한다. 다양한 데이터베이스 처리 방법을 제공하면 여러 서비스에서 공통적으로 사용할 수 있다.스프링 Bean과 의존성 주입(Dependency Injection)스프링에서 관리되는 객체, 즉 자바 클래스의 인스턴스를 의미제어의 역전(Inversion of Control), 줄여서 IoC이란?스프링 Bean으로 지정된 클래스는 개발자가 직접 인스턴스를 생성, 관리하지 않고 스프링 컨테이너가 주체가 됨Bean에서 다른 Bean을 사용하는 경우, 즉 의존하는 경우에 스프링 컨테이너에서 의존성을 주입해준다.의존성 주입이란?의존성 주입이란 한 객체가 사용하는 다른 객체를 객체 내부에서 직접 만들지 않고, 외부에서 주입받아 사용하는 방법스프링이 실행될때 컴포넌트 스캔이란 과정을 거쳐 Bean으로 지정된 클래스들의 객체를 모두 만들둔다.이 과정에서 한 Bean이 사용하는 다른 Bean이있다면 그 Bean을 먼저 생성⭐ IoC(역전의 제어) ⇒ 주로 주도권 스프링객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 의미컴포넌트 의존관계 설정(Component dependency resoulution), 설정(Configuration) 및 생명주기(LifeCycle)을 해결하기 위한 디자인 패턴(Design Pattern)이다.스프링이 직접 만든다. 스캔하여 heap 메모리에 올려주고 스프링이 직접 관리(++ 추가)⭐ IoC 컨테이너컨테이너?란 컨테이너는 보통 객체의 생명주기를 관리, 생성된 인스턴스들에게 추가적인 기능을 제공하도록 하는 것스프링 프레임워크도 객체를 생성하고 관리하고 책임지고 의존성을 관리해주는 컨테이너가 있는데,그것이 바로 IoC 컨테이너(=스프링 컨테이너)인스턴스 생성부터 소멸까지의 인스턴스 생명주기 관리를 개발자가 아닌 컨테이너가 대신 해주기 때문에 객체 관리 주체가 프레임워크(Container)가 되기 때문에 개발자는 로직에 집중할 수 있다는 장점이 있다.IoC 컨테이너는 객체의 생성을 책임지고, 의존성을 관리한다.POJO의 생성, 초기화, 서비스, 소멸에 대한 권한을 가진다.개발자들이 직접 POJO를 생성할 수 있지만 컨테이너에게 맡긴다.개발자는 비즈니스 로직에 집중할 수 있다.객체 생성 코드가 없으므로 TDD가 용이하다.POJO(Plain Old Java Object)란? 주로 특정 자바 모델이나 기능, 프레임워크를 따르지 않는 Java Object를 지칭한다. Java Bean 객체가 대표적이다. 간단하게 getter / setter를 생각하면 될 것 같다. 생성자 주입 권장런타임에 수정자를 호출해서 의존성이 바뀌는 것을 방지할 수 있다.순환참조 시 컴파일 오류가 발생해서 런타임 단계에서 메소드가 서로 호출하는 스택오버플로우 에러를 방지할 수 있다.의존하는 Bean이 누락되면 컴파일 오류가 발생하기 때문에 런타임에서 NullPointerException을 방지할 수 있다.수정자나 필드는 null이 넘어갈 수 있음[이론] 웹 서비스를 구성하는 요소클라이언트요청하는 주체브라우저서버응답하는 주체데이터베이스에서 데이터의 삽입, 수정, 조회, 삭제(CRUD)한 뒤 결과를 클라이언트에 반환하는 작업대부분의 규모 있는 서비스에서는 동일한 작업을 수행하는 여러 대의 컴퓨터, 서로 다른 작업을 수행하는 컴퓨터 등으로 서버 컴퓨터 집합(클러스터)을 구성3. 데이터베이스데이터의 집합을 저장하고 관리하는 역할을 하는 프로그램을 데이터베이스 관리 시스템브라우저를 주소창에 입력하면 어떤일이 일어날까?  

백엔드인프런강의백엔드코틀린나만의포폴사이트

채널톡 아이콘