전체 글
-
JOINSTUDY/DB 2021. 7. 6. 17:16
JOIN 관계형 데이터베이스에서는 중복 데이터를 피하기 위해서 데이터를 쪼개 여러 테이블로 나눠서 저장한다. 이렇게 분리되어 저장된 데이터에서 원하는 결과를 도출하기 위해서는 여러 테이블을 조합해야 한다. 관계형 데이터베이스에서 조인(JOIN) 연산자는 관련 있는 컬럼을 기준으로 행을 합쳐주는 연산이다. INNER JOIN : 내부조인 - 교집합 LEFT / RIGHT JOIN : 차집합 OUTER JOIN : 외부조인 - 합집합 (ORACLE에는 존재하지만, MYSQL에는 없어 LEFT+RIGHT조인으로 사용된다.) 1. INNER JOIN : 내부조인 - 교집합, 공통적인 부분만 SELECT SELECT A.ID, A.NAME, B.AGE FROM A INNER JOIN B ON A.ID = B.ID..
-
실제 Client IP 구하기STUDY/백엔드 2021. 6. 25. 17:31
클라이언트 IP → Proxy 서버 및 장비 → 웹 서버 웹 서버나 WAS 앞에 L4같은 Load Balancer나 Proxy 서버, caching 서버 등의 장비가 있을 경우 웹서버는 Proxy 서버나 장비 IP에서 접속한 것으로 인식한다. 때문에 실제 Client IP가 아닌 앞단에 있는 Proxy 서버 IP를 요청 IP로 인식한다. 이러한 이유 때문에 Client IP를 얻기 위해 사용하는 HttpServletRequest.getRemoteAddr()를 이용하면 실제 Client IP를 얻기 어렵다. Proxy 서버 IP가 아닌 실제 요청한 Client IP를 얻기 위해서는 HTTP 헤더에 있는 클라이언트의 IP를 찾아야 한다. * Load Balancer : 여러 대의 서버가 동작하고 있을 때, ..
-
프로젝트 성패를 결정짓는 데이터 모델링 이야기1STUDY/DB 2021. 6. 25. 11:59
story 01. 데이터 모델링은 일상 가까이 존재한다. - 자동차 동호회 예시를 통한 데이터 모델링 성명 나이 주소 이메일 휴대폰 제조사 차종 색상 배기량 년식 홍길동 35 서울시 hong@naver.com 010-1234-5678 랜드로버 이보크 WHITE 2200 2012 김철수 42 경기도 kim@naver.com 010-9876-5432 현대 벨로스터 RED 1600 2010 고주몽 51 경기도 go@naver.com 010-4569-7825 아우디 A7 SILVER 3000 2013 문제1. 만약 회원이 보유한 차량이 두 대 이상인 경우 이메일이나 휴대폰과 같은 개인정보가 차량 대수만큼 반복된다. 해결1. 위와 같은 경우가 발생하면 회원 명부라는 관점보다는 회원의 차량 정보가 우선시 되는 느낌..
-
JavaScript : ArraySTUDY/프론트엔드 2021. 6. 2. 17:11
1. 생성자 [element0, element1, ..., elementN] new Array(element0, element1[, ...[, elementN]]) new Array(arrayLength) - 매개변수 elementN : 배열을 초기화할 때 채워넣는 요소로, 항목이 하나고 그 항목의 자료형이 숫자일 경우 arrayLength 매개변수로 간주한다. arrayLength : Array 생성자에 제공한 매개변수가 하나이고, 매개변수가 0에서 232-1 이하의 정수인 경우, length 속성이 해당 값인 새로운 JavaScript 배열이 생성된다. - 사용 let fruits = ['가나다', 'abc'] -> 리터럴 표기법으로 생성 let fruits = new Array(2) -> 생성자와 ..
-
Spring - 디자인 패턴STUDY/디자인패턴 2021. 5. 10. 12:13
1. 어댑터 패턴(Adapter Pattern) - 개방 폐쇄 원칙을 활용한 설계 패턴으로, 서로 다른 두 인터페이스 사이에 통신이 가능하게 하는 것이다. 한 클래스의 인터페이스를 클라이언트에서 사용하고자하는 다른 인터페이스로 변환한다. 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다. public interface ServiceA { public void startServiceA(); public void stopServiceA(); } public class ServiceAA implements ServiceA { @Override public void startServiceA() { System.out.println("start ServiceA");..
-
Java Bean ValidationSTUDY/백엔드 2021. 5. 7. 16:28
Bean Validation 이란? Bean Validation은 JavaBean 유효성 검증을 위한 메타데이터 모델과 API에 대한 정의이며 여기서 언급하고 있는 JavaBean은 직렬화 가능하고 매개변수가 없는 생성자를 가지며, Getter 와 Setter Method를 사용하여 프로퍼티에 접근이 가능한 객체를 의미한다. 각 계층마다 데이터 검증 로직이 추가되면 코드 중복이 심하고, 검사 로직 추적이 어려우며 애플리케이션이 복잡해진다. 그래서 Domain Model에 @Notnull, @Min, @Max와 같은 어노테이션을 사용하여 메타데이터를 정의하고, 이를 통해 JavaBean의 유효성을 검증한다. Bean Validation을 실제 동작하도록 구현한 Hibernate Validator를 사용한다..
-
@TransactionalSTUDY/백엔드 2021. 5. 7. 11:53
트랜잭션이란? 데이터베이스의 상태를 변경시키는 작업 또는 한번에 수행되어야하는 연산들을 말한다. 트랜잭션 작업이 끝나면 commit 또는 rollback 되어야한다. 트랜잭션 성질 원자성(Atomicity) : 한 트랜잭션 내에서 실행한 작업들은 하나의 단위로 처리한다. 즉 모두 성공 또는 모두 실패이다. 일관성(Consistency) : 트랜잭션은 일관성 있는 데이터베이스 상태를 유지한다. 격리성(Isolation) : 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 격리해야한다. 지속성(Durability) : 트랜잭션이 성공적으로 처리되면 결과가 항상 저장되어야 한다. @Transactional 스프링에서는 @Transactional 어노테이션을 선언하는 방법으로 트랜잭션 처리를 지원하는데,..
-
람다 표현식STUDY/백엔드 2021. 5. 6. 17:19
람다 표현식(lamda expression)이란? 메소드를 하나의 식으로 표현한 것을 말한다. 메소드를 람다 표현식으로 표현하면, 클래스를 작성하고 객체를 생성하지 않아도 메소드를 사용할 수 있다. 람다 표현식은 메소드의 매개변수로 전달될 수도 있고, 메소드의 결과값으로 반환될 수도 있다. 메소드 int max(int x, int y) { return x > y ? x : y; } 람다 표현식 (x, y) -> x > y ? x : y; 장점 1. 코드의 간결성 - 람다를 사용하면 불필요한 반복문의 삭제가 가능하며 복잡한 식을 단순하게 표현할 수 있다. 2. 지연연산 수행 - 람다는 지연연상을 수행함으로써 불필요한 연산을 최소화 할 수 있다. 3. 병렬처리 가능 - 멀티쓰레디를 활용하여 병렬처리를 사용 ..