TIL-Spring 기초 2주차 (25.03.17)
2주차(7강/7강)
- 준비
- Postman ... 개발자들이 HTTP 요청을 만들고, 서버로부터의 응답을 확인하며, API의 기능을 테스트하고 디버깅할 수 있게 해줌. RESTful API뿐만 아니라 GraphQL, SOAP 등 다양한 API 유형을 테스트할 수 있고 Postman 공유를 통한 팀 간의 협업도 가능
- Git Clone ... 원격 저장소(repository)의 전체 내용을 로컬 컴퓨터로 복사하는 Git 명령어. 프로젝트의 코드를 내려받아 로컬 환경에서 작업할 수 있게 됨.
- 프레임워크, 라이브러리
- 프레임워크 ... 소프트웨어 개발을 간편하게 만들기 위한 소프트웨어 개발 환경. 틀을 제공함.
- 장점 1) 프로젝트에 일관된 구조를 제공. 코드의 일관성과 가독성을 높여줘 팀 협업이 편해짐. 2) 기본적으로 필요한 기능과 도구를 제공해 개발자들은 핵심 비즈니스 로직에 집중. 3) 보안 관련 기능을 기본적으로 제공. 보안 취약점을 방지하는 데 도움. 4) 통합된 테스트 환경과 도구를 제공하여 테스트를 쉽게 작성하고 실행. 5) 인기 있는 프레임워크는 방대한 커뮤니티 지원을 받을 수 있고, 다양한 문서를 활용할 수 있음.
- 단점 1) 굉장히 복잡한 구조를 가져, 처음 익히는 데 시간이 많이 소요 2) 새로운 버전이 나오면 기존 코드와 호환이 되지 않을 수 있음 3) 정해진 규칙과 구조를 따르게 강제해 자유롭게 변경이 어려움.
- 라이브러리 ... Application 개발에 필요한 클래스, 함수 등을 모아 놓은 코드의 모음. 필요에 따라 원하는 기능을 구현하기 위해 가져다 쓸 수 있는 일종의 도구 역할을 수행.
- 장점 1) 개발 생산성이 높아짐 2) 검증된 라이브러리는 테스트와 커뮤니티 지원을 통해 안정성과 품질이 보장
- 단점 1) 라이브러리가 업데이트/지원 중단될 경우 문제 발생 가능 2) 버전 호환성 문제로 다른 라이브러리나 기존 코드와 충돌이 발생 가능 ... 생각보다 빈번하게 발생한다고. 3) 불필요한 기능을 포함한 라이브러리를 사용하면 비효율적 4) 라이브러리의 내부 구현을 직접 수정하기 어려워, 특정 요구 사항에 맞게 조정하기 힘들 수 있음
- 구조 정리

- 프레임워크 ... Application 개발 시 전체적인 구조(frame)을 잡기 위해 사용하는 것 / 프레임워크 내에서 사용하는 라이브러리들이 존재
- 라이브러리 ... 개발 과정에 필요한 기능을 구현하기 위해 사용하는 것.
- Annotation
- Annotation ... 코드에 메타데이터를 추가할 수 있는 기능 제공. 코드에 특별한 의미를 부여하거나, 컴파일러와 런타임에 특정 동작을 트리거하기 위해 사용. (주석이 사람에게 정보를 제공한다면, 어노테이션은 특정 코드를 사용하는 프로그램에게 정보를 전달) / @ 기호로 시작. 클래스, 메서드, 변수, 매개변수, 패키지 등에 추가할 수 있음
- 내장 Annotaion ... 1) @Override: 메서드가 상위 클래스나 인터페이스의 메서드를 오버라이드 하고 있음을 나타냄 2) @Deprecated: 해당 요소가 더 이상 사용되지 않음을 나타냄(이 Annotation이 붙은 코드를 사용하면 컴파일 경고가 발생) 3) @SuppressWarnings: 컴파일러 경고를 억제 (사용되지 않는 변수에 대한 경고를 무시)
- 사용자 정의 Annotation ... 개발자가 필요에 따라 정의 가능. 특정 메타데이터를 추가하거나, AOP(Aspect-Oriented Programming) 같은 기술과 결합해 다양한 기능 구현 가능 (AOP는 심화 주차에 배운다고)
- Lombok ... 자동으로 보일러 플레이트 코드를 생성. 코드의 가독성, 유지보수성을 높여줌. 어노테이션 기반 동작. 주로 컴파일 시점에 소스 코드를 변환해 필요한 메서드를 자동으로 생성. (보일러 플레이트 코드: getter/setter 메서드, 생성자, toString 메서드 등과 같이 반복적으로 작성되는 코드)
- 주요 Lombok Annotation ... 1) @Getter, @Setter. Class 정의하는 line 위에 @Getter @Setter를 줄바꿈해서 각각 입력해주면 됨 2) @ToString ... 객체의 toString()메서드를 자동으로 생성. 3) @EqualsAndHashCode ... equals()와 hashCode() 메서드를 자동으로 생성 이외 @NoArgsConstructor, @ALLArgsConstructor, @RequiredArgsConstructor, @Data, @Builder, @Slf4j와 같은 Lombok도 있음. 필요할 때 쓸 수 있으면 좋을 듯.

- Spring Framework와 Spring Boot
- Spring Framework ... 아! Spring은 프레임워크구나! 개발을 편하게 도와주는 틀. 근데 학습이 어렵다고. 많은 라이브러리들이 있고, 커뮤니티 지원을 받을 수 있겠다고 예상해볼 수 있겠다. / Enterprise Application 개발에 주로 사용됨 / Application의 다양한 구성 요소를 유연하게 연결하고 관리할 수 있도록 해주고 / 오픈소스이고 / 모듈화되어 있어 필요에 따라 특정 기능만 선택적으로 사용할 수 있고 / Java언어의 가장 큰 특징인 객체 지향 언어의 특징(캡슐화, 상속, 추상화, 다형성)을 살려낸 프레임워크
이런 느낌쓰
- Spring Boot ... Spring Framework를 기반으로 간편하고 신속하게 Application을 개발할 수 있도록 도와주는 도구. 1) 자동 구성(Auto-configuration) 기능을 제공해, 개발자가 복잡한 설정을 직접 처리할 필요 없이 기본 설정으로도 비즈니스 로직에 집중 가능 2) 내장 WAS(Tomcat)를 제공해 Application을 별도의 서버 설정 없이 바로 실행 가능 3) spring-boot-starter-web를 빌드 관리 도구에 추가하면 웹 application에 필요한 모든 종속성과 설정이 자동으로 구성 4) 라이브러리들의 버전을 명시하지 않아도 호환 가능한 버전들을 찾아 자동으로 설정 (버전 문제를 100% 해결해주는 것은 아님)
이런 느낌쓰. 냄비만 있다고 라면을 잘 끓일 수 있는 건 아니지. 암. 집게도 국자도 장갑도 라면을 끓이는(Application 비즈니스 로직) 작업을 수월하게 할 수 있도록 도와주는 역할을 해준다! 이게 Spring Boot다!
- 빌드 관리 도구
- Gradle ... Java와 유사한 문법 구조를 가진 Groovy 기반의 스크립트 언어를 사용. 다양한 소프트웨어를 빌드(Build)할 수 있는 유연한 빌드 자동화 도구.
- 빌드(Build) ... 소스 코드를 컴퓨터가 실행 가능한 파일로 변환해주는 작업
- 특징 1) 복잡한 빌드 시나리오를 처리할 수 있는 유연한 시스템 제공 / 다양한 빌드 작업 정의와 커스터마이징 가능
- 특징 2) Build Cache ... 빌드 결과물을 캐싱하여 재사용하고 라이브러리 의존성을 캐싱하여 재사용. 점진적 빌드... 마지막 빌드 호출 이후 변경된 부분만 빌드하고 변경되지 않은 부분은 캐시 결과를 검색해 재사용. 데몬 프로세스 ... 다음 빌드 작업을 위해 백그라운드에서 대기하는 프로세스로 초기 빌드 이후부터는 빌드 실행 시 초기화 작업을 거치지 않음
- 특징 3) 멀티 프로젝트 빌드 지원 ... 공통으로 사용하는 클래스를 모듈로 만들어 독립적인 각 프로젝트에서 사용할 수 있도록 함.
- 특징 4) 설정 주입 방식 ... 필요한 설정을 직접 프로젝트에 주입하는 방식. 공통되는 정보는 묶어서 한번에 주입 가능, 프로젝트별 설정을 다르게 주입 가능.
- build.gradle ... Groovy 기반 언어의 빌드 스크립트. 스크립트를 작성하면 소스 코드를 빌드하고, 라이브러리들의 의존성을 관리할 수 있음. 1) plugins(특정 작업을 위해 모아놓은 task들의 모음집) 2) 의존성 관리 (프로젝트에서 사용하는 라이브러리나 패키지를 관리) / 의존성 설정 (라이브러리를 추가하는 시점을 설정 / Implementation(컴파일, 런타임 모두) / compileOnly(컴파일 시) / RuntimeOnly(런타임 시) / testImplementation(테스트 시) / 3) repositories ... 라이브러리가 저장된 위치를 정의하고, 저장소에서 라이브러리를 가져옴.
- Java 웹 기술의 역사 ... Servlet, JSP > MVC 패턴 > MVC 프레임워크 도입 > Annotation 기반 Spring MVC / 비동기에 최적화된 Spring WebFlux로 발전 / 단점을 극복해온 과정임. 최신 기술 동향은 Web Servlet (Spring MVC) ... 안정적이고 동기식 프로그래밍 모델을 기반으로 한 웹 Application 개발에 널리 사용됨.