JPA의 장점 객체에 적절한 책임을 할당하는 객체지향적 개발이 가능하다. 새로운 필드가 추가될 때마다 쿼리를 수정해야 하는 문제가 발생하지 않는다. 생성 방식 create: 기존 테이블 삭제 후 다시 생성 (개발) create-drop: create와 같으나 종료 시점에 테이블 drop (개발) update: 변경된 부분만 반영 (테스트, 개발) validate: entity와 table이 정상 매핑되었는지만 확인 (테스트, 운영) none: 사용하지 않음 (스테이징, 운영) 데이터베이스 스키마 생성 방식 설정 // application.properties spring.jpa.hibernate.ddl-auto={생성_방식} 스키마 자동 생성을 위한 Entity class 작성법 @Entity // (1)..
리뷰어에게 코드 컨벤션을 지적받고 함께 받은 우아한테크코스 스타일 가이드를 읽어보았지만 사용 예시가 없어서 글로만 이해하기 힘들었다. 그리고 이때까지 함께 첨부된 intellij-java-wooteco-style.xml의 쓰임세에 대해 알지 못했다. 나는 사용 예시와 함께 정리된 글이 있지 않을까? 하고 검색했는데 IntelliJ에 Google Java Style Guide 적용하기 (feat. Naver)를 읽고 함께 첨부된 xml 파일의 용도를 알 수 있었다. 인텔리제이에서 자동 정렬(⌥ + ⌘ + L)을 사용하면 Wooteco Java Code Style로 자동 정렬 하도록 인텔리제이 설정을 바꿀 수 있다. IntelliJ에서 Wooteco Java Style Guide 사용하기 우아한테크코스 스타..
1단계 - 브랜치 생성 및 Fork 그리고 Local로 복사 1. 원본 프로젝트에 나의 브랜치 생성 및 확인 1-1. next-step/java-lotto-pro 저장소에 브랜치 생성 1-2. 브랜치 확인 2. Fork 해서 나의 GitHub로 프로젝트 가져오기 * Copy the main branch only 체크 해제 3. 나의 GitHub에서 Local로 프로젝트를 가져온 후 기능 구현을 위한 브랜치 생성 3-1. Fork한 프로젝트 URL을 이용해서 Local에 나의 브랜치만 다운로드 한다. git clone -b {본인_아이디} --single-branch https://github.com/{본인_아이디}/{저장소_아이디} ex) git clone -b seogineer --single-bran..
스레드(thread)란? 명령문이 순서대로 하나씩 처리되는 것. 즉, 프로그램의 실행 흐름. 멀티스레드 프로그램(multi-thread program)이란? 둘 이상의 실행 흐름을 갖는 프로그램. 멀티스레드 프로그램의 작동 방식 메인 스레드만 프로그램이 시작되면 자동으로 시작되고, 다른 스레드들은 메인 스레드에서 만들어서 시작한다. 메인 스레드가 끝나더라도 다른 스레드는 끝나지 않고 실행을 계속할 수 있다. 스레드는 동시에 실행되는 것이 아니라 자바 가상 머신이 스레드를 번갈아 실행한다. 멀티스레드 프로그램의 작성 방법 1. Thread 클래스를 이용하는 방법 class AlphabetThread extends Thread { public void run () { for (char ch = 'A'; ch
Exception 종류 RuntimeException이 checked exception과 unchecked exception을 나누는 기준으로서 RuntimeException과 서브 Exception은 모두 unchecked exception에 속하고 나머지는 모두 checked exception에 속한다. checked exception 반드시 try-catch 문으로 처리해야 하는 예외 예) IOException, FileNotFoundException unchecked exception 반드시 처리해야 할 필요가 없는 예외 예) RuntimeException, NullPointerException, ArithmeticException Exception 클래스의 메소드 getMessage() exce..
OAuth 사용자의 정보를 가지고 있는 제3의 서비스로부터 접근 권한을 위임 받아서 웹 사이트의 자원에 접근하는 방식 사용자의 정보를 저장하고 관리해야 하는 부담을 줄일 수 있다. 사용자도 자신의 개인정보를 신뢰할 수 없는 타인에게 제공하는 단점을 해결한다. OAuth 제공자는 네이버, 카카오, 구글 등이 있다. JWT Header, Payload, Signature로 구성된 암호화된 토큰 session 기반 인증 방식과 달리 stateless한 구현이 가능하다. 로그인 흐름 Resource Owner(사용자)가 Client(서버) 자원에 접근하려 하면 Resource Server(OAuth 제공자)의 로그인 창을 호출하여 인증을 요구한다. 로그인을 성공하면 Resource Server에 로그인 API..
자료구조란? 데이터를 추가, 삭제, 검색에 있어서 효율적으로 사용할 수 있도록 구조를 만들어서 저장해 둔 것 모든 자료구조 클래스에는 래퍼런스 타입의 데이터만 저장할 수 있다. java.util 패키지에 속하는 JDK 라이브러리의 자료구조 클래스들 자료구조 클래스 이름 리스트 ArrayList, LinkedList, Vector 스택 LinkedList, Stack 큐 LinkedList 해쉬 테이블 HashMap, Hashtable 집합 HashSet List 데이터를 일렬로 늘어놓은 자료구조 중복된 데이터를 저장하고 순서를 유지하는 선형 자료구조 선언 // ArrayList 선언 // 인덱스로 데이터 항목을 찾는 일이 많은 프로그램에서 유리함 ArrayList list = new ArrayList()..
역정규화 성능이나 개발의 편의성을 위해서 테이블의 구조를 바꾸는 것 여러 대의 서버로 데이터를 분산할 때 사용할 수 있다. 조인 줄이기 많은 조인은 시스템에 부하를 줄 수 있기 때문에 조인을 줄여서 부하를 줄일 수 있다. 조인을 하지 않고 테이블을 조회할 수 있도록 컬럼을 추가했다. 하지만, topic_tag_relation 테이블은 중복이 발생하고 tag 테이블이 존재하면서 동시에 tag_name 컬럼이 존재하는 중복도 같이 발생해버렸다. 계산 작업을 줄이기 GROUP BY와 같은 명령어는 데이터가 많은 경우 많은 비용이 발생할 수 있다. SELECT author_id, COUNT(author_id) FROM topic GROUP BY author_id topic_count 컬럼을 추가해서 쿼리를 대체..
정규화란? 정제되지 않은 데이터(표)를 관계형 데이터베이스에 어울리는 표로 만들어 주는 방법 제1정규화(1NF) : 각 컬럼이 단일 값을 가져야 한다. Unnoramalized form에서 SELECT * FROM topic WHERE tag = 'free' 또는 SELECT * FROM topic ORDER BY tag와 같은 쿼리를 하려고 할 때 문제점가 발생한다. 아래와 같이 표를 수정하면 제1정규화을 만족할 수 있지만 정보의 중복이 발생하거나 테이블 구조를 변경해야 하고 컬럼을 사용하지 않는 낭비가 발생할 수 있다. Topic과 Tag의 관계는 카디널리티가 M:N이다. M:N은 테이블을 나누는 것으로 끝나지 않고 매핑 테이블을 만들어 주어야 한다. topic의 title과 tag의 id를 키로 가..
인스턴스를 웹 서버로 사용하기 위해서 웹 서버가 사용할 포트를 개방해야 한다. 1. 컴퓨트 -> 인스턴스 -> 인스턴스 세부정보 -> 인스턴스 정보 탭 -> 기본 VNIC -> 서브넷 클릭 2. 보안 목록 -> 보안 목록 세부정보 -> 수신 규칙 추가 1. 소스 CIDR : 방화벽에서 허용하는 IP 범위. 0.0.0.0/0를 입력하면 모든 IP에서 접속 가능. 2. IP 프로토콜 : TCP 3. 대상 포트 범위 : 개방하고자 하는 포트 입력 참고 https://technfin.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%ED%8F%AC%ED%8A%B8-%EA%B0%9C%EB%B0%A9%ED%95%98..