• 자바에서 null을 안전하게 다루는 방법?

    • 공개 메서드가 아닌 곳에는 assert를 사용하여 null을 방어할 수 있습니다.
    • 공개 메서드에서는 Objects.requireNonNull()을 통해 메서드 인자의 null을 명시적으로 검증할 수 있습니다.
    • 리턴 타입에서는 Optional을 활용해 null을 직접 반환하지 않도록 방지할 수 있으며, 이러한 방식들을 통해 사전 조건과 사후 조건을 명확히 정의하고 계약에 의한 설계를 실천할 수 있습니다.
    • (assert: 개발 중 내부 상태의 불변 조건을 검증하는 용도로, 공개 API가 아닌 비공개 메서드나 내부 로직에서 사용하는 것이 적절함.)
  • try-with-resource에 대해서 설명

    • Java 7에서 도입된 문법으로 AutoCloseable 또는 Closeable을 구현한 객체를 try 블록 안에서 선언하면 블록이 끝난 후 자동으로 close() 됩니다.
    • 이전에는 finally에서 수동으로 자원을 닫아야 했고, 누락 시 자원 누수, 중복 코드, 예외 누락 등의 문제가 발생했는데, 이를 해결하기 위해 try-with-resources가 도입됐습니다.
    • Java 9부터는 try 블록 바깥에서 선언된 자원도 try()에 전달할 수 있게 개선되어, 코드 가독성이 더 좋아졌습니다.
  • @Transactional, (readOnly = true) ?

    • @Transactional은 스프링에서 트랜잭션을 선언적으로 관리하기 위한 어노테이션이며, readOnly = true 옵션은 읽기 전용 트랜잭션임을 명시하여 Hibernate의 flush 최적화 등 성능 향상을 유도할 수 있습니다.
    • 또한, 코드의 의도를 명확하게 표현할 수 있어 유지보수에도 유리합니다.
    • @Transactional(readOnly = true)는 조회만 수행하는 메서드에 붙이는 트랜잭션 설정으로, 내부적으로 flush를 생략함으로써 성능을 최적화하고, 코드 상에서 읽기 전용임을 명확하게 표현할 수 있어 실수도 방지할 수 있습니다.
  • 일관성과 무결성

    • 일관성은 트랜잭션이 실행되기 전과 후에 데이터가 항상 비즈니스 규칙에 맞는 유효한 상태를 유지해야 한다는 개념입니다.
    • 무결성은 데이터의 정확성과 신뢰성을 보장하기 위해 적용되는 제약 조건의 집합이며, PRIMARY KEY, NOT NULL, FOREIGN KEY 등이 대표적인 예입니다.
  • 트랜잭션 격리수준?

    • 트랜잭션 격리수준은 고립도와 성능 트레이드 오프를 조절합니다.
    • READ UNCOMMITTED : 다른 트랜잭션에서 커밋되지 않은 내용도 참조할 수 있다.
    • READ COMMITTED : 다른 트랜잭션에서 커밋된 내용만 참조할 수 있다.
    • REPEATABLE READ : 트랜잭션에 진입하기 이전에 커밋된 내용만 참조할 수 있다.
    • SERIALIZABLE : 트랜잭션에 진입하면 락을 걸어 다른 트랜잭션이 접근하지 못하게 한다. (성능 매우 떨어짐)
  • JDK, JRE

    • JDK는 자바 애플리케이션을 개발하고 실행할 수 있는 도구이며 JRE를 포함하고 있습니다.

    • JRE는 자바 애플리케이션을 실행시키는 데 필요한 도구가 들어있는 차이가 있습니다.

    • 운영서버와 같은 곳에서는 개발에 필요한 도구가 아닌 프로그램을 실행시키는 도구만 필요하기 때문에 개발도구가 들어있는 JDK 아닌 JRE를 설치합니다.

      javac MyApp.java → MyApp.class (바이트코드 생성)
      java MyApp → JVM 시작 → 클래스 로딩 → 바이트코드 검증 → 실행 (인터프리트 또는 JIT으로 기계어 변환)
  • Redis?

    • key-value기반의 In-Memory NoSQL입니다.
    • 싱글스레드로 동작하며 빠르게 동작하고 자료구조를 지원합니다.
    • 스프링에서는 세션 저장소, 캐시 저장소, 메시지 브로커(Pub/Sub, Stream) 등 다양한 역할로 활용됩니다.
  • MongoDB?

    • JSON 기반의 문서 형태로 데이터를 저장하는 NoSQL 데이터베이스로, 유연한 스키마와 수평 확장에 강한 구조 덕분에 대용량 데이터 처리 및 비정형 데이터 저장에 자주 사용됩니다.
  • HTTP, HTTPS

    • HTTP는 따로 암호화 과정을 거치지 않기 때문에 중간에 패킷을 가로챌 수 있고, 수정할 수 있습니다. 따라서 보안이 취약해짐을 알 수 있습니다. 80번 포트를 사용합니다.
    • 이를 보완하기 위해 나온 것이 HTTPS입니다. 중간에 암호화 계층을 거쳐서 패킷을 암호화합니다. 443번 포트를 사용합니다.
    • SSL/TLS 암호화 계층을 통해 데이터를 암호화하여 보안성을 확보합니다.
  • 3-Tier, 4-Tier (웹 아키텍처)

    • 3-Tier는 클라이언트 - 웹 서버 - DB 서버로 구성된 기본적인 계층 구조이며, 웹 서버가 뷰 처리와 비즈니스 로직을 함께 담당합니다.
    • 4-Tier는 비즈니스 로직을 별도의 API 서버로 분리해 웹 서버는 클라이언트 응답 처리에 집중하고, API 서버는 로직과 데이터 처리를 담당하여 보안성과 확장성을 높인 구조입니다.

1. javac MyApp.java
   → 자바 컴파일러(javac)가 소스코드(.java)를 바이트코드(.class)로 변환

2. java MyApp
   → JVM이 시작되면서 다음 단계 수행:
      ① 클래스 로더: 필요한 클래스(.class 파일) 로딩
      ② 바이트코드 검증기: 코드의 안전성과 적합성 검사
      ③ 실행 엔진: 인터프리터 또는 JIT 컴파일러로 실행
         - 인터프리터: 한 줄씩 해석하며 실행
         - JIT: 자주 쓰이는 바이트코드를 기계어로 변환하여 성능 향상

// javac는 컴파일 단계(정적), java는 실행 단계(동적, JVM이 시작됨)

'CS 및 면접복기' 카테고리의 다른 글

20250808  (3) 2025.08.08
20250807 - ALL  (3) 2025.08.07
20250805 - DB(1)  (4) 2025.08.05
20250804 - Java(2)  (4) 2025.08.04
20250803 - Java (1)  (1) 2025.08.03

+ Recent posts