Spring & SpringBoot의 차이점
Spring - 스프링 프레임워크의 핵심 모듈을 모아서 만든 프레임워크
개발자가 직접 설정 파일을 작성하여 스프링 컨테이너를 구성하고, 필요한 빈 객체를 등록하고 빈 객체 간의 의존성을 설정해야 한다.
- 특정한 구성을 위해 추가적인 라이브러리와 설정이 필요하다.
- 스프링 프레임워크를 보다 세밀하게 제어하고자 하는 경우
SpringBoot - 스프링 프레임워크를 보다 쉽게 사용할 수 있도록 만든 프레임워크
- SpringBoot에서는 개발자가 설정 파일을 작성할 필요 없이, 프로젝트의 설정과 라이브러리의 의존성을 자동으로 처리해주는 기능을 제공함
- Spring에서 제공하는 여러 기능들을 자동으로 설정하여 개발자가 보다 쉽게 사용할 수 있도록 해줌
- 빠르고 간단하게 스프링 애플리케이션을 개발하고자 하는 경우
객체지향 프로그래밍
프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법
객체지향 장점
- 유지 보수가 쉬움
- 코드 재사용 용이
- 대형 프로젝트에 적합
객체지향 단점
- 처리 속도가 상대적으로 느림
- 객체가 많으면 용량이 커질 수 있음
- 설계할 때 많은 시간과 노력이 필요
HTTP & HTTPS
HTTP - 서버/클라이언트 모델을 따라 데이터를 주고받기 위한 프로토콜
- 암호화 과정을 거치지 않아 중간에 패킷을 가로챌 수 있고, 수정할 수 있음. 보안이 취약함
- 80번 포트
HTTPS - HTTP에서 데이터 암호화가 추가된 프로토콜
- 네트워크 상에서 중간에 제3자가 정보를 볼 수 없도록 암호화 계층을 거쳐서 패킷을 암호화한다.
- 대칭키 암호화 방식과 비대칭키 암호화 방식을 모두 사용
- 443번 포트
GET & POST
GET 요청 -> 서버에 존재하는 정보를 요청하는 통신임
POST 요청 -> 서버에 정보를 생성하는 것을 요청
RESTAPI
REST -> 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것
RESTAPI란 REST의 원리를 따르는 API
RESTFUL REST의 원리를 따르는 시스템
SQL
관계형 데이터베이스 관리 시스템(RDBMS)의 관리를 위해 제작된 언어
자료의 검색과 재조합, 스키마 생성과 수정과 같은 데이터베이스 객체 조정 관리를 위해 고안됨
DBMS
데이터베이스 관리 시스템
사용자와 데이터 사이에서 사용자의 요청에 의해 데이터의 생성 조회 등 데이터베이스를 관리해주는 역할
RDBMS
관계형 데이터베이스 관리 시스템
- 데이터베이스를 이루는 객체들의 릴레이션을 통해 데이터를 저장하는 데이터베이스
- SQL을 사용해 데이터의 저장, 질의, 수정, 삭제를 할 수 있으며 데이터를 효율적으로 보관하는 것을 목적으로 함 & 구조화가 중요함
- 명확한 데이터 구조 보장, 중복 피하기 가능
NOSQL
RDBMS에 비해 자유로운 형태로 데이터를 저장
- RDBMS의 성능과 한계를 극복하기 위해 등장
- 수평 확장과 분산처리를 지원함
- 테이블 간의 Join이 필요 없음
- 각각 필요한 시점에 적절히 선택해서 사용하면 상호보완적인 존재가 될 수 있음
Redis
- 싱글스레드 기반 동작 & 스냅샷, AOF 로그를 통해 데이터 복구가 가능함.
- 메모리 기반의 데이터 저장소
- (Key-value) 데이터 구조에 기반한 다양한 형태의 자료 구조를 제공하며, 데이터들을 저장할 수 있는 저장소임
JWT
- 토큰 인증 방식에서 쓰이는 것
- 데이터를 공유하는데도 사용할 수 있지만 일반적으로 토큰 인증 방식에서 사용
- 헤더(토큰 타입 & 암호화 알고리즘), 페이로드(토큰의 정보), 시그니처(토큰의 정보가 신뢰할 수 있는지 판단함)로 구분함
- JWT는 세션의 단점을 보완
세션 기반 인증
- 서버에서 세션 정보를 관리해야 하는 비용이 든다.
- 분산 환경에서도 관리하기 때문에 어려움
OAuth
- 제3자 인증 방식
- OAuth를 사용해서 신뢰할 수 있는 서버에게 정보를 맡겨놓고 접근할 수 있는 권한을 주는 것
- 사용자 측 : 민감정보를 입력하지 않고 서비스 사용
- 서버 측 : 민감정보를 관리하지 않아도 됨
오버라이딩 & 오버 로딩
오버라이딩 - 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의 하는 것.
- 오버라이딩은 부모 클래스의 메소드를 재정의 하기 때문에 메소드의 이름, 매개변수, 리턴 값이 모두 같아야 한다.
오버 로딩 - 같은 클래스 내에서 동일한 메소드 이름을 가지더라도 매개변수의 타입, 개수가 다르면 같은 이름을 사용해서 메소드를 정의할 수 있음을 의미.
- 기존에 없는 새로운 메소드를 추가하는 것
@Override 어노테이션은 오버라이딩을 검증하는 기능
코드상으로 검사했을 때 오버라이딩이 실제로 시행되지 않았다면 컴파일시 오류를 출력한다.
인터페이스 & 추상클래스
추상클래스 - 객체의 추상적인 상위 개념으로 공통된 개념을 표현할 때 사용합니다.
단일 상속만 가능합니다. 추상클래스를 상속하는 집합간에는 연관관계가 있습니다.
인터페이스 - 구현 객체가 같은 동작을 한다는 것을 보장하기 위해 사용합니다. 다중 상속이 가능합니다. 인터페이스를 구현하는 집합간에는 관계가 없을 수 있습니다.
클래스 & 객체
클래스 - 객체를 정의하는 틀 & 설계도와 같은 의미로 사용
객체 - 식별 가능한 개체 또는 사물
구별 가능한 식별자, 특징적인 행동, 변경 가능한 상태를 가짐.
인스턴스들을 통칭하는 용도로 사용함
자바의 원시타입
boolean(1), char(unsigned 2), byte(1), short(2), int(4), long(8), float(4), double(8)
JAVA8에 추가된 기능
Lambda식, Stream API, Optional, 날짜 시간 API, StringJoiner
Lambda - 함수형 프로그래밍을 지원하기 위한 기능
Stream API - 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 기능
CI/CD가 무엇? / 왜 CI/CD가 장점이 되나 ?
CI (Continous integration) - 지속적인 통합
어플리케이션의 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 공유 레포지토리에 통합하는 것
새로운 소스코드의 빌드, 테스트, 병합까지를 의미
CD(continous delivery / continous deployment) - 지속적인 서비스 제공 혹은 지속적인 배포
개발자의 변경 사항이 레포지토리를 넘어, 고객의 프로덕션 환경까지 릴리즈 되는 것
- 소프트웨어 품질 향상 : CI/CD를 통해 버그를 빠르게 발견하고 수정할 수 있어서 소프트웨어의 품질을 향상시킬 수 있음
- 소프트웨어 안정성 향상 : CI/CD를 통해 소프트웨어가 더 자주 배포되므로 프로덕션 환경에서 발생하는 문제를 빠르게 발견하고 수정할 수 있음
- 개발 생산성 향상 : CI/CD를 통해 개발자는 소프트웨어를 더 자주 배포할 수 있으므로 개발 생산성을 향상시킬 수 있음
- 고객 만족도 향상 : CI/CD를 통해 소프트웨어가 더 자주 배포되므로 고객이 최신 소프트웨어를 사용할 수 있음
푸시가 될 때마다 코드를 병합하고, 테스트 코드와 빌드를 수행하면서 자동으로 코드가 통합되어 수동으로 코드를 통합할 필요가 없어 개발에만 신경을 쓸 수 있음.
CI/CD가 중요한 것은 테스트 자동화임. 프로젝트의 완전한 상태임을 보장하기 위해 테스트 코드가 구현되어 있어야 함.
TTD(Test Driven Development) 테스트 주도 개발
반복 테스트를 이용한 소프트웨어 방범론.
작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현
짧은 개발 주기의 반복에 의존하는 개발 프로세스
구글링을 하며 내용을 정리하였습니다. 잘못된 정보가 있을 수 있습니다 ..! 그냥 혼자 간단하게 준비하는 학생입니다.
아직 심도 있게 공부하지 못하고 많이 부족하지만 앞으로 더 노력하겠습니다 ( ღ'ᴗ'ღ )
'Self-improvement' 카테고리의 다른 글
[재도전] 토익 스피킹 2일 공부 후 110점, 그리고 재도전 #3 (0) | 2024.12.14 |
---|---|
[도전] 토익 스피킹 첫 도전, 그리고 목표 #2 (0) | 2024.12.09 |
[접수] 토익 스피킹 도전 #1 (+ 할인 꿀팁) (2) | 2024.11.27 |