본문 바로가기

728x90

개발자 면접

3-tier 아키텍처 3-tier 아키텍처는 소프트웨어 개발에서 일반적으로 사용되는 아키텍처 패턴 중 하나입니다. 이 아키텍처는 프론트엔드, 백엔드 및 데이터베이스 계층으로 구성됩니다. Presentation Layer(프레젠테이션 계층) Presentation Layer 또는 클라이언트 계층은 사용자와 상호작용하는 계층입니다. 이 계층에는 사용자 인터페이스와 브라우저가 포함됩니다. 사용자의 요청은 Presentation Layer를 통해 백엔드에 전달됩니다. Application Layer(애플리케이션 계층) Application Layer 또는 서버 계층은 비즈니스 로직이나 데이터 처리를 수행하는 계층입니다. 이 계층은 Presentation Layer와 Data Layer 사이에서 데이터를 처리하고 전달합니다. 이 계층.. 더보기
String, String Buffer, String Builder String, StringBuffer, StringBuilder는 모두 문자열을 다루는 클래스입니다. 이들의 차이점은 다음과 같습니다. String String 클래스는 불변(immutable)한 객체입니다. 즉, 한 번 생성된 문자열은 변경할 수 없습니다. 따라서, 문자열을 연결하거나 변경할 때마다 새로운 객체를 생성해야 합니다. 이는 메모리 낭비를 야기할 수 있습니다. 그러나, 불변성을 보장하기 때문에 스레드 안전성이 보장됩니다. StringBuffer StringBuffer 클래스는 가변(mutable)한 객체이며, 동기화된 메소드를 제공합니다. 따라서, 멀티쓰레드 환경에서 안전하게 사용할 수 있습니다. 또한, 문자열을 연결하거나 변경하는 등의 작업에서 새로운 객체를 생성하지 않고 기존 객체를 변경.. 더보기
Final, Finally, Finalize 비교 Final, finally, finalize는 모두 자바에서 사용되는 키워드이지만, 각각 다른 역할을 합니다. Final Final은 변수, 메소드, 클래스에 사용할 수 있으며, 다음과 같은 의미를 가집니다. 변수 : 변수의 값을 변경할 수 없음을 의미합니다. 메소드 : 메소드의 오버라이딩을 금지함을 의미합니다. 클래스 : 클래스의 상속을 금지함을 의미합니다. Finally Finally는 try-catch 문에서 사용할 수 있으며, 예외 발생 여부와 상관없이 항상 실행되는 블록입니다. 보통, 리소스 해제나 데이터베이스 연결 종료와 같은 마무리 작업을 수행하는 데 사용됩니다. Finalize Finalize는 Object 클래스에 정의된 메소드로, 객체가 Garbage Collector에 의해 수거될 때.. 더보기
객체 상태의 영속화 객체의 상태를 영속화(Persistence) 한다는 것은, 객체의 데이터를 저장장치(예를 들면 하드 디스크)에 저장하여, 프로그램이 종료되어도 데이터를 유지할 수 있는 것을 의미합니다. 객체의 상태를 영속화하면, 다시 프로그램을 실행해도 이전에 저장했던 데이터를 불러올 수 있습니다. 이러한 기능은 대부분의 애플리케이션에서 필요로 하며, 데이터베이스나 파일시스템과 같은 저장장치를 사용하여 구현할 수 있습니다. 객체의 상태를 영속화하는 방법에는 다양한 방법이 있습니다. 예를 들어, 파일 시스템을 이용해 객체를 직렬화하여 파일에 저장하거나, 데이터베이스를 이용해 객체를 데이터베이스 테이블에 저장할 수 있습니다. 또는, 메모리 내의 객체를 직접 저장할 수 있는 캐시와 같은 메모리 기반 저장장치도 있습니다. 객체.. 더보기
객체 직렬화 (Object Serializable) 자바에서 객체 직렬화(Object Serialization)는 객체를 이진 데이터로 변환하는 과정을 의미합니다. 이진 데이터로 변환된 객체는 파일에 저장하거나 네트워크를 통해 전송할 수 있습니다. 이러한 객체 직렬화는 자바의 내장 기능으로 제공되며, Serializable 인터페이스를 구현하면 사용할 수 있습니다. 객체 직렬화는 다음과 같은 특징을 가집니다. 객체 직렬화는 객체를 이진 데이터로 변환합니다. 따라서, 파일이나 네트워크와 같은 매체에 저장하거나 전송할 수 있습니다. 객체 직렬화는 객체의 상태를 그대로 저장하므로, 객체를 다시 복원할 때 원래 상태를 그대로 가져올 수 있습니다. 객체 직렬화는 객체의 필드 중 transient로 선언된 필드나 static 필드는 직렬화하지 않습니다. 객체 직렬화.. 더보기
트랜잭션 격리 수준 (Transaction Isolation level) 트랜잭션 격리 수준(Isolation Level)은 데이터베이스에서 동시성 제어를 위해 사용되는 개념입니다. 여러 개의 트랜잭션이 동시에 실행될 때, 격리 수준은 각 트랜잭션에서 어떤 다른 트랜잭션의 결과를 볼 수 있는지를 결정합니다. 4가지 트랜잭션 격리 수준 READ UNCOMMITTED: 커밋되지 않은 데이터도 읽을 수 있고, 다른 트랜잭션에서 변경 중인 데이터도 읽을 수 있습니다. 이 격리 수준에서는 Dirty Read 문제가 발생할 수 있습니다. READ COMMITTED: 커밋된 데이터만 읽을 수 있습니다. 다른 트랜잭션에서 변경 중인 데이터는 읽을 수 없습니다. 이 격리 수준에서는 Non-Repeatable Read 문제가 발생할 수 있습니다. REPEATABLE READ: 트랜잭션 동안 같.. 더보기
수평적 확장과 수직적 확장 수평적 확장과 수직적 확장은 데이터베이스 시스템에서 확장성을 높이는 방법 중에서 가장 대표적인 두 가지 방법입니다. 수직적 확장(Vertical Scaling 또는 Scale Up) 단일 서버의 성능을 개선하는 방법으로, 기존 서버의 CPU, 메모리, 디스크 등의 하드웨어 사양을 업그레이드하여 서버 자체의 성능을 향상시키는 방법입니다. 즉, 서버의 스펙을 업그레이드하여 더 많은 리소스를 할당하거나, 빠른 CPU와 빠른 메모리를 사용하여 데이터베이스 성능을 향상시키는 것입니다. 수평적 확장(Horizontal Scaling 또는 Scale Out) 여러 대의 서버에 데이터를 분산하여 처리하는 방법으로, 서버의 대수를 늘려서 데이터베이스 성능을 향상시키는 방법입니다. 즉, 여러 대의 서버를 클러스터링하여 데.. 더보기

728x90