썸네일 AWS S3에 올린 파일 접근시 AccessDenied 해결 Background - 프로젝트 도중 tts로 음성파일을 만들어 s3 버킷에 올려 프론트로 오디오를 전송해주어야하는 상황. - api 상으로는 s3에 정상적으로 올라간 url이 response body로 전달되는 것을 확인 - 그 url에 접속하면 다음과 같은 AccessDenied 화면이 뜨는 상황 해결방안 - 이미 IAM에 AmazonS3FullAccess 권한을 준 상황. - Amazon S3 > 버킷 > bongabang(해당 버킷 이름) > 권한 > 버킷정책 > 편집 > 정책 생성기 - Select Type of Policy 로는 S3 Bucket Policy 선택 - Add Statements 에서 Effect: Allow, Principal: 아무 이름, Actions: All actions..
썸네일 [Django] MVT 아키텍처 장고는 MVT아키텍처를 가지고 있다. MVT는 Model View Template로 이루어진 아키택처 패턴인데, 이 구성요소를 하나씩 살펴보자. Model 모델은 DB 구조를 정의하고 DB와의 상호작용을 캡슐화한다. Django는 ORM(Object-Relational Mapping)을 통해 데이터베이스 테이블에 대응되며 이를 통해 따로 SQL을 작성하지 않고 DB작업을 수행할 수 있다. 각 class에 선언된 클래스변수는 테이블의 컬럼에 해당한다. View view는 로직을 담당한다. HTTP로 넘겨진 요청에 따라 처리를 해주는 urls.py에서는 view의 함수를 호출한다. 그러면 view의 함수에서는 DB에 있는 data 중 필요한 것들을 조회하기 위해 model을 호출합니다. 그렇게 해서 얻은 데..
썸네일 [Django] migration 마이그레이션 마이그레이션은 모델의 변경사항을 관리하는 방법이다. 장고에서 모델은 class로 정의되며 이 class는 Django ORM(Object-Relational Mapping)을 통해 Database table에 매핑된다. 따라서 우리 모델의 데이터필드 type이 변한다던가 모델의 데이터 필드가 한 개 추가된다던가와 같은 모델의 변화가 있을 때마다 데이터베이스 스키마에도 해당 변화를 반영해야 하는데, 이러한 역할을 하는 것이 마이그레이션이다. 따라서 마이그레이션을 데이터베이스와 연결되는 모델의 변경사항에 따라 버전을 관리해주는 것이라 생각하면 된다. Django에서 Migration을 하는 방법 python manage.py makemigrations 이렇게 하면 migrations 하위 폴더에..
썸네일 [Django] Web Server Gateway Interface(wsgi) 프로젝트 앱 디렉토리에 있는 WSGI는 WebServer Gateway Interface의 약자로 파이썬에서 웹 통신을 하기 위한 일종의 약속이다. wsgi는 웹 서버와 웹 어플리케이션 서버(여기서는 장고)를 연결해 주는 역할을 한다. * 위스기라고 부른다. 웹 서버(Web Server)와 웹 어플리케이션 서버(Web Application Server)는 무슨 차이가 있을까? 웹 서버는 HTTP를 통해 클라이언트에게 요청을 받고, 그 요청에 따라 HTML 문서를 제공한다. HTML 문서를 파싱 하면서 각 태그에 따른 image, css, javascript와 같은 외부 리소스에 대한 추가적인 HTTP 요청을 한다. * HTML과 외부 리소스를 한번에 요청하지 않고 별도로 요청하는 이유는 병렬 다운로드로 ..
썸네일 [Node.js] logout은 꼭 post 메서드를 써야 할까 에러메세지 Layer.handle [as handle_request], logout method 다시말해 logout 라우터가 없습니다. 라는 에러가 떴었다. Layer.handle [as handle_request]를 키워드로 검색했을 때, request를 보내고 response로 응답하는 순서가 바뀌어서 (req, res) 순서를 잘 지켜주면 해결된다는 글을 참고하였지만 내 상황에는 맞지 않았다. 따라서 logout 라우터와 관련한 코드만 눈 빠지도록 찾아봤다. 결론은, logout을 받아오는 메소드가 get이 아닌 post로 써놓는 실수를 했기 때문에 났던 error 였다. 여기서 logout은 꼭 post 메서드를 써야 할까라는 궁금증이 들어 찾아보았다. logout에서는 보통 어떤 HTTP me..
썸네일 [Node.js] object Undefined Error 에러 메세지 Error: Route.get() requires a callback function but got a [object Undefined] 이 에러 메세지를 해석해보면, Route의 get 메소드는 callback function가 필요했지만, 정의되지 않은 객체가 들어와있어서 오류가 났다. 라는 뜻이다. `정의되지 않은 객체` 라는 말에서 짐작할 수 있듯이 다른 곳에서 불러온 변수를 사용하려고 했을때 오타가 나서 에러가 났을 것이라 짐작했다. 그래서 에러 메시지에서 흰색으로 표시되어있는 page.js 파일에 들어가봤다. 여기서 주목해야 할 부분은 흰색으로 뚜렷하게 표시된 마지막 줄 메세지를 보면 된다. command키와 주소 부분을 함께 클릭하게 되면 저 페이지로 들어갈 수 있어 확인하였다...