Spring 주니어 코딩·알고리즘 기술면접

Spring 주니어 (1~3년) 코딩 · 알고리즘 3문항 조회수 26 · 2026-08-26 (수) 12:10:39
1 알고리즘 설계
Medium

Q. 게시판에서 사용자가 작성한 글 목록을 최신순으로 조회하는 API를 구현할 때, 데이터베이스에서 정렬된 결과를 가져오는 방법과 애플리케이션 레벨에서 정렬하는 방법 중 어느 것을 선택하시겠습니까? 각 방법의 시간복잡도와 성능상 장단점을 비교하여 설명해주세요.

데이터베이스 인덱스와 메모리 정렬의 차이를 생각해보세요.

A. 모범답안

데이터베이스에서 ORDER BY를 사용하여 정렬하는 것이 일반적으로 더 효율적입니다. DB는 인덱스를 활용하면 O(log n) 또는 O(n)의 성능으로 정렬된 결과를 반환할 수 있습니다. 반면 애플리케이션에서 정렬하면 모든 데이터를 메모리로 로드한 후 정렬해야 하므로 O(n log n)의 시간복잡도와 O(n)의 공간복잡도가 발생합니다. 특히 데이터가 많을 경우 메모리 부족 문제가 발생할 수 있으며, 페이징 처리도 어려워집니다. 따라서 JpaRepository에서 findAllByOrderByCreatedAtDesc() 같은 메서드나 @Query에 ORDER BY를 명시하여 DB 레벨에서 정렬하는 것이 권장됩니다.

핵심 포인트
  • • 데이터베이스 정렬이 인덱스 활용으로 더 효율적
  • • 애플리케이션 정렬은 O(n log n) 시간복잡도와 메모리 부담
  • • 대용량 데이터에서는 DB 정렬이 필수적
답변에 넣으면 좋은 키워드
ORDER BY 시간복잡도 인덱스 메모리 페이징 JpaRepository
실무에서는

대용량 게시판이나 상품 목록 조회 API에서 정렬 전략은 응답 속도에 직접적인 영향을 미칩니다.

Follow-up 질문

만약 여러 필드를 조합하여 정렬해야 한다면(예: 카테고리별 최신순) 복합 인덱스를 어떻게 설계하시겠습니까?

2 문자열 처리 알고리즘
Easy

Q. 사용자가 입력한 이메일 주소의 유효성을 검증하는 로직을 작성할 때, 정규표현식을 사용하는 방법과 문자열을 순회하며 직접 검증하는 방법 중 어느 것을 선택하시겠습니까? 각 방법의 시간복잡도와 코드 가독성, 유지보수 측면에서 비교해주세요.

정규표현식 엔진의 동작 방식과 단순 문자열 순회의 차이를 생각해보세요.

A. 모범답안

이메일 검증에는 정규표현식을 사용하는 것이 일반적으로 권장됩니다. 정규표현식은 복잡한 패턴을 간결하게 표현할 수 있어 코드 가독성이 높고, Spring의 @Email 어노테이션이나 @Pattern으로 선언적으로 사용할 수 있습니다. 시간복잡도는 둘 다 O(n)이지만, 정규표현식은 내부적으로 최적화된 엔진을 사용합니다. 직접 순회하는 방식은 @와 점의 위치를 확인하는 단순한 경우에만 적합하며, 실제 이메일 규칙의 모든 케이스를 처리하려면 코드가 매우 복잡해집니다. 따라서 Pattern.matches()나 Validation 어노테이션을 활용하는 것이 실무적입니다.

핵심 포인트
  • • 정규표현식이 복잡한 패턴 검증에 적합
  • • 둘 다 O(n) 시간복잡도이지만 정규표현식이 더 간결
  • • Spring Validation을 활용한 선언적 검증 권장
답변에 넣으면 좋은 키워드
정규표현식 Pattern @Email 시간복잡도 Validation 가독성
실무에서는

회원가입이나 로그인 API에서 입력값 검증은 보안과 데이터 품질의 첫 관문입니다.

Follow-up 질문

정규표현식이 너무 복잡해지면 성능 문제가 발생할 수 있는데, ReDoS 공격에 대해 설명해주세요.

3 검색 알고리즘
Medium

Q. 상품 목록에서 특정 상품 ID로 상품을 찾는 기능을 구현할 때, List를 순회하며 찾는 방법과 Map을 사용하는 방법의 시간복잡도를 비교하고, 어떤 상황에서 각 방법을 선택해야 하는지 설명해주세요. 또한 데이터베이스 조회와 비교했을 때의 차이점도 설명해주세요.

조회 빈도와 데이터 크기, 메모리 사용량을 고려해보세요.

A. 모범답안

List를 순회하는 방법은 O(n)의 시간복잡도를 가지며, 매번 전체 리스트를 확인해야 합니다. 반면 HashMap을 사용하면 O(1)의 평균 시간복잡도로 즉시 조회할 수 있습니다. 상품 ID로 자주 조회하는 경우 Map으로 캐싱하는 것이 효율적이지만, 메모리 사용량이 증가하고 데이터 동기화 문제가 발생할 수 있습니다. 데이터베이스 조회는 인덱스가 있으면 O(log n)이지만 네트워크 비용과 DB 커넥션 비용이 추가됩니다. 따라서 소량의 자주 조회되는 데이터는 Map으로 캐싱하고, 대용량이거나 실시간성이 중요한 데이터는 DB 조회를 사용하는 것이 적절합니다.

핵심 포인트
  • • List 순회는 O(n), HashMap은 O(1) 시간복잡도
  • • 조회 빈도가 높으면 Map 캐싱이 효율적
  • • 메모리와 동기화 비용을 고려한 전략 선택 필요
답변에 넣으면 좋은 키워드
시간복잡도 HashMap 캐싱 인덱스 메모리 O(1) O(n)
실무에서는

상품 상세 조회 API에서 자주 조회되는 인기 상품을 캐싱하여 DB 부하를 줄이는 전략에 활용됩니다.

Follow-up 질문

Spring의 @Cacheable을 사용할 때 내부적으로 어떤 자료구조가 사용되며, 캐시 크기 제한은 어떻게 설정하나요?

댓글 0

로그인 후 댓글을 작성할 수 있습니다.

아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!