Spring, Spring Boot에 대한 차이점 및 각각 프레임워크를 사용했을 때 느낀 장단점
Spring과 Spring Boot에 대한 차이점
- 서버
- Spring은 Tomcat 등 서버를 별도로 설치하여 사용해야 하지만, Spring Boot는 내장되어있는 Tomcat을 이용하면 되기 때문에 따로 설치하거나 관리할 수고를 덜 수 있습니다.
- XML
- Spring은 서버를 실행하기 위해 XML와 같은 환경 설정에 대한 코드를 작성해야 하지만, Spring Boot는 환경 설정 파일을 작성하지 않아도 서버를 실행할 수 있습니다.
- dependency
- Spring은 프레임워크에 필요한 라이브러리 버전을 일일이 맞춰줘야 했기 때문에, 한 라이브러리의 버전을 변경한다면 라이브러리와 연관되어있는 라이브러리도 버전 변경을 해줘야 했습니다. 하지만 Spring Boot는 starter dependency를 불러오기만 하면, dependency와 연관된 라이브러리를 알아서 다운로드합니다.
Spring Framework의 장단점
- 개발자가 직접 필요한 라이브러리나 환경 등을 구성해야 하기 때문에 좀 더 세밀한 환경 설정을 할 수 있다는 장점이 있지만, 이것이 단점이 되기도 한다고 생각합니다. 개발자가 서버를 실행하기 위한 환경을 일일이 만들어줘야 하기 때문에 단순히 프로젝트를 실행하기 위한 시간이 오래 걸립니다.
Spring Boot의 장단점
- Spring Boot는 개발자가 서버를 실행하기 위한 설정 파일들을 작성할 필요 없이, 프로젝트를 열고 실행만 하면 서버를 손쉽게 띄울 수 있습니다. 하지만 기본적인 설정이 고정되어있기 때문에 Spring Framework보다 설정이 제한적이며, 프로젝트를 실행하기 위한 기본적인 설정이 이미 되어있기 때문에 개발자가 Spring에 대한 기초적인 개념을 제대로 알지 못한 채로 기계적으로 사용하는 경우도 일어날 수 있습니다.
https://velog.io/@courage331/Spring-%EA%B3%BC-Spring-Boot-%EC%B0%A8%EC%9D%B4
https://m.blog.naver.com/tomatogun/222079718594
JAVA란 언어의 장단점 및 학습하고 활용할 때 어려웠던 점이나 이해가 힘들었던 부분
Java의 장점
- 객체지향 언어
- 실생활에서 존재하는 물건이나 사람과 같은 객체가 있고, 각각의 객체에는 특성이 있듯이, Java도 이러한 특징을 기반으로 만든 객체지향 언어이기 때문에, 실생활에 밀접하게 프로그래밍을 할 수 있어 이해하기 쉽습니다.
- 객체지향 언어가 가져야 할 캡슐화, 상속, 다형성 기능을 지원합니다.
- 함수적 프로그래밍
- Java 8부터 람다식을 사용할 수 있으며, 람다식을 사용하게 되면 코드가 간결해집니다.
- 메모리 자동 관리
- Java는 객체를 생성할 때 JVM이 메모리를 자동으로 할당해주고, 메모리 사용이 끝나면 Garbage Collector가 사용하지 않는 객체를 메모리에서 제거해주기 때문에 개발자가 코드를 작성할 때 메모리 할당에 대한 수고로움을 덜 수 있으며 코딩에 더 집중할 수 있습니다.
- OS에 대한 영향
- JVM을 통해 실행되기 때문에, OS의 영향을 받지 않고 동일한 실행 결과를 얻어낼 수 있습니다.
Java의 단점
- 컴파일 속도
- Java는 다른 언어에 비해 컴파일 속도가 느립니다. JVM이 기계어로 번역하고 실행하는 과정까지 거치기 때문에 C언어나 C++의 컴파일 단계에서 만들어지는 기계어보다는 속도가 느립니다. 하지만 바이트코드를 기계어로 변환해주는 Just-In-Time 컴파일러의 기술 적용으로 인해 JVM의 기능이 향상되어 속도의 격차가 줄어들었습니다.
- 예외처리
- Java는 다른 언어와 달리 프로그램 실행 시 발생할 수 있는 예외들을 개발자가 직접 선언해서 처리해야 합니다. 그렇지 않으면 컴파일이 되지 않습니다.
절차 지향 언어를 배우다가 처음으로 객체지향 언어인 Java를 배울 때 가장 먼저 객체에 대해 이해하기 어려웠습니다. 클래스는 하나의 '틀'이라고 생각하면 된다는 것은 개념적으로 이해했지만, 실제로 객체를 어떠한 경우에 사용하는지 이해하기 어려웠습니다. 개념을 여러 번 찾아보고 친구들한테 직접 설명을 해보면서 결국 제가 이해한 객체는 하나의 '틀'이며, 객체를 생성하는 것을 만들어둔 틀에 있는 변수나 메소드와 같은 미리 정의한 특성들을 사용할 준비를 하는 것이라고 이해하였습니다. 똑같은 틀은 여러 개 존재할 수 있으며, 틀의 모양은 같지만 사용하려는 목적이 다르기 때문에 같은 객체를 여러 개 생성하여 사용하기도 합니다.
https://velog.io/@sparkbosing/Java%EC%9D%98-%ED%8A%B9%EC%A7%95
최근 관심을 가지고 있거나 배우고 있는 기술에 대한 설명 및 사유
항해99 부트캠프를 참여하면서 JPA라는 기술을 처음 접했습니다. Java 언어로 JPA의 규칙에 맞춰 프로그래밍을 하면, 프로젝트에서 사용하려는 데이터베이스에 맞는 SQL문으로 변환해주는 점에서 편리하다고 생각했습니다. Spring Framework와 MyBatis를 사용하면서 SQL문을 일일이 작성하는 경험을 해보았기 때문에 JPA의 장점을 더욱 체감할 수 있었습니다.
JPA는 데이터베이스 테이블과 Java 객체 사이의 맵핑을 처리해주는 ORM 기술의 표준입니다. JPA를 사용하면 여러 가지 장점을 느낄 수 있습니다.
첫 번째로, 유지보수성을 높일 수 있습니다. JPA를 사용하지 않았을 때 데이터베이스의 컬럼이 추가되어야 하는 경우, 컬럼이 추가되는 테이블과 연관된 모든 SQL문을 수정해야 합니다. JPA를 사용하게 된다면 테이블 컬럼을 정의해놓은 엔티티 클래스에서 필드만 추가하면 해결되는 문제이기 때문에 유지보수성이 높아집니다.
두 번째로, Java Collection에 데이터를 저장하고 삭제하는 것처럼 사용할 수 있습니다. JPA에서 제공하는 SQL로 변환해주는 메소드를 가지고 저장과 조회, 삭제를 할 수 있고, 엔티티 객체에 정의한 필드의 값을 변경만 하면 데이터베이스에 UPDATE 쿼리로 인식하여 실행됩니다.
마지막으로, 객체지향적인 코드 작성이 가능합니다. 객체지향적인 접근만 고려하면 되기 때문에 생산성이 증가합니다.
https://nazero.tistory.com/221