Today I Learned

2024 스파르타 내일배움캠프 Sping 트랙 참여 // day22

shinelee26 2024. 10. 31. 22:34

오늘 진행한 학습 요약

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

 

  • 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

 


2. CH 3 일정 관리 앱 만들기

  • API 명세서 작성과 작성내용 보완
    • calender자체를 구현하는 것은 프론트를 구현해야하기에 작성내용을 좀 더 간단하게 아래와 같이 수정하였다.
    • 아래와 같이 작성하면 변수값으로 전달한 달에 대한 이벤트를 응답한다.

    • /calender를 없애고 /users에서 로그인한 사용자가 가진 일정관리를 /event로 갈 수 있도록 URL을 수정하였다.

    • 이렇게 구현하면 대신에 일정을 사용자들끼리 공유하지 못하고 각자의 일정만 보고 수정할 수 있다.
    •  SQL의 DATETIME을 사용하기 위해서 일자와 시간을 분리했던 것을 “2024-10-31 17:00:00” 와 같이 합쳐서 더욱 간편하게 작성할 수 있도록 수정하였다.
    •  
  • ERD 다이어그램작성과 작성내용 보완
    • API명세서를 바탕으로 ERD다이어그램 작성내용을 수정하였다.
    • 일정 이름과 일정설명에 작성할 수 있는 값의 한계를 주었는데 이를 어겼을 때 상태코드를 반환하는 것을 추가 작성하였다.
    • 200번대의 경우 성공 결과를 반환한다.
    • 400번대의 경우 요청자가 잘못 요청했을때의 상태코드를 반환한다.

  • SQL쿼리 작성
    • PRIMARY KEYFOREIGN 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)
);