본문 바로가기

항해99 기술면접 대비

(16)
23.11.17 항해 99 16기 기술면접 대비 1. Array, LinkedList에 대해 설명해주시고 각각 어떻게 사용하는지 말씀해주세요. 1) Array (배열) (1) Array (배열) 이란? 고정된 크기의 연속적인 메모리 공간에 원소들을 저장하는 자료구조 (2) 특징 a) 배열을 선언하는 순간에 크기를 지정하는데, 그 크기는 선언 이후 변경할 수 없다 즉 배열의 크기는 고정적 b) 선언할 때 별도의 초기화를 해주지 않는다면 배열의 크기 만큼 기본값이 채워짐 c) 배열의 물리 주소와 논리주소는 동일 이러한 특성덕분에 인덱스 연산자 사용 가능 d) 메모리 공간이 연속적으로 구성됨 2) LinkedList (연결리스트) (1) LinkedList (연결리스트) 란? 노드(Node) 들의 집합으로 각 노드는 데이터와 다음 노드를 가리키는 포인터로 ..
23.11.16 항해 99 16기 기술면접 대비 1. TDD에 대해서 설명해주세요. 1) TDD 란? Test Driven Development 의 약자로 테스트 주도 개발이라고 한다 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 당계를 반복하여 구현하며 디자인 이후 테스트 코드 작성 한 후 에 실제 코드를 작성하는 것 2) 장점 (1) 디버깅 시간의 단축 데이터가 잘못 나온다면 DB 문제인지 비지니스 레이어문제인지 UI 문제인지 실제 모든 레이어들을 전부 디버깅 해야 하지만 TDD 의 경우 자동화 된 유닛테스팅을 전제하므로 특정 버그를 손쉽게 찾을 수 있다 (2) 코드가 내 손을 벗어나기전에 가장 빠르게 피드백 받을 수 있다 개발 프로세스에서는 보통 인수테스트를 한다 이미 배치된 시스템을 대상으로 클라이언트가 의뢰한 소프트웨어가..
23.11.03 항해 99 16기 기술면접 대비 1. CI/CD에 대해서 설명해주세요. 1) CI (Continuous Integration) 지속적 통합 빌드 / 테스트 자동화 과정이다 CI 를 성공적으로 구현할 경우 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 공유 레포지토리에 통합되므로 여려명의 개발자가 동시에 코드 작업을 할 경우 충돌할 수 있는 문제를 해결할 수 있다 2) CD (1) Comtinuous Delivery 지속적인 서비스 제공 반복적인 작업을 자동화한 CI 과정을 거친 소스코드를 레포지토리에 반영하는 단계이다 바로 프로덕션 단계로 배포하는 지속적인 배포 단계로 확장이 가능하지만 따로 테스트 환경에 배포하여 추가적인 여러 사용자 차원에서 테스트를 검증 할수 있는 단계이다 (2) Continuous ..
23.11.01 항해 99 16기 기술면접 대비 1. 대용량 트래픽 발생 시 어떻게 대응해야 하나요? 1) 스케일 업 과 스케일 아웃 (1) 스케일 업 a) 기존 서버의 사양을 업그레이드하여 시스템을 확장하는 것 b) 하나의 서버의 사양을 업그레이드하기 때문에 수직 스케일로 불리기도함 c) 장점 (a) 추가적인 네트워크 연결 없이 용량 증강 가능 (b) 스케일 아웃보다 관리 비용이나 운영 이슈가 적고, 사양만 올리면 되기 때문에 비교적 간단함 (c) 서버의 개수가 1대이므로 데이터의 일관성이 유지됨 d) 단점 (a) 하드웨어적 비용부담이 크고, 허용 범위가 정해저 있으므로 성능 향상에 한계가 있다 (b) 서버 한대가 부담하는 양이 많고, 문제가 생기면 다운타임이 발생한다 (2) 스케일 아웃 a) 하나의 장비에서 서버를 여러 대 추가하여 시스템을 확장하..
23.10.26 항해 99 16기 기술면접 대비 1. DI, IoC에 대해 설명해주세요. 1) DI (1) DI란? Dependency Injection의 줄임말로 객체가 의존하는 또다른 객체를 외부에서 선언하고 이를 주입받아 사용하는 것으로 의존관계 주입이라고 불린다 예) 햄버거 가게 요리사는 햄버거 레시피에 의존한다 라고 가정할때 햄버거 레시피가 변화되었을때 요리사는 이에 맞추어 햄버거 만드는 방법을 수정해야한다 레시피의 변화가 요리사의 행위에 영향을 미쳤기 때문에 요치사는 레시피에 의존한다 라고할 수 있다 (2) DI 장점 (a) 주입받는 대상이 변하더라도 구현 자체를 수정할 일이 없거나 줄어들게 되므로 의존성이 줄어든다 (b) 별도로 구현하게 되면 다른 클래스에서 재사용이 가능하므로 재사용성이 높은 코드가 된다 (c) 테스트 하기 좋은 코드가 ..
23.10.25 항해 99 16기 기술면접 대비 1. 쿠키, 세션의 개념과 차이를 설명해보세요 1) 쿠키란? (1) 클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어있는 작은 데이터파일 (2) 사용자 인증이 유효한 시간을 명시할 수 있고 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지됨 (3) 클라이언트의 상태 정보를 로컬에 저장했다가 참조 (4) 클라이언트에 300개 까지 쿠기 저장 가능하고 하나의 도메인 당 20개의 값만 가질 수 있으며, 하나의 쿠키값은 4KB 까지 저장 가능 (5) Response Header 에 Set-Cookie 속성을 사용하면 클라이언트에 쿠키를 만들 수 있따 (6) 쿠키는 사용자가 따로 요청하지 않아도 브라우저가 Request 시에 Request Header 를 넣어서 자동으로 서버에 전송함 2) 세션이란? (..
23.10.24 항해 99 16기 기술면접 대비 1. CORS(Cross Origin Resource Sharing)에 대해 설명해주세요. 1) CORS 란? 교차 출처 리소스 공유라고 불리며 출처가 다른 자원들을 공유한다는 뜻으로 한출처에 있는 자원에서 다른 출처에 있는 자원에 접근하도록 하는 개념 출처란 프로토콜 + 호스트 + 포트 3가지가 같으면 동일 출처라고 부르고 이중 하나라도 다른 경우 CORS 정책에 준수하여 요청해야만 정상적으로 응답을 받을 수 있다 2) 필요이유 모든 곳에서 데이터를 요청할 수 있게 된다면 다른사이트에서 원래 사이트를 흉내낼수도 있다 이런 공격을 할 수 없도록 브라우저에서 보호하고 필요한 경우에만 서버와 협의하여 요청 할 수 있도록 하기 위해 필요하다 2. 브라우저의 작동 방식에 대해서 설명해주세요. 1) URL 입력 ..
23.10.23 항해 99 16기 기술면접 대비 1. RDBMS의 정규화에 대해 설명해주세요. 1) RDBMS의 정규화란? RDBMS 를 설계할 때 중복을 최소화 하면서 데이터 구조를 짜는 프로세스다 정규화를 하는 이유는 이상현상 (Anomaly) 이 발생하기 때문이다 (1) 1정규형 (1NF) : 테이블 컬럼이 원자값(하나의 값)을 갖도록 테이블을 분해하는 것 (2) 2정규형 (2NF) : 1정규화를 진행한데 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것 * 완전 함수 종속 : 기본키의 부분집합이 결정자가 되어선 안됨 (3) 3정규형 (3NF) : 2정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해 * 이행적 종속 : A->B, B->C, A->C 성립 (4) 보이스-코드 정규형 (BNCF) : 3정규화를 진행한 ..
23.10.20 항해 99 16기 기술면접 대비 1. NoSQL과 RDBMS의 특징과 차이점에 대해서 장, 단점을 들어 설명해주세요. 1) RDBMS 란? 관계형 데이터베이스 관리 시스템이다 RDB 를 관리하는 시스템이고 RDB 는 관계형 데이터 모델을 기초로 두고 모든 데이터를 2차원 테이블 형태로 표현하는 DB 이다 따라서, RDBMS 는 다른 테이블들과 관계를 맺고 모여있는 집합체라고 할 수 있다 이런 관계를 나타내기 위해 외래 키 (foreign key) 라는 것을 사용한 테이블 간 Join이 가능하다는게 가장 큰 특징이다 (1) 장점 a) 정해진 스키마에 따라 데이터를 저장해야 하므로 명확한 데이터 구조를 보장 b) 각 데이터를 중복없이 한 번만 저장 할 수 있다 (2) 단점 a) 테이블간 관계를 맺고 있어 시스템이 커질 경우 join 문이 ..
23.10.19 항해 99 16기 기술면접 대비 1. N+1 문제의 발생 이유와 해결 방법에 대해 설명해주실 수 있을까요? 해결 방법은 3가지 이상 말씀해주시면 좋습니다. 1) N+1 문제란? 연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 갯수 (n) 만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오는 현상 2) 발생 이유? JPA가 JPQL 을 분석해서 SQL 을 생성할 때는 글로벌 Fetch 전략을 참고하지 않고 오직 JPQL 자체만을 사용하기 때문이다 3) 해결 방법 a) Fetch Join JPQL 을 사용하여 DB 에서 데이터를 가져올 때 처음부터 연관된 데이터까지 같이 가져오게 하는 방법 (SQL Join 문을 생각하면 된다) 별도의 메소드를 만들어 줘야 하며 @Query 어노테이션을 사용해서 " join fetch 엔..