안녕하세요. 이번에는 요구사항에 따라 프로젝트가 실행될 때 데이터베이스 테이블이 생성된다거나 생성된 테이블에 데이터를 미리 넣어놔야하는 경우, 즉 DDL, DML 같은 스키마를 좀더 SQL 형태로 미리 정의하여 실행하는 방법에 대해서 포스팅해보고자 합니다. 1. 프로젝트 생성 먼저 간단한 스프링부트 프로젝트를 생성해야합니다. 예제이므로 어떠한 의존성도 추가할 필요가 없기 때문에 그냥 생성만 해줍니다. 프로젝트를 생성했다면 Eclipse나 IntelliJ 같은 IDE를 통해 작업을 하실텐데 XXXApplication 클래스가 생성되었는지 확인하시고 main 메소드가 존재하는지 확인합니다. 여기까지는 프로젝트 생성만 하면 별 다른 내용없이 확인 가능하실겁니다. 2. DB 연동 설정 프로젝트가 빌드되면서 sq..
자바에서의 직렬화(Serialization)과 역직렬화(DeSerialization) 클래스를 만들 때, 해당 특정 클래스에서 사용될 객체를 만들 수 있으며 프로그램을 실행 / 종료하면 가비지 수집기 스레드를 통해 객체가 자체적으로 수거됩니다. 객체를 다시만들지 않고 해당 클래스를 호출하려는 경우 어떻게 될까요?? 이럴때 데이터를 바이트 스트림으로 변환하여 직렬화 개념을 사용합니다. 객체 직렬화는 객체의 상태를 바이트 스트림으로 변환하는데 사용되는 프로세스로, 디스크 / 파일로 유지되거나 네트워크 통신을 통해 실행중인 다른 Java 가상머신으로 전송될 수 있습니다. 역직렬화란 이러한 바이트 스트림을 다시 객체형태로 변환하는 작업을 말합니다. 생성된 바이트는 플랫폼에 독립적입니다. 그래서 한 플랫폼에서 직..
JPA 아키텍처에 대한 소개 이번 포스팅에서는 JAVA Persistence API의 핵심 클래스/인터페이스인 JPA의 구조에 대해서 알아보겠습니다. Java Persistence API(JPA)는 관계형 데이터베이스(RDBMS)객체를 자바 객체로 매핑하는 자바 표준 스펙입니다. 자바 객체를 데이터베이스 테이블로 변환하는 작업, 혹은 반대의 작업을 객체-관계 매핑(Object-Relational Mapping, ORM)이라고 합니다. JPA는 ORM에 대한 한가지 접근 방법중에서 하나입니다. JPA를 통해서 개발자들은 자바 객체 데이터를 데이터베이스 데이터로 매핑, 저장, 수정, 검색할 수 있습니다. JPA는 엔터프라이즈급 혹은 SE 버전에서도 사용할 수있습니다. JPA는 여러가지 구현체를 가지고 있는데..
안녕하세요. 오늘은 인텔리제이를 사용하시는 분들을 위해서 좋은 플러그인을 하나 발견해서 공유하고자 합니다. SonarLint 스프링 프레임워크를 사용하며 자연스럽게 Java를 이용해서 프로그래밍을 자주 하게 되는데요. 자바의 Exception 중에서 개발자들이 NullpointerException을 가장 많이 낸다고 합니다. 그 이유중 하나가 저도 많이 느끼지만 Nullable에 대한 처리를 제대로 하지 못했던 경우입니다. 그로인해 예기치못한 상황에서 API가 서버에러를 내고 클라이언트 개발자들에게 Exception을 전달받는 상황이 많았습니다. 그래서 IDE 컴파일러 단에서 이걸 좀 확인해줄 수 있는 강력한 Lint가 없을까 생각하면서 찾아보다가 SonarLint를 알게 되었습니다. 사용법 일단 플러그..
Http 프로토콜에는 여러가지 상태값이 존재합니다. 200은 대표적으로 성공적으로 http 통신에 성공했다는 의미이며, 404는 해당 주소를 찾지 못하여 http 통신을 할 수 없다는 의미이고, 500은 서버에서 에러가 발생하여 http 통신은 하였으나 원하는 결과를 얻지 못하였음을 의미할 것입니다. 그 중에서 401(Unauthorized)와 403(Forbidden)의 차이에 대해서는 모호한 점이 있어서 정리하는 겸 공유하고자 합니다. 스프링을 프로젝트를 생성해서 개발을 하다보면 스프링 시큐리티 프로젝트를 통해 인증과 허가에 대한 개념을 배울 것입니다. 로그인을 한 유저가 api를 호출했을 때, 인증 토큰 혹은 세션을 조회하여 허가받은 유저라면 원하는 결과를 얻어서 http 통신에 성공할 것입니다. ..
스프링은 자체적으로 프록시 패턴을 통해 비즈니스 로직과 공통 코드를 분리하는 AOP를 제공하고 있습니다. 관점지향 프로그래밍이라는 개념아래 서비스를 호출할 때 AOP의 경우 프록시 역할을 하는 객체에 의해 서비스가 호출되게 됩니다. 특정 클래스, 메소드, 어노테이션 등을 타겟으로 삼아 AOP에 쌓여진 코드는 직접 호출이 아닌 대리기사인 프록시 객체에 의해서 호출되게 되는데... 그 과정을 코드로 살펴보겠습니다. 프로젝트 구성 - AService, BService는 비즈니스 코드 역할을 할 서비스 클래스입니다. 실제 실무에서는 interface를 구현하고 있는 형태가 대부분일 것입니다. - TestAnnotation은 커스텀으로 어노테이션을 만든 것입니다. 커스텀 어노테이션을 구현하는 방법은 다음의 내용을..
자바프로그래머들이 마주하는 가장 흔한 Exception은 NullpointerException 에러입니다. 이 Exception은 JVM에 의해 발생되는 RuntimeException 중 하나입니다. 여러분들도 아시다시피 NullpointerException은 애플리케이션은 Object가 필요한데 이 값이 null 값일 때 발생하는 에러입니다. Null 값은 자바프로그래머들이 대부분 쉽게 간과할 만한 케이스입니다. Null 값은 비즈니스 로직에서 NullpointerException이 발생하지 않도록 애플리케이션 내부에서 처리되어야 합니다. 이것은 불필요한 null 체크 코드를 만들어내게 됩니다. 이러한 뻔한 코드들을 처리하기 위해서, Java 8에서 Optional 타입이 도입되었습니다. Oracle에..
서론 당신은 스프링부트에 대해서 들어봤을 것입니다. 스프링부트는 단 140여 글자로 스프링 웹 어플리케이션을 만들 수 있 습니다. 그런데 이게 무엇을 뜻하는지 아시나요? 스프링부트에 강력한 기능을 제공하고 스프링 개발을 쉽게하도록 하는 기능은 무엇일까요? 이것이 바로 이번 포스팅에서 살펴볼 내용입니다. 이번 포스팅에서는 스프링부트의 자동설정, 스타 터 디펜던시, 스프링부트 CLI, Actuator, Spring Initializer에 대해 깊게 살펴보겠습니다. 이것들은 대부분 Spring 기반 Java 웹어플리케이션을 개발할 때 발생했던 고통과 어려움을 없애주는 기능입니다. 먼저 본론으로 들어가기전, 스프링 자바 기반 개발을 할때 발생하는 문제들을 되짚어봅시다. 스프링은 의심할 여지없이 훌륭한 프레임워크..