Study/Theory
-
ResponseEntity 를 왜 쓰는 걸까?Study/Theory 2026. 2. 23.
시작은 단순했다. Controller의 반환 타입은 String이어도 되고, Integer, DTO여도 된다.Spring은 이를 자동으로 JSON으로 직렬화하고, 기본적으로 200 OK와 함께 내려준다. 그런데 우리는 습관처럼 이렇게 작성한다.return new ResponseEntity.ok(data); 처음에는 그냥 그러려니 했다. 그런데 문득 이런 생각이 들었다.굳이 한 번 더 감싸는 이유가 뭘까?그냥 객체를 반환하면 안 되는 걸까?한 번 정리해보자.ResponseEntity는 무엇인가?ResponseEntity는 Spring에서 제공하는 HTTP 응답을 표현하는 객체다. 조금 더 정확히 말하면,HTTP Response 전체(상태 코드 + 헤더 + 바디)를 담는 컨테이너다. 구조적으로 보면 다음 세..
-
[JAVA] Switch ExpressionStudy/Theory 2025. 5. 26.
Java Switch Expression 완벽 가이드왜 만들어졌을까?기존 switch문은 여러 가지 문제점을 가지고 있었다. 기존 Switch문의 문제점// 기존 방식의 문제점들String dayType;switch (day) { case MONDAY: case TUESDAY: case WEDNESDAY: case THURSDAY: case FRIDAY: dayType = "평일"; break; // break를 빼먹으면 fall-through 발생! case SATURDAY: case SUNDAY: dayType = "주말"; break; default: dayType = "알 수 없음"; ..
-
[JAVA] Record :: 불변 데이터를 위한 간결한 문법Study/Theory 2025. 5. 24.
Record의 등장 배경Java 14에서 프리뷰 기능으로 처음 도입되었고, Java 16에서 정식 기능으로 추가된 Record는 불변 데이터를 다루는 클래스를 더 간결하게 작성할 수 있도록 만들어졌다.기존에는 단순한 데이터 홀더 클래스를 만들기 위해서도 많은 보일러플레이트 코드가 필요했었다. 필드 선언, 생성자, getter, equals(), hashCode(), toString() 메서드를 모두 작성해야했다. 이는 코드 가동성을 떨어뜨리고 실수할 가능성을 높였다. * 보일러플레이트 코드?보일러플레이트(Boilerplate) 코드는 반복적으로 작성해야 하는 정형화된 코드.실제 비즈니 로직과는 관계없지만, 언어나 프레임워크의 요구사항을 충족시키기 위해 반드시 작성해야 하는 코드. 기존에는 단순한 데이터 ..
-
[DB] 트랜잭션, ACIDStudy/Theory 2024. 9. 20.
Q. 트랜잭션에 대해서 설명해주세요. A. 트랜잭션이란 데이터베이스의 상태를 변화시키는 하나의 논리적인 작업 단위라고 할 수 있으며, 트랜잭션에는 여러 개의 연산이 수행될 수 있다. 트랜잭션은 수행 중에 한 작업이라도 실패하면 전부 실패하고, 모두 성공해야 성공이라고 할 수 있다. Q. ACID에 대해서 설명해주세요. A. ACID는 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질이다.- Atomicity(원자성) : 트랜잭션의 연산은 모든 연산이 완벽히 수행되어야 하며, 한 연산이라도 실패하면 트랜잭션 내의 모든 연산은 실패해야 합니다.- Consistency(일관성) : 트랜잭션은 유효한 상태로만 변경될 수 있습니다.- Isolation(고립성) : 트랜잭션은 동시에 실행될 경우 다른 트랜잭션..
-
[DB] 인덱스 장단점Study/Theory 2024. 9. 16.
Q. 데이터베이스에서 인덱스를 사용하는 이유 및 장단점에 대해 설명해 주세요. A. 데이터베이스에서 인덱스를 사용하는 이유는 검색 성능을 향상시키기 위함입니다.하지만, 검색 성능을 실질적으로 향상시키기 위해서는 해당 쿼리가 index를 사용하는지, 카디널리티, Selectivity 같은 요소들이 고려된 인덱스가 생성되어야 합니다.일반적인 경우의 장점으로는 빠른 검색 성능을 들 수 있습니다.일반적인 경우의 단점으로는 인덱스를 구성하는 비용 즉, 추가, 수정, 삭제 연산 시에 인덱스를 형성하기 위한 추가적인 연산이 수행됩니다.따라서, 인덱스를 생성할 때에는 트레이드 오프 관계에 놓여있는 요소들을 종합적으로 고려하여 생성해야 합니다.그렇다고 모든 곳에서 인덱스를 사용하면 오히려 악효과를 낼 수 있다.1. 인덱..
-
[운영체제] 캐시의 지역성Study/Theory 2024. 9. 10.
Q. 캐시의 지역성에 대해 설명해보세요. A. 캐시의 지역성(locality of reference)는 프로그램이 메모리에 접근하는 패턴에서 자주 나타나는 특징을 설명하는 개념이다.캐시의 성능을 높이기 위해 중요한 원리로, 이를 두 가지로 나눌 수 있다. - 시간적 지역성 (Temporal Locality) : 최근에 접근한 데이터나 명령어는 가까운 시점에 다시 접근될 가능성이 높다는 개념. ex. 프로그램이 한 변수를 사용하면 그 변수를 반복해서 사용할 가능성이 크다. 따라서 캐시는 자주 사용되는 데이터를 저장해두고, 이후 접근 시 빠르게 제공할 수 있다. - 공간적 지역성 (Spatial Locality) : 한 번 접근된 데이터나 명령어와 가까운 메모리 주소의 데이터나 명령어도 곧 접근될 가능성이 ..
-
[운영체제] 가상 메모리Study/Theory 2024. 9. 8.
Q.가상 메모리에 대해 설명해보세요. A. 가상 메모리는 프로세스가 실제 메모리의 크기와 상관없이 메모리를 이용할 수 있도록 지원하는 기술입니다.가상 메모리는 실제 메모리(RAM)와 보조 기억 장치의 Swap 영역으로 구성됩니다.OS는 메모리 관리자를 통해 메모리를 관리하며 프로세스는 사용하는 메모리가 실제 메모리인지, Swap 영역인지 모릅니다. 가상 메모리(Virtual Memory)- 컴퓨터 시스템에서 물리적인 메모리(RAM)이 한정되어 있을 때, 디스크의 일부를 마치 실제 메모리처럼 사용하는 기술.- 시스템은 실제 메모리보다 더 큰 프로그램을 실행할 수 있으며, 메모리 관리를 효율적으로 수행할 수 있다.- 주요 개념 + 페이징(Paging) : 메모리를 작은 크기의 페이지로 나누어 관리하는..
-
[운영체제] 세마포어와 뮤텍스Study/Theory 2024. 9. 3.
Q. 세마포어와 뮤텍스의 차이에 대해 설명해보세요. A.세마포어는 여러 개의 프로세스가 접근 가능한 공유자원을 관리하는 방식이고, 뮤텍스가 될 수 있지만,뮤텍스는 한 번에 한 개의 프로세스만 접근 가능하도록 관리하는 방식입니다. 따라서 뮤텍스는 세마포어가 될 수 없습니다. 또, 세마포어는 다른 프로세스가 세마포어를 해제할 수 있지만, 뮤텍스는 락을 획득한 프로세스만 락을 반환할 수 있습니다. 세마포어 & 뮤텍스 -> 프로세스나 스레드 간의 동기화를 위해 사용되는 메커니즘 세마포어 (Semaphore)- 역할 : 여러 스레드 간의 자원 접근을 조절하는데 사용. 세마포어는 제한된 수의 자원에 대해 접근을 관리할 수 있다.- 동작 방식 : 세마포어는 초기화할 때 설정된 값을 가지며, 이 값은 세마포어에 ..