Tech Interview

기술 면접 스터디
Tech Interview/Language

[Language] Spring vs Spring MVC vs Spring Boot

✔️ Spring vs Spring MVC vs Spring Boot Spring Spring 프레임워크에서 의존성 주입은 가장 중요한 특징임 의존성 주입을 적절히 사용하면 느슨하게 결합된 애플리케이션을 개발할 수 있으며 느슨하게 결합된 애플리케이션들은 단위 테스트를 하기 쉽도록 만듦 스프링 프레임워크에서는 간단한 어노테이션인 @Component와 @Autowired를 사용해 의존성 주입을 이용하여 느슨한 결합을 하도록 함 또한 많은 스프링 모듈을 사용해 의존성 주입의 핵심을 구성함 이미 해결된 문제의 경우 이 솔루션을 제공하는 다른 프레임워크들과의 좋은 통합을 통해 사용하도록 함 Spring MVC Spring MVC 프레임워크는 디커플된 웹 애플리케이션 개발 방법을 적용해 Dispatcher Serv..

Tech Interview/Language

[Language] 스프링 프레임워크

✔️ 스프링 프레임워크 스프링 프레임워크란? 자바 엔터프라이즈 개발을 편하게 해주는 경량급 오픈소스 애플리케이션 프레임워크 POJO 기반의 엔터프라이즈 애플리케이션 개발을 쉽고 편하게 하는 것을 목표로 함 자바 애플리케이션을 개발하는데 필요한 하부구조를 스프링이 처리해 포괄적으로 제공하므로 개발자가 애플리케이션 개발에만 집중하도록 함 동적 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공함 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자 정부 표준 프레임워크의 기반 기술

Tech Interview/Language

[Language] 고유 락

✔️ 고유 락 고유 락이란? 자바의 모든 객체는 락을 가지고 있으므로 고유 락이라고 하며 모니터처럼 동작한다고 하여 monitor lock 혹은 monitor이라고 함 여러 스레드가 공유 자원에 접근할 경우 발생하는 동시성 문제를 해결하기 위해 스레드를 제어해야 함 Synchronized Lock 고유 락을 이용해서 스레드의 접근을 제어함 고유 락을 이용해 synchronized 블록 단위의 락의 획득과 해제가 일어나므로 구조적인 락이라고 함 블록을 진입할 때 락의 획득이, 블록을 벗어날 때 락의 해제가 일어남 여러 스레드가 동시에 작동할 때, 한 스레드가 쓴 값을 다른 스레드가 볼 수 있는 가시성을 보장 public class Counter{ private Object lock = new Object(..

Tech Interview/Language

[Language] 스레드

✔️ 스레드 스레드란? 하나의 작업 단위 멀티스레딩은 하나의 프로세스 안에 여러 개의 스레드가 동시에 작업을 수행하는 것을 뜻함 자바에서는 2가지 방법으로 스레드를 구현함 스레드 구현과 실행 Runnable 인터페이스 구현 run() 메소드를 오버라이딩하게 됨 Runnable 인터페이스를 구현하므로 다른 클래스를 상속 받을 수 없음 start() 메소드가 없기 때문에 Runnable 인터페이스를 구현한 클래스의 객체를 만들어 Thread를 생성할 때, 생성자의 매개변수로 넘어주고 쓰레드 객체의 start() 메소드를 수행함 즉, Thread 클래스의 static 메소드인 currentThread()를 호출하여 현재 스레드에 대한 참조를 얻어와서 호출해야 함 start() 메소드를 호출하면 JVM은 다수의..

Tech Interview/Language

[Language] 리플렉션

✔️ 리플렉션 리플렉션이란? 이미 로딩이 완료된 클래스에서 또는 다른 클래스를 동적으로 로딩하여 구체적인 타입을 알지 못하더라도 생성자, 멤버 필드, 그리고 멤버 메소드를 사용할 수 있는 기법 즉, 런타임에 동적으로 특정 클래스의 정보를 객체화하여 분석 및 추출해낼 수 있음 객체를 통해서 클래스의 패키지 정보, 접근 지정자, 부모 클래스, 어노테이션 등을 얻을 수 있음 실행 시간에 다른 클래스를 동적으로 로딩하여 접근할 필요가 있을 때 사용 하지만 외부에 공개되지 않은 private 멤버도 메소드를 통해 지정할 경우 접근과 조작이 가능하기 때문에 주의해서 사용해야 함 또한 리플렉션은 동적으로 해석되는 유형이 포함되어 특정 JVM 최적화를 수행할 수 없어 성능이 떨어지므로 성능에 민감한 애플리케이션에서 자..

Tech Interview/Language

[Language] 동기화와 비동기화

✔️ 동기화와 비동기화 동기화란? 한 자원에 동시에 접근하는 것을 제한하는 것으로, 순차적으로 진행하도록 함 다음에 실행될 명령은 현재 실행 중인 명령이 종료될 때까지 대기하도록 함 서버와 클라이언트가 주고 받는 것이 동시에 이루어지는 형태 Java에서는 synchronized 키워드를 사용해 스레드 간 상호 배제를 구현하여 멀티 스레드의 접근을 제한함 메소드 단위와 블록 단위에 적용할 수 있음 단, 메소드 단위로 지정할 경우 메소드 전체에 락이 걸리므로 가능하면 블록을 활용해 임계 영역을 작게 만들도록 함 synchronized 키워드를 기반으로 구현된 Collection들도 존재하지만 API가 적고 성능도 좋지 않으므로 synchronized 키워드가 적용된 범위가 좁아 좋은 성능을 낼 수 있는 Co..

Tech Interview/Language

[Language] Record

✔️ Record Record란? 순수히 데이터를 보유하기 위한 클래스 Record는 자동으로 필드를 private final로 선언하여 만들어주고, 생성자와 getter까지 암묵적으로 생성해주게 됨 또한 자동으로 equals, hashcode, toString도 생성되므로 매우 편리함 이때 자동으로 만들어지는 getter 메소드의 경우, getXXX()가 아닌, 필드명으로 생성되게 됨 기존의 Entity나 DTO 구현에 있던 형식을 Record 타입의 클래스로 만들면 상당히 단순하게 사용할 수 있음 /* 기존의 Entity나 DTO 구현 */ public class Person { private final String name; private final int age; public Person(Stri..

Tech Interview/Language

[Language] 직렬화와 역직렬화

✔️ 직렬화와 역직렬화 직렬화란? 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트 형태로 데이터를 변환하는 기술 즉, JVM의 메모리에 상주되어 있는 객체 데이터를 바이트 형태로 변환하는 기술 각자 PC의 OS마다 서로 다른 가상 메모리 주소 공간을 가지기 때문에 참조형 타입의 데이터들은 인스턴스를 전달할 수 없음 그러므로 이 문제를 해결하기 위해서는 주소 값이 아닌, 바이트 형태로 직렬화된 객체 데이터를 전달해야 함 직렬화된 데이터들은 모두 기본형 타입이 되고, 이는 파일 저장이나 네트워크 전송 시 파싱이 가능한 유의미한 데이터가 됨 JVM에서 상주하는 객체 데이터를 영속화하거나 Sevlet Session, Cache, Java Remote Metho..