[인프런 워밍업 클럽 스터디 2기] : 웹 개발의 첫 발자국
안녕하세요!
제 첫 블로그에서는 자바 스프링(Spring Framework)을 처음 배우면서 느꼈던 점과
1주차에 배운 주요 개념들을 간단하게 정리해보려고 합니다.
새로운 것을 배운다는 생각에 약간 신나기도 합니다 ㅎ
이번 스프링 스터디를 통해 스프링을 배우며 얻은 지식을 꾸준히 정리해 블로그에 올리는 습관을 만들어보겠습니다.
간단한 웹 이론
웹 서비스는 크게 세 가지 요소로 구성됩니다: 클라이언트, 서버, 데이터베이스.
- 클라이언트: 요청을 보내는 주체로, 컴퓨터나 스마트폰의 브라우저 등 사용자가 접근하는 환경입니다.
- 서버: 클라이언트의 요청을 받아 작업을 수행하는 주체입니다.
- 데이터베이스(DB): 데이터의 집합으로, DBMS를 통해 데이터를 관리합니다.
웹 프레임워크와 라이브러리의 차이
웹 프레임워크: 웹 개발을 편리하게 도와주는 도구로, 이미 정해진 틀이 있습니다.
예를 들어 이케아의 가구처럼 정해진 틀과 구성이 있다고 생각할 수 있습니다.
라이브러리: 정해진 틀이 없는 도구로, 필요에 따라 사용할 수 있는 철물점의 도구와 비슷합니다.
스프링 프레임워크
스프링은 자바로 만들어진 웹 프레임워크로, 다양한 주요 개념이 있습니다.
MVC 패턴
MVC 패턴은 모델(Model), 뷰(View), 컨트롤러(Controller)로 이루어진 소프트웨어 아키텍처 디자인 패턴입니다.
- 모델: 데이터를 담는 역할을 합니다.
- 컨트롤러: 클라이언트의 요청을 받아 작업을 수행하고, 결과 데이터를 모델에 담습니다.
- 뷰: 사용자에게 보여지는 화면으로, 모델에서 데이터를 가져와 표시합니다.
레이어드 아키텍처
- 컨트롤러: 클라이언트의 요청을 받는 인터페이스로, 데이터를 검증하고 서비스의 메소드를 호출합니다.
- 서비스: 데이터 처리 로직을 수행하고, 저장소(DB)에 대한 작업을 요청합니다.
- 저장소: DB에 접근하여 데이터를 처리하며, 여러 서비스에서 공통적으로 사용할 수 있는 처리 방법을 제공합니다.
스프링 빈(Spring Bean)
스프링에서 관리하는 자바 객체를 빈(Bean)이라고 합니다. 스프링 빈은 스프링 컨테이너에서 생성되고 관리되며, 다음과 같은 특징이 있습니다.
- 관리되는 객체: 스프링 컨테이너에서 생성되고 관리됩니다.
- 재사용 가능: 애플리케이션 전체에서 재사용이 가능합니다.
- 의존성 주입: 스프링이 빈들 간의 관계를 자동으로 설정해줍니다.
스프링 부트에서의 의존성 주입
- 생성자 주입: 클래스 생성자를 사용하는 방식으로 가장 안전합니다.
- 수정자 주입: @Autowired 같은 어노테이션을 사용하여 필드를 주입하는 방식입니다.
- 필드 주입: 수정자 주입과 비슷하게 동작하지만, 의존성을 바꿀 때 문제가 생길 수 있어 신중히 사용해야 합니다.
HTTP와 REST API
HTTP 메소드
- GET: 리소스를 가져오는 요청
- POST: 리소스를 생성하는 요청
- PUT/PATCH: 리소스를 업데이트하는 요청
- DELETE: 리소스를 삭제하는 요청
- 오류 코드: 400번대는 클라이언트의 문제, 500번대는 서버의 문제를 나타냅니다.
REST API: HTTP 통신을 통해 애플리케이션 기능을 정의하는 규칙입니다.
URL을 자원으로 활용하고, HTTP 메소드를 이용해 행위를 표현합니다.
JPA (Java Persistence API)
JPA는 자바 객체를 DB의 테이블로 매핑해주는 기술입니다. 이를 통해 개발자는 직접 쿼리를 작성하지 않고도 객체지향적인 접근이 가능합니다.
- 장점: 생산성 증가, 객체지향적 접근, DBMS 의존성 감소
- 단점: 충분한 학습이 필요하고, 복잡한 쿼리를 처리하는 데 한계가 있을 수 있습니다.
느낀 점과 회고
스프링을 처음 배우며 새로운 개념들을 많이 접했습니다.
특히 빈과 의존성 주입 개념이 이해되면서도 어려우면서도 아리까리?합니다.
직접 프로젝트에 적용해보면서 개념을 익히는 것이 가장 좋겠다고 생각했습니다.
기본적인 웹 이론에 대해 잘 모르고 있던 부분이 많아 부끄럽기도 했지만, 이번 기회를 통해 기초부터 다시 다질 수 있어서 좋았습니다.
앞으로도 더 많은 기능을 학습하고 블로그에 정리하며 성장해 나가고자 합니다.
오늘 남은 시간을 활용해서 섹션 3의 진도를 나가고 최종장에는 개인프로젝트를 실제로 동작하게끔 만들고 싶습니다!!
댓글을 작성해보세요.