본문 바로가기
반응형

개념공부41

[Django linux-redhat 배포 시] mysqlclient 2.2.4 ver 설치 에러 subprocess-excited-with-error / mysql-devel 설치 시 mariadb-devel로 인식되는 오류 해결 Django 프로젝트를 ec2 서버에 배포를 하는 도중 에러가 발생했다. 아무리 구글링을 해봐도 해결법이 나오지 않던 중 3일만에 해결을 하여 기록한다. 설치한 라이브러리 - asgiref 3.7.2 - Django 4.2.10 - Djangorestframework 3.1.4 - Mysqlclient 2.2.3 - sqlparse 0.4.4 먼저 ec2 서버에 접속 후 git, python3 버전을 설치했다. 그리고 git에 올라가있는 django프로젝트 gitlab 소스코드를 clone 하였고, requirements.py에 저장해둔 내 라이브러리 설치 버전들을 install 하려고 했다. Django 등 다른 라이브러리들은 설치가 잘 되었으나 mysqlclient가 subprocess-excited.. 2024. 2. 20.
[JSP / FileUpload / AJAX] 파일 다운로드 + 다운로드 수 실시간 올리기 JSP를 활용하여 파일 업로드를 하고 조회수와 다운수를 실시간으로 업데이트 시켜주는 기능을 구현하려고 하였다. 기존 JSP의 동작은 새로고침이 되야 데이터가 업데이트 되는 방식이였다. 하지만 나는 SPA처럼 다운 수 부분만 업데이트 시켜주고 싶었다. 로직은 "다운로드 버튼 클릭" -> "ajax에서 FileDownload 서블릿 url로 요청" -> FileDownload 서블릿에서 "파일다운로직, ajax response로 업데이트 된 다운 수 전달" 로 생각하여 개발을 진행하였다. 하지만 ajax 응답이 계속해서 오지 않았고, 성공 시 응답이 오더라도 file안의 data가 byte값으로 찍혔다. 이를 해결하기 위해 여러명이 머리를 싸매서 고민했고, 정답을 알아냈다. 일단은 간단한 UI와 파일들을 먼.. 2022. 7. 7.
Web의 변천사 (HTML -> Servlet -> JSP -> MVC -> Spring) 자바 서블릿이란 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램. 쉽게 이야기하면, 클라이언트가 서버에 요청을 보낼 때와 응답을 받을 때 필요한 HTTP 작업을 도와주는 것. Web HTML -> Servlet -> JSP -> MVC -> Spring 1. Web HTML - 기존의 웹은 위의 사진처럼 HTML / CSS / JS를 활용한 하나의 페이지만 보여주는 정적 페이지였다. - 동적 프로그래밍에 대한 희망 그로인해 Servlet, JSP가 나오게 됨 (Dynamic Web Project 생성) - 브라우저의 요청에 따라 항상 다른 페이지를 보여주는 페이지 Servlet - 자바를 사용하여 웹페이지를 동적으로 생성하는 서버 측 프로그램. - 웹 클라이언트의 요청을 처리할 수 있는 클래.. 2022. 7. 5.
Forward 방식과 Redirect 방식의 차이 Servlet을 이용하여 client에서 보내준 값을 Servlet1 -> Servlet2로 보내서 띄우기 위해 Forward와 Redirect방식을 이용해서 처리를 하였다. Client에서 Post방식으로 데이터를 보내줬고, Servlet1에서 doPost로 데이터를 받았다. 그 후 Forward방식과, Redirect를 이용하여서 Servlet2로 보내주었고, Servlet2에서 doGet방식으로 데이터를 받으려고 했다. 하지만 Redirect방식만 응답이 있었고, Forward방식은 응답이 없었다. 그래서 Client에서 Get방식으로 데이터를 보내줬고, 똑같이 수행하니 Redirect와 Forward 두가지 방식 모두 다 응답이 있었다. 여기서 나는 왜 Get방식으로 보내면 둘 다 응답이 가고, .. 2022. 6. 30.
스레드와 메모리구조 프로세스 vs 스레드 (Thread) 프로세스란? - 프로그램을 실행시켰을 때 메모리상에 올라가 동작되고있는 과정 스레드란? - 프로세스 내에서 실행되는 흐름의 단위 1. main() 안의 실행문들이 하나의 Thread이다. 2. main() 이외의 또 다른 스레드를 만들려면 Thread 클래스를 상속하거나, Runnable 인터페이스를 구현한다. 3. 멀티스레드로 작업을 할 때에는 각 스레드끼리 정보를 주고받을 수 있어 처리 과정의 오류를 줄일 수 있다. 4. Java 메모리구조 에서는 스레드가 생성될 때 마다 각각 독립적인 Stack영역, PC영역, NMS(Native Method Stack)영역을 가지게 된다. 메모리 구조 - 선택 이유 코드를 작성하고 프로그램을 개발 해봤지만, 컴퓨터 내부에서는 .. 2022. 6. 21.
[Docker] Volumes, Bind Mounts 볼륨과 바인드마운트 - 컨테이너 데이터를 저장하는 기술 Data의 종류 - Application (Code + Environment) 1. 개발자에 의해 작성되고 제공 되는 데이터 2. 이미지가 추가되거나 컨테이너가 빌드될 때 생성 3. 이미 생성된 이미지는 변경될 수 없음 * Read-only, 이미지에 저장되는 데이터 - Temporary App Data (entered user input) 1. 컨테이너가 돌아갈 때 생성되는 데이터 2. 메모리 또는 임시파일에 저장 됨 3. 동적으로 변화함. 그러나 정기적으로 초기화 됨 * Read + write, 컨테이너에 임시로 저장되는 데이터 - Perment App Data (user accounts) 1. 컨테이너가 돌아갈 때 생성되는 데이터 2. 파일이나 데이터베이스에 저장이 됨 3. 컨테이너가 멈추거나 재 .. 2022. 6. 8.
[Docker]도커란 무엇인가? 도커의 등장 - 다양한 이유로 계속 바뀌는 서버 환경과 개발 환경의 문제를 해결하기 위해 등장 * 기존 서버나 개발 환경이 변경되면 컴퓨터 셋팅(개발환경)등을 다시하거나 그 과정에서 발생하는 문제점들이 많았음. 그렇다면 도커란? - 개발한 소프트웨어 유닛, 코드가 포함된 패키지 및 코드를 실행하는 종속성 들을 담을 수 있음 - 도커가 실행되는 모든 곳에서 이를 가져올 수 있음 - 동일한 환경에서 정확히 동일한 애플리케이션을 실행할 수 있음 - 결국 각 개발자 마다 개발 환경을 맞추기 위해 저장을 하는 것. 도커 이전의 문제점 문제점 1. 개발자들이 규모가 큰 환경에서 함께 개발을 할 때 - Node.js 14ver를 사용하였는데, 한동안 개발이 이루어지지 않다가 다른 개발자가 Node.js 16ver로 .. 2022. 6. 6.
[Regex] 정규표현식 정규표현식이란? 정규표현식은, 문자열에서 특정 문자 조합을 찾기위한 패턴이다. 특정한 조건의 문자를 '검색'하거나 '치환'하는 과정을 매우 간편하게 처리할 수 있도록 하는 방법이다. Groups and ranges (그룹, 레인지) | 또는 () 그룹 [] 문자셋, 괄호안의 어떤 문자든 [^] 부정 문자셋, 괄호안의 어떤 문자도 아닐 때 (?:) 찾지만 기억하지는 않음 - 그룹 Quantifiers (수량) ? 없거나 있거나 (zero or one) * 없거나 있거나 많거나 (zero or more) + 하나 또는 많이 (one or more) {n} n번 반복 {min,max} 최소, 그리고 최대 Boundary-type (단어 경계) \b 단어 경계 \B 단어 경계가 아님 ^ 단어의 시작 $ 단어의 .. 2022. 3. 28.
Gitlab Merge conflicts 해결방법 (+Merge locally만 보일 때 해결하는 방법) Gitlab을 사용하며 협업을 하게되면 꼼꼼하게 확인하고 merge 시키지만 어쩔 수 없이 충돌이 한번씩은 발생하게 된다ㅠ Gitlab내에서 아래처럼 Resolve conflicts라도 나오면 충돌난 부분을 바로 확인하고 수정할 수 있는데, 만약 Merge locally만 뜬다면 저기에서 주어지는 코드만으로 local에서 충돌을 해결하기에는 어려움이 있었다. 이를 해결하기 위해 많은 자료를 찾던 중 깃랩 공식문서에 있는 방식대로 해결을 해서 이를 정리해두려고 한다. 충돌 해결 방법 Gitlab은 사용자 인터페이스에서 해결할 수 있는 방법과, local에서 명령어를 이용하여 해결할 수 있는 방법이 있다. 1. Resolve conflicts - Interactive mode를 사용하여 해결하기 - Gitl.. 2022. 3. 18.