728x90

자바(JAVA)란 무엇인가?

자바는 선마이크로시스템즈라는 회사에서 최초 발표한 객체지향 프로그래밍 언어입니다.

티오베 프로그래밍 순위에 따르면 아직도 자바는 2위에 랭크하며 건재함을 가지고 있는 언어입니다.

자바 순위

자바 공식사이트에서는 아래 사진과 같이 자바 기술과 필요한 이유에 대해서 정리합니다.

JAVA 기술

자바의 특징은 무엇인가?

1. 객체지향언어

자바는 객체지향 언어로 하나하나의 재료들을 가지고 객체를 만들고 그 객체들을 모으고 연결하여 객체지향 프로그래밍(OOP) 개념으로 프로그램을 완성할 수 있게 합니다.

객체지향의 특징으로는 캡슐화, 상속 성 다형성을 지원합니다.

 

 

2. 이식성

어떠한 환경에서도 이식성이 뛰어나 프로그램 실행이 가능합니다.

예를 들어 자바 프로그램을 Window OS에서 실행하던 프로그램을 리눅스에서 실행해도 정상적으로 작동합니다.

즉 자바 실행환경(JRE)만 설치가 되어 있으면 어떠한 운영체제에서도 실행 가능합니다.

 

3. 메모리 자동관리(Garbage Collector)

다른 언어는 메모리를 사용하게 되면 해제를 시켜주는 명령어를 실행시켜주어야 메모리에 과부하가 걸리지 않는다.

하지만 자바는 메모리에 직접 접근할 수 없으므로 해제 명령어를 사용할 수 없습니다.

그렇다면 자바는 어떻게 메모리를 관리할 것 인지에 대해 의문이 생기실겁니다.

그렇게 나타난 것이 Garbage Collector 줄여서 GC라고 부릅니다. GC를 실행하여 메모리 사용을 마친 것들을 찾아 자바에서 메모리를 해제를 시켜줍니다.

그러므로 따로 메모리에 대해서 신경 쓰지 않고 관리를 안 해도 되어서 다른 언어보다 편리하게 사용하실 수 있습니다.

 

4. 함수적 스타일 코딩 지원

JAVA 8 함수적 프로그래밍이 가능한 람다식을 지원합니다.

 

람다식 장점

  • 코드를 간결하게 작성
  • 개발자의 의도가 명확해져 가독성이 향상
  • 함수를 따로 구현 없이 처리 가능

5. 멀티스레드 빠르게 구현

하나의 프로그램이 동시에 여러 작업을 처리해야 하는 경우, 병렬 처리가 가능한 멀티스레드를 구현해야 합니다.

자바는 멀티쓰레드 구현에 필요한 API를 제공해주어 멀티쓰레드를 빠르게 구현이 가능합니다.

 

6. 동적 로딩 지원

 

프로그램을 실행할 때 필요할 때마다 동적으로 메모리를 생성하고 필요 없는 메모리를 자동으로 해제시킵니다.

그러므로 큰 프로그램도 작은 메모리에서 실행이 가능합니다.

 

 

자바란 무엇이며 자바의 특징은 무엇인지에 대해서 정리를 해보았습니다.

코딩을 하면서 중요한 것은 제일 기초가 튼튼해야 한다고 생각합니다.

자바를 시작하시는 분들 또는 아직 자바를 정확히 모르셨던 분들은 자바에 대해서 정확하게 알고 가시길 바랍니다.

반응형
728x90

JPA를 접하게 되면서

왜 JPA를 공부해야되는지 ??
왜 기업들은 JPA을 쓰고 있는지 ??

의문점을 가졌는데 그러한 의문점에 대해서 설명하려고 글을 작성했습니다.

 

1) JPA가 나오게 된 배경

 

현재 나와있는 다양한 에플리케이션을 개발하면서 개발자들은 CRUD용 SQL을 반복해서 작성해야 했고 이런 과정은 비 생산적이었습니다. 그래서  CRUD를 자동으로 생성해주는 도구를 만들어서 사용하기도 했지만 애플리케이션의 요구사항이 추가되는 것 까지는 해결해주지 못했습니다.

객체 모델링을 SQL로 풀어내는 데 너무 많은 코드와 노력이 필요했고, 객체 모델은 점점 데이터 중심의 모델로 변해갔습니다. 많은 개발자들이 이러한 부분을 많이 고민하게 되면서 ORM 프레임워크를 알게 되었고, JPA는 자바 진영의 ORM 기술 표준입니다.

 

 

2) 왜 JPA를 사용해야 하는가?

 

  ● 생산성

    - 위에서 설명했듯이 귀찮고, 비생산적인 CRUD 반복적인 SQL 쿼리를 JPA가 대신 처리해주므로 개발자가 직접 SQL을 작성하지 않게 되었습니다. 이에 따라 생산성이 올라가고 데이터중심의 설계에서 객체 중심의 설계로 변화시킬 수가 있게 되었습니다.

   

      기존

             각 테이블마다 SELECT, INSERT, UPDATE, DELETE 쿼리를 작성해놓고 변경 될때마다 수정해야 됨.

             그리고 이를 갖고오기 위해 mybatis 등으로 갖고오고 binding 처리를 해야됨.

        

      JPA

       em.persist(); 저장
        , em.find(); 조회 등

     

     Entity만 제대로 설계되어 있다면

     이러한 단순한 명령어 하나로 저장, 조회 등 CRUD의 전반적인 작업을 가능하게 됨.

 

  ● 유지보수

   - SQL에 의존적인 개발에서는 엔티티에 필드 하나만 추가해도 CRUD 쿼리에 결과를 매핑하기 위해 전체 SQL을 수정해야만 했습니다. 하지만 JPA에서는 자바 엔티티 클래스에 필드만 추가해도 자동으로 생성되고 매핑이 되므로 유지보수하기에 편리합니다.

 

* 예시로 USER테이블에 직무코드 컬럼 추가

 

      ▶ 기존

         INSERT, UPDATE, SELECT SQL를 쿼리를 수정해야되고, USER테이블에 관련된 모든 테이블에 직무코드 컬럼을 추           가해야됨

 

       JPA

         해당 USER 테이블에 ENTITY를 추가하면 끝!

 

  ● 관계형데이터베이스 객체 사이의 불일치 문제 해결

  - 애플리케이션은 발전하게 되면서 내부의 복잡성은 증가하고 있습니다. 복잡성을 제어하지 못하면 유지보수는 어려워지기 마련입니다. 하지만 객체구조를 테이블 구조에 저장하는데에는 한계가 있습니다. 애플리케이션 자바는 객체지향 언어로 개발하고 데이터는 관계형 데이터베이스로 저장해야 한다면 개발자가 중간에서 해결해야 되는 상황이 벌어집니다. 이러한 과정에서 많은 개발자들의 시간낭비와 비용낭비가 발생하게 됩니다.

 

         ▶ 상속

           - 객체는 상속이라는 기능이 있지만 테이블은 상속이 없다.

               그래서 만약 Human 와 Student 을 저장하려면 INSERT문을 두번 써야되는 문제가 있습니다.

                 EX ) INSERT Human

                       INSERT Student

 

              하지만 JPA는 이러한 점을 Persist메소드로 해결했습니다.

                EX ) Entity로 Student에서 Human을 상속하고

                       jpa.persist(MEMBER) 만 넣으면 간단하게 해결됩니다.

              

              이러한 예시 처럼 간단하게 JPA는 상속에 있어서 객체지향으로 변경하여 해결했습니다.

 

        ▶ 연관관계

            - 객체는 참조를 통해 관계를 맺는다.

               그러므로 테이블은 외래 키를 사용해서 다른 테이블과 연관관계를 맺는다.

               마찬가지로 두 Entity를 각각 연결시켜 jpa.find();로 해결합니다.

 

3) JPA 단점

    ● 통계쿼리 등 복잡한 쿼리는 구현하기 어려움

      - 단순한 명령어 하나로 CRUD 구현이 가능하기 때문에 복잡한 관계의 쿼리를

        구현하기는 어려움이 있습니다.

        대처방법으로는 mybatis로 따로 쿼리를 작성하여 구현하면 됩니다.

 

● 학습하기가 어려움

       - 기존의 자바 개발자들이 JPA를 공부하기 위해서는 ORM 개념으로 개념 자체를 바꿔야 하기 때문에

         생각보다 학습하기 어려운 부분이 있습니다.

 

    ● 최적화가 필요

        - 자동으로 생성되는 쿼리가 많고, 쓰이지도 않는 불필요한 것들이 생성되어지기 때문에

          성능향상을 위해서는 최적화가 필요합니다.

4) 정리

전세계 기업들이 추구하는 것은 이윤입니다. 이윤을 위해서는 비용절감, 상품의 퀄리티를 높이는 방법 등이 있습니다. 이러한 기업 이윤추구와 발전과정에서 저는 동일한 시간에 양질의 퀄리티와 비용절감 효과를 이룰 수 있는 JPA가 나오는 것은 다양한 수순이라고 생각합니다.

JPA는 많은 관계형 데이터베이스와 객체지향의 불일치의 문제를 해결했고, 반복적이고 불 필요한 시간낭비 코드를 줄였습니다. JPA 이러한 점들은 기업들이 추구하는 이윤추구와도 많은 부분에서 일맥상통하다고 생각합니다. 그리하여 최근 기업들은 기존 SQL의존의 JAVA 기술들을 JPA로 업그레이드 하는 추세이며 JPA를 배우는 것은 JAVA 개발자로서 가져야 할 소양이라 생각합니다. 앞으로 JPA를 익힌 부분을 꾸준히 업로드 할 것이며 저의 블로그를 통해 조금이나마 JPA를 알아가셨으면 좋겠습니다.

반응형

'java > jpa' 카테고리의 다른 글

2. JPA 시작하기  (0) 2020.06.24

+ Recent posts