[내배캠/21일차] TIL - Spring Framework, Spring Boot

euphony·2025년 1월 22일
0

내일배움캠프

목록 보기
36/66

✅오늘의 한 일

  • 기초 Spring 1주차 완료
  • 기초 Spring 2주차 완료
  • 자바 중급 2편 섹션8 완료
  • 스프링 입문 섹션3 완료

💻오늘의 학습

기초 Spring 강의 2주차

프레임 워크, 라이브러리

  • 프레임 워크(Framework) : 애플리케이션을 개발할 때 전체적인 구조(frame)를 잡기 위해 사용하는 소프트웨어 개발 환경.
    • 일관된 구조를 제공한다.
    • 기본적으로 필요한 기능과 도구를 제공해 핵심 비즈니스 로직에 집중할 수 있다.
  • 라이브러리(Library) : 애플리케이션 개발에 필요한 클래스, 함수 등을 모아놓은 것.

Annotation과 Lombok

  • 어노테이션(Annnotation) : 코드가 어떻게 처리되거나 동작해야 하는지 설명하는 역할을 하는 것. @ 기호로 시작하며 클래스, 메서드, 변수, 매개변수, 패키지 등에 추가할 수 있다.

✔️ 자주 사용되는 내장 어노테이션

  • @Override : 메서드가 상위 클래스나 인터페이스의 메서드를 오버라이드하고 있음을 나타낸다. 컴파일러가 실제로 오버라이드하고 있는지 확인한다.
   @Override
   public String toString() {
       return "Example";
   }
  • @Deprecated : 해당 요소가 더 이상 사용되지 않음을 나타내며, 사용 시 컴파일 경고를 출력한다.
   @Deprecated
   public void oldMethod() {
       System.out.println("This method is deprecated.");
   }
  • @SuppressWarnings : 컴파일러 경고를 무시한다. 경고의 종류(ex. unchecked, deprecation)를 지정할 수 있다.
   @SuppressWarnings("unchecked")
   List list = new ArrayList();

강의에서는 위의 3가지 어노테이션만 설명했지만, 다른 어노테이션도 추가로 찾아보았다.

  • @FunctionalInterface : 메타데이터만 제공하며 속성이 없고, 함수형 인터페이스임을 명시한다.
  • @SafeVarargs : 제네릭 가변인자의 안전성을 컴파일러에게 보증한다. 개발자가 안전성을 직접 확인해야 한다.
  • @Retention : 어노테이션의 유지 정책을 설정한다.
  • @Target : 어노테이션을 적용할 위치(클래스, 메서드, 필드 등)를 제한한다.
  • @Documented : 어노테이션이 Javadoc에 포함되도록 지정한다.
  • @Inherited : 클래스에만 적용 가능하며, 어노테이션을 서브 클래스에서 자동으로 상속한다.
  • @Test : JUnit 테스트 메서드를 표시한다.
  • @BeforeEach / @AfterEach : 테스트 메서드 실행 전/후에 실행할 작업을 지정한다.
  • @ParameterizedTest : 여러 입력 값을 사용하여 동일한 테스트를 반복 실행한다.

어노테이션은 개발자가 필요에 따라 직접 정의할 수 있다. 사용자 정의 어노테이션은 특정 메타데이터를 추가하거나, AOP(Aspect-Oriented Programming) 같은 기술과 결합하여 다양한 기능을 구현할 수 있다.

  • Lombok : 보일러 플레이트 코드를 줄여주는 라이브러리. 어노테이션 기반으로 동작하며, 주로 컴파일 시점에 소스 코드를 변환하여 필요한 메서드를 자동으로 생성한다.
  • 보일러 플레이트 코드 : getter/setter 메서드, 생성자, toString 메서드 등과 같이 반복적으로 작성되는 코드

✔️ 주요 Lombok 어노테이션

  • @Getter / @Setter : 클래스의 모든 필드에 대한 getter와 setter 메서드를 자동으로 생성
  • @ToString : 객체의 toString() 메서드를 자동으로 생성
  • @EqualsAndHashCode : equals()hashCode() 메서드를 자동으로 생성
  • @NoArgsConstructor / @AllArgsConstructor / @RequiredArgsConstructor : 기본 생성자를 생성 / 모든 필드를 매개변수로 하는 생성자 생성 / 필수(final) 필드만을 매개변수로 하는 생성자 생성
  • @Data : @Getter, @Setter, @ToString, @EqualsAndHashCode,@RequiredArgsConstructor를 한꺼번에 적용하며, 주로 테스트 용도로 사용
  • @Builder : 빌더 패턴을 적용해 객체 생성
  • @Slf4j : 클래스에 로그를 남기기 위한 Logger 객체를 자동으로 생성

Spring / Spring Boot

  • Spring : Java Application Framework로, 엔터프라이즈 애플리케이션 개발에 주로 사용됨. Java언어의 가장 큰 특징인 객체 지향 언어의 특징을 살려낸 프레임워크
  • Spring Boot : Spring Framework를 기반으로 하여 간편하고 신속하게 애플리케이션을 개발할 수 있도록 도와주는 도구. 요즘은 거의 Spring Boot로 개발
    • 자동 구성(Auto-configuration) 기능 제공
    • 내장 WAS(Tomcat) 제공
    • spring-boot-starter-web를 빌드 관리 도구에 추가 시, 웹 애플리케이션에 필요한 모든 종속성과 설정 자동 구성
    • 호환 가능한 버전들을 찾아 자동으로 설정

Gradle

  • Gradle : 다양한 소프트웨어를 빌드할 수 있는 빌드 자동화 도구로, Groovy기반의 스크립트 언어 사용

✔️ Gradle의 특징

  • 유연성
    • 복잡한 빌드 시나리오를 처리할 수 있는 유연한 시스템 제공
  • 성능
    • Build Cache - 빌드 결과물, 라이브러리 의존성을 캐싱하여 재사용
    • 점진적 빌드 - 마지막 빌드 호출 이후 변경된 부분만 빌드
    • 데몬 프로세스 - 다음 빌드 작업을 위해 백그라운드에서 대기하는 프로세스
  • 멀티 프로젝트 빌드 지원
    • 공통으로 사용하는 클래스를 모듈로 만들어 독립적인 각 프로젝트에서 사용 가능
  • 설정 주입 방식
    • 필요한 설정을 직접 프로젝트에 주입하는 방식
    • 공통되는 정보를 묶어서 한번에 주입 가능
    • 프로젝트별로 설정을 다르게 주입 가능

자바 중급 2편 강의

해시 자료 구조를 사용할 때는 hashCode()equals() 메서드를 반드시 재정의해서 사용해야 한다.

hashCode()equals()는 Object 클래스의 기본 기능 중 하나이다.

  • hashCode() : 객체의 참조값을 기반으로 해시 코드를 반환한다.
  • equals() : == 동일성 비교를 한다. 따라서 객체의 참조값이 같아야 true 를 반환한다.

재정의하지 않으면, Object가 기본으로 제공하는 hashCode()equals()를 사용한다. 만약 id로 회원을 저장하고, 검증한다고 할때 id가 아닌 객체의 참조값을 기반으로 작동한다면 문제가 발생할 것이다.

또한, 각 해시 인덱스 안에 여러 개의 데이터가 아니라 하나의 데이터만 있다면 equals()를 하지 않아도 될까? 다음 set 출력값에서 [A], [AB] 등과 같이 해시 충돌 없이 하나의 데이터만 들어가 있다고 해서 equals()를 하지 않아도 되는 것은 아니다.

MyHashSet{buckets=[[], [AB], [], [], [], [A], [B, SET], [C], [D], []]}

해시 인덱스가 같아도 실제 저장된 데이터는 다를 수 있다! equals()를 재정의하지 않는다면 'B'와 'SET'의 해시 인덱스 값이 같고 [B] 만 저장했을 때, 'SET'을 검색했는데 'B'가나오는 오류가 발생할 수 있다.

📝오늘의 회고

오늘은 강의만 쭉 들어서 조금 지루했다..졸려서 여러 강의를 돌려가며 들었다. 한동안은 강의를 많이 들어야 할텐데 더 효율적으로 공부하는 법과 잠을 떨쳐내는 법을 생각해봐야겠다.😴

📌내일의 할 일

  • 기초 Spring 3주차 완료
  • 자바 중급 2편 섹션9 완료
  • 스프링 입문 섹션3 완료

0개의 댓글

관련 채용 정보