spring 14

springMVC 활용 - (8) HTTP응답

[정적 리소스, 뷰 템플릿] 스프링에서 응답 데이터를 받는 방법 1. 정적 리소스 예) 웹 브라우저에 정적인 HTML, css, js을 제공할 때는, 정적 리소스를 사용 2. 뷰 템플릿 사용 예) 웹 브라우저에 동적인 HTML을 제공할 때는 뷰 템플릿을 사용 3.HTTP 메시지 사용 2. - 뷰 템플릿을 호출하는 컨트롤러 @Controller public class ResponseViewController { @RequestMapping("/response-view-v1") public ModelAndView responseViewV1() { ModelAndView mav = new ModelAndView("response/hello").addObject("data", "hello!"); return m..

springMVC 활용 - (7) 스프링 기능

★정리★ 스프링 부트가 미리 핸들러를 등록해놓으면 핸들러매핑에서 핸들러를 조회해서 핸들러어댑터 목록에서 조회해서 핸들러를 호출하고, ModelAndView를 반환하고 뷰리졸버를 호출해서 뷰 렌더 [로그] SLF4j - 인터페이스/logback - 구현체 로그 선언 밑에 셋중 하나 사용 private Logger log = LoggerFactory.getLogger(getClass()); //현재 나의 클래스 지정 private static final Logger log = LoggerFactory.getLogger(Xxx.class) @Slf4j @Slf4j //밑에 private자동으로 넣어줘 @RestController //->String이 그대로 반환 public class LogTestContro..

[스프링 DB 1편] - (3) 트랜잭션

[트랜잭션] - 두개가 모두 성공해야 성공, 한번에 커밋& 롤백 원자성: 트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공 하거나 모두 실패 일관성: 모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지 격리성: 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리. 예를 들어 동시에 같은 데이터를 수정하지 못하도록 해야 한다. 격리성은 동시성과 관련된 성능 이슈로 인해 트랜잭션 격리 수준 (Isolation level)을 선택 지속성: 트랜잭션을 성공적으로 끝내면 그 결과가 항상 기록되어야 한다. 중간에 시스템에 문제가 발생해도 데이터베이스 로그 등을 사용해서 성공한 트랜잭션 내용을 복구 [DB연결 구조와 세션] [트랜잭션 사용] 데이터 변경 쿼리를 실행하고 데이터베이스에..

Spring 강의/DB 2022.04.20

[스프링 DB 1편] - (1) JDBC 이해

1. 커넥션 연결: 애플리케이션 서버가 db에 주로 TCP/IP를 사용해서 커넥션을 연결 2. SQL 전달: 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 DB에 전달 3. 결과 응답: DB는 전달된 SQL을 수행하고 그 결과를 응답하고 애플리케이션 서버는 응답 결과를 활용 문제는 각각의 데이터베이스마다 커넥션을 연결하는 방법, SQL을 전달하는 방법, 그리고 결과를 응답 받는 방법이 모두 다름!! 1. db를 다른 종류의 db로 변경하면 애플리케이션 서버에 개발된 데이터베이스 사용 코드도 함께 변경해야됨 2. 개발자가 각각의 데이터베이스마다 커넥션 연결, SQL 전달과 그 결과를 응답 받는 방법을 새로 학습해야됨 그래서 JDBC라는 자바 표준이 등장!! [JDBC 표준 인터페..

Spring 강의/DB 2022.04.18

springMVC 활용 - (2) 서블릿 & Request

@ServletComponentScan : 스프링부트에서 서블릿을 사용하려면 스프링이 자동으로 하위 패키 뒤져서 서블릿 찾아서 자동으로 서블릿 등록. @WebServlet() : 서블릿 어노테이션 http요청으로 매핑된 url호출되면 서블릿 컨테이너가 service메서드 실행 servlet은 http를 상속받아 [HelloServlet] @WebServlet(name = "helloServlet",urlPatterns = "/hello") public class HelloServlet extends HttpServlet { @Override //서블릿 호출되면 서비스메서드 호출 protected void service(HttpServletRequest request, HttpServletResponse ..

springMVC 기본 - (9) 빈스코프

[스코프] - 빈이 존재할 수 있는 범위 프로토타입 스코프 - 싱글톤 스코프의 빈을 조회하면 스프링 컨테이너는 항상 같은 인스턴스의 스프링 빈을 반환한다. 반면에 프로토타입 스코프를 스프링 컨테이너에 조회하면 스프링 컨테이너는 항상 새로운 인스턴스를 생성해서 반환 [싱글톤 스코프] 스프링 컨테이너는 항상 같은 인스턴스의 스프링 빈을 반환 1. 싱글톤 스코프의 빈(memberService)을 스프링 컨테이너에 요청 2. 스프링 컨테이너는 본인이 관리하는 스프링 빈을 반환 3. 이후에 스프링 컨테이너에 같은 요청이 와도 같은 객체 인스턴스의 스프링 빈을 반환 [프로토타입 스코프] 스프링 컨테이너가 항상 새로운 인스턴스 생성해서 반환 1.프로토타입 스코프의 빈(protorypeBean)을 스프링 컨테이너에 요..

springMVC 기본 - (8) 빈 생명주기 콜백

[빈 생명주기 콜백] 객체의 초기화와 종료 작업 필요. NetworkClient 는 애플리케이션 시작 시점에 connect() 를 호출해서 연결을 맺어두어야 하고, 애플리케이션이 종료되면 disConnect() 를 호출해서 연결을 끊어야됨 public class NetworkClient { private String url; public NetworkClient() { System.out.println("생성자 호출, url = " + url); //2.호출됨 connect(); call("초기화 연결 메시지"); } public void setUrl(String url) { this.url = url; } //서비스 시작시 호출 public void connect() { System.out.printl..

sprongMVC 기본 - (7) 의존관계 자동 주입

[의존관계 주입 방법] 1. 생성자 주입 - 생성자 호출 시점에 딱 한번 호출이 보장돼 불변, 필수 의존관계에 사용, 생성자를 통해 의존관계 주입 생성자가 딱 1개만 있으면 @Autowired를 생략해도 자동 주입 @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRep..

springMVC 기본 - (6) 컴포넌트 스캔

[컴포넌트 스캔] 스프링 빈을 자동으로 끌어올려, @Component어노테이션 붙은 클래스를 다 찾아서 자동으로 스프링 빈 등록 자바 코드의 @Bean이나 XML의 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열. 등록해야 할 스프링 빈이 수십, 수백개가 되면 귀찮. 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공, 의존관계도 자동으로 주입하는 @Autowired 라는 기능도 제공 (AppConfig랑 똑같은 건데 그냥 공부용으로 남겨놔) @Configuration @ComponentScan( excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class)) //자동..

springMVC 기본 - (5) 싱글톤 컨테인너

[웹 애플리케이션과 싱글톤] 싱글톤 : 객체가 나의 JVM에 하나만 존재. - 스프링없는 DI컨테이너 public class SingletonTest { @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer() { AppConfig appConfig = new AppConfig(); //1. 조회: 호출할 때 마다 객체를 생성 MemberService memberService1 = appConfig.memberService(); //2. 조회: 호출할 때 마다 객체를 생성 MemberService memberService2 = appConfig.memberService(); //참조값이 다른 것을 확인 System.out.println("memberS..

1 2