이 글은 영리적 목적이 없으며, 개인적 공부를 위해 모르는 내용을 정리하였습니다.
틀린 내용이 있을 경우, 댓글로 알려주시면 정말 감사드리겠습니다 👍
안녕하세요, 아모르입니다!
오늘부터 Spring Boot 와 JPA 를 공부하고 있습니다.
배경 : Django 로 REST API 서버 구축, 반응형 웹 앱 만들기 경험 있음
제가 기존에 해본 것들은 총 3단계로 분류할 수 있습니다 😊
(저는 비전공자 입니다)
[1단계] 웹 앱 만들기
프론트엔드 | Django Template |
백엔드(서버) | Django + Django ORM |
백엔드(데이터베이스) | SQLite |
[2단계] 비동기 통신을 이용한 웹 앱 만들기
프론트엔드 | Vue.js + axios |
백엔드(서버) | Django + Django ORM |
백엔드(데이터베이스) | SQLite |
[3단계] 비동기 통신을 이용한 REST API 서버 구축 및 반응형 웹 앱 만들기
프론트엔드 | Vue.js + axios |
백엔드(서버) | Django + Django REST Framework + Django ORM |
백엔드(데이터베이스) | SQLite |
그런데 ...
장고만 써서 개발하다가, 취업을 위해 공고를 살펴보던 중..
많은 회사에서 'JAVA 언어를 사용한 개발 경험' 을 필수적으로 요구, 혹은 우대한다는 것을 알게 되었습니다.
그래서 가장 유명하다는 인프런의 김영한님의 강의 시리즈를 듣고 JAVA 언어를 사용한 개발을 배워보기로 했습니다.
그런데...수많은 용어들이 너무나 헷갈렸습니다 (ㅠㅠ)
그래서 강의를 들으며 차근히 공부를 해보기로 했습니다.
어떤 강의를 어떤 순서대로 들을까?
인프런에서 '김영한' 님의 강의를 검색하면, 총 16개의 강좌가 나옵니다. (2023-12-20 기준)
JAVA 강좌 (2개)
1. 김영한의 자바 입문 - 코드로 시작하는 자바 첫 걸음
2. 김영한의 실전 자바 - 기본편
Spring 강좌 (7개)
1. 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
2. 스프링 핵심 원리 - 기본편
3. 스프링 핵심 원리 - 고급편
4. 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
5. 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
6. 스프링 DB 1편 - 데이터 접근 핵심 원리
7. 스프링 DB 2편 - 데이터 접근 활용 기술
Spring Boot 강좌 (7개)
1. 모든 개발자를 위한 HTTP 웹 기본 지식
2. 스프링 부트 - 핵심원리와 활용
3. 실전! 스프링 부트와 JPA 활용 1 - 웹 어플리케이션 개발
4. 실전! 스프링 부트와 JPA 활용 2 - API 개발과 성능 최적화
5. 자바 ORM 표준 JPA 프로그래밍 - 기본편
6. 실전! 스프링 데이터 JPA
7. 실전 Querydsl
시간이 많지 않아서, 위에서 초록색으로 표시한 강의를 다음 순서대로 듣기로 했습니다.
1. 모든 개발자를 위한 HTTP 웹 기본 지식
2. 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (앞 부분)
3. 실전! 스프링 부트와 JPA 활용1 - 웹 어플리케이션 개발
4. 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (뒷 부분)
그 이유는,
CS 지식이 부족해서 네트워크 관련 기본 지식을 쌓기 위해 1 을 가장 우선으로 하였습니다.
스프링이 무엇인지 전혀 몰랐기 때문에 2 를 듣기로 했습니다.
프로젝트, IDE 설정을 대강 마친 후에는 3 을 먼저 듣기로 했습니다.
Django 와 Spring Boot 의 비교
우선 기존에 해본 것들을 통해 웹 앱 개발의 큰 흐름은 이해하였다고 판단하였습니다.
따라서 Spring Boot 와 JPA 를 학습하면서 Django 와 비교해보고자 합니다.
현재 제가 공부하는 내용은 기존에 1단계에서 학습했던 내용 (웹 앱 만들기) 을 스프링부트로 구현해보는 것입니다.
최종적으로는 3단계 에서 구현했던 REST API 를 스프링부트로 변경하여 적용해보고자 합니다.
프론트엔드 | Django Template | Spring Boot + Lombok + Thymeleaf |
백엔드(서버) | Django | Spring Boot + Spring Web |
백엔드(객체 - 관계 매핑 기술) | Django ORM | Spring Data JPA |
백엔드(데이터베이스) | SQLite | H2 Database |
변경이 필요한 이유, 장점, 각 기술의 특징
- 변경이 필요한 이유
- Spring Boot 를 사용해 고객들에게 서비스를 이미 제공하는 기업들이 많으므로 안정성이 보장되어 있다.
- 한국에는 JAVA 에 익숙한 숙련된 개발자들이 많기 때문에 안정적인 개발자 수급이 가능하다.
- 채용 상에서 우대/필수로 요구하는 기업이 많으므로 취직에 도움이 된다.
- JAVA 생태계가 풍부하므로 진입장벽이 낮다.
- 장점
- Spring Boot
- 일반 Spring 에 비해 설정이 간편하고 빠른 개발이 가능하다.
- 마이크로서비스 아키텍처에 적합한 프레임워크이다.
- 내장 서버를 제공하여 별도의 서버 구성 없이도 빠르게 배포 및 실행이 가능하다.
- 다양한 플러그인과 스타터 패키지를 지원하여 개발 생산성을 향상시킨다.
- ThymeLeaf
- 서버 사이드 렌더링을 지원하여 서버에서 동적으로 HTML 을 생성한다.
- 자연스러운 문법을 가지고 있어서 HTML 코드를 작성하기 쉽고 가독성이 좋다.
- 스프링 생태계와의 통합이 잘 되어 있어 데이터 바인딩이 간편하다.
- Lombok
- 반복적이고 지루한 코드를 줄여주는 어노테이션 프로세서이다.
- @Getter, @Setter 를 비롯한 다양한 어노테이션을 활용하여 코드 양을 최소화하고 가독성을 향상시킨다.
- IDE 플러그인을 통해 Lombok 이 생성한 코드를 시각적으로 확인할 수 있다.
- Spring Data JPA
- 객체 - 관계 매핑을 통해 객체지향적인 개발을 쉽게 할 수 있다.
- Repository 인터페이스를 통해 간단한 쿼리 메소드를 작성하여 데이터베이스에 접근이 가능하다.
- 자동으로 쿼리를 생성해주기 때문에 개발자는 쿼리 작성에 대한 부담을 줄일 수 있다.
- H2 Database
- 메모리 기반의 경량 데이터베이스로, 간단한 테스트나 프로토타이핑에 적합하다.
- 초기 설정이 간단하며 별도의 설치 없이 사용이 가능하다.
- 데이터베이스 파일이나 서버 없이도 사용이 가능하므로 테스트 용도로 편리하다.
- Spring Boot
- 용어 설명
- 마이크로서비스 아키텍처
- 정의 : 대규모 애플리케이션을 더 작은 구성요소로 세분화함. 각각의 구성요소는 담당하는 기능이 다름.
- 장점 : 애플리케이션 개발 속도를 높일 수 있음.
- 사용 예시 : 컨테이너 (Ex. 구글의 쿠버네티스) , Spring Boot
- 참고자료 : 구글 클라우드 마이크로서비스 아키텍처란?
- 플러그인
- 정의 : (= 추가 기능) 추가로 설치하여 특정한 기능을 제공함.
- 서버 사이드 렌더링 (SSR)
- 정의 : 서버 측에서 HTML 파일을 렌더링하여 브라우저에 제공함
- 장점 :
- 사용자들이 기다리는 시간이 단축됨
- JavaScript 가 비동기적 요청을 보내 실행될 때까지 기다릴 필요가 없음
- 서버 측에서 DB 에 접근하는 것이 클라이언트 - 서버 - DB 요청보다 빠름
- 동일한 언어로 FE/BE 유지보수가 가능함
- 더 나은 SEO
- Google, Bing 의 검색 엔진 크롤러는 앱이 Ajax 를 통해 컨텐츠를 가져오기를 기다려주지 않음.
- SEO 가 중요한 페이지에서 비동기적으로 컨텐츠를 가져오는 경우, SSR 이 필요할 수 있음.
- 사용자들이 기다리는 시간이 단축됨
- 참고자료 : Vue SSR란?
- 마이크로서비스 아키텍처
↓ (추후 보강 예정)
데이터 바인딩
어노테이션 프로세서
객체 - 관계 매핑
객체지향
메모리 기반의 경량 데이터베이스
테스트
프로토타이핑
