2.3 객체지향 분석 / 객체지향 설계 / 객체지향 프로그래밍을 수행하는 방법
객체지향 분석 수행 방법
인터페이스 호출의 보안을 보장하려면 인터페이스 호출의 인증 기능을 설계하고 구현해야 합니다.
인증된 시스템만이 마이크로 서비스(MS)의 인터페이스를 호출할 수 있습니다.
이 작업을 맡아서 가능한 한 빨리 이 기능 출시를 위해 노력해주시기 바랍니다.
기본 분석
사용자 ID 와 PW 를 사용할 수 있다.
- 인터페이스에 접근할 수 있는 모든 객체에 ID 와 PW 를 할당한다.
- 인터페이스에 요청을 할 때 미리 지정된 고유 ID 와 PW 를 전달한다.
- 인터페이스 호출 요청을 수신한 MS 는 전달받은 ID 와 PW 를 파싱하여 MS 에 저장된 ID, PW 와 비교한다.
- 값이 일치하면 인증에 성공한 것으로 간주하여 인터페이스 호출 요청을 허용하고, 일치하지 않으면 거부한다.
1차 분석
보안 문제 해결
- ID, PW 를 기반으로 한 인증 방식은 비밀번호를 매번 평문으로 전송해야 하므로 비밀번호가 도용되기 쉽다.
- OAuth 인증을 이용하여 ID 와 PW 를 암호화할 수 있다.
2차 분석
보안 문제 해결 고도화
- 비밀번호를 암호화 해도 이를 그대로 가로채 사용할 수 있다.
- 리플레이 공격 : 인증되지 않은 시스템이 액세스를 위해 인증된 시스템으로 위장하여 ID 와 암호화된 PW 를 가로채 운반하는 공격
- 토큰 생성 알고리즘을 추가로 최적화 할 수 있다.
- 인터페이스 요청이 이루어질 때마다 생성되는 토큰을 매번 다르게 할 수 있다.
- 가장 많이 사용되는 방법은 시간값을 랜덤 변수로 사용하는 것
- 시간값이 유효 시간 내에 생성된 것인지 확인하는 작업이 추가된다.
3차 분석
리소스 관리
- 유효 시간이 만료되기 전에 요청을 가로채면 말짱 도루묵이다.
- 공격을 완전히 방어할 수 있는 절대적인 보안 시스템은 존재하지 않는다. 하지만 보안성을 높이기 위해 공격에 들어가는 리소스를 늘려서
이를 어느 정도 해결할 수 있다.
- 생성된 ID, PW, 토큰 등을 어디에 저장할 것인가?
- 인증처럼 비즈니스와 연관성이 낮은 기능을 개발할 때는 관련 데이터를 Zookeeper, 로컬 파일, MySQL, Redis 같은 다양한 저장 방식을
유연하게 지원하는 것이 이상적이다.
- 이후 최소한의 코드 변경만으로 저장 방식을 변경할 수 있도록
객체지향 설계 방법
- 객체지향 분석이 완료되면 상세한 요구 사항 명세를 얻을 수 있다.
- 객체지향 설계는 요구사항 명세를 특정 클래스 설계로 변환하는 작업이다.
1) 책임과 기능을 나누고 어떤 클래스가 있는지 확인한다.
2) 클래스를 정의하고 클래스의 속성과 메서드를 정의한다.
3) 클래스 간의 상호 작용을 정의한다.
4) 클래스를 연결하고 실행 엔트리 포인트를 제공한다.
-
1
책임과 기능을 나누고 어떤 클래스가 있는지 확인한다.
- 요구사항 명세에 따라 관련 기능들을 하나씩 나열한 후, 어떤 기능들이 유사한 책임과 속성을 사용하는지 확인하는 방법으로 클래스를 분류할 수 있다.
- 위 요구사항 명세를 단일 책임 기능 으로 분해할 수 있다.
- 크게 토큰의 생성 및 검증 / URL 을 분해, 조합, 검증 / 저장서 관리와 ID, PW 운영 을 담당하는 세가지 기능으로 나눌 수 있다.
-
2
클래스를 정의하고 클래스의 속성과 메서드를 기능에 따라 정의한다.
-
세가지 핵심 클래스
- AuthToken 클래스 / Url 클래스(ApiRequest 클래스) / CredentialStorage 클래스

-
3
클래스 간의 상호 작용을 정의한다.
-
4
클래스를 연결하고 실행 엔트리 포인트를 제공한다.
- 클래스와 클래스 간의 상호 작용을 설계했다면 이제 모든 클래스를 함께 조합하고 실행할 엔트리 포인트를 제공할 차례이다.
- 엔트리 포인트는 main 함수일 수도 있고, 외부 호출을 위한 API 모음일 수도 있다. 엔트리 포인트를 통해 코드를 실행할 수 있다.
객체지향 프로그래밍을 하는 방법
- 객체지향 설계가 완료되면 클래스 / 속성 / 메서드 / 클래스간의 상호 작용이 정의되고 모든 클래스가 통합된 엔트리 포인트가 준비된다.
- 객체지향 프로그램은 이러한 설계 사상을 코드로 실체화 하는 것이다.