영어 소문자 사이사이에 하이픈
케밥 고기들이 꼬챙이에 꽂혀있는 모양을 떠올려 케밥 표기법이라고 한다.
권장 사용처
폴더 경로
URL경로
HTML태그 class속성
첫 단어는 영어 소문자
두번째 단어부터 첫 글자에 대문자
단봉낙타의 등에 달린 혹과 같다고 하여 카멜 표기법이라고 한다.
권장 사용처
java/js/dart 등 변수명
HTML 태그 id 속성
모든 단어의 첫 글자를 대문자로 작성.
권장사용처
java/js/dart/python 등 클래스명
영어 소문자 사이사이에 언더바가 들어가 있다.
뱀이 바닥에 기어가듯 하다해서 스네이크 표기법이라고 함.
권장사용처
dart 파일명
python 파일명
python 변수명
일반 파일명.
간단한 질문인데 많은 내용을 원할 때
-구글 검색
복잡한 질문인데 간결한 내용을 원할 때
-gpt
소프트웨어 개발을 위한 구조와 도구의 모음.
미리정의된 코드와 구조를 제공.
이미 구조가 짜여있어서 구조대로만 프로그램을 짜서 만들면 만들어진다.
라이브러리와 달리 애플리케이션의 제어흐름을 관리하고, 개발자가 프레임워크의 규칙과 패턴에 따라 코드를 작성해야한다.
-웹서버
-정적파일(HTML,CSS,JS)
-정적 리소스 ( 저장된 이미지, 동영상 등)
-웹 애플리케이션 서버
-동적 파일 (JSP,Servlet)
-자바 데이터를 html 문자열로 감싼다
-html사이에 자바 데이터를 넣는다.
자바 객체 - 대상을 추상화 한 자바 코드
json - 대상을 추상화 한 문자열 데이터
-개별 바이트나 문자열인 데이터의 원천
-데이터가 전송되는 통로
-키보드,파일,네트워크 등등
-객체를 데이터 스트림으로 만드는 것
-객체에 저장된 데이터를 스트림에 쓰기위해 연속적인 데이터로 변환하는 것
-스트림을 객체로 만드는 것
java 객체 -> python 객체
( 호환이 되지 않아서 에러 발생)
java 객체 -> 직렬화 -> json -> 역직렬화 -> python 객체
협업 - 구조가 같으니 협업이 쉬움
안전성 - 확인해야할 사항들을 프레임워크가 체크함
보안 - 웹 관련 공격을 막을 방법을 미리 세팅해 놓음
신입 - 가이드가 없으면 신입은 코드를 짜기가 어려움
스프링 프레임워크(Spring Framework)는 Java 기반의 오픈 소스 애플리케이션 프레임워크
스프링은 기업급 애플리케이션의 개발을 위한 다양한 기능과 추상화 계층을 제공하여 개발자들이 보다 효과적으로 애플리케이션을 구축할 수 있도록 도와준다.
스프링 프레임워크는 다양한 모듈로 구성되어 있으며, 각 모듈은 특정한 기능을 제공한다. 가장 핵심적인 기능인
"의존성 주입(Dependency Injection)" 은 객체 간의 의존 관계를 설정하고 주입하는 기능을 제공하여 애플리케이션의 유연성과 확장성을 높인다.
이를 통해 개발자는 객체 간의 결합도를 낮출 수 있고, 코드의 재사용성과 유지보수성을 개선할 수 있다.
스프링 프레임워크는 또한 "제어 역전(Inversion of Control)" 개념을 적극적으로 활용한다.
개발자가 직접 객체의 생성과 관리를 담당하는 대신, 스프링 컨테이너라는 컨테이너가 객체의 라이프사이클을 관리하고 필요한 객체를 생성하여 제공한다.
이를 통해 개발자는 애플리케이션의 핵심 로직에 집중할 수 있고, 객체의 생성과 관리와 같은 부수적인 작업에서 자유로워진다.
스프링 프레임워크는 데이터 액세스, 웹 개발, 보안, 트랜잭션 처리, 배치 처리 등 다양한 영역에서 활용될 수 있는 다양한 모듈을 제공한다. 또한 스프링 부트(Spring Boot)라는 독립적인 프로젝트도 제공되어, 보다 간편한 설정과 개발환경 구성을 지원한다.
스프링 프레임워크는 많은 기업들과 개발자들에게 신뢰받고 있으며, 자바 기반의 애플리케이션 개발에 널리 사용되고 있다.
스프링은 경량 애플리케이션 프레임워크로서, 무겁지 않고 자원을 적게 소비. 이는 빠른 실행과 높은 성능을 제공하며, 작은 규모부터 큰 규모의 애플리케이션까지 다양한 환경에서 사용하기 적합하다.
스프링은 IoC 컨테이너를 통해 객체의 생명주기와 의존성 관리를 해결. 개발자는 객체를 직접 생성하거나 관리하지 않고, 스프링 컨테이너가 객체의 생성과 관리를 대신 수행.
스프링은 DI를 지원하여 클래스 간의 의존성을 줄이고 코드의 유연성과 재사용성을 높인다. 객체는 스프링 컨테이너에 의해 생성되며, 필요한 의존성은 컨테이너가 자동으로 주입한다.
AOP는 스프링의 강력한 기능 중 하나로, 애플리케이션의 핵심 비즈니스 로직과 관련 없는 부가적인 기능들을 분리하여 모듈화할 수 있다. 이를 통해 코드의 가독성과 유지보수성이 향상된다.
통합 지원: 스프링은 다양한 데이터베이스, 웹 프레임워크, 보안, 템플릿 엔진 등 다양한 서드파티 라이브러리와의 통합을 지원한다. 이를 통해 개발자는 자신이 선호하는 도구를 자유롭게 선택하여 개발할 수 있다.
테스트 지원: 스프링은 테스트를 위한 다양한 모듈과 기능을 제공하여 단위 테스트나 통합 테스트를 쉽게 작성하고 실행할 수 있다.
보안: 스프링은 보안을 위한 다양한 기능과 라이브러리를 제공하여 애플리케이션의 보안 요구사항을 충족시킬 수 있다.
모듈성과 확장성: 스프링은 각각의 기능을 모듈로 나누어 제공하고, 필요한 기능만을 선택하여 사용할 수 있도록 한다. 이를 통해 애플리케이션의 확장성과 유지보수성이 향상된다.
스프링 부트(Spring Boot)는 자바 기반의 오픈 소스 프레임워크로, 웹 애플리케이션과 서비스를 빠르고 쉽게 개발하고 구성하기 위해 설계되었다.
스프링 부트는 "스타터"라는 이름의 의존성 그룹을 제공. 스타터를 사용하면 특정 기능 또는 라이브러리를 사용하기 위해 복잡한 설정을 하지 않아도 된다. 필요한 스타터를 추가하기만 하면 자동으로 설정이 완료됨.
스프링 부트는 클래스 패스를 기반으로 애플리케이션을 자동으로 설정. 즉, 여러 구성 요소들을 자동으로 빈(Bean)으로 등록하여 개발자가 더 적은 설정을 해도 애플리케이션을 실행할 수 있도록 한다.
스프링 부트는 Maven이나 Gradle과 같은 빌드 도구를 사용할 때 의존성 관리를 쉽게 할 수 있도록 도와준다. 버전 관리를 자동화하여 호환되는 의존성들을 사용하게 됨.
스프링 부트 애플리케이션은 내장된 서버를 가질 수 있다. 서블릿 컨테이너인 Tomcat, Jetty, 또는 Undertow를 애플리케이션에 내장하여 외부에 별도의 웹 서버를 배포하지 않아도 된다.
스프링 부트의 Actuator는 애플리케이션의 상태를 모니터링하고, 관리 및 운영을 쉽게 할 수 있는 기능을 제공. 통계 정보, 로그, 환경 설정 등에 접근할 수 있으며, 애플리케이션의 상태를 이해하고 추적하는 데 도움이 된다.
스프링 부트는 환경 설정을 위한 다양한 외부 파일을 지원한다. YAML 또는 Properties 형식으로 설정 파일을 작성하여 애플리케이션의 동작을 변경할 수 있다.
스프링 부트는 통합 테스트를 쉽게 작성할 수 있는 지원을 제공. 내장된 서버를 사용하여 테스트하고, 테스트 데이터를 로드하는 데 도움이 된다.
스프링 부트는 마이크로서비스 아키텍처에 적합한 기능을 제공. 액추에이터를 통해 서비스의 감시와 관리를 할 수 있으며, 클라우드 환경에서 사용하기 쉽도록 다양한 기능들을 제공.
스프링 부트의 간결한 구성과 자동 설정, 강력한 개발 도구들은 개발자들에게 높은 생산성을 제공합니다.
목표와 특징에서 차이가 있다.
스프링 프레임워크는 대규모 응용 프로그램과 기업급 애플리케이션의 개발에 초점을 맞춘 프레임워크. 경량 컨테이너를 통해 애플리케이션 객체의 라이프사이클을 관리하고, 의존성 주입(Dependency Injection)을 지원하여 결합도를 낮추고 유연한 애플리케이션 구조를 제공.
스프링 프레임워크는 많은 모듈과 기능으로 구성되어 있으며, 핵심 컨테이너인 IoC (Inversion of Control) 컨테이너, AOP (Aspect-Oriented Programming) 기능, JDBC (Java Database Connectivity) 모듈, 트랜잭션 관리, 웹 기능 등이 포함되어 있다. 프로젝트를 더 세밀하게 구성하여 사용할 수 있다.
스프링 프레임워크는 XML, JavaConfig(Java 기반 설정), 어노테이션 등 다양한 방법으로 애플리케이션을 설정할 수 있다.
스프링 부트는 스프링 프레임워크의 설정을 간소화하고 개발자들이 빠르고 쉽게 스프링 기반 애플리케이션을 개발할 수 있도록 목표로 한다. 스프링 부트는 기본적인 설정을 제공하고, 추가적인 설정 없이도 즉시 실행 가능한 독립적인 스프링 애플리케이션을 만들 수 있도록 도와준다.
스프링 부트는 스프링 프레임워크를 기반으로 하며, 스프링의 여러 모듈을 포함하고 있다. 스프링 부트 자체적으로 내장 웹 서버를 가지고 있어 웹 애플리케이션을 개발할 때 외부 웹 서버를 별도로 구성할 필요가 없다.
스프링 부트는 기본적으로 "컨벤션 오버 설정"을 따른다. 즉, 특별한 설정이 없어도, 클래스 패스 상의 자원과 애노테이션을 인식하여 적절한 설정을 자동으로 수행한다. XML 설정 없이도 자동으로 애플리케이션을 구성할 수 있다. 또한 application.properties 또는 application.yml 파일을 사용하여 설정을 제공하고, 프로퍼티 파일을 통해 애플리케이션의 동작을 변경할 수 있다.
"제어의 역전"
제어의 역전은 객체 제어의 주체가 객체를 사용하는 클래스 자신이 아닌 외부에 있다는 의미.
필요한 객체를 클래스 내부에서 직접 생성하지 않고 외부에서 주입받는 형태를 가진다.
"의존성 주입"
어떤 작업을 할 때 꼭 필요한 객체를 개발자가 만들어서 넣는게 아니라 프레임워크한테 만들어서 넣어달라고 요청하는 것.
예)
집을 짓고 싶은 건물주 - 프로그램을 만들고 싶은 개발자
//스캐너가 필요해요
@Autowired
Scanner scanner ;
인력사무소 - 프레임 워크 ( 개발자가 필요한 객체를 알아서 넣어줌)
작업자 - 꼭 필요한 객체(Scanner 등)
관점 지향 프로그래밍
관점 지향은 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 모듈화 하겠다는 것.
모듈화 : 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것
AOP는 흩어진 관심사(Crosscutting Concerns)를 모듈화 할 수 있는 프로그래밍 기법
클래스 A, B, C에서 공통적으로 나타나는 색깔 블록은 중복되는 메서드, 필드, 코드 등이다. 이때 예를 들어 클래스 A의 주황색 블록 부분을 수정해야 한다면 클래스 B, C의 주황색 부분도 일일이 찾아 수정해야 한다. 이는 SOLID원칙을 위배하며 유지보수를 어렵게 만든다. 이런 식으로 소스 코드상에서 계속 반복해서 사용되는 부분들을 흩어진 관심사(Crosscutting Concerns)라고 한다.
결국 AOP에서 각 관점을 기준으로 로직을 모듈화한다는 것은 흩어진 관심사를 모듈화하겠다는 의미다. 주황색, 파란색, 빨간색 블록처럼 모듈화 시켜놓고 어디에 적용시킬지만 정의해주면 되는 것이다. 이때 모듈화 시켜놓은 블럭을 Aspect라고 한다.
스프링 AOP
-스프링에서 제공하는 스프링 AOP는 프록시 기반의 AOP 구현체이다.
-프록시 객체를 사용하는 것은 접근 제어 및 부가 기능을 추가하기 위해서이다.
-스프링 AOP는 스프링 Bean에만 적용할 수 있다.
-모든 AOP 기능을 제공하는 것이 목적이 아닌, 중복 코드, 프록시 클래스 작성의 번거로움 등 흔한 문제를 해결하기 위한 솔루션을 제공하는 것이 목적이다.
-스프링 AOP는 순수 자바로 구현되었기 때문에 특별한 컴파일 과정이 필요하지 않다.
프록시 패턴에서는 interface가 존재하고 Client는 이 interface 타입으로 Proxy 객체를 사용한다. Proxy 객체는 기존의 타겟 객체(Real Subject)를 참조한다. Proxy 객체와 기존의 타겟 객체의 타입은 같고, Proxy는 원래 할 일을 가지고 있는 Real Subject를 감싸서 Client의 요청을 처리한다.
데이터를 가진 객체를 모델이라고 지칭. 데이터는 내부의 상태에 대한 정보를 가질 수도 있고, 모델을 표현하는 이름 속성으로 가질 수 있다. 모델의 상태에 변화가 있을 때 컨트롤러와 뷰에 이를 통보한다. 이와 같은 통보를 통해 뷰는 최신의 결과를 보여줄 수 있고, 컨트롤러는 모델의 변화에 따른 적용 가능한 명령을 추가, 제거, 수정할 수 있다.
-사용자가 편집하길 원하는 모든 데이터를 가지고 있어야만 함
-뷰나 컨트롤러에 대해서 어떠한 정보도 알지 말아야 함
-변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야 함
View는 클라이언트 측 기술은 HTML/CSS/Javascript들을 모아둔 컨테이너. 사용자가 볼 결과물을 생성하기 위해 모델로부터 정보를 얻어온다.
-모델이 가지고 있는 정보를 따로 저장해서는 안됨
-모델이나 컨트롤러와 같이 다른 구성 요소를 몰라야 함
-변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야 함
사용자가 접근한 URL에 따라 사용자의 요청사항을 파악한 후에 그 요청에 맞는 데이터를 Model을 의뢰하고, 데이터를 View에 반영해서 사용자에게 알려준다.
-모델이나 뷰에 대해서 알고 있어야 함
-모델이나 뷰의 변경을 모니터링해야 함
-비즈니스 로직과 UI로직을 분리하여 유지보수를 독립적으로 수행가능
-Model과 View가 다른 컴포넌트들에 종속되지 않아 애플리케이션의 확장성, 유연성에 유리함
-중복 코딩의 문제점 제거
메타 어노테이션 - 어노테이션에 붙을 수 있는 어노테이션
합성 어노테이션 - 어노테이션을 여러개 붙인 것.
@Bean - 외부 라이브러리 객체
@Component - 내가 만든 객체
@Configuration - 설정
@Controller - 주소 매핑
@Service - 비지니스 로직
@Repository - DB, 데이터 소스
-개발자가 컨트롤 불가능한 외부 라이브러리를 Bean으로 등록할 때 사용
예를들면 jackson의 ObjectMapper등
@ComponentScan
@ComponentScan 어노테이션이 붙은 패키지 하위의 모든 @Bean과 @Component를 스캔하여 객체를 생성
@Autowired - 타입으로 주입 ( 없으면 이름으로 )
@Inject - 타입으로 주입 ( 없으면 이름으로 )
@Resource - 이름으로 주입 ( 없으면 타입으로 )
@RequestHeader - 특정 헤더 값을 가져옴
@RequestMapping - 특정 주소를 매핑함
@RequestBody - 요청 body를 가져옴
@RequestParam - 특정 쿼리스트링을 가져옴
@PathVariable - 특정 경로변수를 가져옴
@ModelAttribute - 쿼리스트링을 DTO의 멤버 변수로 binding
@GetMapping - 데이터 조회
@PostMapping - 데이터 삽입
@PutMapping - 데이터 수정
@DeleteMapping - 데이터 삭제
@ResponseBody - 응답을 직렬화해서 보냄
@EnableAutoConfiguration
: Spring Application Context를 만들 때 자동으로 설정하는 기능을 켠다.
classpath의 내용에 기반해서 자동으로 생성해줌.
@SpringBootApplication
@Configuration
@EnableAutoConfiguration
@ComponentScan
3가지를 하나의 어노테이션으로 합친 것. (합성 어노테이션)
@Value
properties에서 값을 가져와 적용할 때 사용
@Valid
유효성 검증이 필요한 객체임을 지정.
@Transactional
데이터베이스 트랜잭션을 설정하고 싶은 method에 적용하면 로직이 전부 성공하면 Commit
하나라도 실패하면 Rollback
@Entity
실제 DB의 테이블과 매칭될 Class임을 명시. 테이블과 링크될 클래스임을 나타냄.
@ControllerAdvice
Class 위에 ControllerAdvice를 붙여서 예외처리할 것을 명시
어떤 예외를 처리할 것인지는 각 메소드 상단에 @ExceptionHandler(예외클래스명.class)를 붙여서 명시.
dispatch - 보내다
FrontController - 모든 요청을 받아서 적합한 Controller에 보냄.
-미디어 타입으로 데이터를 변경
-StringHttpMessageConverter
-MappingJacksonHttpMessageConverter
-실행할 View를 찾는다.
-JSP,Thymeleaf,Mustache 등등
vscode 자동업데이트 끄기
vscode설정 저장
레보 다운로드
vscode 삭제
vscode 이전버전 설치
vscode 자동업데이트 확인
Ctrl+Shift+P 해서 vscode에서도 만들 수 있다.
프로젝트 방식 고른다. 보통 성능이 좋은 Gradle을 사용, 코틀린을 모른다면 Groovy를 선택
프로젝트에서 사용할 언어 고르기
스프링 부트 버전을 고른다.
기존버전은 2.7(자바 8이상, 스프링5)
최신 버전은 3.0(자바 17이상, 스프링6)
프로젝트가 변경되면 재로딩하는 등
프로젝트 외적인 기능을 하는 라이브러리
어노테이션 기반으로 코드를 자동생성해주는 라이브러리
yml 혹은 properties에서 자동완성을 도와주는 메타데이터 라이브러리
내장 톰캣뿐 아니라, Spring MVC 패턴을 구현하는 데에 필요한 대부분의 기능이 포함된 라이브러리
템플릿 엔진
로그인, 인증, 보안, 필터링, 유저 관리 등 필수 기능을 모아둔 시큐리티 프레임워크
소셜로그인 로직을 구현하기 위한 라이브러리
Java Persistence API라고 하여 자바 ORM 기술 객체를 DB처럼 사용할 수 있다.
XML 파일 또는 자바 코드를 사용하여 Query문을 직접 작성하여 DB를 관리하는 프레임워크
메모리를 데이터베이스로 사용
데이터베이스 설정을 전혀 할 필요가 없이 의존성에 추가하면 끝
디펜던시 추가.
run
에러페이지 뜨는게 정상.
@Component
일할 사람이라는것을 알려준다.
타임리프세팅
타임리프
포트번호 바꾸기
// 프로젝트 생성
spring initializr
// com.example.coffee
// coffee.html - / coffee
// CoffeeController - coffee.html 연결
// 아메리카노
프로젝트 필수 요소
추가