- 프로그래밍 공통 12024년 07월 17일
- chantleman
- 작성자
- 2024.07.17.:37
[OOP(object - oriented programming, 객체 지향 프로그래밍)]
1) SRP
- 단일 책임 원칙 (single responsibility principle)
- 클래스는 단 하나의 목적을 가져야 하며, 클래스를 변경하는 이유는 단 하나의 이유여야 한다.
2) OCP
- 개방 폐쇄 원칙 (open-closed principle)
- 클래스는 확장에는 열려있고, 변경에는 닫혀있어야 한다.
3) LSP
- 리스코프 치환 원칙 (Liskov substitution principle)
- 상위 타입의 객체를 하위 타입으로 바꾸어도 프로그램은 일관되게 동작해야 한다.
4) ISP
- 인터페이스 분리 원칙 (interface segregation principle)
- 클라이언트는 이용하지 않는 메소드에 의존하지 않도록 인터페이스를 분리해야 한다.
5) DIP
- 의존 역전 원칙 (dependency inversion principle)
- 클라이언트는 추상화(인터페이스)에 의존해야 하며, 구체화(구현된 클래스)에 의존해선 안된다.
[절차지향 프로그래밍 VS 객체지향 프로그래밍]
1) 절차지향 프로그래밍(기능 중심)
- 순차적인 처리를 중요시하는 프로그래밍 기법
- 대표적인 언어 : C언어
- 컴퓨터의 처리구조와 유사해 실행속도가 빠름
- 코드의 순서가 바뀌면 동일한 결과를 보장하기 어려움
2) 객체지향 프로그래밍(객체 중심)
- 프로그램을 객체 단위로 나누고, 이들의 상호작용으로 서술하는 프로그래밍 기법
- 대표적인 언어 : Java
- 캡슐화, 상속, 다형성 등과 같은 기법을 이용할 수 있음(다형성은 하나의 메소드나 클래스가 다양한 방법으로 동작하는 것을 의미)
- 절차지향 언어보다 실행속도가 느림
[RESTful API (REpresentational State Transfer)]
- 어떤 자원에 대해 CRUD(create, read, update, delete) 연산을 수행하기 위해 URI(resource)로 GET, POST 등의 방식(method)을 사용하여 요청을 보내며, 요청을 위한 자원은 특정한 형태(representation of resource)로 표현됨
- 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에
웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일
- 네트워크 상에서 client와 server 사이의 통신 방식 중 하나
1) 자원(resource) - URI
- 모든 자원에는 고유한 ID가 존재하고, 이 자원은 server에 존재
- '/exgroups/:exgroup_id'
- client는 URI를 이용해 자원을 지정하고 해당 자원의 상태(정보)에 대한 조작을 server에 요청
2) 표현(representation)
- client와 server가 데이터를 주고받는 형태
- JSON, XML, TEXT, RSS 등
3) 상태전달 - Method
- GET (read) - URI가 가진 정보를 검색하기 위해 서버에 요청
- POST (create) - 정보 추가
- PUT (update) - 정보 갱신 (데이터 전체)
- DELETE (delete) - 정보 삭제
- PATCH (update) - 정보 갱신 (데이터 일부)
[프레임워크, 라이브러리]
제어 흐름에 대한 주도권이 누구에게/어디에 있는가
프레임워크는 전체적인 흐름을 쥐고있고, 개발자는 그 안에서 라이브러리에 대한 흐름을 쥐고 있음.
여기서 개발자의 제어권을 프레임워크에게 넘김으로써 신경써야할 것을 줄일 수 있는데,
이를 제어의 역전(Inverstion of Control)이라 함.
[Call by Value, Call by Reference]
1) call by value (자바는 기본적으로 call by value)
- 인자로 받은 값을 복사하여 처리하는 방식
장점) 값을 복사해 처리하기 때문에 원래의 값이 보존됨
단점) 복사하기 때문에 메모리 사용량 증가
2) call by reference
- 인자로 받은 값의 주소를 참조하여 직접 저장해 값에 영향을 주는 방식
장점) 복사하지 않고 직접 참조하기 때문에 빠름
단점) 직접 참조를 하기 때문에 원래의 값이 영향을 받음
[cors(Cross-Origin Resource Sharing)]
- 교차 출처 리소스 공유
- 도메인이 서로 다른 2개의 사이트가 데이터를 주고받을 때 발생하는 문제
- 데이터를 주고받을시 따로 설정하지 않으면 cors 에러 발생
[동적 쿼리]
- 실행시에 특정 조건이나 상황에 따라 쿼리 문장이 변경되어 실행되는 쿼리문을 말함
- 컴파일시에 SQL 문장을 확정할 수 없는 경우에 사용.
- 실행 시점에 따라 where절에 조건이 달라질 때 사용
- 쿼리문이 변하냐 변하지 않냐에 따라 정적쿼리/동적쿼리
[메모리 구조]
1) 코드 영역: 실행할 프로그램의 코드가 저장되는 영역으로 텍스트 영역이라고도 불림. 사용자가 프로그램 실행 명령을 내리면 OS가 HDD에서 메모리로 실행 코드를 올리게 되고, CPU는 코드 영역에 저장된 명령어를 하나씩 처리
2) 데이터 영역: 프로그램의 전역 변수와 정적 변수가 저장되는 영역. 프로그램 시작과 함께 할당되며, 프로그램이 종료되면 소멸함
3) 힙 영역: 프로그래머가 직접 관리할 수 있는 메모리 영역. 이 공간에 메모리를 할당한는 것을 동적할당이라고 부름. java에서는 garbage collector가 자동으로 해제해줌. 힙 영역은 스택 영역과 달리 낮은 주소에서 높은 주소로 메모리가 할당됨
4) 스택 영역: 함수의 호출과 함께 할당되며 지역 변수와 매개 변수가 저장되는 영역. 스택영역에 저장되는 함수의 호출 정보를 스택 프레임이라고 함. 스택 영역은 함수의 호출이 완료되면 소멸함. 스택 영역은 높은 주소에서 낮은 주소로 메모리가 할당됨
[ CSRF(Cross-site request forgery)]
- 사이트간 요청 위조
- 공격자가 의도한대로 사용자가 행동하게 하여 특정 웹페이지를 보안에 취약하게 한다거나 수정, 삭제 등의 작업을 하게 만드는 공격 방법
이를 막기 위한 방법
1) 사용자의 요청에 referrer를 확인하여 도메인이 일치하는지 확인
- 요청헤더에서 referrer 정보를 확인할 수 있음
- 같은 도메인에서 들어오는 접속은 허용하나 다른 도메인에서 호출할 때는 차단
2) 상태를 변화시키는 POST, PUT 등의 요청에 대해 csrf 토큰이 포함되어야만 요청을 처리
[대칭키, 비대칭키]
둘 다 양방향 암호화 방식
1) 대칭키
- 암호화와 복호화에 같은 암호 키 사용
(중간에 누군가 암호키를 가로채면 정보 유출될 수 있는데 이를 보완한 방식이 비대칭키)
2) 비대칭키
- 암호화와 복호화할 때 서로 다른 키 사용
(타인에게 노출되어서는 안되는 개인키와 공개적으로 개방되어있는 공개키)
[TDD(Test-Driven-Development)]
- 작은 단위의 테스트 케이스 작성하고 그에 맞는 코드를 작성하여 테스트를 통과한 후에 상황에 맞게 리팩토링하는 테스트 주도 개발 방식
728x90'cs' 카테고리의 다른 글
CORS (Cross-Origin Resource Sharing), SOP (Same-Origin Policy) (1) 2024.11.26 Web server , WAS (0) 2024.10.15 cpu, 코어, 프로세스, 스레드, 스케줄링 (1) 2024.08.06 오버로딩, 오버라이딩 (0) 2024.07.15 다음글이전글이전 글이 없습니다.댓글