본문 바로가기

전체 글

(142)
[MongoDB] MongoDB란 MongoDB 기본개념 데이터의 기본단위는 도큐먼트이며, 이는 관계형 데이터베이스의 행과 유사하다. 컬렉션(Collection)은 동적 스키마(dynamic schema)가 있는 테이블과 같다. 단일 인스턴스는 자체적인 컬렉션을 갖는 여러 개의 독립적인 데이터베이스를 호스팅한다. 모든 다큐먼트는 컬렉션 내에서 고유한 특수키인 "_id"를 가진다. 몽고 셸(The mongo Shell)이라는 간단하지만 강력한 도구와 함께 배포된다. 몽고 셸은 몽도DB 인스턴스를 관리하고 몽고DB 쿼리 언어로 데이터를 조작하기 위한 내장 지원을 제공한다. 1. 손쉬운 사용 몽고DB는 관계형 데이터베이스가 아니라 도큐먼트 지향 데이터베이스이다. 관계형 모델을 사용하지 않는 주된 이유는 분산 확장(scale-out)을 쉽게 하..
[Web] Java Testing Framework - Unit Test(JUnit) 들어가면서 1. TDD 테스트 주도 개발(Test-Driven Development, TDD)은 매우 짧은 개발 사이클을 반복하는 소프트퀘어 개발 프로세스중 하나입니다. 쉽게 얘기하면 개발을 하는데 있어서 테스트가 주가 되어 개발한다는 의미 입니다. 제품의 테스트가 좋을수록 제품의 품질이 향상 됩니다. 그래서 테스트는 중요하다고 생각합니다. 기존 개발 프로세스 설계 개발(코드 작성) 테스트(코드 작성) TDD 프로세스 설계 테스트(코드 작성) 개발(코드 작성) TDD 방법론을 사용할 경우 아래의 같은 장점, 단점이 있습니다. 장점 객체지향적인 코드 개발 - 모든 코드가 재사용 성을 기반으로 작성하기 때문 설계 수정 시간의 단축 - 테스트 코드를 먼저작성하기 떄문에 설계의 구조적 문제점을 바로 찾음 디버깅..
[Java] 리플렉션 (Reflection) 리플렉션은 일반적으로 Java 가상 머신에서 실행되는 애플리케이션의 런타임 동작을 검사하거나 수정하는 기능이 필요한 프로그램에서 사용된다. 리플렉션은 강력하지만 무분별하게 사용해서는 안 된다. 리플렉션을 사용하지 않고 작업을 수행할 수 있다면 사용을 피하는 것이 좋다. 리플렉션을 통해 코드에 액세스할 때 다음 사항을 염두에 두어야 한다. 장점 확장성 디버거 및 테스트 도구 단점 성능 오버헤드 보안 제한 내부 노출 출처 : https://docs.oracle.com/javase/tutorial/reflect/index.html Trail: The Reflection API (The Java™ Tutorials) The Java Tutorials have been written for JDK 8. Examp..
[Java] 중첩클래스(Nested Classes) Java 프로그래밍 언어를 사용하면 클래스 내에 다른 클래스를 정의할 수 있다. 이러한 클래스를 중첩 클래스라고 한다. - 중첩 클래스를 사용하는 이유 한 곳에서만 사용되는 클래스를 논리적으로 그룹화 캡슐화 증가 더 읽기 쉽고 유지 관리하기 쉬운 코드로 이어짐 - 더 구체적인 상황에 맞게 사용하는 경우 Local Classes(로컬 클래스) 클래스의 인스턴스를 두 개 이상 생성하거나 생성자에 액세스하거나 이름이 지정된 새 유형을 도입해야 하는 경우 Anonymous Classes(익명 클래스) 필드나 추가 메소드를 선언해야 하는 경우 Lambda Expression(람다식) 다른 코드에 전달하려는 단일 동작 단위를 캡슐화하는 경우 기능 인터페이스의 간단한 인스턴스가 필요하고 앞의 기준이 적용되지 않는 경..
[Java] 익명클래스(Anonymous Classes) 익명 클래스를 사용하면 코드를 더 간결하게 만들 수 있다. 클래스를 선언하고 동시에 인스턴스화할 수 있다. 이름이 없다는 점을 제외하고는 로컬 클래스와 같다. 로컬 클래스를 한 번만 사용해야 하는 경우 사용하면 된다. - 익명 클래스의 구성 new 연산자 구현할 인터페이스, 확장할 클래스의 이름 생성자에 대한 인수를 포함하는 괄호 클래스 선언 본문 출처 : https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html Anonymous Classes (The Java™ Tutorials > Learning the Java Language > Classes and Objects) The Java Tutorials have been wri..
[Java] LocalDateTime JDK8에서는 기존 java.util.Data, java.util.Calendar 클래스보다 개선된 날짜와 시간 API가 제공된다. JDK의 기본 날짜 클래스의 문제점 1. 불변 객체가 아니다. set으로 변경이 가능하다는 점은 누군가 악의적으로 변경할 수 있기 때문에 get/set 메서드에서 직접 Date클래스를 사용하는 것이 위험하다. 2. 상수 필드 남용 calendar.add(Calendar.SECOND, 2); 3. 헷갈리는 월 지정 1월을 0으로 표현하는 문제 + Calendar.OCTOBER로 월을 지정하지만 실질적인 값은 9(!=10)인 문제 4. 일관성 없는 요일 상수 어디서는 일요일이 0, 어디서는 일요일이 1 5. Date와 Calendar 객체의 역할 분담 다소 치명적인데 년/월/일..
[Java] Optional java.util.Optional 클래스 Optional 클래스는 Integer나 Double 클래스처럼 'T'타입의 객체를 포장해 주는 래퍼 클래스(Wrapper class)이다, 따라서 Optional 인스턴스는 모든 타입의 참조 변수를 저장할 수 있다. 이러한 Optional 객체를 사용하면 예상치 못한 NullPointerException 예외를 제공되는 메소드로 간단히 회피할 수 있다. 즉, 복잡한 조건문 없이도 널(null) 값으로 인해 발생하는 예외를 처리할 수 있다. Optional 객체의 생성 of() 메소드나 ofNullable() 메소드를 사용하여 Optional 객체를 생성할 수 있다. of() 메소드는 null이 아닌 명시된 값을 가지는 Optional 객체를 반환한다. 만약 of..
[WEB기초] REST API vs GraphQL 차이점 GraphQL / RESTful GraphQL 서로 다른 모양의 다양한 요청들에 대해 응답할 수 있어야 할 떄 대부분의 요청이 CRUD에 해당할 때 RESTful HTTP, HTTPs에 의한 Cacheing을 잘 사용하고 싶을 때 File 전송 등 단순한 Text로 처리되지 않는 요청들이 있을 때 요청의 구조가 정해져 있을 때 아래 글 요약 REST에서는 Resource에 대한 형태 정의와 데이터 요청 방법이 연결되어 있지만, GraphQL에서는 Resource에 대한 형태 정의와 데이터 요청이 완전히 분리되어 있습니다. REST에서는 Resource의 크기와 형태를 서버에서 결정하지만, GraphQL에서는 Resource에 대한 정보만 정의하고, 필요한 크기와 형태는 client단에서 요청 시 결정합니..