프론트 컨트롤러(Front Controller) 디스패처 서블릿에 대해 알기 위해선 프론트 컨트롤러(Front Controller)에 대해 알아야 한다. 프론트 컨트롤러는 말 그대로 모든 컨트롤러 앞에 있는 컨트롤러이다. 클라이언트의 모든 요청을 앞에서 받고 해당 요청을 처리할 적절한 컨트롤러를 결정한다. 예를 들어 사용자가 로그인을 하려고 하면 해당 요청을 프론트 컨트롤러가 받아 로그인 컨트롤러에게 넘길 것이다. 만약 사용자가 구매 요청을 보낸다면 프론트 컨트롤러는 구매 컨트롤러를 호출할 것이다. 프론트 컨트롤러의 필요성 프론트 컨트롤러를 사용하지 않고 클라이언트의 요청을 일일히 적절한 컨트롤러에 매핑시켜놓으면 어떨까? 이것은 매우 비효율적이다. 웹 서비스를 구현하다보면 필연적으로 공통 기능이 필요하기..
CASE WHEN문 C언어나 JAVA등에서 조건식을 사용하기 위해서는 if문을 주로 사용한다. 오라클도 이와 유사하게 조건식을 사용할 수 있는 방법이 있다. 바로 CASE WHEN문이다. CASE WHEN [조건 1] THEN [출력 1] WHEN [조건 2] THEN [출력 2] ... ELSE [출력 N] END CASE WHEN문의 기본적인 문법은 위와 같다. 프로그래밍 언어에서 사용하는 if문과 거의 비슷하다. CASE WHEN 뒤에 조건을 작성하고, 해당 조건을 만족하면 THEN 뒤의 출력값을 출력하는 식이다. 예를 들어 SELECT CASE WHEN gender = 'M' THEN '남성' WHEN gender = 'F' THEN '여성' END AS '성별' FROM dual; 위와 같이 사..
LOB(Large Object) 타입이란? LOB(Large Object)타입은 오디오, 비디오, 문서 등 다양한 데이터를 큰 용량까지 저장할 수 있는 데이터 타입이다. LOB은 아래와 같이 4가지 종류가 존재한다. BLOB(Binary Large Object) : 바이너리(binary)타입의 어떠한 데이터든 저장할 수 있다. 주로 이미지, 오디오, 영상에 활용된다. CLOB(Character Large Object) : 매우 큰 용량의 문자열 혹은 문서를 저장할 때 사용한다. 고정 길이를 사용한다. NCLOB(National Character Set Large Object) : National 문자열 세트를 저장한다. CLOB과는 다르게 가변 길이를 사용한다. BFILE(External Binary F..
에러 상황 Spring에서 Apache POI를 통해 엑셀 파일을 읽으려고 했다. 그런데 연도(year) 셀을 읽을 때 cannot get a STRING value from a numeric cell 라는 에러가 발생했다. 해당 에러는 숫자가 입력된 셀에서 String을 추출하려고 할 때 발생한다. 그런데 엑셀 파일에서 해당 셀을 확인해보니 셀 서식이 텍스트로 되어있었다. 아파치 POI 라이브러리가 좀 멍청한건지, 숫자로 써져있어도 셀 서식이 텍스트면 String으로 읽어야 하는데 숫자로 읽는것 같다. 해결법 해결법 1 row.getCell(1).setCellType(CellType.String); year = row.getCell(1).getStringCellValue(); 첫번째 방법은 셀타입을 강..
@PathVariable 스프링에서 @PathVariable 어노테이션을 사용하면 URI의 템플릿 변수를 메서드 파라미터에 바인딩할 수 있다. 예를 들어 https://code-lab1.tistory.com/{idx} 위의 {idx}는 URI 템플릿 변수(이하 템플릿 변수)로 값이 바뀌는 가변형 변수이다. 실제로는 https://code-lab1.tistory.com/127 위와 같이 실제 값이 들어가게 된다. 이처럼 REST API로 전송되는 템플릿 변수를 메서드의 파라미터에 바인딩할 수 있다. value 속성 @RestController public class SomethingController{ @GetMapping("/student/{name}") public ResponseEntity getSt..
에러 발생 Redis로 세션 관리를 하는 프로젝트에서 로그인을 시도할 때 Spring에서 RedisCommandExecutionException이 발생했다. 에러메시지는 "NOAUTH Aunthentication required" 였다. 해당 에러는 Redis 서버에서 Password를 설정했기때문에 발생한다. 따라서 클라이언트는 해당 Password를 설정해야한다. 위 에러를 해결할 수 있는 방법은 다음과 같다. 패스워드 설정 Redis서버의 redis.conf 파일에서 패스워드를 설정할 수 있다. Requirpass 항목에 패스워드를 입력하면 된다. redis-cli 리눅스를 사용하고 있다면 터미널에서 redis-cli를 입력하고 윈도우를 사용한다면 레디스가 설치된 폴더의 redis-cli.exe 파..
Tests 포스트맨의 Tests 탭에 작성한 Test Script는 Request에 대한 Response가 도착한 뒤 실행된다. Pre-request Script가 Request가 전송되기 전에 실행되는 것과 상반된다. 보통 Tests 스크립트는 요청에 대한 응답이 올바르게 왔는지, 의도한 결과대로 응답이 왔는지, 응답의 내용을 확인할 때 유 용하게 사용할 수 있다. + 참고) [Postman] 포스트맨 pre-request script 활용법, token 갱신 자동화 Pre-request script 포스트맨에서 pre-request script는 request를 전송하기 전에 자바스크립트 코드를 실행할 수 있는 기능이다. pre-request script는 단순히 request 뿐만 아니라 colle..
Pre-request script 포스트맨에서 pre-request script는 request를 전송하기 전에 자바스크립트 코드를 실행할 수 있는 기능이다. pre-request script는 단순히 request 뿐만 아니라 collection, folder 단위로도 작성이 가능하다. pre-request script는 주로 환경 변수 설정, 파라마티나 헤더 설정, 디버깅 코드 실행 등으로 사용이 가능하다. 또는 로그를 남기는 용도로도 사용할 수 있다. Tests와의 차이는 Tests는 request가 전송되고 response가 온 후에 실행되지만, pre-request script는 request가 전송되기 전에 실행된다는 점이다. 참고) [Postman] 포스트맨 환경변수(Environments ..
신년계획 나는 연초가 되면 항상 신년계획을 짜곤한다. 물론 신년계획을 전부 달성한 적은 한 번도 없다...ㅠㅠ 그래도 이렇게 모두가 볼 수 있는 블로그에 내 목표를 적는다면 좀 더 열심히 노력하지 않을까라는 생각에 이렇게 블로그에 내 신년계획을 적어본다. 1. 건강챙기기 나는 취준생 시절부터 건강이 많이 악화됐다. 그 때부터 건강이 다른 무엇보다도 중요하다는 것을 느꼈다. 이를 위해 다음과 같은 것들을 이루고 싶다. 일주일에 3번 이상은 헬스장가서 운동하기 몸무게 65KG 달성(근육량 증가) 규칙적인 생활하기 저녁 8시 이후 야식 금지 스트레스 관리하기(명상, 호흡, 운동) 2. 개발 공부하기 개발자로서의 성장을 위해 할게 정말 많다. Spring 인프런 강의 복습 이펙티브 자바 읽기 JPA 인프런 강의..
카카오 청년전월세 보증금 대출 새로 이사할 집의 보증금을 마련하기 위해 카카오 청년전월세 보증금 대출을 신청했다. 카카오 청년전월세 보증금 대출의 조건은 아래와 같았다. 만 19세 ~ 34세 이하 내국인 근로소득자(재직기간 무관), 사업소득자, 기타소득자, 무소득자 부부합산 무주택자 연소득 7천만원 이하 회생, 파산, 면책 등 신고사실 없는 자 이외에 사기 이력이 없는 등 여러 가지를 더 보는데 보통 해당하지 않는 경우가 많다. 서류 간편인증서를 통해 여러가지 서류를 자동으로 제출하지만, 아래와 같은 서류들은 직접 사진을 찍어 제출해야했다. 1. 근로소득 원천징수 영수증 근로소득 원천징수 영수증은 현 직장에서 1년 이상 근무해야지만 발급된다. 나는 아직 현 회사에서 1년 미만으로 근무했기 때문에 회사에서..