이 글은 알파코에서 진행 중인 [신한투자증권] 프로디지털아카데미 6기 과정 중 백엔드 과목의 김송아 강사님의 강의를 기반으로 작성되었습니다
MVC란?
controller
비즈니스 로직을 처리해야되는 부분을 구현해둔 곳
- model과 view 사이 매개체
model
예를들어 회원 과 같이 서비스에서 쓰는 객체의 요소를 정리해둔 것?
- 데이터와 관련된 연관 처리/ 연산
view
- 화면에 나오는 부분들을 처리하는 곳
롸면 사용자와 가까운 위치
GIT이란?
내 컴퓨터 버전 관리 프로그램
깃허브랑 소통하는 역할
github
공용 컴퓨터에서 버전 관리 프로그램
브랜치관리가 중요
- 협업할 때 쓸 수 있는 명령어?
- 진짜 회사에서는? 다른 시스템을 사내에 구축해서 씀
빌드란?
소스코드를 실행할 수 있게 하는 모든 프로세스
- 인터프리트(동시통역): 코드를 한줄한줄 번역
- 컴파일(통번역): 파일을 통째로 번역
OS
프로그램
운영체제
커널 : 위 두개는 소프트웨어인데 둘이 연결될 수 있게 해주는 것
하드웨어
JVM
커널 역할처럼 os 신경쓰지 않고 어떤 os에서든 돌아갈 수 있게 해주는 가상황경
자바소스코드 → 컴퓨터가 해석할 수 있도록 자바 컴파일러가 컴파일링→ 자바 바이트 코드
클래스로더는 클래스를 로딩하고 Linking을 통해 사용할 준비를 한 후 초기화를 해준다. 그리고 인터프리터가 코드를 한줄씩 번역해준다.
이때 가비지 콜렉터는 실행환경 옆에서 불필요하게 사용되는 메모리 정리해줌
라이브러리
다른사람이 만들어놓은 코드를 가져다 쓰는 것
프레임워크
정해진 틀에 맞춰서 따르면 동작하는 것
문제를 해결하기 위한 구조
중간에 있는 핵심을 무조건 써야함
spring
자바 개발을 하면서 불편했던 걸 도와주는 프레임워크
스프링부트
스프링을 쉽게 쓸 수 있게 해주는 스프링 진화 버전
빌드 도구
빌드를 도와주는 도구
Ant : 느림
maven: 좀 더 빨라짐, 명령하는 게 복잡하다는 단점
gradle : 더 빠르고 명령이 쉬워짐
요즘 IDE 자체에서 빌드도구를 가지고 있기도 함
JDK vs JRE
jdk : 자바 개발키트
jre: 자바 실행 환경
자바 개발자가 필요한건? jdk
자바로 만든 게임 유저가 필요한건? jre
하나의 컴퓨터에 여러개의 jdk 깔 수 있다? o
둘 중 하나는 다른 하나에 포함이다? x
클래스
클래스는 사용설명서처럼 객체를 만들 수 있는게 적힌 것
구성요소: 메소드, 필드, 생성자
실행용 클리스: main 메소드를 가지는 클래스
라이브러리용 클래스: main을 가지지 않는 클래스 = 객체화가 되는 것들
객체지향 vs 절차지향
우선순위에 따른 차이이지 하나를 무시하지는 않음
객체지향
객체를 미리 선언해놓은 후 그다음 순서를 생각함 객체가 우선순위 높음 / 객체단위로 프로그앰이 굴러가는 것
ex) 자동차 핸드폰 나 에어팟 키보드
세상을 이루는 대부분의 것들이 객체라서 객체지향이 생겨나게 됨
절차지향
절차를 먼저 얘기하는 것 절차가 우선적인 것 / 정해진 절차 순서대로 실행되는 프로그램
GUI ↔ CLI
GUI: windows, mac, ios, android
CLI: 텍스트 명령어로 일을 시키는 것
- shell: 껍데기 CLI의 대표적인 예시
- ex) window powershell, cmd, mac terminal
- bash: Shell 의 진화버전 ex) git bash
cf) 서버 리눅스 ..→ CLI써야함
생성자
클래스를 객체로 만들어주는 것
생성자는 객체가 살아있는 동안 언제든 호출할 수 없다. 생성될때만 호출 가능
기본생성자는 생략할 수 있다.
생성자를 호출할 때 메모리에 객체가 올라간다.
소멸자가 있다. ex) finalize 근데 안씀
cf) 생성자는 상속이 될까?
초기화
메모리에 올린다. = 사용할 준비를 마쳤다.
기본형은 변수의 메모리 공간에 값 자체가 할당되는 것이며, 참조형은 변수의 메모리 공간에 해당 값이 저장된 주소가 저장된다.
메모리
static
가비지컬렉터가 청소하지 않는 구역, 컴파일 시점에 셋팅하는 구역, 코드가 기계어로 변환돼서 그대로 올라가는 구역
- JVM이 실행될 때 Class 가 로딩될 때 생성.
- Class의 정보, Static 변수(클래스 변수), 생성자(Constructor), 메소드(Method)와 같은 것들을 저장한다.
- Static 영역에 있는 것은 어디서든 접근 가능 하다.
- JVM이 종료 시(프로그램이 종료 시) 메모리에서 해제 된다. 즉 프로그램이 종료되기 전까진 메모리 상에 존재하게된다. 그렇기 때문에 어디서든 접근이 가능한 것이며, 무분별 하게 사용될 경우 메모리 부족 현상이 발생할 수 있다.
heap
참조형 데이터 객체의 실제 데이터가 저장되는 공간이다. Stack 영역에서 실제데이터가 존재하는 Heap 영역의 참조값을 가지고 있다.
- new 를 사용해 객체를 생성할 때 저장된다.
- 참조형 데이터 타입이 저장된다. (String, 배열(array), enum, class, interface), Object
- Heap 영역의 데이터들을 가르키는 Reference(참조 주소)는 Stack영역에 적재된다.Reference를 통해서만 Heap 영역의 데이터들에 접근, 핸들링 할 수 있다.
- 호출이 종료되도 삭제되지 않는다. -> GC(가비지 컬렉터)에 의해 메모리에서 해제된다.
- 쓰레드가 몇개가 존재하든, 단 하나의 영역만 존재한다. (Stack 영역의 경우 쓰레드 별로 1개씩 생성된다.)
stack
- 기본 자료형(원시 자료형, Primitive type), 지역변수, 매개변수가 저장되는 메모리.(int, double, boolean, byte)
- 메서드 내부의 기본자료형에 해당하는 변수 적재.
- *Heap 영역에 생성된 데이터의 참조값이 할당됨. -> 그림 : Heap, Stack 저장되는부분 참고.
- 메소드가 호출될 때 메모리에 할당, 메서드 종료시 메모리에서 삭제됨.
- 자료구조 Stack의 구조이다, LIFO(Last In First Out)
- 각 Thread 마다 자신만의 Stack 을 가진다. (1:1) - (Thread : Stack) Thread는 내부적으로 Static, Heap, Stack 영역을 가진다. Thread는 다른 Thread에 접근 할 수 없지만, static, Heap 영역을 공유하여 사용 가능.