Skip to content

[Retrospect] 2주 프로젝트 회고 - 김종서 #128

@ionc635

Description

@ionc635
  • sequelize와 sequelize-cli을 활용해 서버와 데이터베이스를 연결했다. 당시에는 foreign key 연결에 어려움을 겪었다. models 내부에 hasMany 또는 belongsTo 등을 활용해 관계를 설정해주었지만 데이터베이스 상에서 foreign key 연결이 보이지 않았던 것이 문제였다. 근 하루동안 다양한 시도 끝에 migrations의 빈 파일을 만들어 addConstraint로 직접 관계를 연결해주었다. 하지만 ORM이 적용되지 않았고, 다시 여러 번의 시도를 통해 실제 ORM을 사용하기 위해서는 관계 설정을 꼭 해야한다는 것을 깨달았다.

  • API는 RESTful하게 설계해야 한다. 설계할 당시에는 클라이언트의 URI와 일치시켜 작성하다보니 당사자가 다시 봐도 단번에 이해할 수 없는 API 문서가 만들어졌다. 이 사실을 개발자 지인의 피드백을 통해 깨닫게 되었다. 피드백을 통해 auth, user, article, comment로 route를 나누고, 그 안에서 누가봐도 한눈에 이해될 수 있도록 설계할 수 있었다. 기능적인 부분의 한계로 query parameter를 사용하는 경우는 없었고, 대부분 params를 활용한 경우였기 때문에 아쉽기도 했다.

  • AWS의 EC2와 S3, RDS를 활용해 기본적인 3 tier architecture을 구성했다. 우리는 토큰을 쿠키로 전달해 인증/보안을 진행했는데, 이 방식은 실제 AWS 환경 위에서는 오류를 발생시켰다. 토큰이 브라우저에 전송되지 않았다. 그 이유는 samesite 설정을 하지 않기 때문으로 추측되었다. http 프로토콜에서는 samesite: 'none'을 지정해줄 수 없는데, 그 이유는 secure: true와 함께 사용되어야 하기 때문이다. https 프로토콜로 통신하기 위해 AWS의 CloudFront 서비스를 이용하려고 했으나 인증서를 받지 못해 진행할 수 없었다. 도메인을 구입하면 어느정도 물리적인 시간이 소요된다는 것을 간과했다. 앞으로 프로젝트를 진행할 때는 배포부터 진행해야겠다는 깨달음을 얻었고, 토큰을 쿠키로만 전달하는 방식에는 한계가 있기 때문에 앞으로는 refresh token을 사용 또는 redis를 통해 인증 보안을 진행할 계획이다.

Metadata

Metadata

Assignees

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions