Spring - Apache tiles view 레이아웃 정의하기
2022. 12. 30. 10:52
Spring
Apache tiles view 스프링 MVC는 Apache tiles 를 논리적 뷰 이름으로 타일을 정의할 수 있는 뷰 리졸버를 통해 지원한다. Composite View 패턴 모듈 단위의 뷰 들을 조합해서 하나의 뷰를 구성한다. 트리 구조로 볼 수 있으며, 부모 뷰와 자식 뷰 들의 사이를 부모를 하나의 전체 뷰로 볼 수 있고, 자식 뷰를 작은 한 부분으로 볼 수 있다. 아래는 Composite 패턴의 UML이다. Component는 표현할 요소들의 추상적인 인터페이스고, Leaf는 Component의 구현체, Composite은 Component의 구현체들을 자식으로 삼으며, 구현체(Leaf)를 관리하기 위한 메소드들이 추가적으로 있다. 즉 Composite View 패턴을 사용해서 화면이 바뀌어도 ..
Spring - tomcat의 동작 원리
2022. 11. 22. 11:57
Spring
Tomcat의 설정 * server.xml의 역할 TOMCAT의 메인 설정 파일이며 초기 설정을 명세하는 책임이 있습니다. 1) Server 최상위 element로, shutdown 요청 처리를 위한 address와 port 속성을 가지고 있습니다. 2) Service 의 모음 3) Engine 의 모음 (1) name: Engine의 이름 (2) defaultHost: 접속시 기본값으로 대처할 호스트 (3) jvmRoute: 로드 밸런서가 여러 Tomcat 인스턴스를 구분하기 위해 사용 4) Host appBase: 의 애플리케이션 디렉터리 “/”를 포함한 절대 경로 엘리먼트보안을 위해 role명과 사용자명, 비밀번호의 맵핑을 외부의 데이터베이스로 부터 가져오는 장치다. tomcat은 UserDataB..
Spring MVC - HTTP 요청과 응답
2022. 11. 16. 22:38
Spring/Ch2. Spring MVC
HttpServletRequest @Controller public class RequestInfo { @RequestMapping("/requestInfo") public void main(HttpServletRequest request) { System.out.println("reqeust.getMethod()="+reqeust.getMethod()); System.out.println("reqeust.getgetProtocol()="+reqeust.getProtocol()); System.out.println("reqeust.getScheme()="+reqeust.getScheme()); } HttpServletRequest 의 메서드 서버의 포트 0~1023 : 예약된 포트 65535개 : 사용 ..
Spring - REST방식의 데이터 교환 방식의 이해
2022. 10. 18. 17:51
Spring
과거의 웹 서비스 고정된 브라우저의 주소창 특정한 확장자를 이용하는 모델 2 방식(ex> *.do) 특정한 파라미터에 의한 분기 구조 현재의 웹 서비스 URI + 식별데이터 GET/POST외에 PUT/DELETE 등의 다양한 전송 방식 사용 서버에서는 순수한 데이터만을 서비스 하는 방식 REST방식 REST는 ‘Representational State Transfer’의 약어로 하나의 URI는 하나의 고유한 리소스(Resource)를 대표하도록 설계된다는 개념에 전송방식을 결합해서 원하는 작업을 지정 스프링에서는 다양한 어노테이션과 기능을 통해서 REST방식의 서비스를 간편하게 구축할 수 있음 어노테이션 기능 @RestController Controller가 REST 방식을 처리하기 위한 것임을 명시합니..
Spring - MyBatis 연동 시 sqlSessionFactory 오류
2022. 10. 1. 13:21
Spring
경로가 정확한데 mybatis-config.xml 을 찾지 못한다는 오류 ERROR: org.springframework.web.context.ContextLoader - Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in ServletContext resource [/WEB-INF/spring/root-context.xml]: Invocation of init method failed; nested exception is org.springframework.core.NestedIOExcepti..
Spring - 서비스 계층의 분리와 @Transactional 2
2022. 10. 1. 09:01
Spring/Ch3. Spring DI, AOP
테스트를 위해 테이블 b1 생성 @Transactional 없을 때 TxService.java package com.jcy.usedhunter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class TxService { @Autowired A1Dao a1Dao; @Autowired B1Dao b1Dao; public void insertA1WithoutTx() throws Exception { a1Dao.insert(1, 100); a1Dao.insert(1, 200); } } TxServiceTest.java package..
Spring - 서비스 계층의 분리와 @Transactional
2022. 9. 30. 18:35
Spring/Ch3. Spring DI, AOP
서비스 계층의 분리 - 비지니스 로직의 분리 RegisterController : @Controller UserService : @Service UserDao, UserHistoryDao : @Repository TrasactionManager DAO 의 각 메서드는 개별 Connection 을 사용 @Repository public class A1Dao { @Autowired DataSource ds; public int insert(int key, int value) throws Exception{ Connection conn = null; PreparedStatement pstmt = null; try { //conn = ds.getConnection(); conn = DataSourceUtils...
Spring - AOP
2022. 9. 30. 13:30
Spring/Ch3. Spring DI, AOP
AOP(Aspect Oriented Programming) 관점 지향프로그래밍, 횡단 관심사, cross-cutting concerns 부가 기능(advice)을 동적으로 추가해주는 기술 메서드의 시작 또는 끝에 자동으로 코드(advice)를 추가 AopMain.java package com.jcy.usedhunter; import java.lang.reflect.Method; public class AopMain { public static void main(String[] args) throws Exception { MyAdvice myAdvice = new MyAdvice(); Class myClass = Class.forName("com.jcy.usedhunter.MyClass"); Object ..
Spring - Transaction
2022. 9. 29. 16:36
Spring/Ch3. Spring DI, AOP
Transaction 더 이상 나눌 수 없는 작업의 단위 Transaction 의 속성 - ACID 원자성(Atomicity) - 나눌 수 없는 하나의 작업으로 다뤄주어야 한다. 일관성(Consistency) - Tx 수행 전과 후가 일관된 상태를 유지해야 한다. 고립성(Isolation) - 각 Tx는 독립적으로 수행되어야 한다. 영속성(Durability) - 성공한 Tx의 결관느 유지되어햐 한다. 커밋(Commit), 롤백(Rollback) 커밋 : 작업 내용을 DB에 영구적으로 저장 롤백 : 최근 변경사항을 취소(마지막 커밋으로 복귀) Tx의 isolation level READ UNCOMMITED - 커밋되지 않은 데이터도 읽기 가능(dirty read) READ COMMITED - 커밋된 데이..
Spring - Application Context
2022. 9. 26. 14:09
Spring
Application Context Spring 에서는 빈의 생성과 관계설정 같은 제어를 담당하는 IoC(Inversion of Control) 컨테이너인 빈 팩토리(Bean Factory) 가 존재한다. 하지만 실제로는 빈의 생성과 관계설정 외에 추가 적인 기능이 필요한데, 이러한 이유로 Spring에서는 빈 팩토리를 상속받아 확장한 Application Context 를 주로 사용한다. Application Context 는 별도의 설정 정보를 참고하고 IoC 를 적용하여 빈의 생성, 관계설정 등의 작업을 총괄한다. Application Context 에는 직접 오브젝트를 생성하고 관계를 맺어주는 코드가 없다. 그래서 생성 정보와 연관관계 설정을 읽어 처리한다. @Configuration 과 같은 어..
Spring DI - Spring DI 흉내내기
2022. 9. 25. 17:08
Spring/Ch3. Spring DI, AOP
변경에 유리한 코드(1) - 다형성, factory method class Car{} class SportsCar extends Car{} class Truck extends Car{} Car car = getCar(); static Car getCar(){ return new SportsCar(); } static Car getCar(){ return new Truck(); } 변경에 유리한 코드(2) - Map, 외부 파일 Car car = getCar(); static Car getCar() throws Exception { // config.txt 를 읽어서 Properties 에 저장 Properties p = new Properties(); // Map(Object, Object), Prope..
Spring MVC - 데이터 변환과 검증2
2022. 9. 25. 10:49
Spring/Ch2. Spring MVC
Validator 객체를 검증하기 위한 인터페이스. 객체 검증기(validator) 구현에 사용 수동 검증 UserValidator.java package com.fastcampus.app; import org.springframework.validation.Errors; import org.springframework.validation.ValidationUtils; import org.springframework.validation.Validator; public class UserValidator implements Validator{ @Override public boolean supports(Class clazz) { // TODO Auto-generated method stub return U..
Spring MVC - 데이터 변환과 검증
2022. 9. 24. 18:35
Spring/Ch2. Spring MVC
Date 를 원하는 형식을 변경 String birth 를 Data 타입으로 변경 User.java package com.fastcampus.app; import java.util.Date; public class User { private String id; private String pwd; private String name; private String email; private Date birth; private String sns; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getPwd() { return pwd; } public void setPwd(String ..
Spring MVC - DispatcherServlet
2022. 9. 23. 21:30
Spring/Ch2. Spring MVC
공통 부문 역할 전처리 Spring MVC 의 요청 처리 과정 ViewResolver 주요 메서드 메서드 설명 void initStrategies(ApplicationContext context) 기본 전략을 초기화 void doService(HttpServletRequest request, HttpServletResponse reponse) doDispatch() 호출 void doDispatch(HttpServletRequest request, HttpServletResponse reponse) 실제 요청을 처리 void processDispatchResult(HttpServletRequest request, HttpServletResponse reponse, HandlerExecutionChain)..
Spring MVC - 예외 처리2
2022. 9. 22. 21:36
Spring/Ch2. Spring MVC
@ResponseStatus 응답 메시지의 상태 코드를 변경할 때 사용 @ControllerAdvice 에 일부로 패키지을 잘 못 입력하자 그러면 500 번 내부서버오류가 날 것이다 GlobalCatcher.java package com.fastcampus.app; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; @ControllerAdvice("com.fastcampus.bpp") public class GlobalCatcher { @ExceptionHan..
Spring MVC - 예외 처리
2022. 9. 22. 08:53
Spring/Ch2. Spring MVC
예외 처리 ExceptionController.java package com.fastcampus.app; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class ExceptionController { @RequestMapping("/ex") public String main() throws Exception{ try { throw new Exception("예외가 발생했습니다."); } catch (E..
Spring MVC - 로그인 페이지 만들기3
2022. 9. 21. 17:47
Spring/Ch2. Spring MVC
로그인 성공 시 전에 있었던 페이지로 이동 BoardController.java list 메서드 리턴 값에 request.getReqeustURL() 을 추가해 GET 방식으로 URL 값을 넘긴다 package com.fastcampus.app; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @Co..
Spring MVC - 로그인 페이지 만들기2
2022. 9. 20. 19:27
Spring/Ch2. Spring MVC
게시판 이용시 로그인 상태가 아니면 로그인 화면으로 이동 boardList.jsp 중고헌터 Home Board login Sign in This is BOARD This is BOARD This is BOARD This is BOARD This is BOARD BoardList.java package com.fastcampus.app; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.spri..
Spring MVC - Session, 세션
2022. 9. 19. 23:57
Spring/Ch2. Spring MVC
Session 이란 서로 관련된 요청들을 하나로 묶은 것 - 쿠키(브라우저에 저장)를 이용 browser 마다 개별 저장소(session 객체, 서버에 저장) 를 서버에서 제공 - 1 : 1 "a collection of related HTTP transactions made one by browser to one server" 세션의 생성 과정 세션 객체 얻기 HttpSession session = request.getSession(); session.setAttribute("id", "asdf"); 세션과 관련된 메서드 메서드 설명 String getId() 세션의 id를 반환 long getLastAccessedTime() 세션 내에서 최근 요청을 받은 시간을 반환 boolean isNew() 새로..
Spring MVC - 로그인 페이지 만들기
2022. 9. 19. 12:50
Spring/Ch2. Spring MVC
로그인 페이지 loginForm.jsp Login ${URLDecoder.decode(param.msg)} 로그인 아이디 기억 | 비밀번호 찾기 | 회원가입 LoginController.java package com.fastcampus.app; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springfr..