면접 질문
테스트 코드 작성시 내가 의도한 대로 프로그래밍이 작동하는 지를 알 수 있으며 시간이 들어간다는 단점이 있다.
단위 테스트 : 클래스 또는 메소드 수준으로 정해지며
통합 테스트 : 단위 테스트 보다 더 큰 동작을 달성하기 위해 여러 모듈들을 모아 의도대로 작동하는 지 확인한다.
개발자가 변경할 수 없는 외부 라이브러리 같은 것까지 모두 묶어 검증시 사용하며 DB에 접근하거나 전체 코드와 다양한 환경이 제대로 작동하는지 확인 버그 찾기에 좋지만 유지보수 어려움
E2E테스트 : 끝에서 끝까지 검증하는 것으로 프로그램이 완성한 후 그 프로그램 자체를 검증하는 것
1. 로그인 정보를 담아 서버에 인증을 요청
2. 인증을 받은 클라이언트는 리다이렉트한 url에서 인가 코드를 서버에 넘겨줌
3. 클라이언트에서 넘겨 받은 인가 코드를 분석하여 kakao에 token요청
4. 받은 token으로 회원 정보 조회
5. 조회 받은 회원 정보 token 클라이언트에 전달
절차지향 프로그래밍 : 컴퓨터의 해야 할 일을 시간 흐름에 따라 순차적으로 프로그래밍 하는 것으로 시간적으로 유리하지만 유지보수 및 디버깅에서 어려움을 얻는다.
객체지향 프로그래밍 : 역활별로 클래스를 나누어 프로그래밍 하는 방식
자주 사용하는 기능의 경우 하나의 모듈화를 하기 때문에 하드웨어가 같은 기능을 중복으로 연산하지 않고 재활용이 가능하기에 하드웨어의 처리속도가 절차 지향보다 느리며 설계에 많은 시간이 소요된다.
관점지향 프로그래밍 : 하나의 소프트웨어가 거대한 OOP로써 설계되며 공통 모듈을 분리시켜 해당 소스 코드가 외부의 다른 클래스에서 존재하는 것이다.
model, view, controller로 이루어져 있으며 사용자의 Request를 controller에서 처리한다. controller는 business logic을 service와 같이 처리 후 결과를 model에 담고 model에 저장된 결과로 view를 제어해 사용자에게 전달한다.