본문 바로가기
Storify

STORIFY (0208) - swagger 접근 제어, local docker 테스트

by Peter.JH 2024. 2. 8.
728x90

swagger 접근 제어

 

현재 '주소'/docs 로 모든 사람이 접근할수있다. 프론트와 협업을 위해 swagger는 반드시 필요하기에 authId, password를 입력해야만 들어갈 수 있게 수정하였다. 

 

- main.ts 중...

  app.use(
    '/docs',
    basicAuth({
      users: { [authId]: password },
      challenge: true,
      unauthorizedResponse: 'Unauthorized',
    }),
    swaggerUi.serve,
    swaggerUi.setup(document),
  );

 

이를 문서에 접근하기 위해 특정 값을 입력해야 하는  'Basic 인증'이라고 한다. Basic 인증은 가장 간단한 HTTP 인증 방식 중 하나로, 사용자 이름과 비밀번호를 사용해 접근 권한을 검증한다. Basic 인증은 간단하게 적용할 수 있지만 암호화되지 않은 텍스트 형태로 로그인 정보를 전송하기 때문에 보안에 취약하다. 따라서 HTTPS와 같이 암호화된 연결을 통해 사용하는 것이 좋다.

 

유저는 jwt 를 사용해 관리하고 싶지만, 유저가 아닌 관련 개발자만 /docs에 접근하게 하고 싶어 간단하게 사용할 수 있는  'Basic 인증'을 사용하였다. 

 

dto에 ?추가

 

DTO(Data Transfer Object)에서 `?`와 `@IsOptional()`은 모두 필드의 선택적인 존재를 표시한다. 하지만 그 사용범위와 효과는 조금 다르다.

 

1. `?`: TypeScript에서 제공하는 선택적 속성(optional property)을 나타낸다. `?`를 사용하면 해당 필드는 존재하지 않을 수도 있음을 명시한다. 이는 컴파일 시점에서의 타입 검사에 영향을 미치며, 필드가 존재하지 않아도 TypeScript 컴파일러가 에러를 발생시키지 않는다.

2. `@IsOptional()`: class-validator 라이브러리에서 제공하는 데코레이터(decorator)다. runtime 시점에서 객체의 유효성 검사를 수행할 때 사용된다. `@IsOptional()`이 붙은 필드는 유효성 검사 시에 존재하지 않아도 유효성 검사 에러를 발생시키지 않는다.

 

따라서, `?`는 TypeScript의 타입 검사에, `@IsOptional()`은 runtime의 유효성 검사에 각각 영향을 미친다. 두 가지를 사용함으로써 타입 안정성과 데이터 유효성을 동시에 확보할 수 있다.

 

 

local에서 Docker 테스트 해보기.

 

Dockerfile, .dockerignore 파일을 만든 후 이미지 생성

docker build --tag storify-be:0.0.1 .

 

Docker에서 이미지를 생성한다는 것은, 어플리케이션을 실행하는데 필요한 모든 것들(코드, 런타임, 라이브러리, 환경 변수, 파일 등)을 패키징하여 이미지를 만드는 것을 의미한다. 이렇게 생성된 Docker 이미지는 어디서든 동일하게 작동하는 것이 보장되기 때문에, "코드를 작성한 환경에서는 잘 돌아가는데, 배포 환경에서는 왜 안 돌아가지?"와 같은 문제를 해결하는 데 매우 유용하다.

 

Docker 이미지 생성 과정

1. Dockerfile 작성: Dockerfile은 이미지 생성을 위한 지시사항을 담고 있다. 이 안에는 베이스 이미지 설정, 필요한 패키지 설치, 코드 복사, 포트 설정 등의 작업이 포함된다.

2. 이미지 빌드: `docker build` 명령을 통해 Dockerfile을 기반으로 이미지가 생성된다. 생성된 이미지는 `docker run` 명령을 통해 컨테이너로 실행될 수 있다.

 

이제 어플리케이션은 이 Docker 이미지 위에서 독립적으로, 어떤 환경에서든 동일하게 실행될 수 있다. 

728x90