본문 바로가기

Study/면접준비

[4주차] 면접질문정리 (스터디)

 

 

 

1. Swagger란?  (사용방법 살짝 알아두기)

 

더보기

 

API 문서화 도구, API 문서를 자동으로 생성하고 관리하는 오픈 소스 프레임워크

 

- API 문서 자동 생성 

  Swagger는 API에 대한 명세를 기반으로 자동으로 문서를 생성하며, 사용자에게 API 사용법을 명확하게 제공.

 

- API 디자인 및 테스트

  시각적으로 디자인하고 수정할 수 있으며, 실제로 실행하지 않고도 API요청 및 응답 시뮬레이션 가능.

 

- 다양한 언어 및 프레임워크 지원


 

[ Springboot에서 Swagger 적용 ]  _ Springboot 2.0대 버전 추천

 

* build.gradle에 라이브러리 적용

implementation 'io.springfox:springfox-swagger2:2.9.2'
implementation 'io.springfox:springfox-swagger-ui:2.9.2'

 

 * Swagger 설정을 위한 SwaggerConfig 클래스 파일 생성

   @Configuration 어노테이션

 

* Controller 클래스에 API 명세 정의.


 

[ Swagger 어노테이션 ]

 - @Api : 해당 클래스가 Swagger 문서에 표시될 때의 정보 정의 (API의 제목, 설명 )

 - @ApiOperation : 해당 메서드가 어떤 역할을 하는지에 대한 정보 정의 ()

 - @ApiParam : 

 

 


 

https://velog.io/@banjjoknim/Swagger

 

Swagger로 API 문서 자동화를 해보자

Swagger라는 툴을 사용해서 API를 문서화 해보자.

velog.io

 

 

 

 

 

 


2. extends와 implements 차이

 

더보기

 

* extends

자식클래스에서 부모클래스를 상속받을 때 사용. Java에서는 단일상속만 허용.

class Parent {
    // 부모 클래스의 멤버들
}

class Child extends Parent {
    // 자식 클래스의 멤버들
}

 

 

* implements 

클래스에서 인터페이스를 상속받을 때 사용. 다중상속 가능.

interface InterfaceA {
    // 인터페이스 A의 메서드 선언들
}

interface InterfaceB {
    // 인터페이스 B의 메서드 선언들
}

class MyClass implements InterfaceA, InterfaceB {
    // 클래스의 구현
}

 

 

 

 

 

 


3. solid 원칙

 

더보기

 

SOLID

객체지향 프로그래밍에서 코드의 설계 원칙.

 

1. 단일 책임 원칙 (Single Responsibility Principle, SRP)

  하나의 클래스는 하나의 책임만 가져야 함.

=> 클래스 변경 시 발생하는 부작용 최소화, 코드의 응집성 향상

 

2. 개방 / 폐쇄 원칙 (Open / Closed Principle, OCP)

  소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에 대해서는 열려 있어야 하지만 변경에 대해서는 닫혀 있어야 함.

=> 기존 코드 변경없이 확장을 통해 새로운 기능 추가

 

3. 리스코프 치환 원칙 (Liskov Substitution Principle, LSP)

  자식 클래스는 언제나 부모 클래스를 대체할 수 있어야 함.

=> 기존 클래스를 상속한 자식 클래스는 부모 클래스의 기능을 사용할 수 있어야 함, 다형성 유지.

 

4. 인터페이스 분리 원칙 (Interface Segregation Principle, ISP)

  하나의 큰 (범용)인터페이스보다 여러 개의 작은 인터페이스가 더 나음.

=> 각 클라이언트는 자신이 필요로 하는 인터페이스에만 의존.

 

5. 의존관계 역전 원칙 (Dependency Inversion Principle, DIP)

   고수준 모듈은 저수준 모듈에 의존해서는 안됨. 두 모듈 모두 추상화에 의존해야함.

=> 구체적인 구현이 아닌 추상 인터페이스 / 추상 클래스에 의존.

 

 

 

 

 


4. API, HTTP API와 REST API의 차이점 (다시보기)**

 

 

더보기

 

* HTTP API 

 - HTTP 프로토콜을 사용하여 통신하는 API.

 

* REST API

 - REST 아키텍처 스타일을 따르는 API.

    Representational State Transfer

 

* REST

 - HTTP를 기반으로 하며, URI를 사용하여 리소스를 식별.

 - HTTP 메서드(GET, POST, PUT, DELETE, PATCH)를 통해 자원의 행위를 지정.

 - 리소스를 여러 형태로 표현하고, 리소스 간의 상태 전이를 통해 상호작용.

 - 클라이언트-서버 구조, 무상태, 캐시 처리 가능, 계층화, 인터페이스 일관성

 


https://phyho.tistory.com/196 

 

[용어정리] RESTful API 에 대해서

https://aws.amazon.com/ko/what-is/restful-api/ RESTful API란 무엇인가요? - RESTful API 설명 - AWS Amazon API Gateway는 어떤 규모에서든 개발자가 API를 손쉽게 생성, 게시, 유지 관리, 모니터링 및 보안 유지할 수 있도

phyho.tistory.com

 

 

 

 

 

 


5. DB 인덱싱에 대해서 알고 있는지

 

 

더보기

 

데이터베이스 테이블에서 특정 컬럼(열)에 대한 검색 및 쿼리 성능을 향상시키기 위해 사용되는 기술.

 

 

* index : 데이터베이스 테이블에 대한 검색 속도를 향상시켜주는 자료구조. (책의 목차 역할)

특정 컬럼에 인덱스를 생성하면, 해당 컬럼의 값과 물리적 주를 key, value 형식으로 별도 메모리 공간에 저장.


* index 장점

 - 빠른검색속도 : 인덱스의 키를 기반으로 빠른 검색.

 - 정렬 및 그룹화 성능 향상 : ORDER BY 및 GROUP BY와 같은 연산이 빨라짐.

 - 고유 제약(Unique Constraint) 지원 : 해당 컬럼에 대한 인덱스는 중복을 방지하고 빠른 고유성 검사 제공.

 - 조인 성능 향상 : 조인 컬럼에 대한 인덱스를 사용하면 조인 연산이 빨라짐.

 - 범위 검색 성능 향상 : BETWEEN, >, <, >=, <= 와 같은 범위 검색에 대한 성능 향상.


*index 단점

 - 저장공간소요

 - 데이터 삽입, 수정, 삭제 시 추가작업 필요.

 - 검색 성능 저하

 


* index 자료구조

 

 - 해시테이블 (Hash Table)

  Key와 Value를 한 쌍으로 데이터를 저장하는 자료구조.

  키를 해시 함수를 통해 고유한 해시 코드로 변환하고 이를 배열의 인덱스로 사용하여 값을 저장하고 검색.  

  (key, value) = (컬럼의 값, 데이터의 위치)

 

=> 빠른 검색 속도 / 충돌 문제 발생, 불연속적인 메모리 할당

 

 - B-Tree 

  균형 이진 트리의 일종으로, 대용량 데이터베이스에서 사용되는 인덱스 구조.

  각 노드는 여러 개의 키와 해당 키에 대응하는 자식 노드로 구성. 

 

=> 순차적인 엑세스, 높은 확장성, 연속적인 메모리 할당

 

 

 

 

 

 

6. 자바에서 for, if, while, switch 기본 문법 양식 작성 (안보고 손으로 써보기연습)

 

 

더보기

 

for ( int i ; i < 10 ; i ++ ) {

     반복할 로직 

}


if (조건식1) {

    조건식1에 대한 실행문

} else if (조건식2) {

    조건식2에 대한 실행문

} else {

   그 외 조건에 대한 실행문

}


while (반복을 위한 조건식) {

   반복할 로직

}


 

switch (조건) {

    case value1 :

          조건이 value1일때 실행문.

          break;

    case value2 :

          조건이 value2일때 실행문.

          break;

    default :

          그 외 조건에 대한 실행문.

}

 

* break 가 없다면 해당하는 case 이후의 모든 case가 실행.

 

 

 

 

 

 

7. 쿠키와 세션의 차이점

 

더보기

 

* 쿠키 (Cookie)

 - 클라이언트 측(웹 브라우저)에 저장.

 - 보안에 취약.

 - 저장 가능한 쿠키 개수 및 크기 제한.

 - 만료 날짜 지정 가능.

 

 

* 세션 (Session)

 - 서버 측에 저장.

 - 쿠키에 비해 안전하나 세션ID 유출 주의 필요.

 - 저장용량 제한 없음.

 - 브라우저 종료 시 세션 종료.

 


 

https://phyho.tistory.com/139

 

20230825 _[60일차]_01. admin-member 페이지 & login 아이디 쿠키에 저장

admin-multiBoard 에 게시판종류를 추가하면 일반 페이지 multiboard 옆쪽으로 버튼도 계속 추가되도록 만들어줄예정 아래그림처럼 추가를 위한 입력창을 만들어서 맨 오른쪽의 확인버튼을 누르면 추

phyho.tistory.com

 

 

 

 

 

 

8. SI / SM / Solution 차이점

 

 

더보기

 

* SI (System Integration) 시스템 통합

프로젝트의 기획, 설계, 개발, 유지보수까지 통합 시스템을 구축하는 서비스를 제공.

 

* SM (System Maintenance) 개발 유지보수

이미 구축된 시스템에 대해 오류 수정, 기능 개선, 추가 등 관리/점검하는 서비스를 제공.

 

* Solution 솔루션

완성된 프로그램(제품)을 고객의 요구사항에 맞게 수정하여 제공.

 

 

 

 

 

 

 

9. Exception에 대해 설명.

 

 

더보기

 

* 예외 처리 (Exception Handling)

프로그램이 실행 중 예상치 못한 문제(오류)에 대응하는 방법.

자바에서는 ' java.lang ' 패키지에 예외 클래스들이 정의되어 있어 예외 처리에 사용됨.

 

* 에러 (Error)

프로그램이 원인을 알 수 없이 비정상적으로 작동하거나 종료되어 더이상 작업을 수행할 수 없는 상황.


 

*컴파일 에러 : 컴파일 시점에서 발생하는 에러. 소스코드의 오타, 자료형의 불일치 등

 

*런타임 에러 : 프로그램 실행 시점에서 발생하는 에러. 

 

 - 에러 (Error) : 발생하면 복구할 수 없는 심각한 오류.

                         메모리 부족(OutOfMemoryError), 스택오버플로우(StackOverflowError)

 

 - 예외 (Exception) : 발생해도 수습이 가능한 오류.

                                 NPE(NullPointException)

 

 *논리적 에러 : 컴파일도 정상이고 실행도 되지만 의도와 다르게 동작하는 에러.


* 예외 클래스의 계층구도

최상위 객체 Object 아래에 Throwble이 있으며 이를 상속받는 Error와 Exception으로 구성.

 

 

스프링 Optional 찾아보기 ****

 


https://phyho.tistory.com/67

 

 

 

 

 

 

 

10. DB 각종 제약사항(Constraint)들 + 간단히 설명 

 

 

더보기

 

* PRIMARY KEY 

  하나 이상의 열(attribute)로 구성되어 테이블의 튜플을 식별하기 위해 사용. 중복값 / Null값 불가.

 

* FOREIGN KEY

  attribute가 다른 테이블의 기본키를 참조. 참조 무결성.

 

* UNIQUE

  고유한 값을 가지는 attribute (중복값 불가),  Null값 가능.

 

* NOT NULL

  Null값을 가질 수 없는 attribute.

 

* DEFAULT

  attribute의 기본값 지정. 명시된 값이 없는 경우 자동으로 default값이 적용.

 

* CHECK

  attribute의 값을 조건을 걸어 제한.