오늘 진행한 학습 요약
1. 기초 Spring 2주차
- 프레임워크, 라이브러리
- Annotation
- Spring Framework와 Spring Boot
- 빌드 관리 도구
- Java 웹 기술의 역사
2. CH 3 일정 관리 앱 만들기
- API 명세서 작성과 작성내용 보완
- ERD 다이어그램작성과 작성내용 보완
- SQL쿼리 작성
일정관리 앱 Git-hub 링크 : https://github.com/chews26/Schedule-app
Shinelee26 Notion - 일정관리 앱 만들기 이빛나 링크 : https://www.notion.so/shinelee26
3. 알고리즘 코드카다 Day16 (작성 생략)
CodingTest Git-hub 링크 : https://github.com/chews26/CodingTest
학습 정리
1. 기초 Spring 2주차
- 프레임워크
- 소프트웨어 개발을 간편하게 만들기 위한 소프트웨어 개발 환경
- 프레임워크는 frame(틀) work(일하다)의 합성어로 일하기 위한 틀을 제공
- 장점
- 일관된 구조를 제공
- 핵심 비즈니스 로직에 집중할 수 있음
- 보안 취약점을 방지하는 데 도움
- 테스트를 쉽게 작성하고 실행
- 다양한 문서를 활용
- 단점
- 처음 익히는 데 시간이 많이 소요
- 새로운 버전이 기존 코드와 호환되지 않을 수 있음
- 구조를 따르게 강제
- 라이브러리
- 애플리케이션 개발에 필요한 클래스, 함수 등을 모아 놓은 코드의 모음
- 장점
- 복잡한 코드를 직접 작성하지 않아서 개발 생산성이 높아짐
- 검증된 라이브러리는 품질이 보장
- 단점
- 라이브러리가 업데이트 되거나 지원이 중단될 경우 문제가 발생
- 버전 호환성 문제
- 불필요한 기능을 포함한 라이브러리를 사용하면 비효율적
- 라이브러리의 내부 구현을 직접 수정 어려움
- Annotation
- 코드에 메타데이터를 추가할 수 있는 기능을 제공
- 코드에 특별한 의미를 부여하거나, 컴파일러와 런타임에 특정 동작을 트리거하기 위해 사용
- 어노테이션은 특정 코드를 사용하는 프로그램에게 정보를 전달
- @ 기호로 시작
- 내장 어노테이션
- @Override
- @Deprecated
- @SuppressWarnings
- 사용자 정의 어노테이션
- 특정 메타데이터를 추가
- AOP(Aspect-Oriented Programming) 같은 기술과 결합하여 다양한 기능을 구현
- Lombok
- 보일러 플레이트 코드를 줄여주는 라이브러리
- 보일러 플레이트 코드를 생성하여 코드의 가독성과 유지보수성
- Lombok은 어노테이션 기반으로 동작하며, 주로 컴파일 시점에 소스 코드를 변환하여 필요한 메서드를 자동으로 생성
- getter/setter 메서드, 생성자, toString 메서드 등과 같이 반복적으로 작성되는 코드
- 주요 Lombok Annotation
- @Getter, @Setter
- @ToString
- @EqualsAndHashCode
- @NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor
- @Data
- @Builder
- @Slf4j
- Spring Framework
- Java Application Framework로 엔터프라이즈 애플리케이션 개발에 주로 사용
- 엔터프라이즈 애플리케이션?
- 대규모로 복잡한 비즈니스 프로세스와 데이터를 처리하는 애플리케이션
- Spring Framework 등장 배경
- 성능, 신뢰성, 보안등의 복잡한 환경을 해주는 개발환경의 필요성 높아짐
- 개발자는 비즈니스 로직에만 집중이 필요
- Spring Framework 등장!
- 서버 성능, 안정성, 보안 문제를 고도화된 수준으로 해결
- 비즈니스 로직 개발에 집중
- Spring Framework 특징
- 애플리케이션의 다양한 구성 요소를 유연하게 연결하고 관리
- 누구나 사용할 수 있는 오픈소스
- 모듈화되어 있어 특정 기능만 선택적으로 사용 가능
- Java언어의 가장 큰 특징인 객체 지향 언어의 특징을 살려낸 프레임워크
- 캡슐화
- 상속
- 추상화
- 다형성
- Spring Boot
- Spring Framework를 기반으로 하여 간편하고 신속하게 애플리케이션을 개발할 수 있도록 도와주는 도구
- Spring Boot의 등장 배경
- 스프링 프레임워크는 초기 설정과 구성 파일이 복잡하고 방대
- 스프링 애플리케이션을 쉽게 개발하고 배포할 수 있는 방법이 필요
- Spring Boot의 특징
- 자동 구성(Auto-configuration) 기능을 제공
- 내장 WAS(Tomcat)를 제공
- spring-boot-starter-web를 빌드 관리 도구에 추가하면 웹 애플리케이션에 필요한 모든 종속성과 설정이 자동으로 구성
- 호환 가능한 버전들을 찾아 자동으로 설정
- 라면 : Java
- 냄비 : Spring
- 조리 도구 세트 : Spring Boot
- 빌드 관리 도구
- Gradle
- 다양한 소프트웨어를 빌드(Build)할 수 있는 유연한 빌드 자동화 도구
- Java와 유사한 문법 구조
- Groovy기반의 스크립트 언어를 사용
- 빌드(Build)?
- 소스 코드를 컴퓨터가 실행 가능한 파일로 변환해주는 작업
- 빌드 자동화 도구
- 빌드, 라이브러리 관리, 테스트, 배포 등을 자동화 하여 수행
- Gradle 특징
- 유연성
- Build Cache
- 점진적 빌드
- 데몬 프로세스
- 멀티 프로젝트 빌드 지원
- 설정 주입 방식
- build.gradle
- Groovy 기반 언어의 빌드 스크립트로 스크립트를 작성하면 소스 코드를 빌드하고, 라이브러리들의 의존성을 관리할 수 있음
- 플러그인
- 특정 작업을 위해 모아 놓은 task들의 모음집
- java plugin
- 의존성 관리
- 프로젝트에서 사용하는 라이브러리나 패키지를 관리
- 라이브러리를 추가하는 시점을 설정할 수 있음
- Implementation : 컴파일, 런타임 시점 모두에서 사용
- compileOnly : 컴파일할 때만 사용되고 런타임 때에는 사용하지 않음
- runtimeOnly : 런타임 때만 사용
- testImplementation : 테스트할 때만 사용
- 프로젝트에서 사용하는 라이브러리나 패키지를 관리
- repositories
- 라이브러리가 저장된 위치를 정의하고 저장소에서 라이브러리를 가져옴
- MavenCentral Repository
- Gradle
- Java 웹 기술의 역사
- Servlet의 등장 (1997)
- JSP (JavaServer Pages) 도입 (1999)
- Servlet, JSP 기반의 MVC 패턴 도입
- MVC 프레임워크의 등장과 발전 (2000~2010)
- Annotation 기반의 Spring MVC(2007~현재)
- Spring Boot의 등장(2014~현재)
- 최신 기술 동향
- Web Servlet
- Spring MVC
- Web Reactive
- Spring WebFlux
- Web Servlet
2. CH 3 일정 관리 앱 만들기
- API 명세서 작성과 작성내용 보완
- calender자체를 구현하는 것은 프론트를 구현해야하기에 작성내용을 좀 더 간단하게 아래와 같이 수정하였다.
- 아래와 같이 작성하면 변수값으로 전달한 달에 대한 이벤트를 응답한다.
-
- /calender를 없애고 /users에서 로그인한 사용자가 가진 일정관리를 /event로 갈 수 있도록 URL을 수정하였다.
-
- 이렇게 구현하면 대신에 일정을 사용자들끼리 공유하지 못하고 각자의 일정만 보고 수정할 수 있다.
- SQL의 DATETIME을 사용하기 위해서 일자와 시간을 분리했던 것을 “2024-10-31 17:00:00” 와 같이 합쳐서 더욱 간편하게 작성할 수 있도록 수정하였다.
- ERD 다이어그램작성과 작성내용 보완
- API명세서를 바탕으로 ERD다이어그램 작성내용을 수정하였다.
- 일정 이름과 일정설명에 작성할 수 있는 값의 한계를 주었는데 이를 어겼을 때 상태코드를 반환하는 것을 추가 작성하였다.
- 200번대의 경우 성공 결과를 반환한다.
- 400번대의 경우 요청자가 잘못 요청했을때의 상태코드를 반환한다.
- SQL쿼리 작성
- PRIMARY KEY와 FOREIGN KEY를 작성하는 법을 새로 알게 되었다.
- PRIMARY KEY : 기본키
- 데이터를 구분할 수 있는 식별자로 사용
- FOREIGN KEY : 외래키(참조키)
- 외래키는 두 테이블 사이의 관계를 연결
- KEY값은 따로 작성하는 법도 있는데 CREATE 아래 작성하는 것이 직관적이고 편리한 것 같다.
CREATE TABLE `users` (
`user_id` INTEGER NOT NULL,
`user_name` VARCHAR NOT NULL,
`user_password` VARCHAR NOT NULL,
`create_date` DATETIME NOT NULL
PRIMARY KEY (user_id)
);
CREATE TABLE `event` (
`event_id` INTEGER NOT NULL,
`user_id` INTEGER NOT NULL,
`title` VARCHAR(100) NOT NULL,
`start_datetime` DATETIME NOT NULL,
`end_datetime` DATETIME NOT NULL,
`description` VARCHAR(100) NULL
PRIMARY KEY (event_id)
FOREIGN KEY (user_id) REFERENCES users(user_id)
);