9. RDBMS의 index가 무엇인가요? 그렇다면 유니크키 FK는 index인가요?
RDBMS에서 인덱스는 데이터베이스 테이블에 대한 데이터 검색 작업 속도를 향상시키는 데 사용되는 데이터 구조입니다. 일반적으로 테이블에 있는 하나 이상의 열 값을 기반으로 데이터의 정렬된 표현을 생성하여 작동합니다. 인덱싱된 열을 기반으로 데이터를 쿼리할 때 데이터베이스 엔진은 인덱스를 사용하여 검색 기준과 일치하는 행을 빠르게 찾을 수 있습니다.
Unique Key 제약조건은 특정 열(또는 열의 조합)에 대해 고유한 값을 갖도록 강제하는데 사용됩니다. 이를 위해 RDBMS는 해당 열(들)에 대한 인덱스를 생성합니다. 이러한 인덱스를 통해 데이터의 고유성을 보장하면서도 검색 성능을 향상시킬 수 있습니다. 따라서 Unique Key는 RDBMS의 인덱스로 볼 수 있습니다.
10. 댓글 기능을 구현하기 위해 포스트 Entity와 댓글 Entity를 어떻게 설계하셨는지 자세히 설명해주세요.
포스트
package hanhae.inky0.springnewsfeed.entity;
import jakarta.persistence.*;
import lombok.*;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@EntityListeners(AuditingEntityListener.class)
@Entity
@Setter
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Article extends BaseTimeEntity{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", updatable = false)
private Long id;
@Column(name = "title", nullable = false)
private String title;
@Column(name = "content", nullable = false)
private String content;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "userId", nullable = false)
private UserEntity user;
private Integer likeCount =0;
@Builder
public Article(String title, String content, UserEntity user) {
this.title = title;
this.content = content;
this.user = user;
}
public void update(String title, String content) {
this.title = title;
this.content = content;
}
public boolean isOwner(UserEntity user){
return this.user.getId().equals(user.getId());
}
}
댓글
package hanhae.inky0.springnewsfeed.entity;
import jakarta.persistence.*;
import lombok.*;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
@EntityListeners(AuditingEntityListener.class)
@Entity
@Setter
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Comment extends BaseTimeEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", updatable = false)
private Long id;
@Column(name = "content", nullable = false)
private String content;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "userId") //사실 여기에 nullable="false"이 들어가야 함
private UserEntity user;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "articleId")
private Article article;
private Integer likeCount =0;
@Builder
public Comment(String content, UserEntity user, Article article) {
this.content = content;
this.user = user;
this.article = article;
}
public void update(String content) {
this.content = content;
}
public Boolean isOwner(UserEntity user){
return this.user.getId().equals(user.getId());
}
}
아티클과 댓글의 차이점 : 댓글은 아티클에 대한 댓글이므로 아티클 id도 필요함
11. Spring에서 Multipart 타입을 어떻게 처리하는지 아는 만큼 설명해주세요.
Spring에서 멀티파트 유형을 처리하는 데는 일반적으로 파일을 업로드하거나 파일 업로드가 포함된 양식을 제출할 때 일반적으로 사용되는 멀티파트/양식 데이터 콘텐츠가 포함된 HTTP 요청을 처리하는 작업이 포함됩니다.
Spring에서는 멀티파트 요청의 일부로 업로드된 파일을 나타내는 MultipartFile 인터페이스를 사용하여 멀티파트 요청을 처리할 수 있습니다. 메소드 매개변수에 @RequestParam("file") MultipartFile file을 추가하여 컨트롤러 메소드에서 MultipartFile 인스턴스를 얻을 수 있습니다.
멀티파트 요청을 처리하도록 Spring을 구성하려면 애플리케이션 컨텍스트에 MultipartResolver 빈을 포함해야 합니다. Spring은 사용 중인 서블릿 컨테이너에 따라 CommonsMultipartResolver 및 StandardServletMultipartResolver와 같은 MultipartResolver의 여러 구현을 제공합니다.
일단 구성되면 Spring은 자동으로 멀티파트 요청을 구문 분석하고 MultipartFile 객체를 통해 업로드된 파일에 대한 액세스를 제공합니다. 그런 다음 저장 위치에 저장하거나 내용을 처리하는 등 필요에 따라 이러한 파일을 처리할 수 있습니다.
12. 멀티미디어를 저장하는 다른 저장소는 뭐가 있었는지 알아보셨나요?
기존 관계형 데이터베이스와 별도로 멀티미디어 콘텐츠를 저장하는 데 사용할 수 있는 여러 가지 저장 옵션이 있습니다.
파일 시스템:
멀티미디어 파일을 파일 시스템에 직접 저장하는 것이 일반적인 접근 방식입니다. 파일은 일반적으로 디렉터리 구조에 저장되며, 파일 경로나 URL은 참조용으로 데이터베이스에 저장됩니다.
객체 스토리지:
Amazon S3, Google Cloud Storage 또는 Azure Blob Storage와 같은 객체 스토리지 서비스는 대용량 멀티미디어 콘텐츠를 저장하는 데 적합합니다. 이러한 서비스는 버전 관리, 액세스 제어, 데이터 복제 등의 기능을 갖춘 확장 가능하고 내구성이 뛰어나며 가용성이 높은 스토리지 솔루션을 제공합니다.
콘텐츠 전송 네트워크(CDN):
CDN은 최종 사용자에게 더 가까운 분산형 에지 서버에 멀티미디어 콘텐츠를 캐시하여 대기 시간을 줄이고 콘텐츠 전송 속도를 향상시킵니다. CDN은 멀티미디어 콘텐츠를 효율적으로 캐시하고 제공하기 위해 다른 스토리지 솔루션과 함께 사용되는 경우가 많습니다.
NoSQL 데이터베이스:
MongoDB 또는 Cassandra와 같은 NoSQL 데이터베이스는 멀티미디어 콘텐츠를 저장하는 데에도 사용할 수 있습니다. 특히 데이터에 유연한 스키마가 있고 높은 쓰기 처리량이 필요한 경우 더욱 그렇습니다. NoSQL 데이터베이스는 특정 유형의 멀티미디어 애플리케이션에 확장성과 성능 이점을 제공합니다.
하이브리드 접근 방식:
많은 애플리케이션에서는 특정 요구 사항에 따라 스토리지 솔루션 조합을 사용합니다. 예를 들어, 실제 멀티미디어 파일을 개체 스토리지 서비스에 저장하는 동시에 기존 데이터베이스에 메타데이터 및 관계형 데이터를 저장합니다.
'면접준비' 카테고리의 다른 글
[취준일지] HTTP상태코드, ERD설계 및 개발 경험, 헤더와 쿠키 (0) | 2024.03.13 |
---|---|
[취준일지] 세션, JWT 토큰, 쿠키, RestfulAPI, HTTP 메소드 (0) | 2024.03.13 |