Spring에서 Controller를 지정해주는 어노테이션은 크게 2가지가 있습니다. @Controller와 @RestController입니다.두 어노테이션의 차이점은 HTTP ResponseBody가 생성되는 방식에 있습니다.@ControllerController로 View 반환하기전통적인 Spring MVC의 컨트롤러인 @Controller는 주로 View를 반환하기 위해 사용합니다.Controller는 아래와 같은 Process에 의해 동작합니다.1. Client가 URI 형식으로 요청을 보냅니다.2. Dispatcher Servlet이 요청을 처리할 대상을 찾습니다.3. Handler Adapter가 요청을 Controller로 전송합니다.4. Controller는 요청을 처리한 후에 ViewNa..
프로젝트를 진행하다 보면 여러 개의 Container 올리고 난 후 이들 간, Container IP를 통해 연결하고 통신을 해야 하는 경우가 있습니다. 하지만, Container 특성 상 재기동 하게 되면 Container에 부여된 IP가 계속 변동되기 때문에 하드 코딩으로 IP를 지정하기 어렵습니다.따라서, Container의 IP가 변동되지 않도록 컨테이너의 정적 IP를 설정 해주어야 합니다.고정 IP 지정법1. Gateway와 Subnet을 지정docker network create --gateway 172.19.0.1 --subnet 172.19.0.0/21 tcnet 2. 자동 지정docker network create --driver bridge tcnet생성한 Network 확인하기dock..
컨테이너의 데이터 저장 방식Container의 데이터는 휘발성입니다. 즉, Contianer가 삭제되면 그 안의 데이터도 사라집니다. Database를 컨테이너 내부에 저장하면 컨테이너가 삭제되거나 재시작 될 때 손실됩니다.데이터 영속성을 위한 방법휘발성의 데이터들이 사라지지 않게 하기 위해 사용하는 방법에는 2가지가 있습니다. 1. Docker Volume 사용하기Docker Volume을 사용하면 데이터가 Container의 생명 주기와 상관없이 저장됩니다. 따라서 Container를 실행할 때 Volume을 마운트하여 데이터베이스의 데이터를 영속적으로 저장할 수 있습니다.단, 해당 데이터는 Local 환경에서만 저장되기 때문에 다른 환경과는 공유가 어렵습니다.docker run -d --name..
우선 Docker를 이해하기 위해선 컨테이너(=Container)에 대해 알아야합니다.컨테이너(=Container)소프트웨어는 OS와 Library마다 의존성을 갖고 있습니다. 따라서, 한 컴퓨터에서 성격이 다른 (OS, Library가 다른) 소프트웨어를 한번에 실행할 때 어려움을 가질 수 있고 관련된 구성을 관리하기 어렵습니다. 이러한 문제점을 해결해주는 기술이 바로 컨테이너입니다. 컨테이너는 Application을 실행하는 데 필요한 모든 구성 요소를 하나의 런타임 환경으로 묶는데 사용하는 기술입니다. 또한, 다른 실행 환경과의 간섭을 막고 실행의 독립성을 확보해주는 운영체계 수준의 격리 기술을 이야기합니다. 가상 머신(VM)과 컨테이너의 차이Virtual Machine은 Host OS 위에 가상..
REDO와 UNDO에 대해 설명하기 전에 우리는 Transaction에 대해 알아야 합니다.Transaction의 ACID(원자성, 일관성, 독립성, 지속성)특성이 REDO, UNDO와 긴밀한 연관이 되어 있기 때문입니다.트랜잭션(Transaction)트랜잭션이란, 데이터베이스 관리 시스템(=DBMS)에서 상호작용하는 단위를 의미합니다.DBMS는 트랜잭션에 대해 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 지속성(Durability)를 보장합니다.트랜잭션의 모든 연산은 반드시 한꺼번에 완료되거나 한꺼번에 취소되어야 하는 원자성(Atomicity)을 가지고 있습니다. 한꺼번에 완료가 된 경우, Commit을 통해 작업 결과를 데이터베이스에 반영합니다. 반면, 트..
Java Application을 개발하면서 equals()와 hashCode()를 같이 재정의 해야 한다는 말을 들어보신 적 있으신가요?대부분의 IDE(=Ecilpse, Intellij 등)에서도 equals()와 hashCode()를 같이 재정의 하도록 되어있으며, Lombok에서도 @EqualsAndHashCode을 지원하고 있습니다. 그렇다면, 왜 equals()와 hashCode()는 같이 정의해야 할까요? 천천히 알아보겠습니다.equals()만 재정의 하는 경우public class Car { private final String name; public Car(String name) { this.name = name; } // intellij Generate ..
Optional을 설명드리기 이전에 NPE(=NullPointerException)에 대해 간략히 말씀드리고 넘어가겠습니다.NPE는 Java Application을 개발하면서 자주 접하는 Exception 중 하나입니다. 이 NPE를 피하기 위해서 Null 값을 검사하는 로직을 아래와 같이 구성해야 합니다.List names = getNames();// NPE를 방지하기 위해 null 검사를 해야함if(names != null){ names.sort();} 하지만, 변수가 많아질 경우, Null을 검사해야 할 요소가 많아지기 때문에 꽤나 번거로워집니다. 이러한 불편한 점을 개선하고자 등장한 것이 Optional 클래스입니다.Optional 클래스Java8 버전 이후부터 Optional 클래스를 이용..
CLOB과 BLOB은 데이터베이스에서 사용되는 DataType이며, Text 혹은 Binary Data를 저장하는데 사용합니다.이들은 목적과 사용법에서 약간의 차이가 있습니다. 그럼 천천히 알아보겠습니다.CLOB(Character Large Object)이 CLOB은 단어의 뜻과 비슷하게 문자열 형식의 큰 데이터를 저장하는 데 사용 됩니다. 일반적으로 Text Data를 저장하고 문자열의 크기나 형식에 대한 메타데이터를 관리할 수 있습니다. CLOB은 문자열을 처리하는 기능을 제공하며, Text Data를 쿼리하고 조작하기 위해 다양한 문자열 함수를 사용할 수 있습니다. CLOB은 텍스트 기반 데이터의 저장과 처리에 유용합니다.CLOB에서 사용할 수 있는 문자열 함수- LENGTH(): CLOB의 길이를..
내장 SQL(Embedded SQL)이란?응용 프로그램 내 데이터베이스에서 사용하는 데이터를 정의하거나 질의하는 SQL 문장을 내포하여 프로그램이 실행될 때 함께 실행되도록 호스트 프로그램 언어로 만든 프로그램에 삽입된 SQL입니다.호스트 프로그램 언어?데이터베이스와 상호 작용하기 위해 사용되는 프로그래밍 언어를 의미합니다.Java, Python, C++, PHP 등의 언어들이 이에 해당합니다. 이 언어들은 데이터베이스와의 연동을 위한 라이브러리나 프레임워크를 제공하여 개발자가 쉽게 데이터베이스 작업을 수행할 수 있게 합니다. 내장 SQL의 특징내장 SQL 실행문은 호스트 프로그램 언어에서 실행문이 나타날 수 있는 곳이면 프로그램의 어느 곳에서나 사용할 수 있습니다.일반 SQL문은 수행 결과로 여러 ..
JDK(=Java Development Kit)란?Java Application을 개발하기 위해 필요한 도구들의 모음입니다.이는 개발자가 Java 코드를 작성하고 컴파일하여 Byte Code로 변환하는데 사용됩니다.JDK는 Java Compiler, JRE, Java Development Tools로 구성되어 있습니다. JDK는 Oracle Corporation에서 출시한 아래 Java 플랫폼들 중 하나를 구현한 것입니다.Java 플랫폼Java SE: Java Platform, Standard Edition표준 자바 플랫폼으로 표준적인 컴퓨팅 환경을 지원하기 위한 자바 가상머신 규격 및 API 집합을 포함합니다.Java EE, Java ME는 구체적인 목적에 따라서 이 Java SE를 기반으로 API 추..
- Total
- Today
- Yesterday