[Spring] EJB, POJO 그리고 Spring
Spring boot 2021. 12. 12. 11:21

Spring에 대하여 좀 더 깊은 이해와 알아보기 위해 본 글은 작성 되었다. 먼저 EJB에 대한 내용과 POJO의 탄생 배경에 대해 설명하고 POJO을 깊이 다루어 보려고 한다. EJB(Enterprise JavaBeans) 그리고 POJO의 탄생 EJB는 복작한 Enterprise 서비스를 개발하는데 있서 복잡한 비즈니스 로직과 Low-level의 처리를 분리시켜 개발자로 하여금 비즈니스 로직에만 집중할 수 있게 만들어 주었다. 이러한 철학을 가진 EJB의 가장 최악의 문제는 비즈니스 object 들은 JAVA본연의 객체지향의 특징과 장점을 포기해야 했다. 상속과, 다형성 등 객체지향의 이점을 누릴 수 없다 하나의 기능을 구현하기 위해서는 EJB에서 구현된 불필요한 object들부터 상속 받아야 했고..

[JVM] Garbage Collection
JAVA 2021. 12. 10. 08:44

JVM에서 GC를 빼놓으면 JVM동작 원리에 대해여 깊게 요해하기 힘들다. C++ 같은 언어에서는 개발자가 메모리영역에 대하여 관리하지만 JAVA를 비롯한 많은 언어에서는 GC를 도입하여 내부에서 처리하도록 한다. GC란 JVM에서 메모리에서 더 이상 사용되지 않는 객체를 찾아서 제거하는 행위를 말한다. 먼저 GC에 대하여 깊이 설명하기 전에 GC의 버전에 대하여 알아보자 Serial GC: 제일 오래된 GC이다. 단일 Thread로 동작하며 동작시에는 "Stop The World"라는 상태에 진입하게 된다. 이 상태에서는 모든 Thread가 멈추가 GC가 끝나길 기다린다. 이 방식은 Mark Compact 알고리즘을 사용하여 마크한 객체를 삭제한 후 메모리를 정리(객체 이동)하는 행위를 추가적으로 진행..

Rest API에 대해(1)
The Design of Web APIs 2021. 12. 9. 17:44

이번부터 몇번에 거처 Rest API에 대하여 깊게 다루어 볼 예정이다. 이 내용은 gRPG를 이해하기 위한 HTTP/1.1 기반 Rest API에 대하여 정리하기 위함이다. 참고서적은 The Design of Web APIs 책이다. Rest의 정의 Rest는 Representational State Transfer의 약자로 자원을 이름으로 구분하여 자원의 상태정보를 주고 받는 것을 의미한다. 구체적으로 살펴보면 HTTP URL를 통해 자원을 명시하고 HTTP Method를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다. 장점 HTTP 프로토콜을 사용하여 별도의 인프라 없이 구현 가능 HTTP 프로토콜을 사용하는 플랫폼에서 사용가능하다 Rest API에서 메시지 의도하는 바..

[Spring] Kotllin + Spring boot 시작하기
Spring boot 2021. 12. 8. 21:30

Spring boot Spring boot는 JAVA 언어를 기반으로 한 응용프로그램 프레임워크다. 웹 프로그램 뿐만 아니야 다양한 영역에서 사용된다. 본 시리즈에서는 Spring boot 기반 웹프로그램 개발에 초점을 맞추어 진행할 예정이다. Spring boot가 많이 사용되는 이유가 무엇인지에 대하여 이번 시리즈의 글을 통하여 알아보려고 한다. Spring boot MVC 프로젝트를 진행함에 있어서 필자는 제일 먼저 구조를 잡는데 시간을 할애한다. 필자는 프로젝트의 개발의 편리성과 유지보수의 용이성은 프로젝트 구조에서 시작된다고 생각한다. Spring 영역에서는 MVC 구조가 보편화 되여 있고 필자가 개발하던 flask(python) 기반의 프레임워크도 MVC 구조로 설계되었다. 구조 부분의 고찰에..

JAVA에 대하여(1)
JAVA 2021. 12. 8. 21:12

JAVA 자체에 대하여 물음 답변 형식으로 몇번의 글을 거쳐 정리할 예정이다. JAVA 에 대한 총체적인 이해 JAVA는 객체지항의 언어이다. JAVA만의 특징을 꼽으라면 아마도 플랫폼에 의존적이지 않는 특성과 가비지 콜랙션일 것이다. 두가지 개념 JRE(Java Runtime Environment): Java의 실행 환경이다. JRE에는 JVM과 JAVA 라이브러리들이 포함된다. JDK(Java Development Kit): JRE를 포함한 더 많은 개발자 도구들을 제공한다. 예를 들면 컴파일러이다. JAVA언어로 작성된 코드는 컴파일러(javac)를 통해 bytecode로 컴파일되고 컴파일된 bytecode는 JRE에서 실행된다. 실행될때 bytecode를 기계어로 해석하여 실행 할 수도 있지만 J..

Rest API에 대해(3)
The Design of Web APIs 2021. 12. 7. 10:37

앞의 두 글을 통하여 Rest API에 대해 소개했고 설계에 있어 직관적으로 설계해야 함을 설명했다. 이번 글은 Rest API를 예측가능하게 설계하는 것에 대하여 다루어 볼려고 한다. 예측 가능하게 설계하려면 일관성, 적응성 넓은 커버리지를 갖도록 설계해야 한다. 아래 각각에 대해여 살펴보자. 일관성 이 특성은 API를 설계함에 있어서 제일 중요한 특성이라고 생각 한다. 일관성이 있게 설계하면 이글의 목표 예측 가능한 API를 설계하는 목표에 도달할 수 있게 된다. 예를 들어 날짜 표시를 어떤 곳에는 createDate라고 쓰고 다른 곳에는 dateUpdate라고 쓰면 일관성 원칙도 지켜지지 않고 가독성도 떨어진다. 일관성을 맞춰야하는 Level를 아래와 같이 정의할 수 있다. Level 1 : 한 A..

Rest API에 대해(2)
The Design of Web APIs 2021. 12. 4. 22:01

이번 글에서는 직관적인 Rest API를 설계함에 있어 지켜야 할 원칙에 대해 적어 보려고 한다. 이 내용은 The Design of Web APIs 를 참고 했으며 내가 생각하기에 합당한것들만 정리하였다. 직관적인 표현방식을 사용 데이터를 정의함에 있어서 직접적이고 명확한 이름과 명확한 type를 정하는 것이 바람직하다.(클린 코드에서도 강조하는 부분이다.) 애매모호한 data type으로 API 데이터를 표현하지 말아라. 예를 들어 알람 시계에서 알람 시간 표현을 현재시간부터 몇초 남았는지를 표현 하는것이 아니라 몇시 몇분에 알람이 울릴 것인지를 표현하라. 사실 우리가 API 데이터를 설계함에 있어 자주 범하는 실수이다. 데이터를 표현함에 있어 이름은 직관적이면 좋다. 예를 들어 bkAccOverPr..

[Spring] Transaction 정리
Spring boot 2021. 11. 24. 20:36

Transaction은 DB와 연관된 개발을 함에 있어서 중요한 개념으로 자리 잡았다. 트래픽이 많은 요즘 제품 개발에 있어 더 중요해 진것 같다. Python에서는 라이브러리설정에서 몇가지 설정만 하면 transaction을 구현 가능 헸다. 이 글은 spring에서 transaction을 구현하는 방법을 알아보기 전에 JDBC을 이용하여 transaction을 어떻게 구성할 수 있을지에 대해 알아보고 Spring에서의 사용법에 대하여 간단히 알아볼 예정이다. JDBC를 이용한 Transaction 아래 코드는 JDBC 연결을 하고 AutoCommit를 false로 설정 한 후 코드 실행 도중 Exception이 발생하면 rollback를 수행하는 코드 이다. (roolback은 JDBC에서 savep..