이 포스팃은 필자가 면접을 다니며 받았던 질문들과 앞으로 받을 예상 질문들을 정리하기 위한 포스팃이며 추가로 면접을 보거나 꼭 알아야 될 내용이 있으면 수시로 채워넣을 생각이다.
- 데이터베이스
1. Mysql과 몽고DB의 차이점은?
- 가장큰 차이점은 Mysql은 관계형데이터베이스이고 몽고 DB는 비관계형데이터베이스이며 MYsql은 Sql문을 사용하여 데이터를 쿼리및 조작하고 몽고 DB는 키와 데이터의 쌍으로 사용하여 동적인 스키마를 사용함.
2. SQL과 NoSQL의 각각의 장점과 단점은?
SQL의 장점:
- SQL 데이터베이스는 ACID(원자성, 일관성, 고립성, 지속성) 트랜잭션을 지원하여 데이터의 일관성과 무결성을 보장함.
- SQL 데이터베이스는 오랜시간동안 사용해와서 안정성과 신뢰성이 높음.
SQL의 단점:
- SQL은 고정된 스키마를 가지고 있어서 데이터의 편집이 어려움.
- 수직적 확장은 용의하나 수평적인 확장을 하기 어려움.
NOSQL의 장점:
- 스키마가 없어서 유연해서 데이터의 편집을 하기 쉬움.
- 데이터를 확장하기 쉬움
- 데이터를 읽는데 빠름
NOSQL의 단점:
- 유연성으로 인해 보안성이 떨어짐
- 중복된 데이터를 추가가 가능하기 때문에 주기적으로 업데이트하고 확인해줘야 됨.
- 데이터가 여러 컬렉션에 중복되어 있어서 데이터의 수정이 필요할 때 모든 컬렉션에서 수행해줘야 함.
3. SQL을 사용하는 데이터베이스 중에서 왜 MYSQL을 사용했는가?
- MYSQL은 오랫동안 사용해왔고 안정성과 신뢰성이 높으며 정보량이 많아 참조할 문서도 많고 다양한 운영체제 지원과 확장성이 뛰어나며 효율적인 쿼리 및 인덱싱을 통해 대규모 데이터베이스에서도 빠른 속도로 사용이 가능함.
- Node.js
1. Node.js를 사용한 이유가 무엇인가?
- Node.js는 다양한 라이브러리를 가지고 있으며 수많은 패키지의 설치 및 사용이 간단하고 javascript를 사용하기 때문에 클라이언트 개발을 동시에 하기 간편함 또한 node.js는 경량성이 뛰어나 서버시작속도가 매우 빠르다.
2. Node.js는 멀티스레드인가?
- JavaScript는 기본적으로 싱글 스레드 환경에서 동작하도록 설계되었으며, 이벤트 기반의 비동기 프로그래밍 모델을 강조하기 때문에 Node.js는 싱글스레드의 원칙을 따라가려 하지만, 워커스레드를 통해 멀티스레드가 가능한 환경이다.
3. 워커스레드가 무엇인가?
- 워커 스레드는 스레드 풀 이라는 미리 정의된 일정한 개수의 스레드를 가지고 있으며 필요할 때 마다 작업을 할당하고 처리한다.
- Java 및 JavaSpring
1. 객체지향의 5대 원칙은?
- 단일책임의 원칙: 클래스는 하나의 기능만을 책임져야하며 그 책임을 완전히 캡슐화 시켜야 함.
- 개방 폐쇄의 원칙: 확장에 대해서는 열려있어야 하지만 수정에 대해서는 닫혀있어야 함.
- 리스코프 치환 원칙: 부모 객체와 자식 객체가 있을 때 부모 객체를 호출하는 동작에서 자식 객체가 부모 객체를 완전히 대체할 수 있다는 원칙.
- 인터페이스 분할 원칙: 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙
- 의존 역전 원칙: 클래스를 참조해야할 일이 생길 때 그 클래스를 직접 참조하는것이 아닌 클래스의 상위 요소(인터페이스, 추상클래스 등)를 참조해야만 함.
2. 클래스와 객체의 차이점은?
- 클래스는 객체를 구현하기 위한 설계도나 틀을 의미하며 객체는 소프트웨어 세계에서 구현하고자 하는 대상을 뜻함.
3. 자바 스프링을 사용한 이유가 무엇인가?
- 자바스프링은 강력한 보안기능을 가지고 있으며 안정성, 신뢰성, 확장성이 보장되어 있기 때문에 대규모 프로젝트에 사용에 적합하고 JPA와 같은 강력한 ORM 프레임워크를 지원하기 때문에 데이터베이스의 상호작용을 쉽게 처리할 수 있음.
4. 자바와 자바 스크립트의 차이는 무엇인가?
- 자바는 JVM(Java Virtual Machine)이라는 환경에서 돌아가며 자바스크립트는 주로 웹 브라우저를 기준으로 실행이됨. 그렇기 때문에 Node.js와 같이 특별한 경우를 제외한 경우에는 자바스크립트가 프론트엔드 개발에 더 적합한 언어임.
- 자바는 정적 타입의 언어로, 변수의 데이터 유형을 선언해야 하며 반면에 자바스크립트는 동적 타입의 언어로, 변수의 데이터 유형을 선언하지 않아도 됨.
5. @Autowired를 사용한 이유에 대해서 아는가?
- Autowired 어노테이션은 스프링이 객체의 의존성을 자동으로 주입하기 위해 사용되며 단일 생성자일 경우 생략이 가능하지만 명시성과 코드의 가독성을 위해 넣어두는 편이 좋다.
6. 의존성 주입이 무엇인지 아는가?
- 의존성 주입은 객체간의 의존성을 코드내부에서 생성하지 않고 외부에서 주입하는 생성패턴으로 외부에서 객체를 받아와 사용하기 때문에 새롭게 객체를 만들어 사용할 필요가 없다.
7. 제어의 역전이 무엇인지 아는가?
- 제어의 역전은 모든객체의 제어권을 개발자가 아닌 IOC컨테이너로 넘기는걸 말하며 코드의 결합도를 낮추고 유지보수성을 향상시켜준다.
8. Java의 버전이 8로 넘어오면서 바뀐점에 대해 아는가?
- 1. 람다 표현식 : 람다 표현식은 자바에서 익명 함수를 간단하게 표현할 수 있도록 도입되었습니다.
예시) Runnable r = new Runnable() { public void run() { System.out.println("Hello, World!"); } }; <- 자바 7버전 방식
Runnable r = () -> System.out.println("Hello, World!"); <- 자바 8버전 방식
- 2. 스트림 API : 스트림 API는 컬렉션에 대한 데이터 처리 작업을 함수형 프로그래밍 스타일로 수행할 수 있도록 지원합니다. 병렬 처리를 더 쉽게 구현할 수 있으며, 필터링, 매핑, 축소 등의 작업을 간결하게 할 수 있습니다.
예시) List<String> myList = Arrays.asList("a1", "a2", "b1", "c2", "c1"); <- 자바 7 버전 방식
for (String s : myList) {
if (s.startsWith("c")) { System.out.println(s.toUpperCase()); }
}
myList.stream()
.filter(s -> s.startsWith("c"))
.map(String::toUpperCase)
.forEach(System.out::println); <- 자바 8버전 방식
- 3. java.time 패키지 : Java 8에서는 새로운 java.time 패키지를 통해 더 현대적이고 직관적인 날짜 및 시간 처리 API가 도입되었습니다. LocalDate, LocalTime, LocalDateTime, ZonedDateTime 등 새로운 클래스를 사용하여 날짜와 시간을 더 쉽게 다룰 수 있습니다.
예시) LocalDate date = LocalDate.now();
LocalTime time = LocalTime.now();
LocalDateTime dateTime = LocalDateTime.of(2024, 10, 7, 12, 30);
- 그 이외
1. 프로세스와 스레드의 차이점은?
- process는 운영체제에서 실행하는 프로그램의 인스턴스로, 독립적인 실행 환경과 메모리를 가지고 서로 다른 프로세스 간에는 메모리 공유가 없으며, 각각 독립적으로 실행됨.
thread는 하나의 프로세스 내에서 실행되는 실행 단위로, 프로세스 내의 메모리를 공유하며 스레드는 프로세스 내의 동작 단위로 병렬 작업을 수행할 수 있음.
2. 세션와 쿠키의 차이점은?
- 쿠키는 키와 데이터를 받아 로컬(클라이언트)에 저장하는 데이터이고 세션은 쿠키를 이용하여 세션아이디를 부여하고 세션정보를 서버에 저장하고 사용함. 보안성은 서버에 저장하는 세션이 더 뛰어나지만 세션은 사이트를 닫거나 연결을 끊으면 초기화되고 쿠키는 사이트를 닫아도 로컬파일을 제거하지 않으면 계속 유지되기 때문에 쿠키가 라이플 사이클이 세션보다 훨씬 길음.
3. HTML과 HTTP가 무엇인가?
- HTTP는 Hypertext Transfer Protocol(하이퍼 텍스트 전송 프로토콜)로 말그대로 하이퍼 텍스트를 전송하는 프로토콜을 의미하며 HTML은 Hypertext Markup Language(하이퍼텍스트 마크업 언어) 이며 말 그대로 하이퍼 텍스트를 전송하기 위하여 사용되는 언어를 뜻한다.
4. 서버에서 클라이언트로 값을 보낼 때 클라이언트에서는 서버의 타입을 어떻게 알아내는가?
- HTTP의 헤더에있는 Content-Type를 통해 데이터의 타입을 알아냄.
5. Axios를 왜 사용하는가?
- axios는 비동기처리를 위한 HTTP통신 라이브러리로 서버에서 보내주는 값을 비동기 처리해주는것 뿐만아니라 서버에서 보내오는값의 형태( ex) json) 를 클라이언트에 맞춰서 바꿔줌.
'기타' 카테고리의 다른 글
| 개발자로서 해선 안될 버릇들..(닌자 코드) (0) | 2026.01.02 |
|---|---|
| <button>을 통해 <script>영역으로 값을 전달 (0) | 2025.02.14 |