분류 전체보기 359

Java - JPA란 ? (+ORM)

JPA란? JPA(Java Persistence API)란 자바 진영의 ORM 기술 표준입니다. ORM(Object Relational Mapping)은 객체-관계 매핑이라는 뜻입니다. 이는 OOP(객체 지향 프로그래밍)에서 쓰이는 객체를 구현한 클래스와 RDB에서 쓰이는 테이블을 자동으로 매핑(사상)하는 것을 의미합니다. 이 때 이 둘은 구조가 전혀 다르기 때문에 불일치가 발생하는데, ORM을 통해 객체와의 관계에 의거해서 SQL문을 자동으로 생성해주어서 이런 문제를 해결합니다. 따라서 ORM은 따로 SQL문을 짤 필요없이 객체를 통해 간접적으로 DB를 조작할 수 있게 합니다. JPA에서는 이 ORM을 어떻게 구현하고 동작하는지를 기술하고 있는 인터페이스의 모음입니다. ORM의 장단점 #장점 1. 객체..

Language/Java 2020.09.21

Java - JDBC란 ?

JDBC란 ? JDBC(Java DataBase Connectivity)는 데이터베이스에 연결 및 작업을 하기 위한 자바 표준 인터페이스 입니다. 자바는 DBMS(Oracle, MySQL, MongoDB 등)의 종류에 상관 없이 하나의 JDBC API를 이용해서 데이터베이스 작업을 처리합니다. 이 JDBC는 DB에 접근해서 CRUD를 쉽고 효율적이게 할 수 있게 하고, 고성능에서의 세련된 메소드를 제공하며 쉽게 프로그래밍 할 수 있게 도와줍니다. JDBC의 역할 # JDBC가 생긴 이유 JDBC API가 없던 때에는 데이터베이스의 종류 마다(ms-sql, my-sql, oracle ..) 각각의 SQL문을 사용 그 결과 DB의 종류에 따라 SQL문의 작성 방법이 너무나 차이가 나서 구현이 불편함. 그래서..

Language/Java 2020.09.20

Spring - AOP 프로그래밍 (관점 지향) [+ Proxy 패턴]

기본 설정 org.aspectj aspectjweaver 1.8.13 스프링 프레임워크의 AOP 기능은 spring-aop 모듈이 제공하는데 이는 spring-context 모듈에 포함 되어 있고 spring-context 모듈은 프로젝트를 생성하면 기본으로 의존에 추가되기 때문에 srping-aop 모듈을 따로 추가하지 않아도 됩니다. pom.xml 파일에는 aspectjweaver 의존을 추가합니다 태그 안에다가 넣으면 됩니다. 이 모듈은 스프링이 AOP를 구현할 때 사용하는 모듈이고 AOP를 설정하는데 필요한 애노테이션을 제공합니다. 프록시 public class RecCalculator implements Calculator { @Override public long factorial(long n..

Server/Spring 2020.09.18

Spring - 빈 라이프사이클과 범위

빈 라이프 사이클 스프링 컨테이너는 초기화와 종료라는 라이프사이클을 갖습니다. 아래 코드를 보면 컨텍스트 객체를 생성하고 스프링 컨테이너를 초기화합니다. // 1. 컨테이너 초기화 AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AppContext.class); // 2. 컨테이너에서 빈 객체를 구해서 사용 Greeter g = ctx.getBean("greeter", Greeter.class); g.method1(); // 3. 컨테이너 종료 ctx.close(); 이 때 스프링 컨테이너는 설정 클래스에서 정보를 읽어와 알맞은 빈 객체를 생성하고 각 빈을 연결(의존 주입)하는 작업을 수행합니다. 그 후 컨테이..

Server/Spring 2020.09.13

Spring - 객체 조립기란?

조립기(Assembler) DI를 활용하면 객체 생성에 사용할 클래스를 변경하기 위해 객체를 주입하는 곳만 변경하면 되는 것이라고 우리는 알고 있습니다. 하지만 DI를 활용해서 클래스를 작성했더라도 그 객체를 main메서드에서 주입하는 것보다 의존 객체를 주입하기 위한 클래스를 따로 작성하는 것이 관리차원에서 더 효율적인 관리가 됩니다. 이 때 의존 객체를 주입하기 위한 이 클래스를 조립기라고 표현합니다. Assembler.java public class Assembler { private MemberDao memberDao; private MemberRegisterService regSvc; private ChangePasswordService pwdSvc; public Assembler() { mem..

Server/Spring 2020.09.07

Android - ViewPager 사용하기 (+CircleIndicator)

ViewPager 본 예제에서는 Fragment와 Adapter를 이용한 ViewPager 화면을 만들어보고 고정적인 버튼과 CircleIndicator를 구성해보도록 하겠습니다. activity_main FrameLayout을 사용하는 이유는 뷰페이저안에 요소들과 겹쳐 있는 움직이지 않는 고정 CircleIndicator와 버튼등을 구성하기 위함입니다. FrameLayout안에 여러개의 레이아웃을 넣고 빈 레이아웃을 이용해 요소들이 생성될 위치를 지정하면 됩니다. 버튼과 Indicator는 ShapeDrawble을 이용할 것이고 뷰페이저도 Indicator 구분을 위해 사용해야 합니다. activity_main_frag1~3 fragment를 원하는 만큼 생성하고 레이아웃을 작성합니다. 저는 세개만 작..

Client/Android 2020.08.13

Android - JSON 파싱 예제

개요 이전 포스트에서는 Rest API와 GET방식과 POST방식의 통신에 대해 알아봤습니다. 이번에는 AsyncTask를 활용해 API에서 필요한 값만 변수로 가져오는 예제를 해보겠습니다. 방식은 전과 같이 로그인을 위한 API에 값을 전송한 뒤, 결과 중 code값을 받아 해당 code값에 맞는 메시지를 토스트 처리하도록 코드를 구성하겠습니다. activity_login.xml 위처럼 id(email)을 입력할 EditText 한 개, 비밀번호를 입력할 EditText 한 개, 로그인 버튼 한 개를 레이아웃에 넣고 버튼을 누르면 API서버에 EditText의 값들을 서버로 전송하고 결과값을 받아올 것입니다. OnCreate()에서 API 호출 public class login extends AppCo..

Client/Android 2020.08.13

Android - Rest API에 POST 값 전송 (로그인 테스트)

API 정의 예제에 사용할 api 정의이다. 위 URL에 HTTP 헤더값으로 apikey를 추가하고 email과 password를 입력받아 전송해서 결과값을 출력해보려 한다. 인터넷 접근 권한 허용 Androidmanifest.xml의 안에 넣어서 인터넷을 접근할 수 있도록 한다. activity_main.xml 화면을 구성하는 xml이다. 로그인을 눌렀을때 다음 화면으로 넘어가는 것 말고 api에서 결과값만 받아올 것이기 때문에 한 장만 작성한다. email과 password를 입력하고 버튼을 누르면 해당 결과값이 텍스트뷰에 출력된다. MainActivity.java import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; i..

Client/Android 2020.08.08

Android - Rest API에 GET 통신하기

Rest API와 GET 통신하기 위 API서버의 URL은 index.php/visit_place/check_place?id=building1010 이다. 안드로이드에서 서버의 값이나 서버와 연동된 DB의 값을 불러오는 방법을 사용하려 한다. 파싱에는 일반적으로 xml파싱과 JSON파싱이 있는데 JSON 파싱을 해보자. 접근 권한 허용 // 인터넷 접근을 위해 추가 인터넷 접근을 허용하고 http 사이트 접근을 허용해줘야 합니다. MainActivity.java import android.os.Bundle; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import java.util.concurrent.Ex..

Client/Android 2020.08.03