++/CS 16

[TIL] CS공부 15일차

CORS(Cross Origin Resource Sharing)에 대해 설명해주세요. 웹 브라우저의 스크립트로부터 출처가 다른 리소스에 접근할 수 있도록 하는 보안정책으로, 기본적으로는 브라우저가 스크립트에서 다른 출처에 대한 HTTP 요청을 차단하지만 CORS를 통해 웹 애플리케이션은 다른 출처의 리소스에 대한 요청을 보낼 수 있게 합니다. 웹 브라우저의 스크립트에서 AJAX 요청이나 웹 폰트, 이미지, 비디오 등과 같은 외부 리소스에 접근할 때 CORS가 필요합니다. 브라우저의 작동 방식에 대해서 설명해주세요. 요청 사용자가 URL을 입력, 링크 클릭, 검색어 입력 등을 통해 웹 페이지 요청을 합니다. URL 해석 및 요청 전송 브라우저는 입력된 URL을 해석하여 해당하는 서버의 주소를 찾은 후 해당..

++/CS 2024.03.28

[TIL] CS공부 14일차

Spring @ControllerAdvice 어노테이션의 동작 원리에 대해 자세히 설명해주세요. @ControllerAdvice 어노테이션은 컨트롤러에 대한 예외 처리를 하는 클래스를 정의할 때 사용됩니다. @ControllerAdvice 어노테이션이 명시된 클래스는 스프링 컨텍스트에 등록되고, 로직 처리 중 예외가 발생하면 @ExceptionHandler가 명시된 메서드가 호출되어 예외처리와 관련된 로직을 수행합니다. Checked Exception과 Unchecked Exception에 대해 자세히 설명해주세요. Checked Exception Exception 클래스의 하위 클래스로 컴파일 단계에서 발생하는 예외를 의미합니다. 외부 리소스와의 상호작용 시에 발생하는 예외 등 예측 가능한 상황에서 사..

++/CS 2024.03.21

[TIL] CS공부 13일차

DTO에 대한 설명과 함께 왜 Entity 인스턴스를 Client에 그대로 전달하면 안되는지에 대해 설명해주세요. DTO 일반적으로 데이터를 담는 컨테이너로, 데이터베이스로부터 데이터를 읽어오거나 클라이언트로 데이터를 보낼 때 사용하는 데이터 전송 객체(Data Transfer Object)입니다. 데이터 은닉의 원칙 위반 Entity 클래스는 데이터베이스와 관련된 정보가 포함되어 있으므로 Entity 클래스를 그대로 노출하게 되면 데이터 은닉 원칙을 위반할 수 있습니다. 보안 문제 Entity에는 비즈니스 로직 외에도 데이터베이스와 관련된 정보가 포함될 수 있으므로 DTO를 사용하여 데이터를 캡슐화하여 클라이언트가 필요로 하는 데이터만 전달할 수 있도록 해야 합니다. 의존성 문제 Entity 클래스가 ..

++/CS 2024.03.20

[TIL] CS공부 12일차

좋아요 기능과 팔로우 기능을 구현하기 위해 설계한 DB Schema에 대해 자세히 설명해주세요. 좋아요 기능 게시글 - 좋아요, 댓글 - 좋아요는 1:N의 관계로, 하나의 게시글이나 댓글은 여러 개의 좋아요를 가질 수 있습니다. 따라서 좋아요 테이블이 게시글과 댓글의 Primary Key를 참조할 수 있도록 Foreign Key를 설정하였습니다. 팔로우 기능 유저 - 팔로우는 N:N의 관계이지만, 팔로잉과 팔로워를 나누어서 1:N의 관계로 한 유저가 여러 팔로잉과 팔로워를 가질 수 있도록 하였습니다. 좋아요 기능과 마찬가지로 팔로잉과 팔로워 id가 유저 테이블의 Primary Key를 참조할 수 있도록 Foreign Key를 설정하였습니다. 좋아요 Entity와 팔로우 Entity를 어떻게 설계하셨는지 ..

++/CS 2024.03.19

[TIL] CS공부 11일차

ORM과 Spring Data JPA가 무엇인지 설명해 주세요. ORM "Object-Relational Mapping"의 약자로 객체-관계 매핑을 의미합니다. 이는 객체 지향 프로그래밍 언어에서 사용되는 객체와 관계형 데이터베이스의 데이터 사이의 매핑을 자동화하는 프로그래밍 기법입니다. Spring Data JPA Spring 프레임워크에서 ORM 중 하나인 JPA를 함께 사용하여 구현된 클래스와 매핑을 해주기 위해 사용됩니다. ++ JPA를 사용하면 DDL문 생성, CRUD, SQL 작성 등을 개발자가 직접 하지 않아도 되기 때문에 생산성이 증가하며, 데이터베이스의 변경이 생기더라도 SQL을 모두 수정하지 않아도 되기 때문에 유지보수가 쉽습니다. 하지만 자동으로 생성된 쿼리문으로 인해 성능저하가 발생..

++/CS 2024.03.18

[TIL] CS공부 10일차

테스트 코드를 사용하지 않고 기능 테스트를 했던 경험을 상세하게 설명해주세요 부족한 부분이 있었다면 어떠한 부분이 부족했는지 설명해주세요 테스트 코드를 작성하지 않고 Postman을 이용해 API 요청 시 상태코드와 반환되는 body값이 예상과 같은지 확인하는 방식으로 테스트하였습니다. 데이터 세팅의 번거로움 테스트를 위해 매번 수동으로 데이터를 생성하고 업데이트해야 하므로 테스트의 일관성과 효율성이 떨어진다고 느꼈습니다. 디버깅의 어려움 오류가 발생했을 때 정확한 원인을 파악하기가 어려웠습니다. 컨트롤러나 서비스 계층에서 디버깅하거나 직접 로깅을 해서 원인을 찾고 리팩토링함으로써 시간이 상당히 오래 소요되었습니다. 기존 기능의 안정성 보장의 어려움 새로운 기능을 추가하면서 기존에 잘 작동하던 기능에서 ..

++/CS 2024.03.15

[TIL] CS공부 9일차

RDBMS의 index가 무엇인가요? 그렇다면 Unique Key, Foreign key는 index인가요? Index란? 한 마디로 목차와 같은 역할을 합니다. index는 데이터베이스에서 효율적으로 데이터를 검색하기 위해 사용되는 데이터 구조로, 데이터 위치를 색인하여 기억하는 기술입니다. 장점 Index를 사용하지 않으면 데이터를 검색할 때 테이블 전체를 순서대로 탐색을 해야 합니다. Index를 사용함으로써 특정 조건에 만족하는 행을 빠르게 찾을 수 있어 검색 속도가 향상됩니다. 단점 인덱스를 담아놓기 위한 저장 공간이 별도로 필요하여 추가적인 저장 공간을 소비하게 됩니다. 데이터베이스에서 데이터 변경이 발생할 때마다 인덱스도 함께 갱신되어 관리되어야 하므로 인덱스가 많아질수록 부담이 커질 수 있..

++/CS 2024.03.14

[TIL] CS공부 8일차

HTTP 상태 코드 100번대, 200번대, 300번대, 400번대, 500번대에 대해 각각의 특징을 설명해 주세요. 1xx (정보 제공) 클라이언트의 요청이 수신되어 프로세스를 계속 처리 2xx (성공) 클라이언트의 요청을 받아 성공적으로 처리했음을 나타냄 3xx (리다이렉션) 클라이언트는 요청을 마치기 위해 추가 행동이 필요 4xx (클라이언트 오류) 클라이언트의 요청에 오류가 있어 처리할 수 없음 5xx (서버 오류) 클라이언트의 요청은 유효하지만 서버가 유효한 요청을 처리하는 데 실패 200 OK 클라이언트의 요청이 성공적으로 처리되었음을 나타냅니다. 201 Created 서버가 성공적으로 새 리소스를 생성했음을 나타냅니다. 400 Bad Request (잘못된 요청) 클라이언트의 요청이 서버에서..

++/CS 2024.03.13

[TIL] CS공부 7일차

세션 기반의 인증 방식과 토큰(JWT) 기반의 인증 방식에 대해 설명해 주세요 세션 기반 인증 사용자의 인증 정보가 서버의 세션 저장소에 저장됩니다. 사용자에게는 저장된 세션 정보의 식별자인 Session ID를 발급되며 브라우저에 쿠키 형태로 저장되지만 실제 인증 정보는 서버에 저장됩니다. Cookie 헤더에 세션 ID만 담아 보내면 되므로 트래픽을 적게 사용하며, 모든 인증 정보를 서버에서 관리하므로 Session ID가 탈취되어도 서버 측에서 무효 처리가 가능합니다. JWT 기반 인증 인증 정보를 클라이언트가 직접 가지고 있는 방식으로, 토큰 형태로 브라우저의 로컬 스토리지나 쿠키에 저장합니다. 인증이 필요한 경우 클라이언트가 브라우저에서 가지고 있는 토큰을 추출하여 서버에 요청 시 함께 담아 보냅..

++/CS 2024.03.12

[TIL] CS공부 6일차

즉시로딩과 지연로딩은 각각 언제 사용하면 좋은지, 주의할 점은 무엇인지 설명해주세요. 즉시로딩과 지연로딩은 ORM에서 데이터를 가져오는 방식을 나타냅니다. 지연 로딩이란 데이터가 필요한 시점에 로드하는 것입니다. 보통 지연로딩을 기본으로 사용하며 필요한 경우에만 데이터를 가지고오므로 네트워크 트래픽을 줄이고 메모리 사용을 최적화 할 수 있습니다. 하지만 연관관계에 있는 엔티티의 경우 별도로 N개의 쿼리가 추가 요청되어 성능저하의 요인이 되기도 합니다. 즉시 로딩이란 모든 데이터를 한 번에 로드하는 방식으로, 여러 개의 엔티티가 연관관계에 있을 때 사용하기 유용하며 대량의 데이터를 처리할 때 성능이 저하 될 수 있고, 연관 엔티티를 한번에 모두 로드하므로 메모리 사용량이 증가할 수 있다는 단점이 있습니다...

++/CS 2024.03.11