서블릿 포워드 서블릿 포워드(Forward) 서블릿의 포워드란, 각각의 서블릿끼리 혹은 서블릿과 JSP끼리 연동해서 작업해야 하는 경우 서로 작업을 전달하는 것을 말한다. 포워드의 종류는 다음 네가지이다. redirect Refresh location dispatch (일반적인 포워드 방식) 이 네가지 포워드 방식을 알아보자. redirect HttpServletResponse 객체의 sendRedirect() 메서드를 이용한다. 웹 브라우저(클라이언트)에게서 첫번째 서블릿이 요청을 받으면 첫번째 서블릿이 다시 브라우저에게 응답을 보낸 후 브라우저가 다시 두번째 서블릿에게 요청을 보낸다. 요청을 받은 두번째 서블릿은 다시 브라우저에게 응답한다. WAS에서 객체가 두번 생성되기 때문에 매핑 url이 달라지..
Servlet의 생명주기 서블릿의 생명주기를 알아보려고 한다. 먼저, 서블릿이 동작을 할 때 까지의 과정을 알아보자. Servlet이 동작하려면... 먼저 클라이언트(Web Browser)가 요청을 보낸다. 클라이언트의 요청을 WAS가 받아 HttpServletRequest객체와 HttpServletResponse객체가 존재하는지 확인 한 후, 존재하지 않으면 두 객체를 생성해서 웹 어플리케이션의 서블릿 컨테이너로 전달해준다. 이제 비로서 서블릿이 동작하며 서블릿 라이프사이클이 돌아가게된다. Servlet의 생명주기 Servlet은 init() service() destroy() 이 세가지의 메서드를 돌며 살아간다. init() was에서 객체넘겨줌 -> 서블릿에서 딱 한 번 초기화 init() 메서드는..
중첩 클래스(nested Class) 중첩 클래스란? 다른 클래스 내부에 정의되는 클래스이다. 스태틱 클래스 : 다른 클래스 안에서 독립적으로 존재 내부 클래스 : 자신이 정의된 클래스의 오브젝트 안에서만 존재 멤버 내부 클래스 : 멤버 필드처럼 오브젝트 레벨에서 사용. 로컬 클래스 : 메소드 레벨에서 사용. 익명 내부 클래스 : 이름을 갖지 않는 클래스 익명 내부 클래스 내부 클래스 중에서도 익명 내부 클래스는 이름을 갖지 않는 클래스이다. 익명이라서 그냥 선언과 동시에 오브젝트가 생성이 된다. 그러므로 상속할 클래스나 구현할 인터페이스를 생성자 대신 사용을 해서 이용하며 클래스를 계속 재사용하지않고 오직 구현에만 목적을 둘 경우에 유용하게 사용할 수 있다.(콜백) public interface Tes..
커넥션 풀 Connection Pool 커넥션 풀이란? 데이터베이스가 연결되고 사용하는 과정의 자원 소모를 효율적으로 하기 위하여 연결 부분(Connect) 과 사용(Pool) 부분을 분리 한 뒤 커넥션을 미리 만들어 Pool 속에 저장해 두었다가 가져다 쓴 뒤 다시 Pool에 저장하는 것. 장점 DB 접속에 드는 큰 자원을 효율적으로 관리할 수 있다. 커넥션 수를 제어하여 접속자들을 효율적으로 관리할 수 있다. 기본 DBCP 셋팅(설정파일로 셋팅하는 법) DBCP 라이브러리 추가 common-dbcp common-pool mysql-connector 등등 DBMS 자체의 dbcp 풀 라이브러리 javax.sql 패키지의 DataSource 상속 Dao.java public class MyDAO{ pri..
Logistic Regression(로지스틱 회귀) 참과 거짓을 예측하기 위한 알고리즘이다. 데이터에 선을 긋는 선형회귀와는 다르게 아래와 같이 0과 1에 닿는 S모양의 커브를 가지고 있다. 이 알고리즘은 머신러닝 지도학습에 사용된다. Regression 이라는 이름을 보아 Regression(회귀) 문제 에 쓰일 것 같지않은가? 땡! 의외로 이 알고리즘은 지도학습의 이진분류에 쓰이며 Classification(분류) 알고리즘으로 구분된다! S모양의 정 가운데(0.5)보다 위에 있는 것들은 참으로 분류하고 아래에 있는 것들은 거짓으로 분류하는 것이다. 선형구분이 가능할 때 퍼포먼스가 좋다. Logistic Regression이 나타나는 과정 Logistic Regression은 결과값을 최대한 0과 1에..
Let's Encrypt 수동갱신 Let's Encrypt에서 SSL인증서를 발급 받으면 90일에 한 번 새롭게 갱신을 해줘야 한다. 만료되기 2주전에 등록된 이메일로 만료 이메일이 올 것이므로 메일을 받았다면 갱신을 해보자. SSL 인증서를 발급받을 때 Certbot이라는 툴을 이용하였듯이 갱신할 때도 편리하게 Certbot을 이용하면 된다. (물론 수동 갱신이 귀찮다면 자동갱신으로 설정할 수 있다.) 갱신 방법 1. certbot-auto 툴이 있는 곳을 찾아 renew를 해준다. 이 때 처음 돌리는 것이니 Dry Run 을 해준다. Dry Run : 모의 테스트, 예행 연습의 뜻을 가졌으며 실제로 실행시키기 전에 시험 삼아 시뮬레이션 해보는 옵션) [certbot-auto가 있는 디렉..
Let's Encrypt/Certbot-auto 수동갱신 에러(ImportError: No module named cryptography) 발생 Let's Encrypt 를 수동갱신 하기위해 certbot-auto를 이용하는 와중에 ImportError: No module named cryptography 라는 에러가 뜨면서 갱신에 실패하였다. 그래서 cryptography 를 설치해주었다. > pip install cryptography 그럼에도 불구하고 계속 같은 에러가 발생했다. 원인 Let's Encrypt의 파이썬 버전이 site-packages폴더에 있는 내용을 찾고있는데 그 폴더가 비어있어서 생기는 에러이다. 이상하게 그 내용들은 site-packages폴더가 아닌 dist-packages에..
while connecting to upstream 발단 기존 home.html 에 9.83KB 짜리 이미지가 있었는데 추가로 39.8KB, 31.6KB 크기의 이미지를 추가해서 배포 배포 후, 추천코드를 입력하던 사용자가 갑자기 에러가 났다고 신고 들어가보니 Nginx의 크고 아름다운 5xx 에러가 장악 서버로그처리를 안해놔서 멘붕(반성) 의심 Nginx 에러이니 Nginx 에러로그를 파헤쳐봄 (웹 서비스 로그는 특별한게 없었음) sudo vim /etc/nginx/nginx.conf
Incorrect String Value 에러 원인 DB의 인코딩이 어딘가 맞지않아 생기는 전형적인 문제이다. 해결 my.ini 파일을 찾아서 아래와 같이 넣어주기 [mysqld] datadir=C:/Program Files/MariaDB 10.4/data port=3306 innodb_buffer_pool_size=2039M character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci [client] port=3306 plugin-dir=C:/Program Files/MariaDB 10.4/lib/plugin default-character-set = utf8mb4 [my..
Missing artifacts com.oracle:ojdbc.jar Maven에 Oracle을 연동시킬 때 나타나는 에러를 해결해보자! 증상 Spring 프로젝트에 Oracle을 연동하려고 Maven에 설정을 했는데 Missing artifacts com.oracle:ojdbc6:jar:11.2.0.3 이라고 떠버렸다. 원인 Maven 중앙저장소에서는 ojdbc를 직접 제공해주지 않는다고한다. 그래서 에 아무리 넣어도 불러와주질 않았다. 해결 mvnrepository.com 으로 가서 ojdbc 검색 https://mvnrepository.com/artifact/com.oracle/ojdbc6/11.2.0.3 (현재 최신버전) spring plugin 선택 Note 부분의 repository 주소를 긁..