저번 전문가를 매칭시켜주는 숨고 서비스를 클론 코딩하는 팀 프로젝트를 진행하던 중 인기 검색어, 최근 검색어를 구현하는 파트를 맡게 되었다! 오늘은 그와 관련해서 포스팅을 해보려고 한다. 최근 검색어, 인기 검색어... 왜 Redis를? 우선 RDB가 아닌 NoSQL의 Redis를 선택하게된 이유에 대해서 간략하게 생각해보자. 우리가 일반적인 사이트의 검색창에 마우스를 클릭했을 때 최근 검색한 내용, 혹은 그 서비스에서 제공하는 인기 검색어의 리스트등이 나오는 것을 볼 수 있다. 여기서 '검색어를 입력하지 않았을 때도 데이터를 제공해주고, 실제로 잘못 클릭했을 경우에도 저 데이터를 제공해주네..?' 라는 생각을 해서 의도했던, 하지 않았던 해당 서비스에서 많은 사용이 이루어질 것이라고 판단했다. 그말은 ..
프로그래머스 데브코스 백엔드 4기 코스에서 과제를 수행하던 중, RestController의 테스트 코드를 짜게 되었다. 일련의 시행착오도 거치고, 잘못된 지식도 있었다. 그리고 세상에서 제일 잔인한게 '아.. 이거 해본거 같은데 기억이 안나네..' 이다.. 기억이 휘발되어 이러한 반복을 방지하기 위해 글로 남긴다! 목차 1. 스프링에서 RestController 테스트시 주로 사용되는 어노테이션 2. 나는 어떤걸 썼느냐? 3. 리팩토링을 하며 거쳤던 시행착오 (feat. 예외에 대한 테스트) 4. @WebMvcTest 사용시, 간단한 테스트의 사용법 5. 다섯 줄 요약 들어가기 앞서, 스프링에서 RestController 테스트시 주로 사용되는 어노테이션 1. @WebMvcTest 목적 : 스프링 MV..
스프링 빈(Spring bean) 이란? Spring IoC 컨테이너가 관리하는 자바 객체를 빈(Bean)이라고 부른다 자바 프로그래밍에서는 Class를 생성하고 new를 입력하여 원하는 객체를 직접 생성 후 사용했다 하지만 Spring에서는 직접 new를 이용하여 생성한 객체가 아니라, Spring에 의하여 관리당하는 자바 객체를 사용한다 이렇게 Spring에 의해 생성되고 관리되는 자바 객체를 Bean 이라고 한다 스프링에서 빈(Bean)을 등록하는 방법 1. @Component (자동) @Component 어노테이션이 붙여져 있는 경우에는 스프링이 확인하여 빈으로 등록시킨다 @Controller, @Service, @Repository는 모두 @Component를 포함하고 있다. 2. @Config..
싱글톤 VS 스프링 싱글톤 우선, 싱글톤 패턴에 관하여 궁금하다면! Java 싱글톤 패턴 싱글톤 클래스를 구현하기 위해 사전 정의된 규칙 같은건 없지만 *클래스 로더마다 한 번만 인스턴스화 해야한다 싱글톤 클래스라고 하면 해당 클래스의 인스턴스를 하나만 만들 수 있다 구현 방법 외부 클래스로부터 인스턴스화 되는 것을 막기 위해 생성자는 private으로 선언되어야 한다 인스턴스화 된 클래스를 static 변수로 선언한다 = 어느 영역에서든 접근 가능 인스턴스화 된 클래스를 리턴하는 함수를 선언한다 이렇게 하면 클래스가 클래스 로더에 의해 단 한번만 인스턴스화 되는 것을 이용하여 구현한다 *클래스 로더란 자바는 동적 로드, 즉 컴파일 타임이 아니라 런타임(바이트 코드를 실행할 때)에 클래스 로드하고 링크하..
어노테이션(Annotation)이란 자바 어노테이션은 자바 소스 코드에 추가하여 사용할 수 있는 *메타데이터의 일종이다 보통 ‘@’ 기호를 앞에 붙여서 사용한다. JDK 1.5버전 이상에서 사용이 가능하다 @를 이용한 주석, 자바 코드에 주석을 달아 특별한 의미를 부여한 것이다 자바 어노테이션은 클래스파일에 임베디드되어 컴파일러에 의해 생성된 후 자바 가상머신에 포함되어 작동한다 *메타데이터란 Application이 처리하는 데이터가 아니고, 컴파일 과정과 런타임 과정에서 코드를 어떻게 컴파일하고 처리할것인지를 알려주는 정보이다 Annotation의 용도 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공한다 오버라이딩을 하기 위해서는 부모 클래스에 있는 메소드명과 매개변수를 동일하게 가져가야한다..
들어가기 앞서.. 공통 프로세스에 대한 고민 자바 웹 개발을 하다보면, 고통적으로 처리해야 할 업무들이 많다 예를들어 로그인(세션 체크)처리, 권한체크, Xss(Cross site script)방어, 페이지 인코딩 변환등.. 공통업무에 관련된 코드를 모든 페이지 마다 작성 해야한다면 중복된 코드가 많아지게 되고 프로젝트 단위가 커질수록 서버에 부하를 줄 수 있으며, 소스 관리도 되지 않는다. 즉, 공통 부분은 빼서 따로 관리하는게 좋다 위와 같은 공통 처리를 위해 활용할 수 있는 것이 3가지가 있다 AOP 인터셉서 필터 AOP Aspect Oriented Programming의 약자로 관점 지향 프로그래밍 이라고 불린다. AOP는 OOP를 대신하는 새로운 개념이 아니라, 기존 OOP를 더욱 보완, 확장하..
서블릿(Servlet)이란? 서블릿이란 Dynamic Web Page(동적 페이지)를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술이다. 다양한 웹 요청과 웹 응답의 흐름을 간단한 메소드 호출만으로 체계적으로 다룰 수 있게 해주는 기술 서블릿의 주요 특징 클라이언트의 Request에 대해 동적으로 작동하는 웹 애플리케이션 컴포넌트 HTML을 사용하여 Response 한다. JAVA의 쓰레드를 이용하여 동작한다. MVC 패턴에서 컨트롤러로 이용된다. HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받는다. UDP보다 속도가 느리다. HTML 변경 시 Servlet을 재 컴파일해야 하는 단점이 있다. 서블릿의 동작 과정 클라이언트가 We..
Web Server와 Web Application Server를 알아보기전에 정적 페이지와 동적 페이지에 대해 알고 넘어가야한다 Static Pages (정적 페이지) 내용이 바뀌지 않는 페이지(항상 동일한 내용) Web Server는 파일 경로 이름을 받아 경로와 일치하는 file contents를 반환한다 항상 동일한 페이지를 반환한다 Dynamic Pages (동적 페이지) 파라미터에 따라 내용이 변경되는 페이지 파라미터의 내용에 맞게 동적인 contents를 반환한다 Web Server에 의해 실행되는 프로그램을 통해 만들어진 결과물 Web (웹) 웹은 HTTP 기반이며, HTTP 메시지에 모든 것을 전송한다 HTML, TEXT IMAGE, 음성, 영상, 파일 JSON, XML(API) 거의 모든..