본문 바로가기

웹 프로그래밍

(63)
자바 예외 이해 예외 계층 Error: 복구 불가능한 시스템 예외(그냥 둬야함) 애플리케이션 로직은 Exception부터 예외로 잡아야함 Exception: 체크 예외 -애플리케이션 로직에서 사용할수 있는 실직적인 최상위 예외 -Exception과 그 하위 예외는 모두 컴파일러가 체크하는 체크예외(단, RuntimeException 제외) RuntimeException: 언체크 예외, 런타임 예외 -컴파일러가 체크하지 않는 언체크 예외 -RuntimeException과 그자식 예외는 모두 언체크 예외 -RuntimeException과 그 하위 언체크 예외를 통상 런타임 예외라고 부름 예외 기본 규칙 1. 예외는 잡아서 처리하거나 던져야 함 2. 예외를 잡거나 던질때 지정한 예외 뿐만 아니라 그 예외의 자식들도 함께 처리..
스프링 데이터 접근 핵심 원리 애플리케이션 서버와 DB 일반적인 사용법 1. 커넥션 연결: 주로 TCP/IP를 사용해서 커넥션을 연결 2. SQL 전달: 커넥션을 통해 DB에 SQL 전달 3. 결과 응답: DB는 SQL을 수행하고 결과를 응답, 애플리케이션 서버는 응답결과를 활용 과거에는 DB를 교체하면 애플리케이션 로직을 다 바꿔야했다(개발자는 모든 DB에 대한 로직을 알아야했음) -> JDBC(Java Database Connectivity) 표준 인터페이스(자바에서 데이터 베이스에 접솔할수 있도록 하는 자바 API) 등장 -> JDBC 드라이버는 Connection(연결), Statement(SQL 전달), ResultSet(결과 응답) 을 추상화하여 DB에 맞도록 구현해서 라이브러리를 제공함 -> 즉 DB에 맞는 드라이버만 갈..
스프링 MVC(2) 검증 정리 메시지, 국제화 하드코딩을 일일이 바꿀려면 번거러움 -> 메시지 프로퍼티로 관리(messages.properties) 나라마다 다른언어로 뿌려줘야함 -> 국제화 타임리프의 메시지 표현식 #{...}을 사용하면 편리하게 스프링 메시지 조회 가능 -> #{label.item} 국제화 -> 스프링이 언어 선택시 Accept-Language 헤더값을 사용 -> messages_en.properties 파일을 만들어서 관리하면 홈페이지 언어 설정에 따라 자동으로 갈아낌 검증(Validation) 컨트롤러의 중요한 역할중 하나는 HTTP 요청이 정상인지 검증하는 것이다. 서버측에서 검증은 필수 th:if="${errors?.containsKey('globalError')}" ?문법: errors가 null일때 Nu..
타임리프(스프링 통합과 폼) 입력 폼 처리 th:object="${item}" -> 폼에서 사용할 객체를 지정. 그러면 item에 관한 프로퍼티를 *{...}으로 적용 가능 th:field는 id, name, value 속성을 모두 다 자동으로 만들어줌 -> 검증(Validation)에서 위력 체크 박스 html의 체크박스는 체크시에는 on(true)으로 넘어오고 비체크시에는 아무것도 넘어오지 않는다 -> -> 스프링 MVC는 히든 필드도 만들어서 해결함(스프링이 비체크시에는 false로 반환해줌) 타임리프는 히든 필드마저 생성해줌 ( 값이 참이면 내부 비교로직으로 checked까지 넣어줌 ) 체크 박스 - 멀티 @ModelAttribute의 또다른 기능 -> 아래처럼 쓰면 모든 뷰에서 모델에 regions가 넘어간다 @ModelA..
Thymeleaf(타임리프) 기본 텍스트 출력- th:text, th:utext 컨텐츠 안에서 직접 출력하기 = [[${data}]] HTML 엔티티 '' 같은것을 그대로 표현하기위함 HTML 엔티티로 변경하는것을 이스케이프라 하고 타임리프의 th:text나 [[...]] 은 디폴트로 제공 이스케이프 하지 않는법(unescape) th:text -> th:utext [[...]] -> [(...)] 변수-SpringEL -Object 접근 ${user.username} = userA ${user['username']} = userA ${user.getUsername()} = userA -List ${users[0].username} = userA ${users[0]['username']} = userA ${users[0].getUsern..
Thymeleaf(타임리프) 기초 타임리프의 핵심 th:x 가 붙은 부분은 서버사이드에서 렌더링 되고, 기존 것을 치환함. th:x 가 없으면 기존 html의 속성 x가 그대로 사용됨 앞에 써줘야 사용가능 URL 링크 표현식(@{...}) @{/css/bootstrap.min.css} 리터럴 대체 문법( | | ) th:onclick="|location.href='@{/basic/items/add}'|" | | 안에다 넣으면 편리하게 한꺼번에 사용 가능 원래는 "'location.href=' + '\'' +@{/basic/items/add} + '\''" 이렇게 +와 이스케이프로 해야함 변수 표현식(${...}) 10000 모델에 넘어온 값이나 타임리프 변수로 선언한 값 조회 가능(프로퍼티 접근법) 내용 변경(th:text) 10000 ..
스프링 MVC(1) 원리 정리 프론트 컨트롤러 패턴 프론트 컨트롤러(수문장)가 하나로 클라이언트 요청에 맞는 컨트롤러를 찾아서 호출 공통 처리를 전담(나머지 컨트롤러는 서블릿 사용하지 않아도 됨) 스프링 MVC의 DispatcherServlet이 프론트 컨트롤러 패턴으로 구현되어 있음 어댑터 패턴 프론트 컨트롤러가 다양한 방식의 컨트롤러를 처리할수 있음 핸들러 어탭터: 프론트 컨트롤러와 컨트롤러(핸들러) 중간에 위치해서 어탭터 역할을 함 핸들러(컨트롤러): 컨트롤러인데 어댑터 덕분에 더 범주가 다양해짐 로그 출력(@Slf4j) SLF4J(인터페이스)의 구현체 Logback(구현체)를 사용 logging.level.hello.springmvc=debug (디폴트가 info) @RestController 원래 Controller는 뷰를 ..
웹 애플리케이션 이해 웹 서버 HTTP 기반 동작 정적 리소스 제공(HTML, CSS, JS, 이미지, 영상) 예) APACHE 웹 애플리케이션 서버(WAS - Web Application Server) HTTP 기반 동작 웹 서버 + 애플리케이션 로직(코드) 수행 동적 HTML, HTTP API(JSON) 서블릿, JSP, 스프링 MVC 예) Tomcat 웹 시스템 구성1 -WAS, DB 정적 리소스 때문에 핵심 비지니스 로직 수행이 어려울수 있음 웹 시스템 구성2 -WEB, WAS, DB 정적 리소스는 웹 서버가 처리 WAS는 비지니스 로직 전담 WAS나 DB 장애시 웹서버 에서 오류화면도 제고 가능 서블릿 WAS는 Request, Response 객체를 새로 만들어서 서블릿 객체 호출 또 Response 객체에 담겨있는..