
전체 글
문자 검색 함수 - strchr
오늘 알고리즘 문제를 풀던 중, 문자 검색 함수인 strchr을 사용할 일이 생겨 관련 기능을 정리해보고자 포스팅을 올리게 되었다. #include // C++ 에서는 const char* strchr(const char* str, int character); char* strchr(char* str, int character); const char* 형이나 char*형 문자열 str 앞에서부터 문자 character를 찾고, 그 위치를 가리키는 포인터를 리턴한다. 마지막 NULL 문자도 검색이 가능하므로, 문자열의 끝을 가리키는 포인터를 얻기 위해 사용할 수도 있다. 예제 코드 1 - 문자열에서 특정 문자의 위치를 찾고 싶을 때 #include #include int main() { char test[..
Spring 계층 구조
스프링은 여러 가지 계층을 갖는 계층 구조로 이루어져 있다. 각 계층들은 웹을 구현하기 위해 자신이 맡은 역할을 수행하며, 아래 그림과 같은 구조로 구성되어 있다. 각 계층들의 역할을 하나씩 살펴보자. Web Layer 흔히 사용하는 컨트롤러(@Controller)나 JSP와 같은 뷰 템플릿 영역이다. 이외에도 필터(@Filter), 인터셉터, 컨트롤러 어드바이스(@ControllerAdvice) 등 외부 요청과 응답에 대한 전반적인 영역을 다룬다. Service Layer @Service 어노테이션을 사용하는 영역이다. Controller와 DAO의 중간 영역에서 사용되며, @Transactional이 사용되어야 하는 영역이다. 트랜잭션, 도메인 간의 순서를 보장해준다. Repository Layer ..
Spring batch - 1. 기본 개념
배치 프로그램 배치란, 데이터를 실시간으로 처리하지 않고 요청들을 한꺼번에 모아서 처리하는 방식이다. 이러한 배치 프로그램은 아래와 같은 특징들을 가지고 있다. 대량의 데이터를 처리한다. 사용자의 개입 없이 자동으로 동작한다. 유효하지 않은 데이터가 입력되었을 때도 동작을 중단하지 않아야 한다. 프로그램이 실행되는 시간을 정할 수 있다. 요청들을 일괄적으로 처리한다. 그렇다면, 이러한 배치 프로그램은 왜 써야하는걸까? 예를 들어, 매일 한 번씩 전날의 데이터를 집계한다고 해보자. 하루에 한번밖에 사용되지 않는 기능을 위한 API를 만드는 것은 낭비가 될 수 있고, 실수로 이 API를 하루에 두 번 이상 실행할 수도 있다. 또한 데이터의 양이 매우 많을 것이므로 집계가 중간에 실패할 경우 다시 처음부터 집..
@Controller vs @RestController
@Controller Spring 3에서 주로 사용하던 어노테이션이다. 컨트롤러에 붙여서 사용하며, 뷰(페이지)를 리턴한다. @ResponseBody를 붙이면 JSON이나 XML과 같은 데이터 형식으로도 리턴 가능하다. 실행 흐름은 아래와 같다. 1. DispatcherServlet으로 클라이언트의 요청이 들어온다. 2. DispatcherServlet은 *HandlerMapping을 이용해 요청을 처리할 컨트롤러를 찾는다. 3. 컨트롤러는 적절한 작업을 수행하고, *ModelAndView 객체를 DispatcherServlet으로 리턴한다. 4. DispatcherServlet은 ModelAndView 객체를 *ViewResolver로 보내 사이트에 표시할 페이지를 찾는다. 5. 페이지에 모델 객체를 ..