Development
23.12.06 수정
좋은 코드란?
가독성(코드 컨벤션), 중복 x, 테스트하기 좋은 코드
파이썬 DRY ...
RESTful API란?
REpresentational State Transfer
RESTful 하게 API를 디자인한다는 것은 무엇을 의미하는가?
1. 리소스와 행위를 명시적이고 직관적으로 분리한다.
2. Message는 Header와 Body를 명확하게 분리해서 사용한다.
3. API 버전을 관리한다.
4. 서버와 클라이언트가 같은 방식을 사용해서 요청하도록 한다.
장점
1. Open API를 제공하기 쉽다.
2. 멀티플랫폼 지원 및 연동이 용이하다.
3. 원하는 타입으로 데이터를 주고받을 수 있다.
4. 기존 웹 인프라(HTTP)를 그대로 사용할 수 있다.
단점
1. 사용할 수 있는 메서드가 한정적이다.
2. 분산 환경에는 부적합하다.
3. HTTP 통신 모델에 대해서만 지원한다.
프레임워크와 라이브러리의 차이
제어 흐름에 대한 주도권이 누구에게/어디에 있는 가에 있다.
프레임워크는 전체적인 흐름을 쥐고 있고, 개발자는 그 안에서 라이브러리에 대한 흐름을 쥐고 있다.
라이브러리는 개발자가 능동적으로 라이브러리를 호출하여 사용하기 때문에 코드의 제어 흐름의 권한이 개발자에게 있다.
프레임워크에서 코드는 프레임워크가 짜 놓은 틀에서 수동적으로 동작하기 때문에 제어 흐름의 권한이 프레임워크에게 있다.
Framework(프레임워크)란?
원하는 기능 구현에 집중하여 개발할 수 있도록 일정한 형태와 필요한 기능을 갖추고 있는 골격, 뼈대.
Library(라이브러리)란?
특정 기능을 모아둔 코드나 함수들의 집합, 코드 작성 시 활용 가능한 도구들.
최근에 사용한 프레임워크나 라이브러리는?
Function(함수)와 Method(메소드)의 차이
함수
하나의 특별한 목적의 작업을 수행하기 위해 독립적으로 설계된 코드의 집합.
메소드
객체의 기능을 구현하기 위한 클래스 내부에 구현되는 함수.
Call by value와 Call by reference
Call by value는 값에 의한 호출로, 인자로 받은 값을 복사하여 처리한다.
Call by reference는 참조에 의한 호출로, 인자로 받은 값의 주소를 참조하여 직접 저장해 값에 영향을 주는 방식이다.
#include <stdio.h>
void swap1(int a, int b) // call by value (값만 넘겨줌.)
{
int t = a;
a = b;
b = t;
}
void swap2(int* a, int* b) // call by reference (주소를 넘겨줌.)
{
int t = *a;
*a = *b;
*b = t;
}
int main()
{
int n1 = 5, n2 = 7;
printf("n1 = %d, n2 = %d\n", n1, n2);
swap1(n1, n2); // 메인 함수의 n1, n2 값이 바뀌지 않음.
printf("n1 = %d, n2 = %d\n", n1, n2);
swap2(&n1, &n2); // 메인 함수의 n1, n2 값이 서로 바뀜.
printf("n1 = %d, n2 = %d\n", n1, n2);
return 0;
}
CORS(Cross-Origin Resourcing Sharing, 교차 출처 리소스 공유)란?
브라우저에서는 보안적인 이유로 cross-origin HTTP 요청들을 제한한다. 그래서 cross-origin 요청을 하려면 서버의 동의가 필요한데 만약 서버가 동의한다면 브라우저에서는 요청을 허락하고, 동의하지 않는다면 브라우저에서 거절한다.
이러한 허락을 구하고 거절하는 메커니즘을 HTTP-header를 이용해서 가능한데, 이를 CORS라 한다.
도메인이 서로 다른 2개의 사이트가 데이터를 주고받을 때 발생하는 문제이다.
절차 지향 프로그래밍과 객체 지향 프로그래밍의 차이?
절차 지향 프로그래밍은 순차적인 처리를 중요시하는 기법으로, 대표적으로 C언어가 있다. 컴퓨터의 처리 구조와 유사해 실행속도가 빠르다.
객체 지향 프로그래밍은 실제 세계의 사물들을 객체로 모델링하여 개발을 진행하는 프로그래밍 기법으로, 대표적으로 Java가 있다. 캡슐화, 상속 다형성과 같은 특징이 있으며 절차 지향 언어보다는 실행 속도가 느리다.
동적 쿼리란? 언제 사용?
동적 쿼리란 실행 시에 특정 조건이나 상황에 따라 쿼리 문장이 변경되어 실행되는 쿼리문을 말한다.
컴파일 시 SQL 문장을 확정할 수 없는 경우에 사용한다. 실행 시점에 따라 WHERE 절의 조건이 달라질 때 사용한다.
더 자세히 알아보기!
CSRF(Cross-Site Request Forgery)란? 이를 막기 위해서는?
사이트 간 요청 위조의 약자로, 웹 애플리케이션의 취약점 중 하나이다. 공격자가 의도한 대로 사용자가 행동하게 하여 특정 웹 페이지를 보안에 취약하게 한다거나, 수정, 삭제 등의 작업을 하게 만드는 공격 방법을 의미한다.
상태를 변화시키는 POST, PUT 등의 요청에 대해 CSRF 토큰이 포함되어야만 요청을 처리하며 공격을 방어하는 방법이 있다.
TDD(Test-Driven-Development)란?
매우 짧은 개발 사이클의 반복에 의존하는 소프트웨어 개발 프로세스. 의미 그대로 테스트가 코드 작성을 주도하는 개발 방식
개발자는 요구되는 새로운 기능에 대한 자동화된 테스트케이스를 작성하고 해당 테스트를 통과하는 가장 간단한 코드를 작성한다. 일단 테스트 통과하는 코드를 작성하고, 상황에 맞게 리팩터링 하는 과정을 거치는 것이다.
테스트 코드를 작성해야 하는 이유? 어떻게 작성?
테스트 코드에는 단위 테스트, 통합 테스트, 시스템 테스트, 사용자 인수 테스트 등이 있다.
MSA(Microservice Architecture)란?
MSA는 1개의 시스템을 독립적으로 배포 가능한 각각의 서비스로 분할한다. 각각의 서비스는 API를 통해 데이터를 주고받으며 1개의 큰 서비스를 구성한다.
DDD(Domain-Driven-Design)의 계층과 각각의 역할?
- 표현 계층 (Presentation layer) : 사용자의 요청에 대해 해석하고 응답하는 일을 책임지는 계층 (Controller)
- 응용 계층 (Application layer) : 비즈니스 로직을 정의하고 정상적으로 수행될 수 있도록 도메인 계층고가 인프라스트럭처 계층을 연결해 주는 역할을 하는 계층 (Service)
- 도메인 계층 (Domain layer) : 비즈니스 규칙, 정보에 대한 실질적인 도메인에 대한 정보를 가지고 있으며, 이 모든 것을 책임지는 계층 (Entity)
- 인프라스트럭처 계층(Infrastructure layer) : 외부와의 통신을 담당하는 계층(Repository)
코드가 실행 가능한 파일이 되기까지의 과정?
소스파일 -> 전처리(전처리기) -> 컴파일(컴파일러) -> 어셈블(어셈블러) -> 링크(링커) -> 실행파일
.NET Framework의 구성?
.NET Framework란 윈도우 프로그램 개발 및 실행 환경.
구성 : 가상머신 공용언어런타임(CLR) + .NET Framework 클래스 라이브러리
공용언어런타임(CLR) : C#이나 vb닷넷으로 작성된 코드를 컴파일하면 각 언어의 컴파일러들이 중간 언어라는 동일한 형태의 결과물을 만들어내고 이 결과물을 공용언어런타임이 기계어로 변환한다. 메모리관리나 스레드관리등의 서비스를 제공하므로 프로그래머가 CPU의 자세한 부분까지 신경 쓰지 않아도 된다.
ASP .NET : 웹 구현을 위해 사용되는 기능들을 패키지화한 것.
Windows From : 윈도우 응용프로그램 개발을 위해 사용되는 기능.
ADO .NET : 데이터와 데이터서비스에 접근할 수 있는 기능.
Base Class Library : 공통적으로 사용하는 기능.
더 알아보기
함수형 프로그래밍이란?
Pure function, immutable data, first class citizen
자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임.
스칼라, 클로저
장점
1. 높은 수준의 추상화 제공
2. 함수 단위의 코드 재사용이 수월
3. 불변성을 지향하기 때문에 프로그램의 동작을 예측하기 쉬움
단점
1. 순수 함수를 구현하기 위해서는 코드의 가독성이 좋지 않을 수 있음
2. 반복 시 for문이 아닌 재귀를 통해 구현하는데 (deep copy), 재귀는 무한 루프에 빠질 수 있음
3. 순수 함수를 사용하는 것은 쉬울 수 있지만 조합하는 것은 쉽지 않음.
디버깅이란?
코드에서 정확히 어디에서 문제가 초래되었는지 범위를 좁혀가면서 버그를 빠르고 정확하게 찾아 처리하는 것
디버깅 어떻게 하시나요? In VScode
print문 찍어본다..
break point
에러가 났을 때 주로 참고하는 사이트는?
코드 최적화란?
프로그램의 속도와 성능을 향상시키는 과정.
알고리즘 최적화, 적절한 데이터 구조 선택, 불필요한 연산 제거
최적화해 본 경험?
Refactoring(리팩토링)이란?
결과의 변경 없이 코드의 구조를 재조정하는 것.
가독성을 높이고 유지보수를 편하게 한다.
버그를 없애거나 새로운 기능을 추가하는 것은 아님.
+ MVC 아키텍처 추가하기