728x90
반응형

서버 개발 16

스프링 프레임워크 - (4) 데이터 바인딩

데이터 바인딩 외부에서 입력된 값을 통해 자바 객체의 Property, 즉 멤버변수에 설정하는 과정을 데이터 바인딩이라고 한다. DataBinder 이러한 프로세스는 웹 통신에서 데이터를 주고받을 때 자주 일어난다. HTTP요청이 들어오면 해당 요청은 Json으로 되어있고, Json으로 들어온 요청을 애플리케이션에서 사용할 Java객체로 변환해야 한다. 이 때 하나하나 매핑해서 사용할 수도 있지만, DataBinder를 사용하면, 형변환 등 여러가지를 편리하게 해준다. request라는 HTTP요청이 도착했을 때, DataObject로 변환시켜주는 예제이다. DataObject obj = new DataObject(); ServletRequestDataBinder dataBinder = new Servl..

스프링 프레임워크 - (3) AOP

AOP 배경 소프트웨어를 개발하다 보면, 로깅이나 예외처리와 같은 비지니스로직이 아닌 코드를 반복하게 된다. 이러한 로직은 중요한 부분이지만, 실제 비지니스 로직과는 거리가 먼 것이 대부분이다. 여러 다른 부분의 코드에 사용될 수 있지만, 반복적이다. 유지보수를 할 때도, 여러곳에 분산되어 있으면 관리가 어렵게 된다. 이를 해결하기 위해 나온 개념이 Aspect Oriented Programming, 즉 관점지향 프로그래밍이다. 횡단관심사 (Cross-Cutting Concern) 여러 모듈에 걸쳐 공통적이고 반복적인 처리 로직을 일컷는 말이다. AOP는 이러한 횡단관심사들을 한데 모아 관리하는 것에 관심이 있다. 횡단관심사의 대표적인 예들은 다음과 같다: 보안 로깅 트랜잭션 모니터링 캐시 예외 AOP의..

스프링 프레임워크 - (2) 스프링 빈 (Bean)

빈 스코프 스프링의 DI컨테이너가 관리하는 Bean의 생존기간을 의미한다. 스프링에서 설정할 수 있는 Bean의 스코프는 다음과 같다: singleton 디폴트값이다. 하나의 인스턴스가 생성되고, 이후에는 해당 인스턴스를 공유하게 된다. prototype DI에 Bean에대한 요청이 들어올때 마다 Bean을 생성한다. 멀티스레드 환경에서 사용되는 Bean에 많이 쓰인다. request HTTP 요청이 들어올 때 새로운 Bean을 생성한다. 웹에서만 쓰인다. session HTTP 세션이 생성될 때 새로운 Bean을 생성한다. 웹에서만 쓰인다. global session 글로벌 HTTP세션이 생성될 때 Bean을 생성한다. 포틀릿 웹에서만 쓰인다. application 서블릿 컨텍스트가 만들어질 때 Bea..

스프링 프레임워크 - (1) 의존성 주입 (DI)

DI의 생성 배경 생성자에서 모든 의존성이 있는 클래스들을 초기화 하면 클래스들 간의 결합도가 높아진다. 하지만 비지니스 로직을 구현하다 보면, 다양한 컴포넌트들을 조합하게 되고, 이를 효율적으로 분리해야 협업이나 외주개발이 용이하게 되는데, (컴포넌트가 실제로 구현될 때 까지 시간이 걸릴 수 있음) 이를 Dummy클래스로 대체하는 방법이 있다. 따라서 결합도를 낮추려면, 생성자에서 구현하는 것 보다, 생성자에서 인자로 받는것이 더 효율적일 것이다. 이렇게 하면 Interface에 명시된 메소드명만을 사용하게 되고, 실제 Impl의 구현체는 쉽게 수정할 수 있게 된다. 하지만 생성자에서 직접 주입을 받는 경우에도, 각 컴포넌트를 개발자가 직접 주입해주어야 하기 때문에, 로직적인 변경이 필요할 경우 큰 수..

MySQL - (7) JOIN

MySQL 포스팅 (1) SELECT (2) 집계함수 (3) VIEW (4) 윈도우 함수 (5) 데이터 갱신 (6) 조건 분기 (7) JOIN JOIN Join이란 두개의 테이블을 합쳐 어떠한 결과물을 내는 작업입니다. 이때, 대개의 경우 컬럼명이 같은 컬럼을 기준으로 Join을 수행합니다. SQL에서 지원하는 Join의 종류는 다음과 같습니다. NATURAL JOIN INNER JOIN LEFT/RIGHT JOIN SELF JOIN 이번 포스팅에서는 NATURAL JOIN과 FULL JOIN, 그리고 INNER JOIN에 대해서 알아보겠습니다. 데이터 준비 JOIN을 하려면 (SELF JOIN을 제외하면) 테이블이 두개 이상 필요합니다. 먼저 Customer테이블 이외에 Orders테이블을 생성해주겠습..

서버 개발/MySQL 2019.08.10

MySQL - (6) 조건분기

MySQL 포스팅 (1) SELECT (2) 집계함수 (3) VIEW (4) 윈도우 함수 (5) 데이터 갱신 (6) 조건 분기 (7) JOIN 조건분기 모든 프로그래밍 언어에는 조건분기가 존재합니다. SQL에서 조건분기는 여러가지 방법이 있습니다. WHERE문 사용 UNION 사용 CASE 사용 WHERE문은 손쉽게 사용할 수 있다는 장점이 있지만, 구문이 매우 길어질 수 있습니다. UNION은 기본적으로 여러개의 SELECT문을 사용한다는 전제가 깔려있기 때문에 효율적이지 않습니다. 따라서, 이번 포스팅에서는 CASE문을 사용한 조건분기를 알아보도록 하겠습니다. CASE CASE식의 기본 문법은 다음과 같습니다. CASE WHEN 조건 THEN 식 WHEN 조건 THEN 식 ... ELSE 식 END ..

서버 개발/MySQL 2019.08.10

MySQL - (5) 데이터 갱신

MySQL 포스팅 (1) SELECT (2) 집계함수 (3) VIEW (4) 윈도우 함수 (5) 데이터 갱신 (6) 조건 분기 (7) JOIN 데이터 갱신 소프트웨어 개발을 하다보면 CRUD라는 말을 종종 듣게 됩니다. 이는 Create, Read, Update, Delete가 됩니다. SQL에서는 이가 곧 Insert, Select, Update, Delete가 됩니다. 이 중 Select를 제외하면 모두 데이터를 새로 주입하거나, 즉 갱신하려는 테이블 자체에 영향을 주는 트랜잭션 입니다. INSERT INSERT문의 기본적인 문법은 다음과 같습니다. INSERT INTO 테이블명 (컬럼명1, 컬럼명2, ...) VALUES (값1, 값2, ...) 참고로 위에서 컬럼명은 테이블이 정의된 컬럼 순서와 ..

서버 개발/MySQL 2019.08.10

MySQL - (4) 윈도우 함수

MySQL 포스팅 (1) SELECT (2) 집계함수 (3) VIEW (4) 윈도우 함수 (5) 데이터 갱신 (6) 조건 분기 (7) JOIN SQL 집계함수 SQL에서는 집계함수를 많이 사용합니다. GROUP BY와 함께 COUNT, SUM 등을 많이 사용하게 됩니다. 집계의 예제를 다시 살펴보겠습니다. 다음은 GROUP BY와 COUNT를 사용해, 나라별 인원 집계를 내려본 것입니다. SELECT Country, COUNT(*) FROM customers GROUP BY Country; 위 쿼리의 실행 결과 중 상위 5개는 다음과 같습니다. 만약 데이터에 숫자인 컬럼이 있었다면, SUM이나 AVG도 사용해 볼 수 있을 것입니다. 윈도우 함수 윈도우 함수는 이 GROUP BY와 비슷하지만, 집계가 없는..

서버 개발/MySQL 2019.08.10

MySQL - (3) VIEW

MySQL 포스팅 (1) SELECT (2) 집계함수 (3) VIEW (4) 윈도우 함수 (5) 데이터 갱신 (6) 조건 분기 (7) JOIN VIEW SQL에서 VIEW란 SELECT문을 내장하는 가상 테이블을 만드는 것입니다. 실제 데이터를 저장하고 있는 것이 아니라, SELECT문을 저장하는 구조 입니다. VIEW를 만드는 기본 문법은 다음과 같습니다. CREATE VIEW 뷰이름 AS SELECT문 예제 지난번에 사용했던 데이터를 사용해 View를 만들어보도록 하겠습니다. 아래의 쿼리는 Customer데이터에서 이름과 나라를 골라 View를 만드는 예제입니다. CREATE VIEW NameAndCountry(cname, country) AS (SELECT CustomerName, country F..

서버 개발/MySQL 2019.08.09

MySQL - (2) 집계함수

MySQL 포스팅 (1) SELECT (2) 집계함수 (3) VIEW (4) 윈도우 함수 (5) 데이터 갱신 (6) 조건 분기 (7) JOIN 집계함수 모든 분석 언어들이 그렇듯, 기술통계적 집계 함수들이 존재합니다. 이번 포스팅에서는 MySQL에서 제공하는 기본 집계나 정렬 함수들을 알아보겠습니다. ORDER BY ORDER BY는 이름에서도 알 수 있듯이 정렬하는 함수 입니다. ORDER BY의 기본 문법은 다음과 같습니다. SELECT [컬럼명 ...] FROM 테이블명 ORDER BY 컴럼명 ASC|DESC; 테이블 전체의 레코드를 여러가지 방식으로 정렬해 보도록 하겠습니다. 다음은 id를 사용해 모든 레코드를 내림차순으로 정렬하는 쿼리 입니다. SELECT * FROM customers ORDE..

서버 개발/MySQL 2019.08.08
728x90
반응형