Class와 Object는 객체지향 프로그램의 기본 개념입니다. Class는 객체의 속성 과 동작을 정의하는 틀을 제공하는데 예를 들어 '자동차'라는 Class안에 '색상, 모델, 속도'속성 과 '전진,후진,정지'같은 동작을 정의한다는 개념으로 생각하시면 됩니다. Object는 Class를 기반으로 생성된 실체를 말하는대 예시로 '검은 색의 스포츠카'라는 Object는 '자동차'라는 Class를 기반으로 생성된 인스턴스로 여기서 Class에 정의된 속성값을 가지며, 정의된 동작을 수행 할 수 있습니다. 간단히 말해, Class는 개념적 정의나 설계도이고, Object는 이 설계도를 기반으로 생성된 실제 사용 가능한 실체라고 이해할 수 있습니다.
Polymorphism 개념에 대해 설명하고, 개인/팀 프로젝트에 적용한 사례가 있다면 이야기해주세요.
Object 의 특성에 따라 사용할 수 있는 Data Structure 에는 어떤 것이 있는지 설명해주세요.
Array와 List 는 순서가 중요한 경우 사용합니다. 예를 들어, 학생들의 이름을 순서대로 저장할 때 Array나 List를 씁니다. Set 은 중복을 허용하지 않을 때 사용합니다. 참가자 명단처럼 중복이 없어야 하는 경우 Set이 적합합니다. Map 은 Key와 Value 쌍으로 데이터를 저장할 때 사용합니다. 예를 들어, 학생의 ID와 이름을 연결할 때 Map을 사용합니다. Queue와 Stack의 경우는 처리 순서가 중요할 때 사용합니다. Queue는 먼저 들어온 것이 먼저 처리될 때, Stack은 마지막에 들어온 것이 먼저 처리될 때 사용합니다.
개인/팀 프로젝트에 적용해 보았거나 / 사용할 줄 아는 RDB 에 대해 이야기해주세요.
Java(Kotlin) 으로 구성된 프로젝트의 Kotlin(Java) 컨버팅 작업이 가능한지, 무엇을 염두/고려 해야하는지 이야기해주세요.
Legacy Spring 과 최근 Spring 혹은 Spring Boot 의 차이점에 대해 아는대로 설명해주세요.
설정 방식
Legacy Spring에서는 대부분의 설정이 XML 파일로 이루어졌습니다. 빈(bean) 정의나 의존성 주입 등을 모두 XML로 작성해야 했기 때문에 설정이 복잡하고 관리가 어려웠습니다. 반면, 최근의 Spring과 Spring Boot는 애노테이션 기반 설정을 주로 사용합니다. 설정이 훨씬 간단해지고, 코드와 설정이 밀접하게 연관되어 있어 가독성과 유지보수성이 크게 향상되었습니다. Spring Boot는 특히 자동 설정을 제공하여 개발 속도를 더욱 빠르게 합니다.
프로젝트 초기 설정과 의존성 관리
Legacy Spring에서는 프로젝트를 시작할 때 여러 라이브러리와 설정 파일을 직접 관리해야 했습니다. Maven이나 Ant 같은 도구를 사용해 의존성을 관리했지만, 설정이 복잡하고 일부는 수동으로 추가해야 했습니다. Spring Boot는 스타터 패키지를 통해 필요한 의존성을 자동으로 추가하고, Maven과 Gradle을 통해 의존성을 쉽게 관리할 수 있습니다. 덕분에 초기 설정 과정이 간소화되고, 프로젝트를 빠르게 시작할 수 있습니다.
내장 서버
Legacy Spring은 별도의애플리케이션 서버(Tomcat, JBoss 등)에 배포해야 했습니다. Spring Boot는내장 서버(Embedded Server)를 제공해, 별도의 서버 설치 없이 애플리케이션을 바로 실행할 수 있습니다. 이로 인해 개발과 배포가 매우 간편해졌습니다.
이런 차이점들 덕분에, 최근의 Spring과 Spring이런 차이점들 덕분에, 최근의 Spring과 Spring Boot는 개발 생산성을 높이고, 유지보수가 더 쉬운 환경을 제공합니다.
RDB와 NoSQL DB의 차이점에 대해 이야기해주세요.
RDB는 정형화된 테이블 구조를 사용해 데이터를 행과 열로 구성된 테이블에 저장합니다. SQL이라는 언어를 통해 데이터를 관리하며, 복잡한 쿼리와 조인을 통해 관계형 데이터를 조회할 수 있습니다. 또한, ACID 특성을 지켜 데이터의 무결성과 일관성을 보장합니다. 대표적인 RDB로는 MySQL과 PostgreSQL이 있습니다. 대표적인 RDB로는 MySQL, PostgreSQL 등이 있습니다. 반면, NoSQL DB는 정형화된 테이블 구조가 없고, 문서, 키-값, 그래프 등 다양한 형식으로 데이터를 저장할 수 있습니다. 이를 통해 비정형 데이터나 복잡한 데이터 구조를 유연하게 처리할 수 있습니다. SQL 대신 JSON 형식의 쿼리를 사용하며, 수평적 확장성이 뛰어나 대규모 데이터를 분산하여 저장하고 처리하는 데 유리합니다. 대표적으로 MongoDB와 Cassandra가 있습니다. 이러한 차이로 인해, RDB는 주로 금융이나 ERP 시스템에, NoSQL은 소셜 미디어나 실시간 분석 시스템에 많이 사용됩니다. RDB는 정형화된 데이터와 복잡한 관계 관리에 강점이 있고, NoSQL은 유연한 데이터 구조와 대규모 데이터 처리에 적합합니다.
RESTful API의 설계 원칙을 설명해주세요.
RESTful API는 웹 서비스를 설계할 때 자주 사용되며, 몇 가지 중요한 원칙이 있습니다.
자원(Resource) 기반: URL을 통해 자원을 식별합니다. 예를 들어, /users는 사용자 목록을, /users/123은 특정 사용자를 나타냅니다.
무상태성(Stateless): 서버는 각 요청을 독립적으로 처리하며, 이전 요청의 상태를 기억하지 않습니다. 모든 필요한 정보는 요청 안에 포함되어야 합니다.
캐싱 가능성: 응답이 캐시될 수 있어야 하며, 서버는 응답에 캐시 가능한지 여부를 명시합니다. 이를 통해 불필요한 트래픽을 줄일 수 있습니다.
일관된 인터페이스(Uniform Interface): API는 일관된 방식으로 설계되어야 합니다. 자원에 접근하는 경로, 사용되는 HTTP 메서드, 응답 형식 등이 일관성 있게 유지됩니다.
계층화된 시스템(Layered System): 클라이언트는 서버와 직접 통신하는지, 아니면 중간에 다른 계층이 있는지 알지 못합니다. 이는 보안과 확장성을 높이는 데 도움이 됩니다.
이 원칙들을 따르면, RESTful API는 확장 가능하고 유지보수하기 쉬운 구조가 됩니다.
서버 사이드 렌더링과 클라이언트 사이드 렌더링의 차이점을 설명해주세요.
웹훅(Webhook)이란 무엇인지 설명해주세요.
Redis의 주요 사용 사례를 설명해 주세요.
API 버전 관리의 중요성과 방법을 설명해 주세요.
서버 보안의 기본 원칙에 대해 설명해 주세요.
서버 보안의 기본 원칙은CIA 원칙으로 요약할 수 있습니다. 이는기밀성(Confidentiality),무결성(Integrity), **가용성(Availability)**을 의미합니다. 기밀성(Confidentiality): 서버에 저장된 데이터가허가된 사용자만 접근할 수 있도록 보호하는 것입니다. 이를 위해 암호화, 접근 제어, 인증 등의 기술을 사용합니다. 예를 들어, 사용자의 비밀번호나 개인 정보는 암호화하여 저장하고, 접근 권한이 없는 사용자가 볼 수 없도록 해야 합니다. 무결성(Integrity): 데이터가변조되거나 손상되지 않도록보호하는 것입니다. 데이터를 전송하거나 저장할 때, 이를 안전하게 유지하는 것이 중요합니다. 예를 들어, 데이터 전송 중 중간에서 누군가가 데이터를 변경하지 못하도록 디지털 서명이나 해시를 사용하는 방식이 있습니다. 가용성(Availability): 서버와 데이터가필요할 때 언제든지 접근 가능하도록 유지하는 것입니다. 이를 위해 서버의 안정성을 확보하고, DDoS 공격 같은 방해 행위로부터 서버를 보호하는 것이 필요합니다. 예를 들어, 정기적인 백업, 부하 분산, 그리고 서버 모니터링 등을 통해 서버가 항상 가동 상태를 유지하도록 합니다.
백엔드 성능 최적화 방법을 설명해 주세요.
쿠키와 세션의 차이점이 무엇인지 설명해 주세요.
쿠키와 세션은 모두 사용자 상태를 관리하는 방법이지만, 작동 방식과 저장 위치에서 차이가 있습니다. 쿠키는 사용자의브라우저에 저장되는 작은 데이터 파일입니다. 사용자가 웹사이트를 방문할 때 서버가 브라우저에 쿠키를 저장하고, 이후 방문할 때 브라우저가 이 쿠키를 서버에 보내 사용자 정보를 전달합니다. 쿠키는 주로 사용자 설정이나 로그인 정보 등을 기억하는 데 사용되며, 만료 시간을 설정할 수 있습니다. 다만, 쿠키는 클라이언트 측에 저장되기 때문에 보안에 주의해야 합니다. 세션은서버 측에서 관리되는 방식입니다. 사용자가 웹사이트에 접속하면 서버가 세션을 생성하고, 사용자의 상태나 정보를 서버에 저장합니다. 브라우저에는 세션 ID라는 고유한 식별자만 저장되며, 서버가 이 식별자를 통해 사용자를 식별합니다. 세션은 서버 측에서 관리되므로 보안이 더 강화된 방법입니다. 하지만 서버의 자원을 사용하기 때문에, 많은 세션이 유지될 경우 서버에 부하가 발생할 수 있습니다. 간단히 말해, 쿠키는클라이언트 측에 저장되어 정보가 브라우저에 남는 반면, 세션은서버 측에서 관리되어 보안이 더 강화된 방식입니다. 쿠키는 간편하지만 보안이 취약할 수 있고, 세션은 보안이 좋지만 서버 자원을 더 소모하는 차이가 있습니다.