분류 전체보기 119

멀티 쓰레딩

멀티쓰레딩은 여러 프로세스가 동시에 실행되는 멀티 태스킹과 달리 하나의 프로세스 내에서 여러 작업을 여러 쓰레드를 통해 동시에 실행할 수 있도록 하는 방식이다. 쓰레드는 프로세스 내에서 실행되는 작업의 최소 단위이고, 독립적으로 실행한다. 병렬 처리를 통해 여러 작업을 동시에 처리할 수 있어 성능을 향상시킬 수 있다.같은 프로세스에서 쓰레드들이 메모리와 자원을 공유할 수 있다. 그래서 여러 쓰레드가 같은 공유 데이터에 접근하려 하면 충돌이 일어날 수 있다.자원의 경쟁으로 프로그램이 교착상태에 들어갈 수 있어 주의해야 한다. 해결하기 위한 동기화 방법으로는뮤텍스, 세마포어, 모니터 방법이 있다. 뮤텍스(Mutex) 한 번에 하나의 쓰레드만 접근을 허용하는 잠금 메커니즘이다.세마포어(Semaphore) 제한..

기술면접 2025.04.24

페이징 쿼리

페이징 쿼리(Paging Query)는 관계형 데이터베이스(RDB)에서 전체 데이터를 부분적으로 나누어 데이터를 조회하거나 처리할 때 사용된다. 대용량 데이터를 효율적으로 처리할 수 있는데 페이징 쿼리를 사용하면, 필요한 데이터만 가져와 불필요한 리소스 사용을 방지할 수 있다.이것으로 데이터 로딩 시간도 단축되어서 UX도 좋아질 수 있다. 웹이나 모바일 앱에서 스크롤 방식으로 표현할 수 있고, 더 보기, 다음 페이지 같은 기능들을 만들 수 있다.MySql에서 페이징 쿼리는 일반적으로 LIMIT, OFFSET 구문이 있다. LIMIT절은 쿼리 결과에서 반환할 최대 행수를 정한다.OFFSET절은 결과 집합에서 건너뛸 행 수를 정한다.LIMIT과 함께 사용해서 페이징을 구현한다.MySql에서 축약문법도 있다...

기술면접 2025.04.23

낙관적 락 & 비관적 락

낙관적 락과 비관적 락은 데이터베이스에서 동시성 제어를 위해 사용된다. 낙관적 락은 말 그대로 데이터 충돌이 드물게 발생할 것이라고 "낙관적"으로 생각하는 것이다. 낙관적 락은 데이터를 읽을 때, 락을 설정하지 않는다.데이터 수정 시 버전 번호나 타임스탬프를 통해 다른 트랜잭션이 데이터를 수정했는지 확인한다.만약 충돌이 발생한다면, 트랜잭션을 롤백하고 다시 시도하거나 오류를 던진다.비관적 락은 데이터 충돌이 자주 발생할 것이라고 "비관적"으로 생각하는 것이다. 데이터를 읽거나 수정하기 전에 락을 먼저 획득해야 하는데,락이 해제될 때까지 다른 트랜잭션은 데이터에 접근할 수 없다.공유 락과 배타탁으로 구분된다.낙관적 락을 사용하면 리소스 사용이 적고 데드락이 발생하지 않는다.락이 없어 읽기 작업에 대한 동..

기술면접 2025.04.22

String의 타입 캐스팅과 String.valueOf()의 차이점

자바에서 Object 타입 값을 String으로 변환하는 이 두 방법에 차이점이 있다. 타입 캐스팅 => (String) Value 명시적으로 value가 실제로 String타입이거나 String의 하위 클래스여야 한다. value가 String이 아니면 ClassCastException이 발생하게 된다. String.valueOf(value)타입 캐스팅보다 더 안전한 방법으로, value의 실제 타입에 상관없이 String을 반환해 준다.문제는 value가 null이라면 문자열 "null"을 반환한다.내부적으로 value가 null이 아니라면 value.toString()을 호출한다.타입 캐스팅을 할 때 ClassCastException을 방지하려면 캐스팅하기 전에 캐스팅할 타입과 맞는지 먼저 확인 후..

기술면접 2025.04.14

트라이 자료구조

트라이 자료구조는 문자열을 효율적으로 저장하고 검색하기 위한 트리 형태의 자료구조이다.트라이는 문자열을 탐색할 때 단순히 비교하는 것에 비해서 효율적으로 찾을 수 있는데, 정점이 자식에 대한 링크를 모두 가지고 있어서 저장공간을 많이 사용한다, 주로 검색어 자동완성이나 사전 찾기 기능을 구현할 때 사용한다.트라이에서 각 노드는 하나의 문자를 나타낸다. 루트에서 특정 노드까지의 경로가 하나의 문자열이라고 생각하면 된다.같은 접두사를 가진 문자열들은 같은 경로를 가진다. 각 노드에는 단어의 끝을 표시하는 불린 값이 있다. 트라이 자료구조를 사용하면 문자열 검색이 매우 빠르다. 접두사 검색에 효율적이라 자동완성을 사용하기에 좋다.하지만 앞에서 말했던것 처럼 메모리 사용량이 많을 수 있고, 구현이 복잡하다. 트..

기술면접 2025.04.10

@ModelAttribute에서 바인딩안되는 문제

@RequestParam을 여러 개 쓰면 코드가 더러워져서 @ModelAttribute를 쓰는 경우가 있다.여러 개의 파라미터를 하나의 객체로 바인딩해 주는 것으로 단순히 알고 있었는 데 사용 중 바인딩이 제대로 되지 않는 문제가 발생했다.Spring은 url파라미터 또는 post로 가는 form-data를 자동으로 바인딩해 주는데 이때 반환되는 객체를 커맨드 객체라고 부른다고 한다.그리고 커맨드 객체를 구성하기 위한 매핑 규칙이 있다. DTONoArgsConstructor와 AllArgsConstructor가 동시에 있는 경우, NoArgsConstructor를 호출하고, setter를 호출해 param을 각 필드에 초기화한다.AllArgsConstructor만 있는 경우AllArgsConstructo..

coding 2025.04.09

OneToOne관계에서 Lazy Loading

JPA는 Lazy Loading을 사용할 때 프록시 객체를 사용한다. 그런데 OneToOne관계에서 프록시 객체 생성에 제약이 있다.그리고 연관관계의 주인이 아닌 엔티티를 조회할 때 Lazy Loading이 동작하지 않는다. 여기서 프록시 객체란 지연 로딩을 구현하기 위해 엔티티를 감싸는 가상의 객체이다.데이터베이스를 조회할 때 최대한 조회를 늦추는 역할이다.프록시 객체는 실제 엔티티와 같은 인터페이스를 가지지만 내부에는 실제 데이터가 없다.조회할 때, 조회 -> 프록시 객체 -> 필요한 경우 실제 엔티티 데이터 로딩의 흐름을 가진다.양방향 @OneToOne관계에서 mappedBy가 있는 쪽은 Lazy Loading이 잘 동작하지만, 주인 쪽은 제대로 동작하지 않을 수 있다.외래 키 제약조건에서 JPA는..

기술면접 2025.04.08

try-with-resources

try-with-resources는 자동으로 리소스를 닫아주는 try문의 확장형 태이다.AutoCloseable 인터페이스를 구현한 객체를 자동으로 닫아주기 위해 설계되었다고 한다.여기서 닫아준다는 것은 리소스를 해제하고, 정리하는 것을 뜻한다. try블록에서 리소스를 선언하고 try블록이 정상작동 혹은 예외가 발생되어 종료될 때 자동으로 리소스의 close() 메서드가 호출된다.try-catch-finally는 구조는 같지만 리소스를 닫는 방식이 다르다. try-catch-finally에서는 개발자가 의식적으로 finally를 사용해야 하고 finally에서 close() 메서드에서 발생할 수 있는 예외처리를 또 해줘야 한다. 그래서 try-with-resources를 사용하는 게 코드가 더 깔끔하고 ..

기술면접 2025.04.07

캐시 스탬피드 현상

트래픽 환경에서 캐시를 사용하는데, Cache Aside(캐시 미스 발생 시 적재) 전략을 사용한다.이때 많은 요청이 동시에 캐시 미스를 확인하고 DB에서 데이터를 가져와 캐시에 적재를 하는데 이것을 캐시 스탬피드 또는 Thundering Herd라고 한다. 이 문제는 잠금(Locking) 방식, 외부 재계산(External Recomputation) 방식, 확률적 조기 재계산 방식으로 해결할 수 있다. 잠금방식(Locking)은 요청 처리 스레드가 해당 캐시 키에 대해 잠금을 획득한다고 생각하면 된다.다른 요청 처리 스레드들은 대기를 하고 잠금을 획득한 스레드는 요청동안 캐시 적재 작업이 비동기로 처리된다.잠금을 사용해서 성능 저하가 될 수 있다.  외부 재계산(External Recomputation..

기술면접 2025.01.30

컨텍스트 스위칭

컨텍스트 스위칭(Context Switching)은 CPU나 코어에서 실행 중이던 프로세스나 스레드가 다른 프로세스나 스레드로 교체되는 과정이다.멀티태스킹 시스템에서는 작업을 효율적으로 관리하기 위해 필수적인 메커니즘이다. 여기서 컨텍스트는 프로세스, 스레드의 상태를 말한다. 컨텍스트에는 스위칭을 할 때 실행을 중단하고 다시 시작할 때의 정보를 담고 있다.멀티태스킹 시스템에서는 여러 프로세스나 스레드가 동시에 실행되는 것처럼 보이도록, CPU가 짧은 시간 단위로 작업을 전환하면서 처리한다. 사용자는 여러 작업이 동시에 진행되는 것처럼 느끼는 것이다. 컨텍스트 스위칭은 다음 세 가지 경우 발생한다.우선순위 변경, I/O작업, Time Slice 소진 Time Slice는 각 프로세스나 스레드에게 할당된 시..

기술면접 2025.01.27