백엔드 스터디

Rm·2021년 1월 21일
0

Spring vs SpringBoot

Spring

  • Spring란?
    스프링 프레임워크는 웹 어플리케이션을 개발하는데 결합도를 낮추는 방향의 개발방법을 제공한다고 말할 수 있습니다. Web 어플리케이션 개발은 스프링의 이러한 컨셉( Dispatcher Servlet, ModelAndView, and Vier Resolver )을 제공합니다.
  • SOLID 원칙
  1. 단일 책임 원칙 (Single Responsiblity Principle)
    모든 클래스는 각각 하나의 책임만 가져야 한다. 클래스는 그 책임을 완전히 캡슐화해야 함을 말한다.
    사칙연산 함수를 가지고 있는 계산 클래스가 있다고 치자. 이 상태의 계산 클래스는 오직 사칙연산 기능만을 책임진다. 이 클래스를 수정한다고 한다면 그 이유는 사직연산 함수와 관련된 문제일 뿐이다.
  2. 개방-폐쇄 원칙 (Open Closed Principle)
    확장에는 열려있고 수정에는 닫혀있는. 기존의 코드를 변경하지 않으면서( Closed), 기능을 추가할 수 있도록(Open) 설계가 되어야 한다는 원칙을 말한다.
    캐릭터를 하나 생성한다고 할때, 각각의 캐릭터가 움직임이 다를 경우 움직임의 패턴 구현을 하위 클래스에 맡긴다면 캐릭터 클래스의 수정은 필요가없고(Closed) 움직임의 패턴만 재정의 하면 된다.(Open)
  3. 리스코프 치환 원칙 (Liskov Substitution Principle)
    자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있다는 원칙이다. 즉 부모 클래스가 들어갈 자리에 자식 클래스를 넣어도 계획대로 잘 작동해야 한다.
    자식클래스는 부모 클래스의 책임을 무시하거나 재정의하지 않고 확장만 수행하도록 해야 LSP를 만족한다.
  4. 인터페이스 분리 원칙 (Interface Segregation Principle)
    한 클래스는 자신이 사용하지않는 인터페이스는 구현하지 말아야 한다. 하나의 일반적인 인터페이스보다 여러개의 구체적인 인터페이스가 낫다.
  5. 의존 역전 원칙 (Dependency Inversion Principle)
    의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것보다는 변화하기 어려운 것, 거의 변화가 없는 것에 의존하라는 것이다. 한마디로 구체적인 클래스보다 인터페이스나 추상 클래스와 관계를 맺으라는 것이다.
  • Ex) Transaction Manager, Hibernate Datasource, Entity Manager, Session Factory 등 설정 시 많은 시간이 걸림

예시) Hibernate Datasource 사용 시

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
        <value>/WEB-INF/views/</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
</bean>

<mvc:resources mapping="/webjars/**" location="/webjars/"/>

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/my-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close">
    <property name="driverClass" value="${db.driver}" />
    <property name="jdbcUrl" value="${db.url}" />
    <property name="user" value="${db.username}" />
    <property name="password" value="${db.password}" />
</bean>

<jdbc:initialize-database data-source="dataSource">
    <jdbc:script location="classpath:config/schema.sql" />
    <jdbc:script location="classpath:config/data.sql" />
</jdbc:initialize-database>

<bean
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
    id="entityManagerFactory">
    <property name="persistenceUnitName" value="hsql_pu" />
    <property name="dataSource" ref="dataSource" />
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
    <property name="dataSource" ref="dataSource" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager"/>

SpringBoot

  • 의존성 관리
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-webmvc</artifactId>
   <version>4.2.2.RELEASE</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.5.3</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.0.2.Final</version>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
  • 배포 시 따로 톰캣을 설치 할 필요 없음 (내장)

Maven vs Gradle


아파치 메이븐은 자바용 프로젝트 관리 도구이다.

아파치 앤트의 대안으로 만들어졌다. 아파치 라이선스로 배포되는 오픈 소스 소프트웨어이다.

라고 일단 구글링 하면 나오는 것이죠?

한마디로 저희가 프로젝트를 진행하면서 사용할 수많은 라이브러리들을 관리해주는 도구입니다.

특징적인 점은 그 라이브러리들과 연관된 라이브러리들까지 거미줄처럼 다 연동이 되어서 관리가 된다는 점

즉 메이븐은 네트워크를 통해서 연관된 라이브러리 까지 같이 업데이트를 해주기 때문에

과거에 일일히 수동으로 다 업데이트 혹은 연결 시켜주던 것을 자동으로 해준다는 편리함이 있습니다

출처: https://okky.tistory.com/179 [아무것도 아니다]

Gradle은 Groovy를 이용한 빌드 자동화 시스템이다.

Groovy와 유사한 도메인 언어를 채용하였으며, 현재 안드로이드 앱을 만드는데 필요한 안드로이드 스튜디오의 공식 빌드 시스템이기도 하다.

Java, C/C++, Python 등과 같은 여러 가지 언어를 지원한다.

라고 구글링하면 나오는 툴인데요.

자세한 설명은 좀 설명을 잘해놓으신 블로거 분이 계셔서 출처 남기고 공유하겠습니다

출처: https://okky.tistory.com/179 [아무것도 아니다]

그래서 결론적으로 Maven vs Gradle 이렇게 Maven과 Gradle 비교를 해보자면

현재로서는 분명히 maven의 점유율이 더 높고 더 익숙하신 분들이 많은 상황이지만

gradle 의 추격이 더 빨라지고 있어서 조만간 상황이 역전될 가능성이 더 높다고 하는 사람들이 많아지고 있으며

그래들이 조금더 빠른 성능과 간결한 설정의 매력을 보유하고 있어 인기도가 상승중이라고 합니다.

소규모의 프로젝트에서는 큰 차이가 없어서 익숙한 maven 을 사용해도 무방할지라도

규모가 커질수록 gradle 을 사용하는 것이 체감상 더욱 유리하다고 합니다.

출처: https://okky.tistory.com/179 [아무것도 아니다]

SpringBoot 개발 환경


SpringBoot 프로젝트 설계



Swagger API

AWS 배포

  • mvn package
  • java -jar "파일이름.jar(war)"
profile
우당탕 개발자 성장기

0개의 댓글