TDD
TDD에 대해서 들어보셨나요? 들어보셨다면 구체적으로 TDD란 무엇인지 설명해주세요.
- TDD는 Test-Driven Development의 약자로서, 소프트웨어 개발 방법론 중 하나입니다.
- 개발자가 코드를 먼저 작성하고 그 코드를 테스트하는 것이 아닌, 테스트 케이스를 먼저 작성하고 그 테스트 케이스를 통과하기 위한 코드를 작성하는 것입니다.
- 말 그대로 테스트가 코드 작성을 주도한다고 해서 TDD라고 불립니다.
TDD 개발 방법론의 장점은 무엇이 있을까요? 아는데로 말해주세요.
- 일단 높은 품질의 코드를 작성할 수 있습니다. 개발자가 테스트 케이스를 먼저 작성하므로 코드의 품질이 높아지고 버그가 줄어듭니다.
- 개발 속도도 향상시킬수 있습니다. 테스트 케이스를 먼저 작성하므로 개발자는 테스트가 통과하는 코드를 만들기 위해 불필요한 코드 작성을 줄일 수 있습니다.
- 유지보수도 용이합니다. 테스트 케이스를 먼저 작성하므로 코드 변경에 따른 영향도 파악이 용이해집니다.
- 개발자 간의 의사소통도 향상됩니다. 테스트 케이스를 먼저 작성하므로 개발자 간의 코드와 요구사항에 대한 의사소통이 원할히 이루어집니다.
좋은 코드
좋은 코드란 무엇이라고 생각하시나요?
- 일관성이 있으면서 가독성이 있는 코드가 좋은 코드라고 생각합니다.
- 이유는, 실무에서 개발자들끼리 협업을 하며 서로의 코드를 이해하거나, 유지 보수하는 일이 많습니다.
- 회사 내의 특정 스타일 가이드나 규칙을 따라 일관성 있게 코드를 짠다면, 다른 사람들이 제 코드를 보는데 좀 더 이해가 빠를 것이며, 로직 이해에도 도움이 될 것입니다.
- 그리고 가독성을 생각해 함수의 이름이나 클래스의 이름들을 정확한 뜻으로 명시해 놓는다면, 함수와 파라미터 만으로 기능을 유추하는데 좀 더 용이할 것이라고 생각합니다.
객체 지향
OOP에 대해서 아시나요?
- OOP는 Object Oriented Programming의 약자로서 객체 지향 프로그래밍이라고 번역됩니다.
- OOP는 클래스와 객체를 중심으로 구성됩니다. 클래스는 객체를 만들기 위한 일종의 설계도이며, 객체는 클래스를 기반으로 만들어지는 실제 인스턴스입니다.
- 객체는 클래스에서 정의된 attribute와 method를 가지고 있습니다.
OOP에서 중요한 개념 3가지를 설명해주세요.
- 상속과 다형성, 캡슐화가 있습니다.
- 상속은 기존 클래스를 확장하여 새로운 클래스를 만들 수 있는 기능입니다.
- 다형성은 객체가 같은 method를 호출하더라도 다른 동작을 할 수 있는 능력을 말하며, 오버라이딩과 오버로딩 등의 방법으로 구현됩니다.
- 캡슐화는 객체의 내부 상태와 동작을 외부로부터 보호하고, 인터페이스를 통해 객체와 상호작용할 수 있는 방법을 제공하는 것을 말합니다.
OOP의 장점은 무엇이 있을까요?
- 코드의 재사용성과 유지보수성을 높이는 장점이 있으며, 확장성이 좋아 새로운 요구사항에 대한 대처가 더욱 용이합니다.
- 또한 가독성이 좋아 개발자 간의 협업을 더욱 원활하게 할 수 있습니다.
오버라이딩과 오버로딩의 차이점을 설명해주세요.
- 오버라이딩과 오버로딩은 객체 지향 프로그래밍에서 method의 다향성을 구현하는 방법입니다.
- 오버라이딩은 상위 클래스의 method를 하위 클래스에서 재정의해서 사용하는 것을 말합니다.
- 이렇게 하면 하위 클래스에서 상위 클래스의 method를 사용할 때 하위 클래스에서 재정의한 method가 호출되어 실행됩니다.
- 오버로딩은 같은 이름의 method를 파라미터의 개수나 타입, 순서 등을 다르게 하여 여러 개 정의하는 것을 말합니다.
- 호출할 때 전달하는 파라미터에 따라 어떤 method를 호출할 지 결정됩니다.
- 쉽게 말하면, 오버라이딩은 상속 관계의 하위 클래스가 상위 클래스의 method를 재정의해 사용하는 것이고, 오버로딩은 같은 이름의 method를 여러 개 정의하여 사용하는 것입니다.
RESTful API
"RESTful하다" 라는 의미가 무엇인지 아시나요?
- "RESTful하다"는 REST (Representational State Transfer) 아키텍처의 원칙을 따르는 API를 의미합니다.
- RESTful API는 HTTP 메소드 (GET, POST, PUT, DELETE 등)와 URI (Uniform Resource Identifier)를 사용하여 자원을 표현하고, 상태를 전달하고, 자원에 대한 행위를 정의합니다.
- 이러한 시스템은 분산 시스템의 일관성, 확장성, 성능 등을 보장하며, 웹 기술을 기반으로 하기 때문에 쉽게 이해하고 사용할 수 있습니다.
- 따라서 "RESTful하다"는 이러한 RESTful 아키텍처의 원칙을 따르는 시스템 또는 API를 의미합니다.
- URL은 인터넷에서 자원의 위치를 지정하는 주소를 의미하며, URI는 자원의 위치뿐만 아니라 인터넷에서 고유한 자원을 식별하는 문자열로서 URL의 의미를 포합합니다.
- 예를 들어 "https://example.com/index"는 example.com서버의 index라는 경로를 나타냅니다. index라는 자원의 실제 위치이기 때문에 URL입니다.
- URI의 예시는 "https://example.com/post/103"입니다. post까지가 경로를 나타내주며, 103은 고유한 자원을 식별하는 문자열입니다.
- 따라서 /post/103 까지가 URI이며, /post 까지가 자원의 위치입니다.
HTTP method에 대해서 아시는대로 다 말해주세요.
- 대표적인 메소드로는 get, post, put, patch, delete가 있습니다.
- get은 보통 리소스를 조회할 때 사용하는 메소드입니다.
- 쿼리스트링을 통해 데이터를 전달하는데, 바디를 사용해서도 전달할 수 있습니다. 하지만 서버에서 따로 구성해야 되기 때문에 지원하지 않는 곳이 많아 권장하진 않습니다.
- 조회할 때 POST도 사용할 수 있지만 GET 메소드는 캐싱이 가능하기에 GET을 사용하는 것이 유리합니다.
- 여기서 캐싱은 이미 조회한 리소스들을 제외한 나머지 리소스를 조회해서 응답 시간을 줄일 수 있습니다.
- post는 보통 데이터를 처리하거나 생성할 때 사용하는 메소드입니다.
- 메세지 바디를 통해 서버로 요청 데이터를 전달하면 서버는 데이터를 처리하여 업데이트합니다.
- 보통 회원가입이나, 로그인, 게시글 생성 등을 할 때 사용됩니다.
- put은 리소스를 대체하는 메소드입니다.
- 만일 요청 메세지에 리소스가 있으면 완전히 덮어쓰고, 없으면 새로 생성을 합니다.
- patch는 리소스를 수정하는 메소드입니다.
- 하지만 put과 다른 점은 put은 모든 것을 완전히 대체한다면, patch는 일부분만 수정합니다.
- delete는 리소스를 제거하는 메소드입니다.
- HEAD, TRACE, OPTION 3가지 메소드가 더 있지만, 이거는 나중에 좀 더 보기로.
put과 patch를 멱등성이라는 단어를 사용해서 좀 더 구체적으로 설명해주세요.
- 멱등성이란 어떤 대상에 같은 연산을 여러번 적용해도 결과가 달라지지 않는 성질입니다.
- put 메소드는 여러번 수행하더라도 안에 담긴 리소스가 변하지 않는 이상 연산 결과가 동일합니다.
- 왜냐면 put 메소드는 동일한 요청을 보내더라도 항상 같은 데이터로 덮어씌워지기 떄문입니다.
- patch 메소드 또한 멱등성이 보장되는 경우도 있습니다. put과 같은 형태로 수정할 리소스의 일부분만 담아서 보내는 경우 여러번 수행하더라도 멱등성이 보장이 됩니다.
- 하지만 patch는 HTTP 스펙상 구현 방법에 제한이 없습니다. 그렇기 때문에 Body에 꼭 덮어쓸 데이터가 있을 필요가 없습니다. put 처럼 덮어쓸 데이터가 아닌 1씩 증가하는 것과 같은 동작을 지정한다면 멱등성이 보장이 되지 않습니다.