1. 프로토타입과 상속 짚고 넘어가야할 Javascript 특징은 다음과 같습니다. Javascript에서 함수는 Javascript 내장 객체인 Function의 생성자로 생성된 객체입니다. Javascript에서 상속은 생성자 함수의 프로토타입을 활용합니다. Javascript에서 프로토타입은 다른 객체에 공유 프로퍼티를 제공하는 객체입니다. 함수 객체만이 프로토타입을 가집니다. 함수 객체만이 호출이 가능하고 다른 객체를 생성할 수 있기 때문입니다. ES6의 화살표 함수는 프로토타입을 가지지 않습니다. 함수는 공장으로, 프로토타입은 공장에서 생산된 제품의 명세로 간주할 수 있습니다. new 키워드로 함수를 호출할 때마다 해당 제품의 주문이 들어가고 공장은 프로토타입에 지정된 방식으로 생산합니다. //..
1. Jenkins 플러그인 설치 우선, Jenkins와 Gitlab을 연동하여 CI/CD를 구축하기 위해선 다음 플러그인을 설치해야 합니다. 1. Bitbucket Pipeline for Blue Ocean 2. Dashboard for Blue Ocean 3. Personalization for Blue Ocean 4. Display URL for Blue Ocean 5. Server Sent Events (SSE) Gateway 6. Events API for Blue Ocean 7. Blue Ocean Pipeline Editor 8. i18n for Blue Ocean 9. Autofavorite for Blue Ocean 10. Blue Ocean 11. NodeJS 12. GitLab 13...
1. Ubuntu에 Jenkins 설치하기 Ubuntu 쉘에 접속했다고 가정하겠습니다. 원하는 경로로 이동 후, 다음과 같이 Dockerfile을 작성합니다. FROM jenkins/jenkins:jdk11 # 도커를 실행하기 위한 root 계정으로 전환 USER root # 도커 설치 COPY docker_install.sh /docker_install.sh RUN chmod +x /docker_install.sh RUN /docker_install.sh # 설치 후 'docker' 라는 이름의 그룹을 만든 후, jenkins 계정 생성 후 해당 그룹으로 변경 RUN groupadd -f docker RUN usermod -aG docker jenkins USER jenkins 그 후, 위 Docker..
1. JUnit 5 테스트 인스턴스 테스트 클래스에 있는 각각의 테스트 메서드는 서로 다른 인스턴스에서 실행됩니다. 다음 코드를 살펴보겠습니다. class MyTest { int value = 0; @Test void first() { System.out.println(value++); } @Test void second() { System.out.println(value++); } } 위 MyTest 클래스를 전체 테스트해보면 second()에서는 1이 찍혀야할거 같지만, 콘솔에 모두 0이 찍힙니다. 테스트 메서드는 서로 독립적이여야 한다는 특징때문에 각 테스트 메서드를 실행하는 인스턴스를 할당하는 것 같습니다. 만약, 하나의 인스턴스에서 실행되도록 만들고 싶다면 @TestInstance 를 사용하면 ..
[Spring Framework] Spring 핵심 원리 - 컴포넌트 스캔과 의존관계 자동 주입
2022.02.03
1. 컴포넌트 스캔과 의존관계 자동 주입 스프링 빈을 등록할 때 Java 코드의 @Bean이나 XML의 등을 이용해 설정 정보에 직접 등록할 빈을 명시했습니다. 그런데, 이렇게 등록해야할 스프링 빈이 수십, 수백개가 되면 일일이 등록하기도 귀찮고, 설정 파일도 커지는 문제가 발생합니다. 그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공합니다. 탐색할 패키지의 시작 위치 지정 모든 Java 클래스를 다 컴포넌트 스캔하면 시간이 오래 걸립니다. 그래서 꼭 필요한 위치부터 탐색하도록 시작 위치를 지정할 수 있습니다. @ComponentScan( basePackages = "com.demo.core", basePackageClasses = AutoConfig.cl..
1. 개요 Spring이 제공하는 핵심 가치와 원리를 이해해야 합니다. 왜 Spring을 만들었고, Spring이 왜 이런 기능들을 제공하는지를 살펴봅니다. 과거 오픈 소스는 ‘사파’라 불렸고, 표준이 ‘정파’ 기술로 불렸습니다. EJB는 ‘정파’였기 때문에 여러 기업들에서 EJB를 많이 도입했습니다. EJB가 이론적으로는 정말 좋았지만, 현실적으로 너무 어렵고, 느렸습니다. 그리고 비쌌습니다. EJB 엔티티빈 → 하이버네이트 → JPA 지금 시점에 Java로 개발할 때의 메인이 되는 두 축은 Spring과 JPA입니다. Spring 프레임워크의 역사 (로드 존슨이 최초 만들었던 3만줄의 Spring 코드로부터 시작하였습니다.) 2003년, Spring 프레임워크 1.0 출시 - XML로 설정 2006년..
1. Gitlab 연동 우선 소스트리를 실행한 후, [설정] -> [계정] -> [추가] 를 누릅니다. 다음으로 Gitlab에 들어가서 Access Token을 발급받아야 하는데요, 이 과정은 설명에서 생략하겠습니다. 위에서 발급받은 Access Token을 아래 화면의 '암호'에 적어주시면 됩니다. 이때, 사용자 이름은 @ 을 명시해줘야하고, 프로토콜은 SSH가 아닌 HTTPS를 선택합니다.
0. Spring-Data-JPA 개요 기본 형태는 다음과 같습니다. public interface MemberRepository extends JpaRepository { } 위 코드에서 상속받는 JpaRepository의 상속 관계도는 다음과 같습니다. (모두 인터페이스) JpaRepository ---> PagingAndSortingRepository ---> CrudRepository ---> Repository JpaRepository 인터페이스에는 다음의 메서드가 정의되어 있습니다. findAll() findAllById() saveAll() getOne() 1. 쿼리 메서드 기능 Spring-Data-JPA에는 쿼리 메서드라고 하는 기능이 있습니다. 쿼리 메서드 기능은 총 세 가지가 있습니다..
1. 문제 (0, 0) 좌표에서 시작해 각 숫자별로 다음과 같은 방향으로 이동합니다. 0이면 위로 이동, 1이면 대각선 위로 이동, 2면 우측으로 이동 ... 이런 식입니다. 이동하는 방향이 담긴 배열이 주어졌을 때, 생성되는 방의 갯수를 return 하도록 solution 함수를 작성하세요. (방: 사방이 막혀있는 것) 제한사항 방향이 담긴 배열의 크기 x는 1
1. 도커란? 도커는 애플리케이션을 컨테이너화 하여 Host OS와 독립적으로 실행하는 기술입니다. Linux, Windows 등 어떤 OS든 상관없이 컨테이너화된 소프트웨어는 항상 동일하게 실행됩니다. (SW를 환경으로부터 격리) 2. 도커와 기존의 가상화 기술과의 차이 혹시 도커 이전에도 이런 SW 가상화 기술이 존재했었단 사실을 알고 계신가요? 도커 이전에 가장 많이 쓰였던 방식은 VirtureBox와 같은 가상 머신 위에 VM을 띄우는 하이퍼 바이저 방식입니다. 두 방식의 특징은 다음과 같습니다. 도커 (컨테이너 방식) 도커 컨테이너에서 돌아가는 애플리케이션은 컨테이너가 제공하는 격리 기능 내부에 샌드박스가 있지만, 여전히 Host와 OS 커널을 공유합니다. 따라서, 컨테이너 내부에서 실행되는 프..
1. 개요 JPA를 사용하면 Entity 객체를 중심으로 개발을 할텐데, 이때 문제는 검색 쿼리입니다. 따라서, 세심한 검색을 위해 쿼리를 짤 수 있어야 하고, JPA는 JPQL이라는 SQL을 추상화한 객체 중심 SQL을 제공합니다. JPQL은 테이블이 아닌 Entity 객체를 대상으로 검색합니다. JPQL은 ANSI 표준에 나와있는 모든 SQL을 지원합니다.(SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN) 2. 프로젝션 SELECT절에 조회할 대상을 프로젝션이라고 하고, Entity, Embedded 타입, 스칼라 타입(기본 데이터 타입)이 있습니다. SELECT m FROM Member m // 엔티티 프로젝션 SELECT m.team FROM Member m // 엔..