기본적으로 MVC모델은 위 그림과 같이 동작합니다. 클라이언트로 부터 들어온 요청을 모델객체를 통해 처리하고 그 결과를 view template을통해 전달합니다. view라는 것은 실제 사용자에게 보이는 프레젠테이션 로직입니다. 웹 애플리케이션에서는 HTML을 렌더링 하는 역할을 하는 것이겠죠. 이전까지는 JSP가 이 역할을 위해 표준적으로 쓰여 왔습니다만 여러가지 불편함과 문제점을 가지고 있었고 이를 해결하기 위해 다양한 view 템플릿 엔진들이 등장하게 되었습니다. JSP와 MVC 패턴에 대한 설명은 이전 포스팅을 참조 부탁드립니다. 템플릿 엔진(Template Engine)은 템플릿 양식과 특정 데이터 모델에 따른 입력 자료를 합성하여 결과 문서를 출력하는 소프트웨어를 말합니다. 그 중 웹 템플릿 ..
오늘의 미션, 만약 view 단에서 보여줘야 하는 데이터가 없으면(아마도 DB에서 삭제된 경우) 프론트단에 데이터를 보여주는 div 태그를 없애야 한다. 아 그야 식은 죽 먹기죠. data가 null인지 아닌지 판단해서 null이 아닐 때만 보여주면 되는거 아니겠습니까 아래 코드처럼요. ... 그런데 문제가 하나 더 있네요. 만약 null 값이 아니라 빈 문자열이 들어온다면 어떻게 해야 하죠? 그럼 코드가 이런식이 되어야 할 것 같은데... ... 데이터가 null 일수도 있고 빈 문자열일 수도 있을 때도 있다면 조건문을 두 개 써야 겠군요. 그런데 그냥 컨트롤러에서 처리해서 넘겨준다면 조금 더 편할 것 같습니다. if (examData.isEmpty()) { model.addAttribute("exam..
DBMS를 잘 모르다 보니 테이블 스키마를 제대로 못 읽어서 날짜 데이터가 varchar 타입인 것으로 오해하로 코딩을 하고 있었다. 진작 물어봤어야 하는데 쩝.. 어쨌든 datetime 이었기 때문에 ValueObject 역시 String 이 아니라 Date 타입으로 받을 수 있다. 그런데 문제는 날짜 포맷을 맞추기 위해 사용하던 코드였다. SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd"); examVO.setRegDttm(formater.format((formater.parse(examVO.getRegDttm())))); String으로 들어온 날짜를 포맷에 맞춰서 Date로 바꾼 다음 다시 format에 맞춰서 String으로 바꿔서 넣..
코드에 상수를 남기는 것은 좋지 않다. 그 상수가 무엇을 의미하는지 쉽게 이해하기 힘들 뿐더러 그 상수 값 하나를 바꾸기 위해 수천라인의 코드를 한 줄 한 줄 다 뒤져야 할 수도 있다. 이것은 HTML 안에서도 마찬가지이다. 아래와 같은 코드가 있다고 해 보자. make popup 버튼 태그 onclick 속성을 보면 클릭했을 때 makeNewPopup이라는 함수를 호출하고 있다. 그런데 파라미터로 전달되는 상수 1이 의미하는 것은 무엇일까? 이 코드만 봐서는 도무지 알 수가 없다. 이 상수를 생성되는 popup의 타입이라고 생각해보자. 이 상수를 조금 더 가독성 있게 표현할 수 있는 한 가지 방법은 자바스크립트의 전역변수로 선언을 해 놓고 사용하는 것이다. ... make popup 이렇게 하면 생성되..
스프링이 제공하는 거의 모든 기본 사상은 몇 가지 기초적인 개념으로 귀결되며, 이는 스프링의 기본 임무인 '자바개발 간소화'에 모든 초점을 맞춘다. 물론 특정 기능을 간소화 하는 프레임 워크는 많이 존재 한다. 하지만 스프링의 목적은 자 바개발을 폭넓게 간소화 하는 데 있다. 자바 복잡도 간소화를 위한 스프링의 네 가지 주요 전략 POJO를 이용한 가볍고(lightweight) 비침투적(non-invasive)인 개발* DI와 인터페이스 지향(interface orientation)을 통한 느슨한 결합도(loose coupling) 애스펙트와 공통 규약을 통한 선언적(declarative) 프로그래밍 애스펙트와 템플릿(template)을 통한 반복적인 코드 제거 * 비침투적 개발은 바탕이 되는 기술을 사..
지난시간까지 PageController를 POJO로 바꾸는 데 까지 성공했다. POJO 객체는 톰캣에 올라가지 않기 때문에 직접 객체를 만들어서 Listener에서 attribute에 등록하는 절차를 거쳤다. 이 때 PageController interface를 구현해서 객체를 관리했는데 이제 인터페이스를 구현하는 대신에 애노테이션으로 요청핸들러를 표시하여 프론트 컨트롤러가 찾게 만든다. 요청핸들러(Request Handler) : 클라이언트 요청이 들어왔을 때 호출되는 메서드. 즉 클라이언트 요청을 처리하는 메서드이다. 1) annotation package를 만들고 RequestMapping annotation을 생성한다. RequestMapping annotation에 @Retention 애노테이션..
지난 시간에는 frontcontroller를 도입했다. 이렇게 frontcontroller를 도입하고 나면 pagecontroller는 일반 자바 객체로 만들 수가 있다. 이것을 POJO라고 한다. 이 때는 PageController interface의 규칙에 따라 구현해야 한다. 1) controller 패키지 작성 src/main/java 아래에 controller 패키지를 추가한다. 2) controller 패키지 아래에 PageController interface를 만들어 준다. interface는 구현하는 클래스가 따라야 할 일종의 규약이다. PageController interface에는 service() 메서드를 구현하는데 이는 나중에 스프링을 도입할 때를 대비해 스프링을 흉내낸 것이다. 1..
우리가 만든 회원 리스트는 오로지 하나의 jsp창만을 출력하는 간단한 구조이지만 서블릿이 많아지면 서블릿마다 반복되는 코드들이 늘어난다. 스프링에서는 프론트 컨트롤러를 이용해 이런 작업을 처리한다. 스프링을 흉내내어 프론트콘트롤러를 간단하게 만들어 보자. 1) src/main/java/servlet 패키지 내에 DispatcherServlet 클래스를 작성한다. 2) DispatcherServlet에서는 모든 요청을 잡아서 다른 페이지 컨트롤러(서블릿)에 위임한다. 12345678910111213141516171819202122232425262728293031323334package servlet; import java.io.IOException; import javax.servlet.RequestDis..
- Total
- Today
- Yesterday
- 전략패턴
- 문장 생성기
- markov chain
- 자바스크립트개론
- 동적계획법
- 디자인패턴
- 경고
- 로그
- 마르코프 연쇄
- Markov
- 코딩의 기술
- Spring in Action
- RESTful
- DP
- 자바스크립트 개론
- restful api
- Warning
- REST API
- java
- 야근
- 유지보수
- was
- CONVENTIONS
- 클린코드
- 마르코프
- 몰라서망신
- GROUP BY
- 크롬
- html
- Count
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |