스프링 EJB의 문제점을 지적하며 BeanFactory, ApplicationContext, POJO, 제어의 역전, 의존관계 주입 등의 개념이 등장(2002년 로드존슨) => 이것을 기반으로 스프링 프로젝트가 시작되었고, 현재도 주요 개념으로 남아 있다. s
Spring Container 의존관계 주입(Dependency Injection, DI)를 이용하여 애플리케이션을 구성하는 여러 Bean들의 LifeCycle과 애플리케이션의 서비스 실행등을 관리하며 생성된 인스턴스들에게 기능을 제공하는 Container.
Bean 스프링이 직접 생성하고 의존관계를 부여하는 오브젝트. 스프링이 빈을 생성하는 방식 스프링은 기본적으로 별다른 설정이 없다면 default로 Bean을 Singleton으로 만든다. -> 요청 때 마다 새로운 객체를 생성 그렇다면 왜 스프링은 싱
자바코드의 @Bean 이나 XML의 <bean>을 통해서 의존관계를 주입할때 객체가 수십, 수백개라면? -> 일일이 Bean등록 하기 귀찮고 시간이 걸림. 실수로 Bean 등록을 안할 수도 있음.이때 @ComponentScan이 있다. @Bean이 빌요없고,
생성자 주입으로 대부분의 사용, 필요할때 가끔 수정자 주입 방식을 사용. 여기서는 스프링을 사용하는 경우의 예제를 대부분 볼 것이다. 생성자 호출시점에 딱 한번만 호출하는 것이 보장.(자바의 생성자에 대해 알면 된다.) '불변, 필수' 의존관계에 사용. "Messag
데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다."객체 생성" -> "의존관계 주입" (생성자 주입은, 생성할때
빈 스코프란? 빈이 존재할 수 있는 범위를 뜻한다. 스프링 빈이 스프링 컨테이너의 시작과 함께 생성되어 스프링 컨테이너가 종료될 때 까지 유지된다. (스프링 빈은 기본적으로 싱글톤 스코프로 생성됨. 여기서 말하는 빈 스코프는 싱글톤 스코프) 스프링은 다양한 스
들어가기 전에 ...HTTP서버 개발의 발전이 20년이 넘음...Spring MVC의 발전(필요한 기능의 거의 모든 것을 제공)이런 것들을 이해해야되서 어렵다.HTTP 기반으로 동작정적 리소스 제공, 기타 부가기능정적(파일) HTML, CSS, JS , 이미지, 영상예
Servlet 스프링 MVC를 사용하기전, 서블릿을 사용하는 방법을 좀 살펴보겠다. @ServletComponentScan -> servlet 찾아서 자동 등록. main에 붙이자 @WebServlet(name = "서블릿이름", "urlPatterns="path
프론트 컨트롤러 패턴 프론트 컨트롤러 서블릿 하나로 클라이언트의 요청을 받음 프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출 입구를 하나로 만듬, 공통 처리 가능. 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 된다. Spring
스프링 MVC를 보기 전에 로깅에 대해 간단하게 알아보고 가자. 로깅 라이브러리 스프링 부트 라이브러리를 사용하면 스프링 부트 로깅 라이브러리(spring-boot-starter-logging)가 함께 포함됨. 로그 라이브러리는 Logback, Log4J, Lo
타임리프 서버 사이드 렌더링(SSR) - 백엔드 서버에서 HTML을 동적으로 렌더링하는 용도로 사용한다. 네츄럴 템플릿이다. 즉 순수한 HTML을 최대한 유지한다. 웹 브라우저에서 HTML 파일을 직접 열어도 내용을 확인 할 수 있고, 서버를 통해 뷰 템플릿을 거치
타임리프와 스프링의 통합 * 스프링 통합으로 추가되는 기능* 스프링의 SpringEL 문법 통합 ${@myBean.doSomething()} 처럼 스프링 빈 호출 지원 편리한 폼 관리를 위한 추가 속성 th:obejct(기능 강화, 폼 커맨드 객체 선택)
메시지, 국제화 란?화면에 보이는 문구 '상품명'이라는 단어를 모두 '상품 이름' 으로 고쳐야 한다고 해보자.지금처럼 화면 수가 적어도 귀찮은데, 화면이 수십 수백개라면 모두 고쳐야한다.해당 HTML 파일에 메시지가 하드코딩 되어 있기 때문에 이런 문제가 생기는 것이다
아무 검증작업도 안해 놓으면 폼 입력시 빈 문자열이 오면 안되는데 빈 문자열이 온다거나, 숫자를 문자로 작성해서 검증 오류가 발생하면 오류화면으로 이동해버린다. 이렇게 되면 사용자는 다시 처음부터 작업을 해야된다. 이렇다면 이용자는 금세 떠나버릴 것이다. 고객이 입력
Validation을 통한 검증을 공부해보았다. 검증 기능을 매번 코드로 작성하는 것은 매우 번거롭다. 특정 필드에 대한 검증 로직은 대부분 빈 값인지 아닌지, 특정 크기를 넘는지 아닌지와 같이 매우 일반적인 로직이다. 이런 검증 로직을 모든 프로젝트에 적용할
로그인 처리 - 쿠키 사용 어떻게 로그인의 상태를 유지할까? 쿠키를 사용해서 상태를 유지해보자. 서버에서 로그인에 성공하면 HTTP 응답에 쿠키를 담아서 브라우저에 전달하자. 그러면 브라우저는 앞으로 해당 쿠키를 지속해서 보내준다. 쿠키에는 영속쿠키와 세션 쿠
필터는 서블릿이 제공하는 기능이고, 인터셉터는 스프링이 제공하는 기능이다.이런 필터나 인터셉터라는 기술이 필요한 이유는 공통의 관심사항 때문이다. 공통의 관심사항이란 애플리케이션 여러 로직에서 공통으로 관심있는 것을 공통 관심사라고 한다.로그인과 관련된 공통의 관심사(
자바 직접 실행자바를 직접 실행시 main 이라는 쓰레드가 실행됨. 실행 도중 예외를 잡지 못하고 main() 메서드를 넘어서 예외가 던져지면, 예외 정보를 남기고 해당 쓰레드는 종료된다.웹에서의 예외웹 애플리캐이션에서는 사용자 요청별로 별도의 쓰레드가 할당되고 서블릿
HTML 페이지의 경우 4xx, 5xx 같은 오류 페이지만 있으면 대부분 문제를 해결할 수 있다. 그런데 API 같은 경우에는 생각할 내용이 더 많다. 각 오류 상황에 맞는 오류 응답 스펙을 정하고, JSON으로 데이터를 내려주어야 한다. 서블릿 API 오류 페이지
문자를 숫자로 변환하거나, 반대로 숫자를 문자로 변환해야 하는 것 처럼 애플리케이션을 개발하다 보면 타입을 변환해야 하는 경우가 상당히 많다.HTTP 쿼리 스트링으로 전달하는 data=10 부분에서 10은 숫자 10이 아니라 문자 10이다.스프링이 제공하는 @Reque
일반적으로 사용하는 HTML Form을 통한 파일 업로드에는 폼을 전송하는 두가지 방법이 있다.application/x-www-form-urlencodedmultipart/form-dataapplication/x-www-form-urlencoded 방식은 HTML 폼
JDBC 등장 이유 애플리케이션을 개발할 때 중요한 데이터는 대부분 데이터베이스에 보관한다. 커넥션 연결 : 주로 TCP/IP를 사용해서 커넥션을 연결 SQL 전달 : 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 DB에 전달한다. 결과
커넥션 풀의 개념 데이터베이스 커넥션을 획득할 때는 다음과 같은 복잡한 과정을 거친다. 애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회한다. DB 드라이버는 DB와 TCP/IP 커넥션을 연결한다. 물론 이 과정에서 3 way handshake 같은 TCP/I
왜 데이터를 저장할때 데이터베이스를 사용할까? 가장 대표적인 이유는 바로 데이터베이스는 트랜잭션이라는 개념을 지원하기 때문이다데이터베이스에 정상 반영하는 것을 커밋( Commit )이라 하고, 작업 중 하나라도실패해서 거래 이전으로 되돌리는 것을 롤백( Rollback
실무에서 주로 사용하는 데이터 접근 기술을 알아보자JDBC TemplateMyBatisJPA (+ Spring Data JPA) + QueryDsl크게 2가지 분류가 있다.SQL MappterJDBC TemplateMyBatis주요 기능SQL만 작성하면 해당 SQL의
데이터베이스 연동했을때 테스트를 어떻게 하면 좋을까?테스트는 항상 동작이 일정해야 한다. 데이터베이스에 저장,삭제,업데이트를 하면 데이터베이스의 자료에 실제로 데이터의 차이가 생긴다. 그렇게 된다면 항상 일정한 결과를 내지 못할 수 있다.(실제 DB의 데이터가 변경되었
스프링에서 우선순위는 항상 더 구체적이고 자세한 것이 높은 우선순위를 가진다. 이것만 기억하면 스프링에서 발생하는 대부분의 우선순위를 쉽게 기억할 수 있다. 그리고 더 구체적인 것이 더 높은 우선순위를 가지는 것은 상식적으로 자연스럽다. 예를 들어서 메서드와 클래스
애플리케이션에서 운영과 모니터링을 잘 하기 위해서는 로그를 남겨야 한다. 실무에서는 실제 이런 로그 운영에 도움을 주는 다양한 툴들이 있지만 여기선 직접 로그 추적기를 개발해 보며 애플리케이션 로직과 흐름을 익혀보자. 로그의 목적 서비스 동작 상태 파악 장애 파
프로젝트는 - proxy간접적인 호출접근 제어권한에 따른 접근 차단캐싱지연 로딩부가 기능 추가원래 서버가 제공하는 기능에 더해서 부가 기능 수행예) 요청 값이나, 응답 값을 중간에 변경예) 실행 식나을 측정해서 추가 로그를 남긴다프록시 체인프록시가 또 다른 프록시를
애플리케이션은 핵심기능과 부가기능으로 나눌수 있다.핵심기능: 해당 객체가 제공하는 고유의 기능. 부가기능: 핵심기능을 보조하기 위해 제공되는 기능. 단독사용x. 부가기능과 함꼐 사용같이 사용하기위해서는 부가기능과 핵심기능이 하나의 객체 안에 섞여 들어가게 됨.보통 부가