이전에 gradle을 git bash에 등록했는데 새로운 프로젝트를 진행하며 maven을 쓸일이 생겼고, 또 git bash에는 기본적으로 mvn 이라는 명령어가 등록되어있지 않아 gradle과 비슷한 방식으로 등록하였다. 1. Maven 설치 (https://maven.apache.org/download.cgi) 사이트에 접속하여 다음 파일을 다운 받는다. 2. 압축 풀어준다. tar xzvf apache-maven-3.8.2-bin.tar.gz 3. 압축을 푼 폴더에서 bin 폴더를 환경변수 설정해준다. 이번에는 명령어가 아닌 윈도우 환경변수 설정방법을 이용하였다. 4. mvn -v 를 이용하여 버전 확인하면 설치가 완료되었다는 뜻이다. maven 설치 및 등록 방법은 maven 공식 페이지에 자세히..
🏅 트랜잭션이란? Atomic하게, 실행되어야 하는 SQL들을 묶어서 하나의 작업처럼 처리하는 방법이다. 이 트랜잭션은 DDL이나 DML중 레코드를 수정/추가/삭제한 것에만 의미있게 작동한다. 따라서 SELECT에는 트랜잭션을 사용할 이유가 없다. 트랜잭션은 BEGIN(START TRANSACTION) ~ END(START TRANSACTION) 또는 BEGIN ~ COMMIT 사이에 해당 SQL들을 사용한다. 기본적으로 END와 COMMIT은 같은 기능을 하지만 다른 표현으로 사용한다. 마찬가지로 BEGIN과 START TRANSACTION은 같은 의미다. BEGIN으로 시작하는 순간 트랜잭션을 시작하게 되고, END나 COMMIT 키워드가 나와야 그제서야 SQL문이 외부로 반영되게 된다. 트랜잭션을 ..
1. SQL DDL(Structured Query Language Data Definition Language) 관계형 데이터베이스에 저장되어 있는 데이터를 처리하는 언어를 SQL이라고 하며 그중 하나인 DDL을 살펴보자. 우리가 저장하고 싶은 데이터가 무엇인지 정확히 알고 테이블을 설계해야하는데, 이를 데이터 모델링이라고 한다. 이 테이블을 설계했으면 테이블 구조를 생성해야 한다. 이를 DDL(데이터를 정의)이라고 한다. 테이블 필드의 중요 속성 - PRIMARY KEY 테이블에서 레코드의 유일성을 정의하는 필드이다. (ex : 이메일, 주민등록번호) PRIMARY KEY로 지정된 필드가 있는 경우 데이터베이스단에서 중복된 값을 갖는 레코드가 생기는 것을 방지한다. (PRIMARY KEY UNIQUEN..
MySQL은 기본적으로 서버 한대 짜리 솔루션 이므로 여러대의 서버에 분산해서 동작하지 못한다. 그래서 데이터가 많아질수록 조금씩 벅차지는 상황이 생겨나게 된다. 이렇게 mysql에 용량 이슈가 생길 경우 어떻게 용량을 증대할 수있을까? - 용량 증대 방식 1. Scale-Up : 서버에 CPU와 Memory 추가 그러나 한 서버에 CPU와 Memory를 추가하는 것에는 한계가 있다. Scale-up을 계속하다보면 더이상 안되는 지점이 발생하게 된다. 데이터가 점점 많아지면서 더이상 스케일 업이 안된다면 어떻게 해야할까? 일단 정말로 이 데이터 베이스(mysql)에 우리가 사용하는 데이터만(웹서비스에 바로 필요한 데이터들) 존재하는지 부터 확인해야 한다. 많은 경우, 안쓰는 데이터가 있을 수 있다. 또는..
모든 서비스는 데이터를 만들어내고, 그 데이터의 저장을 필요로 한다. 예를들어 우리가 자주 사용하는 카카오톡, 쿠팡만 해도 유저 등록, 채팅 기록 저장, 구매 관련 정보 저장 등등 데이터의 저장은 필수다. 이 데이터는 프로덕션 관계형 데이터베이스(RDBMS)에 저장한다. 이는 데이터 웨어하우스 관계형 데이터베이스와 달리 서비스의 운영에 필요한 데이터를 저장하는 곳이므로 (MySQL, PostgreSQL 등) 빠른 처리속도가 중요하다. 관계형 데이터 베이스는 이 데이터를 구조화된 테이블들의 집합으로 구성하여 저장하고 관리한다. 이 관계형 데이터 베이스와 비교되는 다른 데이터 베이스로 데이터 웨어하우스가 있다. 이는 처리속도 보다는 구조화된 큰 데이터를 처리하는 것이 중요하다. - 관계형 데이터베이스 종류 ..
빌드 툴인 gradle을 이용하여 의존성을 등록할 수 있다. build.gradle repositories { mavenCentral() } dependencies { testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' } 'org.junit.jupiter:junit-jupiter-api:5.6.0'와 'org.junit.jupiter:junit-jupiter-engine' 라이브러리가 의존성 설치가 되도록 build.gradle에 등록되어 있다. 이 의존성 등록은 mavenCentral이라는 리포지토리에서 위 두 라이브러리에 대한 자료를 찾아..
NPE (Null Pointer Exception)은 가장 많이 발생하는 에러중 하나이다. 자바에서는 거의 모든것이 참조형이므로, 이는 다른말로 거의 모든것이 null이 될 수잇다. 그래서 항상 null을 확인할 필요가 있다. 이렇게 되면 굉장히 피곤해지게 되는데, 이거를 보완하기위해 이제 null을 쓰지 않기로 서로 약속하기로 한다. 근데 문법적으로 null을 없앨 수는 없고 (요즘은 null을 사용하면 error를 사용하기도 함) 그래서 notnull이나 nullable같은 애노테이션을 사용해서 null인지 아닌지 알아내서 문제를 막기도 한다. 어쨋든 개발자들끼리 null을 사용하지 않겠다고 서로 약속하고 프로그래밍을 하게 되는데, (계약 기반 프로그래밍) null을 쓰지 않는 방법으로 여러가지가 있..
자바에서는 collection 객체들에 대해서 stream으로 사용하는 방법을 제공해 준다. (이 stream은 자바 8 이상부터 사용 가능) 물론 System.in 과 System.out도 스트림이고, 우리가 계속 사용해왔던 거지만 자바 8에서 말하는 stream과는 다르다. 자바 8에서의 stream의 데이터의 스트림을 의미한다. 즉, Collections.stream()을 제공해 준다. 이 stream을 이용해서 collection의 데이터를 연속된 흐름으로써 취급할 수 있게 된다. stream에서는 filter, map, forEach 같은 고차함수(함수를 인자로 받는 함수)가 제공 됨 public class Main { public static void main(String[] args) { A..
자바에서 Collection 프레임워크를 제공하는데, 여기서 Collection의 뜻은 데이터의 묶음 이다. Collection 은 인터페이스(추상체)이다. 컬렉션의 구상체로 List가 있고, List의 구상체로 LinkedList, ArrayList, Vector, Stack이 있다. 마찬가지로 컬렉션의 구상체로 Set이 있고 Set의 구상체로 HashSet이 있다. LinkedList list1 = new LinkedList(); // LinkedList는 List 추상체를 구현한 것이므로 List 인터페이스로 표현할 수 있다. (다형성) List list2 = new LinkedList(); // ArrayList는 List 추상체를 구현한 것이므로 List 인터페이스로 표현할 수 있다. (다형성)..
gradle의 build, run 이런것들은 gradle이 수행하는 명령단위, task라고함 그래서 gradle은 task를 수행함으로써 내용이 수행됨. build.gradle에 이 task가 등록이 되어있다. 근데 build나 run에 대한 task는 기록되어있지 않은데, 기본적으로 gradle init할때 우리는 java로 하기로 했으니까 그것에 대한 build, run은 plugins을 통해 다 셋팅되게 된다. gradle tasks 이 명령어를 통해 gradle의 task들을 전부 확인할 수 있다. 참고 : 인텔리제이 단축키 alt + enter : 빨간줄 생길때 자동완성해줌 alt + 1 : 소스코드에서 왼쪽 프로젝트 창으로 커서가 이동함. esc 누르면 다시 소스코드로 넘어옴 ctrl + n ..