CS
[항해 취업코스] 개발자 취준 기록 13일차
Ynghan
2024. 3. 26. 12:53
Q. Garbage Collector의 역할, 원리, 알고리즘에 대해 아는 만큼 설명해주실 수 있을까요?
GC의 역할
프로그램에서 동적으로 할당한 메모리 영역에 대해 어떠한 변수로 참조하지 않는 메모리 영역을 자동으로 해제시켜주는 역할을 합니다.
GC의 원리/알고리즘
GC가 어떻게 변수를 참조하지 않는 메모리 영역을 검사하는지 설명드리겠습니다. 검사를 위한 알고리즘에는 두 가지가 있는데요, 첫 번째는 reference counting 방식입니다. 몇 가지 방법으로 해당 객체에 접근할 수 있는지에 대한 count를 저장하는 방법인데요, 순환참조로 인해 해당 count가 1을 유지하게 되어 메모리가 해제되지 않는 문제가 생깁니다.
이를 해결하는 방식이 Mark and Sweep 방식입니다. Mark and Sweep 방식은 root space로 부터 해당 객체에 접근 가능한지를 해제의 기준으로 삼고 접근 가능한지 판별하는 mark와 접근이 불가능한 객체를 해제하는 sweep 방법을 사용합니다.
Q. DTO에 대한 설명과 함께 왜(?) Entity 인스턴스를 Client에 그대로 전달하면 안되는지에 대해 설명해주세요.
DTO(Data Transfer Object)는 계층 간의 데이터 교환을 위해 필요한 객체입니다. 특히 클라이언트와 서버 간의 데이터 전송에 사용됩니다. 필요한 정보만을 DTO에 담아 최소한의 데이터 전송으로 필요한 작업을 수행할 수 있도록 도와줍니다.
보안 유지 : 엔티티에 민감한 정보가 포함되어 있을 수 있습니다. 때문에 DTO를 사용하여 클라이언트에 전달할 데이터를 필터링하여 보안을 유지할 수 있습니다.
응집도 향상 : DTO에 필요한 정보만을 담기 때문에 애플리케이션의 응집도를 향상시킵니다.
유연성 : 객체의 구조가 변경되더라도 DTO를 통해 데이터를 전송하면 클라이언트에 덜 영향을 줄 수 있기 때문에 유지보수성을 향상 시킬 수 있습니다.
Q. 인증과 인가에 대해서 설명해주세요.
인증(Authentication)
인증은 해당 유저가 여러 수단을 통해 실제 유저인지 인증하는 개념입니다.
최근에는 보안 강화를 위해 2단계 인증(2FA)나 다단계 인증(MFA) 같은 방법을 사용합니다.
인가(Authorization)
인가는 해당 유저가 특정 리소스에 접근이 가능한지 허가를 확인하는 개념입니다.
역할 기반 접근 제어, 속성 기반 접근 제어 등과 같은 정책을 사용하여 구현합니다.
Q. 본인의 프로젝트의 인증 인가에 대해서 어떻게 구현했는지를 중심으로 설명해주세요.
뉴스피드 프로젝트에서 인증 인가 구현을 JWT를 사용하여 구현하였습니다. 인증 기능은 사용자가 로그인을 시도할 경우 UserPassword 필터를 통해 인증 객체를 SecurityContextHolder에 담아 DB에서 해당 객체의 존재유무를 확인하고 있을 경우 JWT 토큰을 생성하여 응답 헤더에 반환하도록 구현하였습니다. 인가 기능은 사용자가 SessionID를 사용해 권한이 필요한 리소스에 접근할 경우, Authorization 필터를 사용해 헤더를 검증 후 토큰을 검증하도록 구현하였습니다.
Q. 뷰를 반환하는 api에서 다음 요청에 인증요건을 갖추는 부분을 어떻게 구현하셨는지 자세히 알려주세요.
Spring Security를 사용하여 Config 클래스에서 authorizeHttpRequests.requestMatchers().hasRole() 메서드를 사용하여 권한에 따른 뷰 api 접근 처리를 구현하였습니다.