분류 전체보기 362

Java - 람다식(Lamda Expression)이란 ? (+ 예제)

람다식이란 ? 람다식은 익명함수를 표현하는 하나의 표현식입니다. 이는 식별자 없이 실행가능한 함수 즉, 함수를 따로 만들지 않고 코드 한줄에 함수를 써서 그것을 호출하는 방식입니다. Java 8 부터 함수적 프로그래밍(함수 지향)을 위해 람다식을 지원해서 사용하고 있습니다. 이를 이용하면 기존의 익명 객체를 구현하는 방식보다 더 간결하게 코드를 짤 수 있습니다. 람다식 사용법 (매개변수, ...) -> { 실행문 ... } (매개변수, ...)는 오른쪽 중괄호 {} 블록을 실행하기 위해 필요한 값을 제공하는 역할을 합니다. 매개 변수의 이름은 개발자가 자유롭게 지정할 수 있으며 인자타입도 명시해줄 필요가 없습니다. "->" 기호는 매개 변수를 이용해서 중괄호 {}를 실행한다는 뜻으로 해석할 수 있다. +..

Language/Java 2020.09.25

Spring - DataSource와 ConnectionPool이란? (+ HikariCP)

Spring - DataSource와 ConnectionPool이란? Spring으로 개발을 하다보면 DB에 접근 하다보면 DataSource와 ConnectionPool에 마주치게 된다. 두 개념에 대해 더 자세히 알아보자. DataSource DataSource는 DB 커넥션을 구하는 방법을 정의한다. 문서를 번역해보면 아래와 같다. DataSource는 드라이버 Vendor에 의해 구현되며, 세 가지 타입이 있다. 1. Connection 객체를 얻는 방법을 구현 2. Connection Pooling 방식을 구현 3. 분산 트랜잭션 구현 DataSource의 대표적인 구현체는 아래와 같다. HikariDataSource JdbcDataSource MysqlDataSource SimpleConnec..

Server/Spring 2020.09.23

MySQL - MyISAM, InnoDB 등 스토리지 엔진

스토리지 엔진이란? MySQL은 두 가지 형태의 엔진이 존재합니다. 서버엔진 - 클라이언트의 요청을 받고 SQL문들을 처리하는 DB 자체의 기능 역할 - DB가 SQL문들을 이해할 수 있도록 쿼리를 파싱, 물리적 저장장치와 통신 - 디스크와 직접적인 접근을 제외한 대부분의 역할 수행 스토리지 엔진 - 서버 엔진이 필요한 데이터를 물리적인 장치에서 가져오는 역할 - 물리적 저장장치에서 데이터를 읽어오는 역할을 수행하고 플러그인 방식으로 스토리지 엔진을 필요에 따라 더 추가하거나 삭제 즉, 서버 엔진은 클라이언트로부터 요청을 처리하는 커넥션 핸들러, SQL 파서, 전처리기, 최적화된 실행을 위한 옵티마이저 등이 주를 이루고, 스토리지 엔진은 SQL문 자체를 분석하거나 최적화하고 데이터를 읽어오는 부분을 맡습..

Database/SQL 2020.09.22

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