/myResumeNote

Primary LanguageJavaScript

myResumeNote

환경변수

  • DATABASE_URL, DATABASE_HOST, DATABASE_PORT, DATABASE_NAME, DATABASE_USERNAME,DATABASE_PASSWORD,SESSION_SECRET_KEY,
  • CLIENT_ID, CLIENT_SECRET, REDIRECT_URL

API 명세서 URL

ERD URL

더 고민해 보기

  1. 암호화 방식

    • 비밀번호를 DB에 저장할 때 Hash를 이용했는데, Hash는 단방향 암호화와 양방향 암호화 중 어떤 암호화 방식에 해당할까요? => hash는 단방향 암호화방식입니다. 복호화가 불가능하여 원본을 알 수 없기 때문입니다. 평문을 암호문으로 바꾸는 암호화는 가능하지만, 암호문을 평문으로 바꾸는 복호화는 불가능합니다.

    • 비밀번호를 그냥 저장하지 않고 Hash 한 값을 저장 했을 때의 좋은 점은 무엇인가요? => 실제 비밀번호가 아닌 hash 암호화한값을 저장하므로, 비밀번호가 유출되더라도 사용자의 정보를 보호할 수 있습니다.

  2. 인증 방식

    • JWT(Json Web Token)을 이용해 인증 기능을 했는데, 만약 Access Token이 노출되었을 경우 발생할 수 있는 문제점은 무엇일까요? => JWT는 Stateless이기 때문에 한번 만들어지면 제어가 불가능합니다. 임의로 Access Token을 삭제할 수 없기 때문에 만료기간을 설정하지 않으면 탈취될 가능성이 높습니다.

    • 해당 문제점을 보완하기 위한 방법으로는 어떤 것이 있을까요? => Access Token과 Refresh Token을 만료기간을 다르게 하여 사용하는 방법이 있습니다. Access Token의 공격범위를 줄여주고 Access Token에 비해 적게 노출되어 탈취될 위험을 줄여줍니다.

  3. 인증과 인가

    • 인증과 인가가 무엇인지 각각 설명해 주세요. => 인증이란 유저가 누구인지 확인하는 절차(회원가입 후 로그인 하는것)이고 인가란 유저에 대한 권한을 허락하는 것 입니다.

    • 과제에서 구현한 Middleware는 인증에 해당하나요? 인가에 해당하나요? 그 이유도 알려주세요. => 인가라고 생각합니다. 로그인 된 사용자가 본인임을 증명할 필요가 있는 서비스를 사용할 시, Middleware를 통해 인증하도록 구현했기 때문입니다.

  4. Http Status Code

    • 과제를 진행하면서 사용한 Http Status Code를 모두 나열하고, 각각이 의미하는 것과 어떤 상황에 사용했는지 작성해 주세요. => status(200): 요청이 성공했습니다. status(201): 요청이 성공적이었으며 그 결과로 새로운 리소스가 생성되었습니다. 일반적으로 POST요청 또는 일부 PUT 요청 후에 따라옵니다.

      status(400): 잘못된 문법으로 인해 서버가 요청을 이해할 수 없음을 의미합니다. status(401): 인증되지 않은 클라이언트 입니다. status(404): 요청받은 리소스를 찾지 못했습니다.

      status(500): 웹사이트 서버에 문제가 있음을 의미하지만 구체적인 문제에 대해 설명할 수 없습니다.

  5. 리팩토링

    • MySQL, Prisma로 개발했는데 MySQL을 MongoDB로 혹은 Prisma 를 TypeORM 로 변경하게 된다면 많은 코드 변경이 필요할까요? 주로 어떤 코드에서 변경이 필요한가요? => MySQL는 관계형 데이터베이스(RDBMS)이며, MongoDB는 NoSQL 데이터베이스입니다. 따라서 코드 변경이 많이 필요할것 같습니다.. 개발한 서비스의 규모가 커져 데이터베이스를 옮기는 케이스를 읽어보았는데 기존 DB의 잘못된 설계들이 큰 문제가 되는것 같습니다. 코드변경을 줄이기 위해서는 설계단계에서 정말 많은 고민이 필요할것 같습니다. 그리고 Prisma를 TypeORM으로 변경하는 경우에도 두 라이브러리의 쿼리 작성 방식이 달라 많은 코드변경이 필요할 것 같습니다.

    • 만약 이렇게 DB를 변경하는 경우가 또 발생했을 때, 코드 변경을 보다 쉽게 하려면 어떻게 코드를 작성하면 좋을 지 생각나는 방식이 있나요? 있다면 작성해 주세요. => 설계를 탄탄하게 하는게 가장 중요할것 같습니다.

  6. API 명세서

    • notion 혹은 엑셀에 작성하여 전달하는 것 보다 swagger 를 통해 전달하면 장점은 무엇일까요? => RESTful API를 문서화하고, 사용자가 테스트하고 호출하기 쉽도록 도와줍니다. 이를 통해 개발자들간의 소통을 원활하게 도와줄 수 있습니다.

AC_myResumeNote