Back-End15 [Web server] Apache vs NginX 안녕하세요 :) 오늘은 평소 업무와는 조금 색다른 Apache와 NginX 웹 서버에 대한 공부를 해보았습니다. 이번에 맡은 프로젝트의 경우 폐쇄망 내부 웹서버 설치가 필요해 이런저런 많은 시행착오를 거치고 있습니다. 웹 서버란? 웹서버는 사용자의 웹 브라우저로 웹 콘텐츠를 전송해 주는 World Widw Web의 근간이 되는 소프트웨어 애플리케이션 혹은 하드웨어 기기를 말합니다. 클라이언트-서버 모델에서 중요한 역할을 하며, 클라이언트는 이를 통해 웹 페이지와 다른 리소스를 받게 됩니다. 웹 서버 소프트웨어 흔히 사용되는 웹 서버 소프트웨어는 아래와 같습니다. - Apache - NginX - Microsoft Internet Information Service - LiteSpeed - Lighttpd.. 2023. 9. 19. ORM은 왜 쓰는 걸까요? 처음 ORM을 배울 때는 '이걸 왜 쓰는 거지?' 하는 질문을 수 없이 던지곤 했다. '잘 알면 쓰기 편하다'라고는 하는데, 솔직히 잘 알면 SQL도 쓰기 편한 거 아닌가...? 사실 ORM에 대한 논쟁은 해외 다른 개발자들 사이에서도 분분한 듯 하다. 아는 미국의 개발자분에게 여쭤보니 ORM 사용을 나쁘게 생각하진 않지만 ORM 사용은 프로젝트의 성격에 달려있다는 애매한 답변을 받았다. 어떤 개발자의 경우 복잡한 쿼리문이 요구되는 어플리케이션의 경우 ORM이 아닌 Raw 쿼리를 사용한다고 한다. 실제로 ORM을 이용한 프로젝트를 두 차례 진행해본 결과 약간 이해가 되는 듯하다. 간단한 쿼리문을 작성할 때는 ORM이 간편하긴 하다. 별도의 언어가 아닌 프로젝트에 사용하고 있는 프로그래밍 언어로 바로 데이.. 2022. 3. 30. [Express] json()과 urlencoded() 메소드에 관하여 오늘은 json()과 urlencoded() 메서드에 대해 알아보자 본 포스팅은 아래 블로그를 참조했으니 참고하길 바란다. https://dev.to/griffitp12/express-s-json-and-urlencoded-explained-1m7o Express's json() and urlencoded() Explained Express is a Node.js framework best known by beginners for simplifying syntax in building basic back-... dev.to Express's json() and urlencoded() Explained 1) json()과 urlencoded()는 미들웨어 함수 미들웨어란 무엇일까? 미들웨어는 서버가 클라이.. 2022. 1. 6. [Express] res.send와 res.json의 차이 Express를 다루다 보면 res.send()와 res.json()을 혼용해서 사용하는 경우가 많다. 대강 res.json()은 JSON 데이터를 보낼 때 사용한다고 알고 넘어갔는데, 사실 res.send()로도 JSON 데이터가 넘어간다는 사실! 엥? 그럼 둘의 차이가 도대체 뭐지? res.json() VS res.send() 익스프레스 어플리케이션 서버는 HTTP 요청을 받으면, 서버는 흔히 res라고 불리는 객체를 응답으로 전송한다. res 객체는 기본적으로 API 콜의 보내지는 응답의 한 부분이라고 생각하면 된다. res.send()는 content type을 "text/Html"로 설정해 클라이언트가 그것을 텍스트로 다루게끔 한다. 반면, res.json()은 content type "appl.. 2022. 1. 4. [CORS] Corse의 credentials: true의 의미 웹 개발에서 다양한 도메인의 리소스를 사용하기 위해 필수적으로 알아야 할 개념 CORS! 위 사진은 CORS의 특성과 하는 역할을 아주 잘 묘사하는 짤이라고 생각된다. CORS를 배우고 Cookie에 대해 학습하다 보면, 처음 보는 Cors option을 발견하게 된다. Credentials: true 요 녀석은 어떤 옵션이고 왜 필요한 것일까? 일단 시간이 없는 사람을 위해 한 마디로 설명하겠다. 클라이언트와 서버 간에 쿠키를 주고받고 싶으면 그냥 저 옵션을 넣으세요. 자 아래는 왜 그런지 이유를 설명해 보겠다. 기본적으로, CORS는 cross-origin 요청에는 쿠키를 담아 데이터를 전송하지 않는다. Json-P의 경우 항상 요청에 쿠키를 담아 보낸다는 점에서 CORS와 차이점이 있는데 이처럼 쿠.. 2022. 1. 3. [MySql] 연속된 여러 쿼리문 질의하기 서버 측에서 데이터베이스에 여러 개의 쿼리문을 연속적으로 보내기 위해선 어떻게 해야 할까? mysql 라이브러리에는 위와 같은 상황도 처리할 수 있도록 .query() 함수를 설정해 놓았다. 하지만, 라이브러리 설명에 따르면 연속된 여러 쿼리문을 지원하는 것은 SQL injection 공격에 취약하기 때문에 기본적으로 기능을 사용할 수 없도록 설정해 놓았다. Multiple statement queries 위와 같은 이유로 multiple statement query를 사용하기 위해선 아래와 같이 설정을 변경해주어야 한다. var connection = mysql.createConnection({multipleStatements: true}); 위와 같이 설정을 바꾸면 아래와 같이 쿼리문이 들어가는 파라.. 2022. 1. 2. [MySql] 하나의 쿼리문을 여러번 반복하려면? 3 tier 아키텍처의 마지막 관문, 드디어 Database 기초학습을 완료했다. 이제 Mysql를 프로그래밍적으로 제어하기 위해서 서버에서 쿼리문을 보내는 방법을 실습해보다가 한 가지 문제에 부딪혔다. '하나의 쿼리문을 인자만 바꿔서 반복해야 하면 어떻게 해야 하지?' 예를 들어, order_items과 같은 주문-주문제품 조인 테이블에 한 주문에 포함되어 있는 여러 제품에 대한 정보(어떤 주문에 어떤 제품들이 포함되어 있고 각 제품 당 가격 정보)를 insert 해야 하는 상황이면 어떻게 해야 할까? for문을 떠올릴 수 있지만 for문은 올바른 해결법이 아니다. for문을 사용하면 insert 쿼리문을 여러번 서버 측에 보내게 되는데 만약 error가 발생하면? 이는 쿼리문의 ACID 법칙을 위배할.. 2022. 1. 2. [Express] CORS Configuration Options 오늘 Express 코드를 만지다가 CORS를 설정해야 하는 상황이 있었다. 분명 공부했는데... 분명 알고있는 개념인데... 왜 기억이 하나도 나지 않는 걸까... 그래서 오늘은 힘들게 CORS의 옵션들에 대해 알아보자. Simple Usage 우선은 가장 기본적인 Simple Usage. 즉 모든 CORS 요청을 허용한다는 의미의 코드이다. app.use(cors()) 아마, 'CORS를 설정하라'라는 말에 뇌절이 온 이유는 아마 내가 위 코드만 주야장천 사용했기 때문이다. Single Usage 뿐만 아니라 단 하나의 라우팅에서만 CORS를 허용하는 방법도 있다. app.get('/products/:id', cors(), function (req, res, next) { res.json({msg: .. 2021. 12. 27. [Sequelize] 비동기 함수와 Sequelize 오늘 ORM 툴 중 하나인 Sequelize를 학습하다가 여러 번 키보드에 샷건을 때려 버렸다. 공식문서를 보면서 최대한 열심히 학습을 해보려 했지만 도대체가 코드가 작동을 할 기미를 보이질 않았다. 그러다가 아하! 하는 순간이 있었으니... 아래는 공식문서의 가장 첫 번째 설명 줄의 내용이다. Sequelize is a promise-based Node.js ORM for Postgres, MySQL, MariaDB, SQLite and Microsoft SQL Server. It features solid transaction support, relations, eager and lazy loading, read replication and more. Sequelize는 프로미스 기반의 node.js.. 2021. 12. 23. [SQL] SQL join 정리 이전 직장에 있을 때, 플랫폼 업그레이드 프로젝트를 진행하면서 데이터배이스를 옮기는 작업을 도운적이 있었다. 그때는 개발이고 뭐고 아무것도 모르는 상태였지만 어찌저찌 하다보니 SQL을 배워 작업을 한 기억이 난다. NoSQL로 구축된 레거시 플랫폼을 관계형 데이터베이스로 교체해야하는 작업이라 CTO가 진땀을 빼던 기억이 아직 생생하다. 그때의 기억에 따르면 사실... 수 많은 JOIN들 중에 세 가지 이외에는 사용해 본적이 없는것 같다. 우선을 join SQL에 대해 잘 정리가 되어 있는 그림이 있어 포스팅을 해본다. 자유자재로 모든 join을 다룰 수 있으면 좋겠지만, LEFT JOIN INNER JOIN RIGHT JOIN 이 세가지 이외에는 현업에서 사용해 보지 않았던 것 같다. 2021. 12. 20. [Django] 애플리케이션 생성하기 이전 포스팅에서 장고의 설치 및 환경 세팅을 마치고 프로젝트 파일 생성까지 완료했다. 이번에는 애플리케이션 파일을 생성해보도록 하자. 아직은 프로젝트 파일과 애플리케이션 파일을 왜 따로따로 생성해야 하는지 이해가 잘 되지 않지만, 일단은 한번 해보고 이해를 해보는 시간을 가지려고 한다. 일단은 터미널에 아래와 같이 입력한다. python manage.py startapp 'app name' 그러면 아래와 같이 앱 폴더가 생성된 것을 확인 할 수 있다. 여기서 끝이 아니다. 프로젝트 파일에서 settings.py에 들어가서 INSTALLED_APPS에 생성한 앱을 추가를 해주면 그것으로 모든 준비는 끝난다. INSTALLED_APPS = [ 'django.contrib.admin', 'django.cont.. 2021. 12. 18. Django 설치 및 실행 준비 Node.js Express 공부와 실습 때문에 잠시 미뤄뒀던 Django 학습을 시작하려 한다. Django 설치 장고 설치를 위해서는 아래와 같이 프로젝트 파일 위치에서 터미널에 입력하면 된다. pipenv install django 여기서 pip이 아닌 pipenv를 사용하는 이유는 가상 환경을 만들어 다른 코드에 간섭이 없도록 하기 위함이다. 라고 구글에는 나와있는데, 한번 왜 그런지 실험을 해보았다. 우선 다른 파이썬 프로젝트에 pip install django로 장고를 설치하고 진행하는 프로젝트 파일에 pip install django를 터미널에 입력했더니 Requirement already satisfied: django in ~ 위와 같은 에러가 나오면서 설치가 진행되지 않았다. 반면 가상.. 2021. 12. 18. 이전 1 2 다음