공부/스프링프레임워크 18

[토비의 스프링부트] Containerless

컨테이너리스 : 서버리스 웹 컴포넌트는 웹 컨테이너 안에 들어가 있어야 한다. 웹 컴포넌트는 동적 응답을 주기 위해 존재한다. 웹 컨테이너는 여러 웹 컴포넌트를 가지고 있다. 자바에서는 웹 컴포넌트를 서블릿이라고 부른다. 웹 컨테이너가 서블릿 컨테이너이다. 스프링 컨테이너는 서블릿 컨테이너의 뒤에 존재한다. 여러 빈을 갖고 서블릿을 통해 들어온 요청을 받아서 스프링 컨테이너에 요청해서 빈에게 작업을 하도록 한다. 스프링 컨테이너가 서블릿 컨테이너를 대체할 수는 없다. 우리는 스프링 컨테이너에 어떤 빈을 등록하고 동작을 지정하고만 생각하고싶은데, 서블릿 컨테이너를 띄워야만 서비스를 실행할 수 있다. 스프링에서 web.xml에 설정 해본 적이 있을 것이다. 이를 지정해야만 서블릿 컨테이너를 띄울 수 있었다...

[spring] 디렉터리 구조

패키지 구성 유형에는 크게 레이어 계층형, 도메인형 두 가지 유형이 있다. 계층형 구조는 각 계층을 대표하는 디렉터리를 기준으로 코드를 모은다. 디렉터리에 클래스들이 너무 많이 모이는 단점이 있다. 도메인형 구조는 도메인 밑으로 각각 계층별 디렉터리를 생성한다. 과거에는 계층형으로 큰 틀을 잡고 그 안에서 도메인별로 나눠서 사용했었던 것 같다. 그런데 애초에 도메인으로 큰 틀을 잡고 내부에 계층으로 나누는 것이 개발할 때(디렉터리 넘나들기) 더 편할 것 같다. 관련된 코드들이 응집해 있기 때문에 자연스럽게 코드 스타일, 변수, 클래스명들을 비슷한 스타일로 개발할 수 있다. 정리된 좋은 글 : https://cheese10yun.github.io/spring-guide-directory/#-4 Spring..

[spring] spring profiles 설정 정리

출처 : https://sgc109.github.io/2020/07/06/spring-profiles/ Profiles 을 사용하면 애플리케이션이 실행되는 환경에 따라 다른 Bean 들을 매핑할 수 있다. 예를 들어, 개발 환경, 스테이징 환경, 혹은 실 서비스 환경에 따라 다른 의존성을 주입할 수 있다. Profiles 구분하기 Bean 에 @Profile 붙이기 @Component @Profile("dev") public class DevDatasourceConfig 다음과 같이 특정 profile 이 active 하지 않을 때만 container 에 포함시킬 수도 있다. @Component @Profile("!dev") public class DevDatasourceConfig XML 에 정의하기 ..

[spring] 토비의스프링 정리

1장 오브젝트와 의존관계 1.1 초난감 DAO ㅇ 자바빈이라 함은 다음 두 가지 관례를 따라 만들어진 오브젝트를 가리킨다. 디폴트 생성자(자바빈은 파라미터가 없는 디폴트 생성자를 갖고 있어야 한다. 툴이나 프레임워크에서 리플렉션을 이용해 오브젝트를 생성하기 때문이다.), 프로퍼티(자바빈이 노출하는 이름을 가진 속성을 프로퍼티라고 한다. 프로퍼티는 setter,getter를 이용해 수정, 조회할 수 있다.) 1.2 DAO의 분리 1.2.1 관심사의 분리 ㅇ 오브젝트에 대한 설계와 이를 구현한 코드는 변한다. 소프트웨어 개발에서 끝이라는 개념은 없다. 요구사항은 끊임없이 바뀌고 발전한다. 그래서 개발자가 설계할 때 가장 염두에 둬야 할 것은 미래의 변화를 어떻게 대비할 것인가이다. ㅇ 변화는 몇 시간 후에도..

[spring] 스프링 부트 레퍼런스 정리

spring boot starter : 편리하게 의존성 추가, 예를들어 spring boot starter data jpa를 추가하면 관련 의존성이 자동으로 추가. 의존성들의 충돌을 방지하여 관련된 의존성들을 추가함 서드파티는 spring-boot로 시작하면 안 된다. 공식적인 것임. createing your own starter : starter모듈은 autoconfigure모듈을 포함해야 한다 -> 추가하면 모든 라이브러리를 사용할 수 있게끔 해야한다. configuration할 때 사용하는 키를 사용하지마라. such as server, management, spring(application.yml에 있는 애들) dependency를 optional하게 추가해라(있으면 쓰고 없어도 돼). 근데 많..

[spring] jpa paging(page,pageable,pagerequest)

repository에서 findAll()메서드로 데이터를 찾는다. 페이징을 위해 Pageable 인터페이스를 사용한다.(페이징을 위한 정보가 있다. 페이지 번호, 페이지 내 목록의 개수, 검색 조건 등) Pageable : Abstract interface for pagination information. (https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/domain/Pageable.html) Pageable의 구현체인 PageRequest클래스를 사용하여 생성한다. 생성자가 protected이기 때문에 of()메서드를 이용한다. 생성 후 Pageable인터페이스로 생성하여 출력해보면 다음과 같다. 이..

[spring] 심각: 주소 [localhost]와(과) 포트 [8005]에, 서버 셧다운 소켓을 생성하지 못했습니다. (base 포트 [8005], offset [0])

원인: tomcat의 'conf/server.xml' file 빨간색 값이 서로 달라서 생기는 문제. 해결방법: 빨간색으로 표시한 값을 서로 맞춰주기. 출처 : https://m.cafe.daum.net/bboybeatbox/2cL2/51?listURI=%2Fbboybeatbox%2F2cL2 Tomcat은 호스트 이름을 지정하지 않은 HTTP/1.0 요청들을 처리할 수 없을 것입니다. 현상:심각 [main] org.apache.catalina.mapper.MapperListener.findDefaultHost 서비스 [StandardService[어쩌고저쩌고]]을(를) 위해, 알 수 없는 기본 호스트 [어쩌고저쩌고]. Tomcat은 호스트 이름을 지정하지 않은 HTTP/1.0 m.cafe.daum.net

[spring] spring mvc

MVC 패턴의 개념과 모델2 아키텍처 MVC패턴 : 모델-뷰-컨트롤러는 소프트웨어 공학에서 사용되는 아키텍처 패턴으로 mvc패턴의 주 목적은 비지니스로직과 프레젠테이션로직을 분리하기 위함이다. Model : 데이터 저장소와 연동하여 사용자가 입력한 데이터나 사용자에게 출력할 데이터를 다룬다. DAO클래스, Service클래스에 해당 View : 모델이 처리한 데이터나 작업 결과를 가지고 사용자에게 출력할 화면을 만든다. Html과 jsp를 사용 Controller : 클라이언트의 요청을 받았을 때 업무를 수행하는 모델 컴포넌트를 호출한다. 이때 클라이언트가 보낸데이터가 있다면 모델을 호출할 때 전달하기 쉽게 데이터를 적절히 가공하기도 한다. 모델이 업무 수행을 완료하면 그 결과를 뷰에게 전달한다. Ser..

[spring] pojo

POJO란? Plain Old Java Object, 단순한 자바 오브젝트 POJO란, 객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트를 말한다. 그러한 POJO에 애플리케이션의 핵심로직과 기능을 담아 설계하고 개발하는 방법을 POJO 프로그래밍이라고 할 수 있다. POJO의 조건 1. 특정 규약에 종속되지 않는다. 자바언어와 꼭 필요한 API외에는 종속되지 말아야한다. EJB2와 같이 특정 규약을 따라 만들게 하는 경우는 대부분 규약에서 제시하는 특정 클래스를 상속하도록 요구한다. 그럴 경우 자바의 단일 상속 제한 때문에 더이상 해당 클래스에 객체지향적인 설계 기법을 적용하기가 어려워지는 문제가 생긴다. Ⅰ. 미리 지정된 클래스를 ex..