ORM 기술도 트렌드가 변화하고있다. 한참동안은 MyBatis가 대세를 이루더니 요즘은 JPA+JPQL 이 대세라고 한다.
MyBatis는 동적쿼리를 작성할 때 xml로 태그를 열고 닫아야 하는 귀찮은 부분이 분명 있었지만,
SQL을 직접작성하다보니 쿼리를 볼 때 매우 직관적이고, Oracle의 내장함수를 이용할 수 있는 부분이 커다란 장점이였다.
최근의 JPA+JPQL의 조합은 어떠한가. CRUD를 직접 작성하지 않아도 되고, DB가 바뀌어도 쿼리작성은 JPA의 몫이니 크게 신경쓰지 않아도 된다.
그러나 JPA자체를 학습하는데는 또 다른 이해를 요구하는 일이다.
그리고 사실 JPA는 ORM 기술의 명세일뿐 실제 사용하려면 Hibernater같은 프레임워크가 필요하니 또다른 학습이 늘어난다.
무슨 기술이든 장단점은 존재하고 어떤 기술을 채택하여 사용할지를 결정하는 것 또한 프로그램에 큰 영향을 미치니
무엇을 사용하는 것이 좋다라고 말하긴 보단 잘 선택해서 사용하기를..
| MyBatis | Hibernate |
|---|---|
| SQL을 생성하고 싶을 경우 | SQL 을 생성하고 싶지않을 경우 |
| 데이터베이스에 따라 달라질 수 있는 SQL을 사용 | 데이터베이스와 독립적인 HQL을 사용 |
| ResultSet을 POJO 객체에 매핑하므로 테이블 구조에 대해 신경 쓸 필요 없움 | Java POJO 객체를 데이터베이스 테이블에 매핑 |
https://practice.geeksforgeeks.org/problems/what-is-orm https://www.javatpoint.com/hibernate-tutorial https://www.geeksforgeeks.org/introduction-to-hibernate-framework/ https://www.tutorialspoint.com/hibernate/orm_overview.htm https://www.geeksforgeeks.org/difference-between-jdbc-and-hibernate-in-java/ https://www.javatpoint.com/jpa-vs-hibernate https://www.tutorialspoint.com/mybatis/mybatis_overview.htm
]]>요즘 spring boot가 스프링진영에서 제일 많이 쓰인다고 한다.
듣기만 했지 이것 또한 실무에서 만나본 적이 없다. (생각보다 한 번 개발된 서비스는 쉽게 변하지 않는다.)
최근에 개인 프로젝트를 진행하면서 사용하고 있는데 셋팅도 쉽고 여러모로 스프링 보다 편한부분이 많다.
앞으로는 더 많이 쓰일 것 같다고 하니 잘 익혀두고 알아두면 좋을 스프링 부트
| spring | spring boot | spring MVC |
|---|---|---|
| 엔터프라이즈 애플리케이션을 개발하는 오픈 소스 경량 프레임 워크 | REST API를 개발하는 데 널리 사용되는 기존의 스프링 프레임 워크 위에 빌드 | Model View이며 웹 애플리케이션 개발에 널리 사용되는 Controller 기반 웹 프레임 워크 |
| 의존성 주입 | 자동 구성 | 수동으로 빌드 |
| 명시 적으로 서버를 설정 | Tomcat 및 Jetty 등과 같은 임베디드 서버를 제공 | |
| 실행 시 배치 디스크립터가 필요 | 배치 디스크립터에 대한 요구 사항은 없음 | 배치 디스크립터가 필요 |
| 개발자는 많은 코드를 작성 | 코드 줄일 수 있음 , 개발 시간을 줄이고 생산성을 높임 | 개발에 더 많은 시간이 걸림 |
| 메모리 내 데이터베이스에 대한 지원을 제공하지 않음 | H2와 같은 메모리 내 데이터베이스에 대한 지원을 제공 | |
| Presentation Layer, Data Access Layer, Service Layer, Integration Layer | Model, View, Controller, Front Controller |
추가로 spring이전의 엔터프라이즈 프레임워크인 EJB에 대한 개념을 알아보겠다.
아직도 오래된 프로젝트, 공공기관에서 간혹가다 만날 수 있으며, 나도 잠깐 만난적이 있다.
https://www.geeksforgeeks.org/difference-between-spring-and-spring-boot/?ref=rp
https://www.geeksforgeeks.org/difference-between-spring-mvc-and-spring-boot/?ref=rp
https://www.geeksforgeeks.org/difference-between-ejb-and-spring/?ref=rp
빌드 자동화 도구로 maven 과 gradle 대표적인다.
오랫동안 maven이 대세였다면 최근 몇년간 gradle로 추세가 변하고 있다고 한다.
그러나 난 아직도 실무에서 써본적이 없다. 그래서 최근에 개인 프로젝트를 진행하면서 gradle을 써보았는데, 복잡한 maven과 달리 생각이상으로 편하다.
환경설정이 헤매지 않고 이리도 쉬운거였다니..?
build.gradle에 작성하는데, 이게 매우 쉽고 편하다보니 pom.xml을 작성할 생각하면 머리가 아플 지경이다.
실무환경도 어서 한번 gradle을 만나보고 싶다.
| Gradle | Maven |
|---|---|
| Groovy 기반 DSL (도메인 특정 언어)을 사용하는 빌드 자동화 시스템 | 주로 자바 프로젝트에 사용되는 소프트웨어 프로젝트 관리 시스템 |
| 프로젝트 구성을 선언하는데 XML 파일을 사용안함 | 프로젝트, 종속성, 빌드 순서 및 필수 플러그인을 선언하기 위해 XML 파일을 사용 |
| 작업을 수행하는 작업 종속성의 그래프를 기반 | 고정 및 선형 모델의 단계를 기반 |
| 주요 목표는 프로젝트에 기능을 추가하는 것 | 주요 목표는 프로젝트 단계와 관련 |
| 입력 및 출력 작업을 추적하여 작업을 피하고 변경된 작업 만 실행, 더 빠른 성능을 제공 | 빌드 캐시를 사용하지 않아 빌드 시간이 Gradle보다 느림 |
| 고도로 사용자 정의 > 광범위한 IDE 지원 사용자 지정 빌드를 제공 | 제한된 수의 매개 변수와 요구 사항이 있으므로 사용자 정의는 약간 복잡 |
| Java 컴파일을 방지 | 컴파일이 필수 |
https://maven.apache.org/what-is-maven.html
https://docs.gradle.org/current/userguide/what_is_gradle.html
https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:dev3.6:dep:build_tool:gradle
https://gradle.org/maven-vs-gradle/
https://ko.wikipedia.org/wiki/IBATIS
https://ko.wikipedia.org/wiki/%EB%A7%88%EC%9D%B4%EB%B0%94%ED%8B%B0%EC%8A%A4
https://www.slideshare.net/jafarnesargi/java-bean
https://ko.wikipedia.org/wiki/%EC%97%94%ED%84%B0%ED%94%84%EB%9D%BC%EC%9D%B4%EC%A6%88_%EC%9E%90%EB%B0%94%EB%B9%88%EC%A6%88
https://www.javatpoint.com/gradle-vs-maven
특정한 도메인을 적용하는데 특화된 컴퓨터 언어 ↩
@Controller 주석은 클래스를 컨트롤러로 표시하는 데 사용됨

@Controller 및 @RequestMapping을 사용@Controller : 클래스를 Controller로 표시함@Requestmapping : 지정된 URL 이름으로 클래스를 매핑하는데 사용https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/mvc.html
https://docs.spring.io/spring-framework/docs/3.0.0.RC3/spring-framework-reference/html/ch15s02.html
https://www.javaguides.net/2020/07/how-spring-mvc-works-internally.html
https://www.javatpoint.com/spring-mvc-tutorial

BeanFactory 구현
BeanFactory는 스프링 컨테이너에 액세스하기위한 루트 인터페이스ApplicationContext는 애플리케이션에 구성 정보를 제공하기위한 스프링 애플리케이션 내의 중앙 인터페이스BeanFactory 인터페이스를 구현 : ApplicationContext 는 BeanFactory 의 모든 기능과 그 이상을 포함https://docs.spring.io/spring-framework/docs/3.0.x/spring-framework-reference/html/overview.html
https://docs.spring.io/spring-framework/docs/4.3.13.RELEASE/spring-framework-reference/html/overview.html
https://www.geeksforgeeks.org/introduction-to-spring-framework/
https://www.javaguides.net/2019/01/beanfactory-vs-applicationcontext-in-spring.html
@Autowired를 생략해도 자동 주입@Autowired : 의존관계 자동 주입 (스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입)import org.springframework.beans.factory annotation.Autowired;A dependency B
A -----> B
@Aspect(@AspectJ 스타일)를 사용https://docs.spring.io/spring-framework/docs/3.0.x/spring-framework-reference/html/overview.html
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html


https://www.edureka.co/blog/java-web-application/
https://codeburst.io/understanding-java-servlet-architecture-b74f5ea64bf4
https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_%EC%84%9C%EB%B8%94%EB%A6%BF
https://ko.wikipedia.org/wiki/HTTP
https://restfulapi.net/
https://restcookbook.com/Miscellaneous/rest-and-http/
https://www.mulesoft.com/resources/api/what-is-rest-api-design
https://www.geeksforgeeks.org/rest-api-architectural-constraints/
https://www.json.org/json-ko.html
https://ko.wikipedia.org/wiki/SOLID_(%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%EC%84%A4%EA%B3%84) https://www.geeksforgeeks.org/solid-principle-in-programming-understand-with-real-life-examples/
]]>String[] input = br.readLine().split("\\-");
int[] sum = new int[input.length]; //숫자들의 합
for (int i = 0; i < input.length; i++) {
String[] operand = input[i].split("\\+"); //+ 기호 기준으로 피연산자들 구하기
for (int j = 0; j < operand.length; j++) {
sum[i] += Integer.parseInt(operand[j]) ;
}
}
int result = sum[0];
for (int i = 1; i < sum.length; i++) {
result = result - sum[i];
}