기술면접 49

RequestBody VS ModelAttribute의 차이

RequestBody와 ModelAttribute는 클라이언트에서 보낸 데이터를 Java 객체로 만드는데 RequestBody는 Body에 있는 값을 바인딩할 때 사용하고, ModelAttribute는 파라미터나 multipart/form-data를 바인딩할 때 사용한다. RequestBody클라이언트가 보내는 요청의 본문을 자바 객체로 변환한다.내부적으로 HttpMessageConverter를 거치는데 ObjectMapper를 통해 JSON값을 java 객체로 역직렬화한다.그래서 변환될 java 객체에 기본 생성자가 필요하고, setter를 선언해야 한다. getter는 선택적으로 필요하다. ModelAttribute클라이언트에서 보내는 요청의 파라미터나 multipart/form-data 형식의 데이..

기술면접 2025.06.20

@Value 어노테이션

@Value는 설정 파일에 설정한 값을 주입할 수 있는 어노테이션이다. 주의해야 할 점은 주입 시점이다. @Value어노테이션은 대상 컴포넌트가 스프링 빈으로 등록되고 의존관계를 주입할 때 동작한다.그래서 대상 클래스에 @Component 어노테이션을 붙여주지 않으면 클래스는 컴포넌트 스캔대상이 되지 않아 스프링 빈으로 등록되지 않고 @value가 동작하지 않는다. @value어노테이션을 사용할 때 필드주입, 생성자 주입, setter, 등 방식을 고려해서 사용해야 한다.그리고 application.yml에 존재해야 하고, 여러개일 경우 우선순위를 고려해야 한다.

기술면접 2025.06.12

싱글톤 패턴

싱글톤 패턴(Singleton Pattern)은 생성자를 여러 차례 호출해도 실제로 생성되는 객체를 하나로 유지하는 것을 의미한다.객체가 최초로 생성된 이후에 생성자나 객체 생성 메서드는 기존에 만들어진 객체를 반환한다.간단히 말해서 어떤 클래스든 인스턴스를 딱 하나만 만들고, 어디서든 그 하나에만 접근하도록 보장하는 방법이다. 마치 한 회사에 CEO가 한 명만 있는 것처럼 특정 역할을 담당하는 객체가 시스템 전체에서 단 하나만 존재해야 할 때 사용한다. 싱글톤 패턴을 사용하여 객체를 여러 상황에서 재사용 할 수 있기 때문에 메모리 낭비를 방지할 수 있다. 그리고 여러 다른 객체가 하나의 인스턴스에 쉽게 접근할 수 있어 편리하다. 개발을 하다 보면 여러 상황이 생긴다.설정값을 관리할 때 applicati..

기술면접 2025.06.05

Gradle

Gradle은 JVM에서 실행되는 언어에서 자주 사용되는 빌드 자동화 도구이다. 기존의 Maven의 단점을 보완되어 설계되었다.Groovy나 Kotiln DSL을 사용해서 빌드 스크립트를 작성할 수 있다. 빌드 자동화 도구를 사용하면 일관된 빌드 환경을 제공받을 수 있어 어떤 환경에서도 동일한 결과를 얻을 수 있다.그리고 빌드 후 패키징, 배포까지 연속적으로 처리할 수 있다. Spring boot를 사용할 때 보통 maven과 gradle을 선택했었는데 Gradle을 많이 사용한다.두 빌드도구의 가장 큰 차이는 빌드 스크립트 작성 방식과 빌드 속도이다. Maven은 XML기반이고, Gradle은 Groovy를 사용해서 가독성이 더 좋고, 훨씬 빠르게 동작한다.

기술면접 2025.05.08

널 오브젝트 패턴 Null Object Pattern

널 오브젝트 패턴(Null Object Pattern)이란 객체가 존재하지 않을 때, 널을 전달하는 것이 아니라 아무것도 하지 않는 객체를 전달하는 방법이다. 보통 null 체크할 때 null일 경우 예외처리를 통해 Exception을 던지도록 개발하는 경우가 많은데,이렇게 사용하면 코드가 반복되고, 복잡해질 수 있다. 예시 처럼 아무것도 반환하지 않는 객체로 다루어서 간소화한다. 하지만, 실제로 오류가 발생해야 하는 상황에서 문제점을 찾을 때 어려움을 겪을 수 있기 때문에 주의해야 한다.

기술면접 2025.05.06

열 기반 DB와 행 기반 DB

행 기반 데이터베이스(Row-oriented Database)는 데이터를 행 단위로 관리하는 DBMS다.행 단위의 읽기, 쓰기 연산에 최적화되어있는데 Postgre, Mysql이 대표적이다. 열 기반 데이터베이스(Column-oriented Database)는 열 기반으로 데이터를 관리한다.데이터 조회 시 열(Column)을 로드하기 때문에 디스크 I/O를 줄일 수 있고, 같은 종류의 데이터가 연속적으로 저장되므로 압축 효율이 좋다.이 특징으로 데이터 분석에 사용된다.BigQuery, Redshift, Snowflake가 대표적이다. 행 기반 데이터베이스인 경우 관리는 다음과 같다. 열 기반 데이터베이스의 경우 아래와 같다. 선택은 주로 데이터 접근 패턴과 워크로드 특성에 따라 결정된다고 한다.

기술면접 2025.05.01

페이지교체 알고리즘

페이지 교체 알고리즘은 운영체제에서 가상 메모리 관리를 위해 사용되는 기법이다.메인 메모리(RAM)가 가득 찼을 때 새로운 페이지를 가져오기 위해 어떤 페이지를 교체해야 할지 결정하는 알고리즘이다. 1. FIFO(first in first out)먼저 들어온 게 먼저 나가는 알고리즘이다.가장 오래된 페이지를 교체하는데, 여기서 단순히 먼저 적재되었다는 이유로 교체된다는 비효율을 개선하기 위해 2차 기회 페이지 교체 알고리즘이라고 count를 세어 기회를 주었을 때 2차인 경우에 교체하는 알고리즘이 존재한다. 2. OPT알고리즘(Optional)가장 오랫동안 사용되지 않을 페이지를 교체한다.페이지의 미래 사용 빈도와 참조를 예측해야 돼서 실제 구현은 불가능한데 이론적으론 최적이다.다른 알고리즘의 비교 대상..

기술면접 2025.04.29

PRG 패턴

RPG 패턴은 Post/Redirect/Get 패턴의 약자로, 웹 애플리케이션에서 폼 제출 후 페이지 새로 고침이나 브라우저 뒤로 가기 등의 문제를 방지하기 위해 사용하는 디자인 패턴이다. Post : 사용자가 폼을 제출하면 post요청이 서버로 전송된다.Redirect: 서버는 데이터를 처리한 후 사용자를 다른 페이지로 리다이렉트 한다. -> 302 상태코드 사용Get: 사용자의 브라우저는 리다이렉트를 따라 GET요청으로 새로운 페이지를 요청한다.일반적으로 PRG패턴은 멱등성이 보장되지 않는 POST요청에 사용된다. 예를 들어, 사용자가 주문 버튼을 클릭하고 새로고침을 수행하면 post요청이 2번 서버로 전달된다.이 상황에서 PRG패턴이 주로 사용된다. PRG패턴을 사용해서 중복 폼 제출과 '뒤로'버튼..

기술면접 2025.04.25

멀티 쓰레딩

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

기술면접 2025.04.24

페이징 쿼리

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

기술면접 2025.04.23