Spring-Boot
-
토비의 스프링Spring-Boot/토비의 스프링 부트 - 이해와 원리 2023. 6. 2. 14:19
Containerless ( 컨테이너리스 웹 애플리케이션 아키텍처 ) - Serverless 와 유사 Container - WEB COMPONENT = Servlet - Servlet Container ... ex) tomcat Opinionated 스프링 프레임워크의 설계 철학 - 극단적인 유연함 추구 - 다양한 관점을 수용 - Not opinionated - 수많은 선택지를 다 포용 스프링 부트의 설계 철학 - Opionionated - 자기 주장이 강한, 자기 의견을 고집하는, 독선적인 - 일단 정해주는 대로 빠르게 개발하고 고민은 나중에 - 스프링을 잘 활용하는 뛰어난 방법을 제공 - 사용 기술과 의존 라이브러리 결정 ㆍ업계에서 검증된 스프링 생태계 프로젝트, 표준 자바 기술, 오픈소스 기술의 종..
-
6. 외부설정과 프로필1Spring-Boot/스프링부트 - 핵심 원리와 활용 2023. 5. 24. 15:10
1. 프로젝트 설정 2. 외부 설정이란? - 각각의 환경에 맞는 `개발app.jar` , `운영app.jar` 가 만들어지므로 해당 파일들을 각 환경별로 배포하면 된다. - 하지만 이것은 좋은 방법이 아니다. ㆍ환경에 따라서 빌드를 여러번 해야 한다. ㆍ개발 버전과 운영 버전의 빌드 결과물이 다르다. ㆍ따라서 개발환경에서 검증이 되더라도 운영환경에서 다른 빌드 결과를 사용하기 때문에 예상치 못한 문제가 발생할 수 있다. ㆍ개발용 빌드가 끝나고 검증한 다음에 운영용 빌드를 해야 하는데 그 사이에 누군가 다른 코드를 변경할 수 있다. ㆍ한마디로 진짜 같은 소스코드에서 나온 결과물인지 검증하기 어렵다 ㆍ각 환경에 맞추어 최종 빌드가 되어 나온 빌드 결과물은 다른 환경에서 사용할 수 없어서 유연성이 떨어진다. ..
-
5. 자동 구성(Auto Configuration)Spring-Boot/스프링부트 - 핵심 원리와 활용 2023. 5. 18. 17:23
스프링의 자동구성 - 스프링 부트는 자동 구성(Auto Configuration) 이라는 기능을 제공하는데, 일반적으로 자주 사용하는 수 많은 빈들을 자동으로 등록해주는 기능이다. - 'JdbcTemplate', 'DateSource', 'TransactionManager' 모두 스프링 부트가 자동 구성을 제공해서 자동으로 스프링 빈으로 등록된다. - 스프링 부트는 `spring-boot-autoconfigure` 라는 프로젝트 안에서 수 많은 자동 구성을 제공한다. - *주의! 깊게 이해하지 않아도된다. 대략 어떻게 동작하는지 감을 잡을 수 있는 정도면 충분하다.* @AutoConfiguration(after = DataSourceAutoConfiguration.class) @ConditionalOnC..
-
4. 스프링 부트 스타터와 라이브러리 관리Spring-Boot/스프링부트 - 핵심 원리와 활용 2023. 5. 15. 15:46
1. 라이브러리 직접 관리 * 라이브러리 관리의 어려움 * - 어떤 라이브러리를 사용할지 버전은 어떻게할지, 호환 문제를 고민해야 한다. 스프링 부트는 라이브러리들을 편리하게 사용할 수 있게 다양한 기능 제공 - 외부 라이브러리 버전 관리 - 스프링 부트 스타터 제공 2. 스프링 부트 라이브러리 버전 관리 - 개발자는 원하는 라이브러리만 고르고 라이브러리의 버전은 생략해도 된다. dependency-management 버전 관리 - `io.spring.dependency-management` 플러그인을 사용하면 `spring-boot-dependencies` 에 있는 bom 정보를 참고한다. - 참고로 `spring-boot-dependencies`는 스프링 부트 gradle 플러그인에서 사용하기 때문에..
-
3. 스프링 부트와 내장 톰캣Spring-Boot/스프링부트 - 핵심 원리와 활용 2023. 5. 15. 12:48
1. WAR 배포 방식의 단점 - 웹 애플리케이션을 개발하고 배포하려면 다음과 같은 과정을 거쳐야 한다. ㆍ톰캣과 같은 웹 애플리케이션 서버(WAS)를 별도로 설치해야 한다. ㆍ애플리케이션 코드를 WAR로 빌드해야 한다. ㆍ빌드한 WAR 파일을 WAS에 배포해야 한다. - 웹 애플리케이션을 구동하고 싶으면 웹 애플케이션 서버를 별도로 설치해야 하는 구조이다. - 과거에는 이렇게 웹 애플리케이션 서버와 웹 애플리케이션 빌드 파일(WAR)이 분리되어 있는 것이 당연한 구조 였다. * 단점 * - 톰캣 같은 WAS를 별도로 설치해야 한다. - 개발 환경 설정이 복잡하다. ㆍ단순한 자바라면 별도의 설정을 고민하지 않고, `main()` 메서드만 실행하면 된다. ㆍ웹 애플리케이션 WAS 실행하고 또 WAS와 연동..
-
동시성 문제 해결 방안Spring-Boot/재고시스템으로 알아보는 동시성이슈 해결방법 2023. 4. 24. 09:22
예상- 스레드 1의 작업이 끝나고 스레드 2의 작업이 이루어질 것이라고 예상실제- 스레드 1이 데이터를 가져가서 갱신하기 전에 스레드 2가 데이터를 가져간다.- 둘 다 갱신을 하지만 quantity가 5이기에 갱신 누락 발생 * 이렇게 둘 이상의 스레드가 공유 데이터에 Access할 수 있고 동시에 변경할려고 할 때 발생하는 문제점이 동시성 문제이다. 1. Synchronized 이용// @Transactionalpublic synchronized void decrease(Long id, Long quantity) { Stock stock = stockRepository.findById(id).orElseThrow(); stock.decrease(quantity); stoc..
-
2. 웹 서버와 서블릿 컨테이너Spring-Boot/스프링부트 - 핵심 원리와 활용 2023. 4. 14. 11:30
1. 웹 서버와 스프링 부트 소개 * 외장 서버 VS 내장 서버 * * 전통적인 방식 * - 과거에 자바로 웹 애플리케이션을 개발할 때는 먼저 서버에 톰캣 같은 WAS(웹 애플리케이션 서버)를 설치했다. - 그리고 WAS에서 동작하도록 서블릿 스펙에 맞추어 코드를 작성하고 WAR 형식으로 빌드해서 war 파일을 만들었다. - 이렇게 만들어진 war 파일을 WAS에 전달해서 배포하는 방식으로 전체 개발 주기가 동작했다. - 이런 방식은 WAS 기반위에서 개발하고 실행해야 한다. IDE 같은 개발 환경에서도 WAS와 연동해서 실행하도록 복잡한 추가 설정이 필요하다. * 최근 방식 * - 최근에는 스프링 부트가 내장 톰캣을 포함하고 있다. - 애플리케이션 코드 안에 톰캣 같은 WAS가 라이브러리로 내장되어 있..
-
1. 스프링 부트 소개Spring-Boot/스프링부트 - 핵심 원리와 활용 2023. 4. 14. 11:00
스프링 부트 - 5가지 핵심 기능 ㆍ내장 서버 ㆍ자동 라이브러리 관리 ㆍ자동 구성(Auto Configuration) ㆍ외부 설정 ㆍ모니터링과 관리 기능 1. 스프링 부트 소개 - 스프링 프레임 워크 ㆍDI 컨테이너, MVC, DB 접근 기술 등 수 많은 기능을 제공하고 다양한 문제 해결 ㆍ다양한 라이브러리들을 편리하게 사용할 수 있도록 통합 ㆍ개발자의 생산성이 높아짐, 사용 범위 확대 ㆍ자바 생태계의 사실상 표준 프레임 워크 ㆍ핵심 기술 :스프링 DI 컨테이너, AOP, 이벤트 ㆍ웹 기술 : 스프링 MVC, 스프링 WebFlux ㆍ데이터 접근 기술 : 트랜잭션, JDBC, ORM 지원, XML 지원 ㆍ기술 통합 : 캐시, 이메일, 원격 접근, 스케줄링 ㆍ테스트 : 스프링 기반 테스트 지원 - 스프링 프..